自定义iOS键盘访问没有完全访问权限的容器

时间:2016-01-11 13:05:45

标签: ios cocoa-touch ios-app-extension ios-keyboard-extension

摘要

我目前正在实施自定义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的两台设备上测试了这个。难道这不可能吗?我想知道我是否误解了对共享容器的限制。

1 个答案:

答案 0 :(得分:3)

在iOS 8.0和9.0之间的某个时刻(我想说8.3,但我记不清确切的版本)Apple改变了对自定义键盘的限制,以便他们有只读访问权限到共享容器 - 文件系统和与之关联的NSUserDefaults,即使禁用完全访问也是如此。

文档尚未更新。你应该提交雷达。