[Qt-interest] [OS X] Lion Sandboxing? Terminating app due to uncaught exception 'NSRangeException'

Israel Brewster israel at frontierflying.com
Tue Oct 4 21:36:44 CEST 2011


I just tried this with my app, and I'm running into the same problem, although I haven't tried with the latest 4.8.0 beta yet (building now). I don't suppose anyone has come up with a solution yet, have they? This is going to be a real show-stopper for me if not.

On Aug 29, 2011, at 2:33 PM, Till Oliver Knoll wrote:

> Hello,
> 
> I am trying to put my application into a "sandbox" on "Lion" (OS X 10.7) 
> by following the procedures here:
> 
> 
> https://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005929-CH1-SW1
> 
> The only entitlement I have given to my application is 
> "com.apple.security.documents.user-selected.read-write" which according 
> to above document should use the "Powerbox" daemon for rendering file 
> dialog boxes from a separate process:
> 
> "Any time an application running inside a sandbox invokes an NSOpenPanel 
> or NSSavePanel dialog, rather than showing the panels directly, AppKit 
> automatically asks the Powerbox to present the dialog. From a developer 
> perspective, there are no code changes required in terms of how these 
> panels are used; this process is fully transparent."
> 
> So I was hoping this would also work "out of the box" with a given Qt 
> application on Qt 4.7.3 Cocoa, I also tried with the latest Qt 4.8.0 
> Beta, same result.
> 
> 
> However when I try to access a native QFileDialog the application 
> crashes (see below for crash report)!
> 
> Anyone else tried succesfully to put a Qt Cocoa application into a 
> sandbox on "Lion"? (Note that this will become a requirement from late 
> 2011 onwards for the Mac App Store).
> 
> Upon application start I see that the proper "sandboxed" Container is 
> indeed created under ~/Library/Containers/net.company.MyApp - my config 
> files (QSettings ...) are stored there properly.
> 
> 
> Basically I have:
> 
> - Created a self-signed Certificate for code signing
> 
> - Made sure I have CFBundleIdentifier and CFBundleName
>   defined in the Info.plist
> 
> - Added the following linker flag:
>   QMAKE_LFLAGS += -sectcreate __TEXT __info_plist /path/to/Info.plist
> 
> - Signed the executable with:
> 
>   codesign -f -s "My codesign certificate" --entitlements 
> /path/to/entitlements.plist /path/to/application.app
> 
> - A check with:
> 
>   codesign -d --entitlements - /path/to/MyApp.app/
> 
> reveals the expected:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
> "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
> <plist version="1.0">
>   <dict>
>     <key>com.apple.security.app-sandbox</key>
>     <true/>
>     <key>com.apple.security.documents.user-selected.read-write</key>
>     <true/>
>   </dict>
> </plist>
> 
> 
> Here is the crash report when I execute the window-modal QFileDialog as 
> window sheet:
> 
>   QFileDialog *fileDialog = new QFileDialog(this, Qt::Sheet);
>   ...
>   fileDialog->setWindowModality(Qt::WindowModal);
>   fileDialog->setAcceptMode(QFileDialog::AcceptSave);
>   fileDialog->setAttribute(Qt::WA_DeleteOnClose);
>   ...
>   fileDialog->open(this, SLOT(handleFileSaveAsSelected(const QString &)));
> 
> 
> Crash log:
> 
> Process:         Screenie [3667]
> Path:            /path/to/MyApp
> Identifier:      net.company.MyApp
> Version:         ??? (1.0)
> Code Type:       X86-64 (Native)
> Parent Process:  launchd [206]
> 
> Date/Time:       2011-08-30 00:27:09.791 +0200
> OS Version:      Mac OS X 10.7.1 (11B26)
> Report Version:  9
> 
> Interval Since Last Report:          25212 sec
> Crashes Since Last Report:           14
> Per-App Interval Since Last Report:  105 sec
> Per-App Crashes Since Last Report:   4
> Anonymous UUID:                      0099742B-E1E5-4903-B8C6-0C8C1E37846B
> 
> Crashed Thread:  0  Dispatch queue: com.apple.main-thread
> 
> Exception Type:  EXC_CRASH (SIGABRT)
> Exception Codes: 0x0000000000000000, 0x0000000000000000
> 
> Application Specific Information:
> objc[3667]: garbage collection is OFF
> *** Terminating app due to uncaught exception 'NSRangeException', 
> reason: 'Cannot remove an observer <NSRemoteSavePanel 0x105e48990> for 
> the key path "panelSettings" from <NSRemoteSavePanel 0x105e48990> 
> because it is not registered as an observer.'
> *** First throw call stack:
> (
> 	0   CoreFoundation                      0x00007fff90f30986 
> __exceptionPreprocess + 198
> 	1   libobjc.A.dylib                     0x00007fff91b70d5e 
> objc_exception_throw + 43
> 	2   CoreFoundation                      0x00007fff90f307ba 
> +[NSException raise:format:arguments:] + 106
> 	3   CoreFoundation                      0x00007fff90f30744 
> +[NSException raise:format:] + 116
> 	4   Foundation                          0x00007fff9420298a 
> -[NSObject(NSKeyValueObserverRegistration) _removeObserver:forProperty:] 
> + 619
> 	5   Foundation                          0x00007fff942026c8 
> -[NSObject(NSKeyValueObserverRegistration) removeObserver:forKeyPath:] + 121
> 	6   RemoteViewServices                  0x00007fff8e426fe6 
> -[NSRemoteSavePanel dealloc] + 39
> 	7   libobjc.A.dylib                     0x00007fff91b6903c 
> _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 434
> 	8   CoreFoundation                      0x00007fff90ebe6a5 
> _CFAutoreleasePoolPop + 37
> 	9   Foundation                          0x00007fff941a0f01 
> -[NSAutoreleasePool release] + 154
> 	10  QtGui                               0x000000010011dd1d 
> _ZN18QFileDialogPrivate18showCocoaFilePanelEv + 157
> 	11  QtGui                               0x000000010011dd5c 
> _ZN18QFileDialogPrivate14setVisible_sysEb + 44
> 	12  QtGui                               0x00000001005dbe7d 
> _ZN11QFileDialog10setVisibleEb + 205
> 	13  QtGui                               0x00000001005d6538 
> _ZN7QDialog4openEv + 136
> 	14  MyApp                               0x0000000100007007 
> _ZN10MainWindow25on_saveAsAction_triggeredEv + 359
> 	15  MyApp                               0x000000010001352f 
> _ZN10MainWindow11qt_metacallEN11QMetaObject4CallEiPPv + 95
> 	16  QtCore                              0x0000000100ecd446 
> _ZN11QMetaObject8activateEP7QObjectPKS_iPPv + 2150
> 	17  QtGui                               0x000000010012d581 
> _ZN7QAction9triggeredEb + 49
> 	18  QtGui                               0x000000010012e914 
> _ZN7QAction8activateENS_11ActionEventE + 180
> 	19  QtGui                               0x00000001000e3d5a 
> -[QCocoaMenuLoader qtDispatcherToQAction:] + 106
> 	20  CoreFoundation                      0x00007fff90f2011d -[NSObject 
> performSelector:withObject:] + 61
> 	21  AppKit                              0x00007fff8cd37852 
> -[NSApplication sendAction:to:from:] + 139
> 	22  AppKit                              0x00007fff8ce2434f -[NSMenuItem 
> _corePerformAction] + 399
> 	23  AppKit                              0x00007fff8ce24086 
> -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 125
> 	24  AppKit                              0x00007fff8d0bfe9c -[NSMenu 
> _internalPerformActionForItemAtIndex:] + 38
> 	25  AppKit                              0x00007fff8cf523f1 
> -[NSCarbonMenuImpl _carbonCommandProcessEvent:handlerCallRef:] + 138
> 	26  AppKit                              0x00007fff8cd9e0bf 
> NSSLMMenuEventHandler + 339
> 	27  HIToolbox                           0x00007fff93e668ec 
> _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec 
> + 1263
> 	28  HIToolbox                           0x00007fff93e65ef8 
> _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec 
> + 446
> 	29  HIToolbox                           0x00007fff93e7cd03 
> SendEventToEventTarget + 76
> 	30  HIToolbox                           0x00007fff93ec3249 
> _ZL18SendHICommandEventjPK9HICommandjjhPKvP20OpaqueEventTargetRefS5_PP14OpaqueEventRef 
> + 398
> 	31  HIToolbox                           0x00007fff93faa0f1 
> SendMenuCommandWithContextAndModifiers + 56
> 	32  HIToolbox                           0x00007fff93ff05e1 
> SendMenuItemSelectedEvent + 253
> 	33  HIToolbox                           0x00007fff93ebc32d 
> _ZL19FinishMenuSelectionP13SelectionDataP10MenuResultS2_ + 101
> 	34  HIToolbox                           0x00007fff93eb3a75 
> _ZL14MenuSelectCoreP8MenuData5PointdjPP13OpaqueMenuRefPt + 600
> 	35  HIToolbox                           0x00007fff93eb3034 
> _HandleMenuSelection2 + 585
> 	36  AppKit                              0x00007fff8cc9dce1 
> _NSHandleCarbonMenuEvent + 250
> 	37  AppKit                              0x00007fff8cc336c7 
> _DPSNextEvent + 1993
> 	38  AppKit                              0x00007fff8cc32a95 
> -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 135
> 	39  AppKit                              0x00007fff8cc2f3d6 
> -[NSApplication run] + 463
> 	40  QtGui                               0x00000001000ef750 
> _ZN19QEventDispatcherMac13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE 
> + 1824
> 	41  QtCore                              0x0000000100eb4664 
> _ZN10QEventLoop13processEventsE6QFlagsINS_17ProcessEventsFlagEE + 68
> 	42  QtCore                              0x0000000100eb4a14 
> _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE + 324
> 	43  QtCore                              0x0000000100eb790c 
> _ZN16QCoreApplication4execEv + 188
> 	44  MyApp                               0x0000000100005dfb main + 59
> 	45  MyApp                               0x0000000100005644 start + 52
> 	46  ???                                 0x0000000000000002 0x0 + 2
> )
> 
> Performing @selector(qtDispatcherToQAction:) from sender NSMenuItem 
> 0x1014ce060
> terminate called throwing an exception
> abort() called
> 
> Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
> 0   libsystem_kernel.dylib        	0x00007fff91aadce2 __pthread_kill + 10
> 1   libsystem_c.dylib             	0x00007fff8f5f57d2 pthread_kill + 95
> 2   libsystem_c.dylib             	0x00007fff8f5e6a7a abort + 143
> 3   libc++abi.dylib               	0x00007fff8a6667bc abort_message + 214
> 4   libc++abi.dylib               	0x00007fff8a663fcf 
> default_terminate() + 28
> 5   libobjc.A.dylib               	0x00007fff91b711b9 _objc_terminate + 94
> 6   libc++abi.dylib               	0x00007fff8a664001 
> safe_handler_caller(void (*)()) + 11
> 7   libc++abi.dylib               	0x00007fff8a663ff6 
> __cxxabiv1::__terminate(void (*)()) + 9
> 8   libc++abi.dylib               	0x00007fff8a664346 
> __cxa_call_terminate + 59
> 9   libc++abi.dylib               	0x00007fff8a6647c3 
> __gxx_personality_v0 + 207
> 10  libunwind.dylib               	0x00007fff8c6594c6 unwind_phase2 + 160
> 11  libunwind.dylib               	0x00007fff8c65896e 
> _Unwind_RaiseException + 218
> 12  com.apple.Foundation          	0x00007fff94202713 
> -[NSObject(NSKeyValueObserverRegistration) removeObserver:forKeyPath:] + 196
> 13  com.apple.RemoteViewServices  	0x00007fff8e426fe6 
> -[NSRemoteSavePanel dealloc] + 39
> 14  libobjc.A.dylib               	0x00007fff91b6903c (anonymous 
> namespace)::AutoreleasePoolPage::pop(void*) + 434
> 15  com.apple.CoreFoundation      	0x00007fff90ebe6a5 
> _CFAutoreleasePoolPop + 37
> 16  com.apple.Foundation          	0x00007fff941a0f01 
> -[NSAutoreleasePool release] + 154
> 17  QtGui                         	0x000000010011dd1d 
> QFileDialogPrivate::showCocoaFilePanel() + 157
> 18  QtGui                         	0x000000010011dd5c 
> QFileDialogPrivate::setVisible_sys(bool) + 44
> 19  QtGui                         	0x00000001005dbe7d 
> QFileDialog::setVisible(bool) + 205
> 20  QtGui                         	0x00000001005d6538 QDialog::open() + 136
> 21  net.company.MyApp            	0x0000000100007007 
> MainWindow::on_saveAsAction_triggered() + 359
> 22  net.company.MyApp             	0x000000010001352f 
> MainWindow::qt_metacall(QMetaObject::Call, int, void**) + 95
> 23  QtCore                        	0x0000000100ecd446 
> QMetaObject::activate(QObject*, QMetaObject const*, int, void**) + 2150
> 24  QtGui                         	0x000000010012d581 
> QAction::triggered(bool) + 49
> 25  QtGui                         	0x000000010012e914 
> QAction::activate(QAction::ActionEvent) + 180
> 26  QtGui                         	0x00000001000e3d5a -[QCocoaMenuLoader 
> qtDispatcherToQAction:] + 106
> 27  com.apple.CoreFoundation      	0x00007fff90f2011d -[NSObject 
> performSelector:withObject:] + 61
> 28  com.apple.AppKit              	0x00007fff8cd37852 -[NSApplication 
> sendAction:to:from:] + 139
> 29  com.apple.AppKit              	0x00007fff8ce2434f -[NSMenuItem 
> _corePerformAction] + 399
> 30  com.apple.AppKit              	0x00007fff8ce24086 -[NSCarbonMenuImpl 
> performActionWithHighlightingForItemAtIndex:] + 125
> 31  com.apple.AppKit              	0x00007fff8d0bfe9c -[NSMenu 
> _internalPerformActionForItemAtIndex:] + 38
> 32  com.apple.AppKit              	0x00007fff8cf523f1 -[NSCarbonMenuImpl 
> _carbonCommandProcessEvent:handlerCallRef:] + 138
> 33  com.apple.AppKit              	0x00007fff8cd9e0bf 
> NSSLMMenuEventHandler + 339
> 34  com.apple.HIToolbox           	0x00007fff93e668ec 
> _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec 
> + 1263
> 35  com.apple.HIToolbox           	0x00007fff93e65ef8 
> _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec 
> + 446
> 36  com.apple.HIToolbox           	0x00007fff93e7cd03 
> SendEventToEventTarget + 76
> 37  com.apple.HIToolbox           	0x00007fff93ec3249 
> _ZL18SendHICommandEventjPK9HICommandjjhPKvP20OpaqueEventTargetRefS5_PP14OpaqueEventRef 
> + 398
> 38  com.apple.HIToolbox           	0x00007fff93faa0f1 
> SendMenuCommandWithContextAndModifiers + 56
> 39  com.apple.HIToolbox           	0x00007fff93ff05e1 
> SendMenuItemSelectedEvent + 253
> 40  com.apple.HIToolbox           	0x00007fff93ebc32d 
> _ZL19FinishMenuSelectionP13SelectionDataP10MenuResultS2_ + 101
> 41  com.apple.HIToolbox           	0x00007fff93eb3a75 
> _ZL14MenuSelectCoreP8MenuData5PointdjPP13OpaqueMenuRefPt + 600
> 42  com.apple.HIToolbox           	0x00007fff93eb3034 
> _HandleMenuSelection2 + 585
> 43  com.apple.AppKit              	0x00007fff8cc9dce1 
> _NSHandleCarbonMenuEvent + 250
> 44  com.apple.AppKit              	0x00007fff8cc336c7 _DPSNextEvent + 1993
> 45  com.apple.AppKit              	0x00007fff8cc32a95 -[NSApplication 
> nextEventMatchingMask:untilDate:inMode:dequeue:] + 135
> 46  com.apple.AppKit              	0x00007fff8cc2f3d6 -[NSApplication 
> run] + 463
> 47  QtGui                         	0x00000001000ef750 
> QEventDispatcherMac::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 
> 1824
> 48  QtCore                        	0x0000000100eb4664 
> QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 68
> 49  QtCore                        	0x0000000100eb4a14 
> QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 324
> 50  QtCore                        	0x0000000100eb790c 
> QCoreApplication::exec() + 188
> 51  net.company.MyApp            	0x0000000100005dfb main + 59
> 52  net.company.MyApp           	0x0000000100005644 start + 52
> 
> 
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at qt.nokia.com
> http://lists.qt.nokia.com/mailman/listinfo/qt-interest

-----------------------------------------------
Israel Brewster
Computer Support Technician II
Era Alaska
5245 Airport Industrial Rd
Fairbanks, AK 99709
(907) 450-7250 x7293
-----------------------------------------------

-------------- next part --------------
A non-text attachment was scrubbed...
Name: Israel Brewster.vcf
Type: text/directory
Size: 417 bytes
Desc: not available
Url : http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20111004/3916446d/attachment.bin 
-------------- next part --------------



More information about the Qt-interest-old mailing list