如何从XPC服务中的安全范围书签网址访问文件?

时间:2019-02-15 20:04:21

标签: macos file-access appstore-sandbox xpc security-scoped-bookmarks

我正在创建沙盒macOS应用程序。我从NSOpenPanel获取文件url,创建书签数据并保存到数据存储中。然后,我可以成功地从书签数据中还原URL并从我的应用程序访问文件数据。

我在项目中还有一个目标为XPC Service的目标,我将还原的URL传递给该目标,但是当我尝试从此XPC Service读取文件时,我无法从该URL访问文件。

我的基本应用和XPC Service目标都具有 com.apple.security.files.bookmarks.app-scope com.apple.security.files.bookmarks.document-scope com.apple.security.files.user-selected.read-write

我应该怎么做才能从XPC Service目标中的已还原URL中访问文件? 并且可以从XPC Service复制或删除文件吗?

基本应用

NSURL *url = [NSURL URLByResolvingBookmarkData:file.bookmarkData
                                       options:NSURLBookmarkResolutionWithSecurityScope
                                 relativeToURL:nil
                           bookmarkDataIsStale:nil
                                         error:nil];
[url startAccessingSecurityScopedResource];
...
[self.connection.remoteObjectProxy getDataFromURL:url
                                        withReply:aReply];

XPC服务

- (void)getDataFromURL:(NSURL *)anURL
             withReply:(void (^)(NSData *))aReply {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
        aReply([NSData dataWithContentsOfURL:anURL]);
    });
}

[NSData dataWithContentsOfURL:anURL]nil

0 个答案:

没有答案