IOS 8 App Group 访问键盘扩展中的容器应用程序文件

Posted

技术标签:

【中文标题】IOS 8 App Group 访问键盘扩展中的容器应用程序文件【英文标题】:IOS 8 App Group access container app file in Keyboard extension 【发布时间】:2014-08-22 15:01:03 【问题描述】:

我想通过应用组功能访问自定义键盘扩展中的容器应用文件。为此,我在 Apple 门户上创建了组 ID,并将其添加到我的两个目标(键盘和应用)中 我已通过NSUserDefaults 成功访问数据,它工作正常,我可以访问数据。但我坚持从容器应用程序获取文件 我有访问网址

NSURL *containerURL = [[NSFileManager defaultManager] 
           containerURLForSecurityApplicationGroupIdentifier:@"group.com.company.app"];

NSURL 按以下方式返回 URL。

/Users/AxisCyberTech1/Library/Developer/CoreSimulator/Devices/1649BBF4-6615-4E53-BFC9-A3D07F3CA70A/data/Containers/Shared/AppGroup/49A4F24B-30A8-474E-8FFA-072E0DF61CBD/

但此路径无法访问 Container 源包中的任何文件。 如何访问容器源文件

【问题讨论】:

【参考方案1】:

键盘扩展还有另一个限制。您应该在 Info.plist 中将 RequestsOpenAccess 设置为 YES,然后它才能访问文件。

https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html#//apple_ref/doc/uid/TP40014214-CH16-SW2

【讨论】:

【参考方案2】:

要访问包含的应用程序包是沙盒的,不允许从外部应用程序访问。调用[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:YOUR_APP_GROUP_ID]获取App Group Shared container的URL。

请注意,使用 NSFileCoordinator 内部扩展访问包含应用程序共享容器可能会导致死锁。见this documentation

【讨论】:

以上是关于IOS 8 App Group 访问键盘扩展中的容器应用程序文件的主要内容,如果未能解决你的问题,请参考以下文章

ios 8 键盘扩展设置包

自定义键盘应用程序扩展 iOS 8 上的 Siri

iOS 8 键盘扩展:出现呼叫栏时出现约束错误?

带有 App Group 的 NSUserDefault 在 iOS 8 Beta3 中不起作用

如何从扩展 iOS 8 获取 NSManagedObjectContext 实例

在 App-Group 文件夹中创建领域文件在 WatchOS(WatchKit 扩展)下不起作用