Не удается сохранить файл в группы приложений на iOS 8
Я пытался использовать - (NSURL *)containerURLForSecurityApplicationGroupIdentifier:(NSString *)groupIdentifier
сохранить / загрузить файлы между контейнерным приложением и расширением на iOS 8 b4.
Вот код:
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:groupID];
containerURL = [containerURL URLByAppendingPathComponent:[NSString stringWithFormat:@"Library/Caches/test.txt"]];
NSString* string = @"hihihihihi";
NSError* error;
[string writeToURL:containerURL atomically:YES encoding:NSUTF8StringEncoding error:&error];
NSLog(@"%@",error);
Я поместил этот код как в расширение (пользовательскую клавиатуру), так и в приложение контейнера. Когда я запускаю его на iOS Simulator, они оба могут успешно сохранить файл. Однако на устройствах iOS расширение не может сохранить файл (в то время как приложение контейнера все еще может)
Консоль показывает ошибку какао 513, когда расширение пытается сохранить файл.
2014-07-31 01: 37: 49.316 TestExtention [2359: 288820] Ошибка Domain=NSCocoaErrorDomain Code=513 "Операция не может быть завершена. (Ошибка какао 513.)" UserInfo=0x15df2100 {NSFilePath=/private/var/mobile/Containers/Shared/AppGroup/4FA2DA5E-89C3-4BC3-AA5B-DD869827C5E7/Library/Caches/test.txt, NSUnderlyingError=0x15df1d90 "Операция не может быть завершена. Операция не разрешена"}
Это ограничение расширения iOS 8?
2 ответа
Есть еще одно ограничение для расширения клавиатуры. Вы должны установить RequestsOpenAccess
в YES
в Info.plist, то он может получить доступ к файлам.
Как содержащее приложение, так и расширение могут обращаться к файлам в одном контейнере общей группы, если они имеют одинаковый идентификатор группы.
В обоих содержащихся приложениях и расширениях проверьте, существует ли это в его.entitlements.
<key>com.apple.security.application-groups</key>
<array>
<string>your-group-id</string>
</array>
Затем проверьте, что их профиль обеспечения имеет этот идентификатор группы.