从扩展程序写入存储在 App Group 容器中的数据库

Write into a database stored in App Group container from extension

我在 App Group 容器中存储了一个 sqlite 数据库,以便注册自定义快捷方式。

我可以从应用程序 read/write 进入它,但不能从键盘扩展进入。 似乎数据库在扩展中处于只读模式。

我正在使用以下代码访问它:

let appGroupDirectoryPath = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier(appGroupId)
let dataBaseURL = appGroupDirectoryPath!.URLByAppendingPathComponent("database.sqlite")

是否有解决方法可以从扩展键盘写入数据库,还是完全不可能?

数据库可从模拟器写入,但不能用真实设备写入。我想这是因为 MacOS X 和 iOS.

上的权限管理方式不同

想通了。

对于键盘,Info.plist 文件中有一个名为 RequestsOpenAccess 的 属性。您可以将其打开以启用对共享容器的写访问

但是,最终用户必须在其设置中为此键盘启用“完全访问权限”,并且系统会提示他们一条关于您如何记录他们的击键的可怕消息。

这是解释它的 Apple 文章:

Designing for User Trust for Custom Keyboard