バンドル シード ID (バンドル ID の前にある 10 文字の英数字、 の X XXXXXXXXXX.com.company.application
)が異なる場合、アクセス グループを共有することはできません。これは Apple 側の制限であり、回避することは許可されていません。データを安全に共有するための別のソリューションを見つけることをお勧めします (おそらくデバイスの外部、サーバー上ですが、同じ制限があるため iCloud ではありません)。
キーチェーン アクセス グループに関する一般情報:
iPhone OS 3.0 以降、アプリケーションのファミリー間でデータを共有することが可能になりました。これにより、無料/プレミアム アプリケーションの共通パスに従う場合、または共通のアカウント設定を共有する必要がある一連の関連アプリケーションがある場合に、ユーザー エクスペリエンスが向上します。
共有キーチェーン アクセスの主な前提条件は、すべてのアプリケーションが共通のバンドル シード ID を持っていることです。これが何を意味するのかを明確にするために、App ID は次の 2 つの部分で構成されていることを思い出してください。
<Bundle Seed ID> . <Bundle Identifier>
バンドル シード ID は、(App Store 内で) 一意の 10 文字の文字列で、最初にアプリ ID を作成するときに Apple によって生成されます。バンドル識別子は通常、アプリを識別する逆ドメイン名文字列 (例: com.yourcompany.appName
) に設定され、Xcode のアプリケーション Info.plist ファイルで指定するものです。
そのため、キーチェーン アクセスを既存のアプリと共有できるアプリを作成する場合は、既存のアプリのバンドル シード ID を使用していることを確認する必要があります。これは、iPhone プロビジョニング ポータルで新しいアプリ ID を作成するときに行います。新しい値を生成する代わりに、以前のすべてのバンドル シード ID のリストから既存の値を選択します。
1 つの注意点として、バンドル ID にワイルドカードを使用してプロビジョニング プロファイルを作成できますが、それを使用するアプリ間で共有キーチェーン アクセスを機能させることはできませんでした。完全に指定された (ワイルドカードなしの) 識別子で問題なく動作します。プッシュ通知やアプリ内購入など、他の多くの Apple サービスにもこの制限があるため、驚くことではないかもしれませんが、キーチェーン アクセスについてはまだ文書化されていません。
共通のバンドル シード ID を使用してプロビジョニング プロファイルを設定したら、あとは非常に簡単です。まず、使用するキーチェーン アクセス グループを登録します。キーチェーン アクセス グループには、バンドル シード ID で始まる限り、ほとんど任意の名前を付けることができます。たとえば、次のような 2 つのアプリケーションがあるとします。
ABC1234DEF.com.useyourloaf.amazingApp1
ABC1234DEF.com.useyourloaf.amazingApp2
共通のキーチェーン アクセス グループを次のように定義できます。
ABC1234DEF.amazingAppFamily
アプリケーションがこのグループにアクセスできるようにするには、xCode を使用して資格 plist ファイルをプロジェクトに追加する必要があります。[追加] -> [新しいファイル] を使用して、[iPhone OS Code Signing] セクションから [資格] テンプレートを選択します。ファイルには任意の名前を付けることができます (例: KeychainAccessGroups.plist
)。ファイルに keychain-access-groups という名前の新しい配列アイテムを追加し、選択したキーチェーン アクセス グループの値を使用して配列内にアイテムを作成します。
注: アプリのアドホック ディストリビューションを作成する場合を除き、デフォルトで資格ファイルに作成される get-task-allow 項目を変更しないでください (その場合は、このオプションのチェックを外す必要があります)。
バンドル シード ID を共有するすべてのアプリに対して、この同じプロセスを繰り返して、アプリがキーチェーン グループにアクセスできるようにする必要があります。このグループの値を実際に格納および取得するには、キーチェーン サービスに引数として渡されるディクショナリに値を追加する必要があります。シンプルな iPhone キーチェーン アクセスに関する以前の投稿の例を使用すると、検索辞書は次の追加項目を取得します。
[searchDictionary setObject: @"ABC1234DEF.amazingAppFamily" forKey: (id)kSecAttrAccessGroup];
最後のコメントとして、共有キーチェーン アクセス グループを使用しても、アプリケーションのプライベート キーチェーンにも値を保存できます。Apple GenericKeychain サンプル アプリケーションは、データをプライベート キーチェーンとグループ キーチェーンに格納する 2 つのアプリケーションを構築します。
出典:あなたのローフを使用してください