Automatic relaunch of your app is such a basic software requirement, and apple has never published a clean method for accomplishing this. There are situations when a relaunch of an app is much safer, faster, and fault tolerant than an approach which kills every background thread, deletes all your NSDocument objects, and open a new NSDocument.
There is only one method you can google http://13bold.com/tutorials/relaunching-your-application/, which has worked for me until sandbox. With sandboxing requirements, now this relatively simple approach becomes impossibly complex to implement and understand… jumping through the hoops to build the final .app for submission becomes a mess of build scripts and unmaintainable cross references. So, I tried an execv approach. Without sandboxing, this works beautifully and much faster than the relaunch daemon approach. With sandboxing, execv is a violation. Is there a way to get this to work? If not, Apple needs to make a sandbox entitlement to allow execv of your own executable. - (void) applicationWillTerminate:(NSNotification *)notification { … do clean-up tasks like NSUserDefaults synchronize, etc. … if ( ! userWantsRelaunch ) return; const char *execPath = [[[NSBundle mainBundle] executablePath] fileSystemRepresentation]; … do sanity/security checks. I recognize this may have thread safety issues … // FD_CLOEXEC close all files upon execv, // takes less than 5ms. int sz = getdtablesize(); for(int i=3; i<sz; i++) { // start at 3… we want to keep stdin, stdout, and std err. int flags = fcntl(i, F_GETFD); if(flags<0) continue; fcntl(i, F_SETFD,flags| FD_CLOEXEC); } NSLog( @"****** expect gdb to hit breakpoint at __dyld__dyld_start *******\n" ); NSLog( @"****** main_relaunch execv() *******\n" ); execv( execPath, sArgvFromMain ); // will not return. <---- sandbox violation here NSLog( @"****** execv() failed *******\n" ); … use relaunch daemon instead … } ~K _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com