9

- (NSURL *)containerURLForSecurityApplicationGroupIdentifier:(NSString *)groupIdentifieriOS 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シミュレーターで実行すると、どちらもファイルを正常に保存できます。ただし、iOS デバイスでは、拡張機能はファイルを保存できません (コンテナー アプリは引き続き保存できます)。

拡張機能がファイルを保存しようとすると、コンソールに cocoa エラー 513 が表示されます。

2014-07-31 01:37:49.316 TestExtention[2359:288820] エラー Domain=NSCocoaErrorDomain Code=513 「操作を完了できませんでした。(Cocoa エラー 513。)」 UserInfo=0x15df2100 {NSFilePath=/private/var/ mobile/Containers/Shared/AppGroup/4FA2DA5E-89C3-4BC3-AA5B-DD869827C5E7/Library/Caches/test.txt, NSUnderlyingError=0x15df1d90 "操作を完了できませんでした。操作は許可されていません"}

これは iOS 8 拡張機能の制限ですか?

4

2 に答える 2

4

キーボード拡張には別の制限があります。Info.plistに設定RequestsOpenAccessするYESと、ファイルにアクセスできるようになります。

https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html#//apple_ref/doc/uid/TP40014214-CH16-SW2

于 2014-07-31T14:26:21.243 に答える
2

含まれているアプリと拡張機能の両方が、同じグループ IDを持つ場合、同じ共有グループ コンテナー内のファイルにアクセスできます。

含まれているアプリと拡張機能の両方で、これが .entitlements に存在するかどうかを確認します。

<key>com.apple.security.application-groups</key>
<array>
    <string>your-group-id</string>
</array>


次に、プロビジョニング プロファイルにこのグループ ID があることを確認します。

于 2014-07-31T06:31:39.483 に答える