Доступ к папке «Документы приложения» из расширения «Сегодня»

Я успешно поделился данными между своим приложением и его расширением «Сегодня» через userDefaults, но у меня возникают проблемы с фактическими файлами, расположенными в папке «Документы» приложения.

Когда я использую этот код в своем приложении:

var documentsDir:NSString = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String

он возвращает:

/var/mobile/Containers/Data/Application/296494AA-946C-40E0-8646-F0895E131DCB/Documents/

но в расширении он возвращает:

/var/mobile/Containers/Data/PluginKitPlugin/AB484342-537A-4CE7-9EF3-F2CAE352C8A3/Documents/

и, очевидно, файлов нет.

Я где-то читал, что я должен использовать:

let containerURL = manager.containerURLForSecurityApplicationGroupIdentifier("group.com.company.app")
let filePath = containerURL.path

но он возвращает:

/private/var/mobile/Containers/Shared/AppGroup/CD7CF610-EB5F-4246-8D30-D7F8BFA6A219

что тоже не сработало.

Как я могу заставить мое расширение iOS 8 Today читать файлы своего приложения-контейнера, расположенные в документах?

Спасибо!


person Lee Andrew    schedule 23.09.2014    source источник


Ответы (1)


Вы не можете получить доступ к папке документов содержащего приложения из расширения.

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

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

Если вы обновляете существующее приложение, которое хранит данные в папке документов, вам нужно будет переместить данные в расширение s8-today.

Проверьте эту ссылку. http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/

person honcheng    schedule 25.09.2014
comment
В ссылке ничего не говорится об использовании общего контейнера на диске. Он использует NSUserDefaults. - person funroll; 21.10.2016
comment
Вы можете создавать общие группы приложений только для расширений в watchOS ‹2. - person Michael Neas; 28.04.2020