2

iCloud同期のサポートを追加するために、(既存の)アプリでしばらく作業しました。合計で、アプリの 3 つのバージョンがあります。

a) 通常の iPhone 版
b) lite (無料) iPhone 版
c) iPad 版

iCloud を使用して、コア データ ストレージを 3 つのバージョン/デバイス間で同期させたいと考えています。私は実装を手に入れました。私のデバイスに置いた開発バージョンはうまく機能しました。

昨日、iPhoneバージョンを提出することにしましたが、却下されました:

無効なコード署名資格 - アプリ バンドルの署名に、サポートされていない資格値が含まれています。com.apple.developer.ubiquity-container-identifiers エンタイトルメントの場合、配列の最初の値は、プロビジョニング プロファイルで Apple によって提供されたプレフィックスとそれに続くバンドル識別子サフィックスで構成される必要があります。バンドル ID は、iCloud コンテナー ID としての使用が許可されているいずれかのアプリまたは別のアプリのバンドル ID と一致する必要があります。

具体的には、[my app] のキー「com.apple.developer.ubiquity-container-identifiers」の値「[teamid].com.[myself].[somename]」はサポートされていません。

これらの識別子がどのように見えるべきかについては、まったくわかりません。このページ: https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/iCloud/iCloud.html#//apple_ref/doc/uid/TP40007072-CH5-SW1他のアプリのコンテナー ... 3 つのバージョンのアプリに 3 つのコンテナーを追加する必要がありますか? これまでのところ、project/targets/summary/entitlements の下で構成しました:

[x] iCloud キー値ストア: com.[自分].[somename]
iCloud コンテナー: com.[自分].[somename]

3 つのバージョンすべて (同じ識別子)。3 つのバージョンすべてが iCloud を介してコア データ ストレージ データベースを同期するには、正確に何を設定する必要がありますか?

4

3 に答える 3

2

iCloud Design Guide: iCloud Fundamentalsによると、iCloud コンテナーを共有するすべてのアプリは、単一の iCloud コンテナーを使用してこれを行うことができます (それが必要な場合)。ここでの問題点は、プライマリ (最初の) コンテナー ID が、開発中の現在のアプリバンドルID、または以前に提出されたアプリ(同じチーム IDを共有する) のバンドル ID である必要があることです。

例を挙げますが、

あなたのアプリの通常の iPhone アプリ (a) にバンドル ID com.yourteam.iphoneappがあり、それが最初に提出されたものであり、App Store で入手可能であると仮定します。次に、他のすべてのバージョンのプライマリ iCloud コンテナー ID と同じ ID を提供する必要があります。

上記のドキュメントの関連セクションを次に示します。

Xcode ターゲット エディターの [概要] タブで、アプリに必要な数のユビキタス コンテナーへのアクセスを要求できます。たとえば、アプリの無料版と有料版を提供しているとします。アップグレードしたユーザーに、iCloud ドキュメントへのアクセスを維持してもらいたいと考えています。または、相互運用し、互いのファイルにアクセスする必要がある 2 つのアプリを提供する場合もあります。どちらの例でも、共通のユビキタス コンテナーを指定し、各アプリからそのコンテナーへのアクセスを要求することで、必要なアクセスを取得します。

  1. iCloud 対応アプリの 1 つを選択して、共通のユビキタス コンテナーのプライマリ アプリとして機能させます。選択するアプリは、現在開発中のアプリでも、App Store での配布用に提出された、同じチーム ID を使用するエンタイトルメントを持つ別のアプリでもかまいません。
于 2013-08-12T10:05:57.833 に答える
1

この問題はすでに解決されていると思いますが、答えは、すべてのアプリで同じユビキタス コンテナー識別子を使用することです。必要なものは 1 つだけで、アプリ名に依存しません。Apple は、「[teamid].com.[myself].[ appname ] ではなく、「[teamid].com.[myself].[ somename ]」使用するように指示したことに注意してください。 ]」。「アプリ名」ではなく、アプリ間で一貫した「何らかの名前」を使用してください。

于 2013-02-01T15:55:34.893 に答える
0

ここに画像の説明を入力iCloud 対応の暫定プロファイルを 3 つ作成する必要があります。アプリの同じバージョンを実行しているデバイスは、同じ iCloud コンテナーでデータを共有できます。ただし、アプリのこれら 3 つのバージョンのいずれかを実行するデバイスでデータを共有する場合は、各バージョンの資格セクションにそれらの識別子を追加する必要があります。

http://www.raywenderlich.com/6015/beginning-icloud-in-ios-5-tutorial-part-1から iCloud に関する優れたチュートリアルがあります。

編集:

あなたのケースのサンプル画像を追加しました。また、以下のテキストは、その Web サイトのチュートリアルから抜粋したものです。

ここでは、まだ見ていない URLForUbiquityContainerIdentifier という新しいメソッドを使用します。このメソッドを使用すると、コンテナー識別子 (iCloud コンテナー セクションで設定したものと同様) を渡すことができ、iCloud ストレージ内のファイルにアクセスするために使用する URL が返されます。

アプリに URL へのアクセス許可を与えるために、アクセスするコンテナーごとに起動時にこれを呼び出す必要があります。メソッドに nil を渡すと (ここで行うように)、プロジェクト用に設定された最初の iCloud コンテナが自動的に返されます。コンテナーは 1 つしかないため、これは簡単で便利です。

于 2012-04-19T19:32:15.380 に答える