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

Posted

技术标签:

【中文标题】自定义 iOS 键盘在没有完全访问权限的情况下访问容器【英文标题】:Custom iOS keyboard accesses container without Full Access privileges 【发布时间】:2016-01-11 13:05:45 【问题描述】:

总结

我目前正在实现一个自定义 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】:

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

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

【讨论】:

以上是关于自定义 iOS 键盘在没有完全访问权限的情况下访问容器的主要内容,如果未能解决你的问题,请参考以下文章

如何检查我的ios8自定义键盘扩展是否具有开放访问权限?

自定义键盘可以访问用户照片吗?

如何检查我的 ios8 自定义键盘扩展是不是具有开放访问权限?

在没有密码的情况下提取不在我的个人资料下但具有完全访问权限的 gitlab 存储库

Mandrill 中的新 API 密钥默认具有对您帐户的完全访问权限 - 您可以自定义吗?

如何在没有 root 的情况下从 Ubuntu 18.04.3 中完全删除节点?