摘要
我目前正在实施自定义iOS键盘。我需要在键盘和包含应用程序之间共享数据。即使用户已禁用完全访问权限,这在某种程度上也有效。为什么呢?
详情
要在键盘和包含应用之间共享数据,我已经安装了一个应用组并使用
NSFileManager
.defaultManager()
.containerURLForSecurityApplicationGroupIdentifier("mySuiteName")
分享文件和
NSUserDefaults(suiteName:"mySuiteName")
用于其他设置。
据我了解,用户必须在系统设置中激活键盘的完全访问权限。 App Extension Programming Guide州:
如果您通过将此键的值设置为YES来请求开放访问,则键盘将获得以下功能[...]:
- 使用包含应用程序的键盘的共享容器的选项,该应用程序支持在包含应用程序中提供自定义词典管理UI等功能
我已将所需属性添加到plist文件中,并在键盘设置中查看相应选项。为了测试用户是否允许完全访问键盘,我采用了已知方法并测试了粘贴板可用性
UIPasteboard.generalPasteboard().isKindOfClass(UIPasteboard)
按预期工作。
但是,我注意到如果完全访问权限已禁用,我仍然可以使用
从键盘加载图片UIImage(contentsOfFile: imagePath)
imagePath
指向共享容器中的文件。我在运行iOS 9.2的两台设备上测试了这个。难道这不可能吗?我想知道我是否误解了对共享容器的限制。
答案 0 :(得分:3)
在iOS 8.0和9.0之间的某个时刻(我想说8.3,但我记不清确切的版本)Apple改变了对自定义键盘的限制,以便他们有只读访问权限到共享容器 - 文件系统和与之关联的NSUserDefaults
,即使禁用完全访问也是如此。
文档尚未更新。你应该提交雷达。