エンタイトルメントドキュメントでは、単一の開発チームによって作成された複数のアプリが特別なグループコンテナへのアクセスを共有できる方法について説明しています。
メインアプリケーションバンドルに含まれているメインアプリケーションとヘルパーアプリケーションにエンタイトルメントキーを追加しました。グループディレクトリが作成されることはなく、パスを取得するメソッド– [NSURL containerURLForSecurityApplicationGroupIdentifier:]
–は実際にはどのヘッダーにも存在しません。
共有グループコンテナを作成するために何が欠けていますか?
更新:追加された資格とグループコンテナの作成
これがメインアプリとヘルパーアプリケーションのエンタイトルメントファイルです。(TEAM_IDを実際のIDに置き換えます)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>TEAM_ID.com.pinepointsoftware</string>
</array>
</dict>
</plist>
開発フォーラムからの情報に基づいて、グループコンテナディレクトリを自分で作成しようとしました。
NSFileManager *fm = [NSFileManager defaultManager];
NSString *path = [@"~/Library/Group Containers/TEAM_ID.com.pinepointsoftware" stringByExpandingTildeInPath];
if ([fm createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:NULL]) {
[fm createFileAtPath:[path stringByAppendingPathComponent:@"test.txt"] contents:nil attributes:nil];
}
これをメインアプリとヘルパーアプリ内で実行すると、各サンドボックス内に2つの異なるディレクトリが作成されます。
XPCのアプリケーショングループを使用するAppleAppSandboxLoginItemXPCDemoのサンプルプロジェクトを見つけました。チームに一致するように資格とバンドル識別子を変更することで機能させることはできますが、グループコンテナを共有することはできません。