[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