摘要
我目前正在实现自定义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的两个设备上对此进行了测试。这不是不可能吗?我想知道我是否误解了对共享容器的限制。 最佳答案
在iOS 8.0和9.0之间(我想说8.3,但我不记得确切的版本),Apple更改了对自定义键盘的限制,以使它们对共享容器(文件系统和文件系统)具有只读访问权限以及与之关联的NSUserDefaults
,即使禁用了完全访问权限也是如此。
该文档尚未更新。你应该提起雷达。
关于ios - 自定义iOS键盘访问没有完全访问权限的容器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34722308/