摘要

我目前正在实现自定义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/

10-14 21:41
查看更多