10

在查找器同步扩展中解析安全范围书签时出现以下错误。

错误域 = NSCocoaErrorDomain 代码 = 259 “文件无法打开,因为它的格式不正确。”

也可能是相关的日志记录

无法读取 CFPrefsPlistSource<0x6080000ee380> 中的值(域:MyAppGroupName,用户:kCFPreferencesAnyUser,ByHost:是,容器:(null)):仅允许将 kCFPreferencesAnyUser 与容器一起用于系统容器,与 cfprefsd 分离

我正在使用以下代码在 Container App 中创建安全范围书签:

NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.mycomp.xyz"];
NSURL * theSelectedFolder = ....selected folder from NSOpenPanel....
NSData *bookmarkData = [theSelectedFolder bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope includingResourceValuesForKeys:nil relativeToURL:nil error:NULL];

[sharedDefaults setObject:bookmarkData forKey:@"BookmarkData"];
[sharedDefaults synchronize];

在 Finder 同步扩展中,我使用以下代码:

NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.mycomp.xyz"];
NSData *bookmarkData = [sharedDefaults objectForKey:@"BookmarkData"];
BOOL bookmarkDataIsStale;
NSError *err;
NSURL *userSelectedUrl = [NSURL URLByResolvingBookmarkData:bookmarkData options:NSURLBookmarkResolutionWithSecurityScope relativeToURL:nil bookmarkDataIsStale:&bookmarkDataIsStale error:&err];

而且我还添加了此权利密钥: com.apple.security.files.bookmarks.app-scope在 Finder Sync Extension 和 Container 应用程序中。

我是可可编程的新手,无法找到任何运气发现问题。

我究竟做错了什么?有谁可以帮我离开这里吗?

4

4 回答 4

2

我收到了 Apple 开发者技术支持的回复。贴在下面:

跟进:701518883

我对此进行了深入研究,所以让我在这里重新开始对话:

我需要在我的主 Mac 应用程序及其 FinderSync 扩展程序之间共享沙盒安全书签。

这里的根本问题是应用范围内的安全范围书签仅在创建它的应用程序内有效。这让您有两个选择:

  1. 如果两个应用程序组件同时运行,那么您可以将当前 URL 发送到另一个组件,然后它可以创建并保存自己的应用程序范围、安全范围的书签。

  2. 如果这不起作用,那么另一个选项是创建一个文档范围、安全范围的书签。

于 2018-10-19T00:40:40.637 回答
1

要保存只读书签数据,请使用位掩码[.withSecurityScope, .securityScopeAllowOnlyReadAccess]不仅如此.securityScopeAllowOnlyReadAccess

.securityScopeAllowOnlyReadAccess

该选项结合使用时.withSecurityScope,指定您要创建一个安全范围的书签,该书签在解析时提供一个安全范围的 URL,允许对文件系统资源进行只读访问;用于采用 App Sandbox 的应用程序。

https://developer.apple.com/documentation/corefoundation/cfurlbookmarkcreationoptions/1543362-securityscopeallowonlyreadaccess

url.bookmarkData(options: [.withSecurityScope, .securityScopeAllowOnlyReadAccess], includingResourceValuesForKeys: nil, relativeTo: nil)

.securityScopeAllowOnlyReadAccess从主应用程序或扩展程序解决时,仅使用给我问题中提到的错误:

错误域 = NSCocoaErrorDomain 代码 = 259 “文件无法打开,因为它的格式不正确。”

于 2018-10-16T03:17:04.203 回答
0

您可以通过以下方式使用扩展中的书签:

url.bookmarkData(options: [.minimalBookmark], includingResourceValuesForKeys: nil, relativeTo: nil)

并将该书签保存到 App Group 用户默认值。

于 2021-07-13T15:19:52.053 回答
0

问题是您正在尝试解析 finder Extension 中的书签数据。您需要在包含应用程序本身时解析书签数据。

你可以得到selected item urlstargeted url扩展。

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.mycomp.xyz"];
NSURL* target = [[FIFinderSyncController defaultController] targetedURL];
NSArray* items = [[FIFinderSyncController defaultController] selectedItemURLs];
于 2018-10-15T07:25:43.310 回答