Записывать в базу данных, хранящуюся в контейнере группы приложений из расширения

У меня есть база данных sqlite, хранящаяся в контейнере группы приложений, чтобы зарегистрировать пользовательский ярлык.

Я могу читать/записывать в него из приложения, но не с расширения клавиатуры. Кажется, что база данных находится в режиме только для чтения из расширений.

Я использую следующий код для доступа к нему:

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

Есть ли способ обхода, который можно записать в базу данных с клавиатуры расширения, или это невозможно?

База данных доступна для записи из симулятора, но не с реальными устройствами. Я предполагаю, потому что разрешения управляются по-разному на MacOS X и iOS.

Ответ 1

Выяснил это.

Для клавиатур в файле Info.plist есть свойство RequestsOpenAccess. Вы можете включить это, чтобы включить доступ для записи в общий контейнер.

Однако конечный пользователь должен будет включить "полный доступ" в своих настройках для этой клавиатуры, и им будет предложено страшное сообщение о том, как вы могли записывать свои нажатия клавиш.

Вот статья Apple, которая объясняет это:

Проектирование для пользовательского треста для пользовательской клавиатуры