I've produced an app using Python 3.4.3, Pyqt4 and some other extras (Poppler being among them) on OS X Yosemite.
I'm using cx_freeze to produce a working .app file and eventually, a working msi file. I've been testing the app works properly after building it using the build command as in "python3 setup.py build". This all works fine, no unexpected crashes. Moved on to packaging it using "python3 setup.py bdist_dmg". Opened the dmg file/app file, they crash instantly giving this error:
Process: main [1098]
Path: /Users/USER/*/FYP-0.1.app/Contents/MacOS/main
Identifier: main
Version: 0
Code Type: X86-64 (Native)
Parent Process: ??? [1]
Responsible: main [1098]
User ID: 501
Date/Time: 2015-05-12 02:18:16.867 +0100
OS Version: Mac OS X 10.10.3 (14D131)
Report Version: 11
Anonymous UUID: 8A613A61-D35F-9A4C-8E97-57069A95BF20
Time Awake Since Boot: 1300 seconds
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000
VM Regions Near 0:
-->
__TEXT 0000000103135000-0000000103138000 [ 12K] r- x/rwx SM=COW /Users/USER/*/FYP-0.1.app/Contents/MacOS/main
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 QtGui 0x000000010ecf126b QApplication::setActiveWindow(QWidget*) + 315
1 QtGui 0x000000010ec90b7d onApplicationWindowChangedActivation(QWidget*, bool) + 100
2 com.apple.CoreFoundation 0x00007fff8e99045c __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
3 com.apple.CoreFoundation 0x00007fff8e880634 _CFXNotificationPost + 3140
4 com.apple.Foundation 0x00007fff94cd29d1 -[NSNotificationCenter postNotificationName:object:userInfo:] + 66
5 com.apple.AppKit 0x00007fff9048dbd9 -[NSWindow becomeKeyWindow] + 1406
6 com.apple.AppKit 0x00007fff9048cf3e -[NSWindow _changeKeyAndMainLimitedOK:] + 795
7 com.apple.AppKit 0x00007fff9048cb36 -[NSWindow _makeKeyRegardlessOfVisibility] + 98
8 com.apple.AppKit 0x00007fff9048ca9e -[NSWindow makeKeyAndOrderFront:] + 27
9 QtGui 0x00000001045cfea7 QWidgetPrivate::show_sys() + 629
10 QtGui 0x000000010466c39c QWidgetPrivate::show_helper() + 432
11 QtGui 0x000000010466ccce QWidget::setVisible(bool) + 800
12 PyQt4.QtGui.so 0x0000000103f40634 sipQMainWindow::setVisible(bool) + 100
13 PyQt4.QtGui.so 0x00000001040f7ed9 meth_QWidget_show(_object*, _object*) + 105
14 Python 0x0000000103315ad5 PyEval_EvalFrameEx + 22129
15 Python 0x0000000103318f12 fast_function + 203
16 Python 0x0000000103315964 PyEval_EvalFrameEx + 21760
17 Python 0x00000001033102ad PyEval_EvalCodeEx + 1622
18 Python 0x000000010329e7ab function_call + 372
19 Python 0x000000010327e576 PyObject_Call + 103
20 Python 0x000000010328fca8 method_call + 136
21 Python 0x000000010327e576 PyObject_Call + 103
22 Python 0x00000001032c45b2 slot_tp_init + 57
23 Python 0x00000001032c1b48 type_call + 172
24 Python 0x000000010327e576 PyObject_Call + 103
25 Python 0x000000010331582a PyEval_EvalFrameEx + 21446
26 Python 0x00000001033102ad PyEval_EvalCodeEx + 1622
27 Python 0x000000010330fc51 PyEval_EvalCode + 63
28 Python 0x000000010330d6e3 builtin_exec + 536
29 Python 0x0000000103315ad5 PyEval_EvalFrameEx + 22129
30 Python 0x00000001033102ad PyEval_EvalCodeEx + 1622
31 Python 0x000000010330fc51 PyEval_EvalCode + 63
32 main 0x0000000103136cc5 main + 1957
33 libdyld.dylib 0x00007fff986995c9 start + 1
Thread 1:: Dispatch queue: com.apple.libdispatch-manager
0 libsystem_kernel.dylib 0x00007fff91651232 kevent64 + 10
1 libdispatch.dylib 0x00007fff96fd0a6a _dispatch_mgr_thread + 52
Thread 2:
0 libsystem_kernel.dylib 0x00007fff9165094a __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff92c4e40d start_wqthread + 13
Thread 3:
0 libsystem_kernel.dylib 0x00007fff9165094a __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff92c4e40d start_wqthread + 13
Thread 4:
0 libsystem_kernel.dylib 0x00007fff9165094a __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff92c4e40d start_wqthread + 13
Thread 5:
0 libsystem_kernel.dylib 0x00007fff9165094a __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff92c4e40d start_wqthread + 13
Thread 6:
0 libsystem_kernel.dylib 0x00007fff9165094a __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff92c4e40d start_wqthread + 13
Thread 0 crashed with X86 Thread State (64-bit):
rax: 0x0000000000000000 rbx: 0x00007fbe8322a670 rcx: 0x00007fbe8326d0a0 rdx: 0x0000000000000002
rdi: 0x00007fbe8322a670 rsi: 0x0000000000000001 rbp: 0x00007fff5cac8ea0 rsp: 0x00007fff5cac8df0
r8: 0x0000000000000000 r9: 0x00007fbe830f90a0 r10: 0x0000000000000011 r11: 0x00007fff7bbdc190
r12: 0x00007fbe8322a670 r13: 0x00000000000f42cd r14: 0x00007fbe83296370 r15: 0x000000010f578228
rip: 0x000000010ecf126b rfl: 0x0000000000010202 cr2: 0x0000000000000000
Logical CPU: 0
Error Code: 0x00000004
Trap Number: 14
There's a load more but I'm not sure how much is relevant. Here is my setup.py file:
from cx_Freeze import setup, Executable
import sys
import os
base = None
if sys.platform == "win32":
base = "Win32GUI"
zips = ["implementation/primaries/GUI/designer_files",
"implementation/primaries/GUI/themes", "implementation/primaries/GUI/images",
"implementation/primaries/scripts"]
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"],
"include_files":zips}
setup(
name='FYP',
version='0.1',
packages=['implementation', 'implementation.primaries', 'implementation.primaries.GUI', 'implementation.primaries.scripts',
'implementation.primaries.GUI.pyqt_plugins', 'implementation.primaries.Drawing', 'implementation.primaries.Drawing.classes',
'implementation.primaries.Drawing.classes.tree_cls', 'implementation.primaries.ExtractMetadata',
'implementation.primaries.ExtractMetadata.classes', 'implementation.primaries.ImportOnlineDBs','implementation.primaries.ImportOnlineDBs.classes'],
description='MuseLib',
options = {"build_exe": build_exe_options},
executables = [Executable("implementation/main.py", base=base)]
)
Not sure what the problem is, I saw a few other people having similar problems but they seem to be on either older versions of Python or older versions of OS X, and the fixes didn't solve my problem. Any suggestions for how to proceed would be appreciated.
Found a better way to debug this: right click on the app file, "view package contents", MacOS > select the executable with the same name as the file given in setup.py (for me this was main).
Error I then got:
QWidget: Must construct a QApplication before a QPaintDevice
I fixed this by initialising my Application object, then initialising my main window object, then showing the main window, and then calling a load method which set up the window. I was originally doing that part inside the constructor which was for some reason giving problems. I'm now having issues with opening/closing windows and opening others on close, but that's probably best for another question or session of googling.