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

Israel Brewster israel at frontierflying.com
Thu Oct 6 18:27:07 CEST 2011


Just finished a build of the latest 4.8, and same problem. So apparently not fixed yet. Is there any hope of this getting fixed before the App Store requirement goes into effect, or am I going to have to re-write the file saving portions of my app to use Apple's API directly? I'd rather not, of course, but this is a total show-stopper bug otherwise.

On Oct 4, 2011, at 11:36 AM, Israel Brewster wrote:

> 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
> -----------------------------------------------
> 
> <Israel Brewster.vcf>
> _______________________________________________
> 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/20111006/3d405062/attachment.bin 
-------------- next part --------------



More information about the Qt-interest-old mailing list