-- (BOOL)createSecureBookmark
-{
- NSURL* fileURL = [NSURL fileURLWithPath:self.file];
- return [self _createSecureBookmarkWithURL:fileURL];
-}
-
-- (BOOL)_createSecureBookmarkWithURL:(NSURL*)url
-{
- NSError* error;
- NSData* secureBookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope | NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess
- includingResourceValuesForKeys:nil
- relativeToURL:nil
- error:&error];
- if (secureBookmark) {
- self.secureBookmark = secureBookmark;
- return YES;
- } else {
- NSLog(@"Failed to create secure bookmark: %@", error);
- return NO;
- }
-}
-
-- (BOOL)startSecureFileAccess
-{
- assert(self.type == kBreakpointTypeFile);
- if (_secureFileAccess)
- return YES;
- if (!_secureBookmark)
- return NO;
-
- BOOL isStale;
- NSError* error;
- _secureFileAccess = [NSURL URLByResolvingBookmarkData:_secureBookmark
- options:NSURLBookmarkResolutionWithSecurityScope
- relativeToURL:nil
- bookmarkDataIsStale:&isStale
- error:&error];
- if (error) {
- NSLog(@"Failed to access file via secure bookmark: %@", error);
- return NO;
- }
- if (isStale)
- [self _createSecureBookmarkWithURL:_secureFileAccess];
-
- return [_secureFileAccess startAccessingSecurityScopedResource];
-}
-
-- (BOOL)stopSecureFileAccess
-{
- assert(self.type == kBreakpointTypeFile);
- if (!_secureFileAccess)
- return YES;
- if (!_secureBookmark)
- return NO;
-
- [_secureFileAccess stopAccessingSecurityScopedResource];
- _secureFileAccess = nil;
- return YES;
-}
-