没有完全访问权限的自定义 iOS 键盘访问容器
Custom iOS keyboard accesses container without Full Access privileges
总结
我目前正在实施自定义 iOS 键盘。我需要在键盘和包含的应用程序之间共享数据。即使用户禁用了完全访问权限,这在某种程度上也能奏效。为什么?
详情
为了在键盘和包含的应用程序之间共享数据,我安装了一个应用程序组并使用
NSFileManager
.defaultManager()
.containerURLForSecurityApplicationGroupIdentifier("mySuiteName")
共享文件和
NSUserDefaults(suiteName:"mySuiteName")
其他设置。
据我了解,用户必须在系统设置中激活对我的键盘的完全访问权限。 App Extension Programming Guide 状态:
If you request open access by setting this key’s value to YES, your keyboard gains the following capabilities [...]:
- Option to use a shared container with the keyboard’s containing app, which enables features such as providing a custom lexicon management UI in the containing app
我已将所需的 属性 添加到 plist 文件中,并在键盘设置中查看了相应的选项。为了测试用户是否允许完全访问键盘,我采用了已知的方法并测试了粘贴板的可用性
UIPasteboard.generalPasteboard().isKindOfClass(UIPasteboard)
按预期工作。
但是,我注意到如果完全访问权限被禁用,我仍然可以使用
从键盘加载图像
UIImage(contentsOfFile: imagePath)
imagePath
指向共享容器中的文件。我已经在两个设备 运行 iOS 9.2 上对此进行了测试。这不应该是不可能的吗?我想知道我是否误解了对共享容器的限制。
在 iOS 8.0 和 9.0 之间的某个时间点(我想说 8.3,但我不记得确切的版本)Apple 更改了对自定义键盘的限制,以便它们 read-only 访问共享容器 -- 文件系统和与之关联的 NSUserDefaults
,即使完全访问被禁用。
文档尚未更新。你应该提交一个雷达。
总结
我目前正在实施自定义 iOS 键盘。我需要在键盘和包含的应用程序之间共享数据。即使用户禁用了完全访问权限,这在某种程度上也能奏效。为什么?
详情
为了在键盘和包含的应用程序之间共享数据,我安装了一个应用程序组并使用
NSFileManager
.defaultManager()
.containerURLForSecurityApplicationGroupIdentifier("mySuiteName")
共享文件和
NSUserDefaults(suiteName:"mySuiteName")
其他设置。
据我了解,用户必须在系统设置中激活对我的键盘的完全访问权限。 App Extension Programming Guide 状态:
If you request open access by setting this key’s value to YES, your keyboard gains the following capabilities [...]:
- Option to use a shared container with the keyboard’s containing app, which enables features such as providing a custom lexicon management UI in the containing app
我已将所需的 属性 添加到 plist 文件中,并在键盘设置中查看了相应的选项。为了测试用户是否允许完全访问键盘,我采用了已知的方法并测试了粘贴板的可用性
UIPasteboard.generalPasteboard().isKindOfClass(UIPasteboard)
按预期工作。
但是,我注意到如果完全访问权限被禁用,我仍然可以使用
从键盘加载图像UIImage(contentsOfFile: imagePath)
imagePath
指向共享容器中的文件。我已经在两个设备 运行 iOS 9.2 上对此进行了测试。这不应该是不可能的吗?我想知道我是否误解了对共享容器的限制。
在 iOS 8.0 和 9.0 之间的某个时间点(我想说 8.3,但我不记得确切的版本)Apple 更改了对自定义键盘的限制,以便它们 read-only 访问共享容器 -- 文件系统和与之关联的 NSUserDefaults
,即使完全访问被禁用。
文档尚未更新。你应该提交一个雷达。