When im launching my app via CLI, it works without issue
./org_chart.app/Contents/MacOS/org_chart
however when I launch via double click I met with the error
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: aString != nil'
I used py2app to build the app. Im not sure where to begin debugging this, if someone could point me in the right direction?
Thanks for your help!
here's the full code for the small app
import os, shutil
import tkinter as tk
from tkinter import filedialog, messagebox, Tk, Canvas, Entry, Text, Button, PhotoImage
from tkinter import font as tkFont
def build_org_chart():
print("im making a chart")
return 'Done chart created!'
if __name__ == "__main__":
window = Tk()
window.title("Org Chart Spreadsheet Generator")
# Variables to store file paths
window.geometry("1012x506")
window.configure(bg = "#00403D")
# Define the font properties
my_font = tkFont.Font(family="Montserrat SemiBold", size=16, weight="normal")
canvas = Canvas(
window,
bg = "#00403D",
height = 506,
width = 1012,
bd = 0,
highlightthickness = 0,
relief = "ridge"
)
canvas.place(x = 0, y = 0)
canvas.create_rectangle(
308.0,
0.0,
1012.0,
506.0,
fill="#FFFFFF",
outline="")
canvas.create_text(
320.0,
18.0,
anchor="nw",
text="Org Chart",
fill="#000000",
font=("Montserrat Bold", 64 * -1)
)
window.resizable(False, False)
window.mainloop()
Also now my app is so small its still crashing im thinking it could be something in the setup file too so ive added that code below
import os
from setuptools import setup
def list_files(directory):
base_path = os.path.abspath(directory)
paths = []
for root, directories, filenames in os.walk(base_path):
for filename in filenames:
# Exclude .DS_Store files if you are on macOS
if filename != '.DS_Store':
paths.append(os.path.join(root, filename))
return paths
# Your assets folder
assets_folder = 'assets'
# Listing all files in the assets folder
assets_files = list_files(assets_folder)
APP = ['org_chart_min.py']
DATA_FILES = [('assets', assets_files)]
OPTIONS = {
'argv_emulation': True,
'packages': ['pandas', 'openpyxl','xlsxwriter'],
'plist': {
'CFBundleName': '_org_chart',
'CFBundleDisplayName': ' Org Chart',
'CFBundleGetInfoString': "Create a spreadsheet that populates our Lucid org chart template",
'CFBundleIdentifier': 'com.yourdomain.orgchart',
'CFBundleVersion': '0.1',
'CFBundleShortVersionString': '0.1',
'NSRequiresAquaSystemAppearance': True
},
'iconfile': 'org_chart.icns',
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
I suppose you use pyinstaller
. It works for mac and it will compile an UNIX
file. Just use pip install pyinstaller
and after that in directory of your script pyinstaller -F main.py
. Rename your file as main.py
and it should compile one UNIX
file. -F
flag compiles it in one file. It works perfectly!