Hi I would watch session Cocoa Interprocess Communication with XPC from WWDC 2012. https://developer.apple.com/videos/wwdc/2012/ <https://developer.apple.com/videos/wwdc/2012/> I certainly found it very helpful. I’ve taken quite comprehensive notes from that session see:
http://blog.yvs.eu.com/2013/07/cocoa-interprocess-communication-with-xpc/ <http://blog.yvs.eu.com/2013/07/cocoa-interprocess-communication-with-xpc/> But I think you will still get value from watching the video. Kevin Kevin Meaney Zukini Ltd Sheffield S2 3LN Company no: 9491832 > On 18 Jul 2015, at 15:26, SevenBits <[email protected]> wrote: > > Hey all, > > I’m currently in the process of re-writing one of my old apps and I have > decided to do so using modern Mac technology and APIs. The target is the Mac > App Store and thus my app needs to be sandboxed. > > My app, for everyone's sake, is not document-based. The user can open files > by dragging them onto my app, or they can open them with the Open menu item. > What I’m looking to do is allow the user to press a button and have an > external XPC service start which then reads the opened file(s) and deletes > them off of the main thread (this is a simplification). > > Since XPC services cannot present UI, I need to find a way to give the XPC > service access to the file(s) the user has selected. I know about > security-scoped bookmarks, and I have used them before, but I’m not certain > how to implement this. First off all: > > 1) Apple’s docs say that non-document based apps don’t get sandboxing support > automatically handled for them, requiring the manual use of the NSFile* APIs. > Although when the user opens the file that should give my app access, I can’t > get this to translate into a working security-scoped bookmark. > > 2) Apple says that app-scoped bookmarks can only be used by apps with the > same container as the app that created it. I don’t know if this means that > security-scoped bookmark data based across XPC will remain valid inside of > the XPC service. On the other hand, document-scoped bookmarks *can* be used > by other apps, but can’t point to folders, which might be a deal-breaker for > me. > > Can someone enlighten me as to the best way to handle this? Here’s some > relevant code snippets: > > - (void)application:(NSApplication *)sender openFiles:(NSArray *)fileNames { > NSLog(@"Files dragged on: %@", fileNames); > IncinerationWindowController *controller = > [[IncinerationWindowController alloc] > initWithWindowNibName:@“IncinerationWindowController" > andListOfFiles:fileNames]; > } > > - (instancetype)initWithWindowNibName:(NSString *)windowNibName > andListOfFiles:(NSArray *)dcArray { > self = [super initWithWindowNibName:windowNibName]; > if (self) { > self->documentArray = dcArray; > self->securityURLArray = [[NSMutableArray alloc] > initWithCapacity:dcArray.count]; > > self->isCurrentlyIncinerating = NO; > [self createSecurityBookmarks]; > } > > return self; > } > > - (void)createSecurityBookmarks { > for (NSString *path in self->documentArray) { > NSError *error = nil; > NSURL *url = [[NSURL alloc] initFileURLWithPath:path]; > > NSData *bookmarkData = [url > bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope > includingResourceValuesForKeys:nil relativeToURL:nil error:&error]; > if (!bookmarkData) { > NSLog(@"Failed to create security scoped bookmark: %@", > error); > } else [securityURLArray addObject:bookmarkData]; > } > } > _______________________________________________ > > Cocoa-dev mailing list ([email protected]) > > 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/ktam%40yvs.eu.com > > This email sent to [email protected] _______________________________________________ Cocoa-dev mailing list ([email protected]) 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 [email protected]
