2012-04-19 17 views
2

私は現在、(既存の)アプリケーションでiCloudの同期をサポートするためにしばらくの間働いています。合計では、私は、アプリの3つのバージョンがあります:iCloudのエンタイトルメントが拒否されました

a)は通常のiPhone版
b)のライト(無料)iPhone版
C)iPad版

私はコアデータを作るためのiCloudを使用したいです3つのバージョン/デバイス間のストレージ同期。私は実装を持っていました。私がデバイスに入れた開発バージョンはうまくいったのです。

昨日、私はiPhoneのバージョンを提出することを決めたが、彼らは拒否されました:

無効なコードは、エンタイトルメントの署名 - あなたのアプリケーションバンドルのための署名がサポートされていないエンタイトルメント値が含まれています。 com.apple.developer.ubiquity-container-identifier資格の場合、配列の最初の値は、プロビジョニングプロファイルでAppleが提供する接頭辞の後にバンドルID接尾辞が続くようにする必要があります。バンドルIDは、iCloudコンテナ識別子として使用することが許可されているアプリまたは別のアプリのバンドル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つのコンテナを追加する必要がありますか?

[X]のiCloudキー値ストア::。com [自分] [somenameの]
のiCloudコンテナ:。。。com [自分] [somenameの]

これまでのところ私は、プロジェクト/ターゲット/概要/資格の下に設定しました

すべての3つのバージョン(同じ識別子)。 3つのバージョンすべてがiCloudを通じてコアデータストレージデータベースを同期するように、正確に構成する必要があるのは何ですか?

+0

は、我々は既存の作業のアプリIDでのiCloudを有効にする必要がありますか、我々は有効になってiCloudにして新しいアプリケーションIDを作成する必要がありますか? –

答えて

2

iCloud Design Guide: iCloud Fundamentalsによると、お使いのiCloudコンテナを共有するすべてのアプリは、単一のiCloudコンテナを使用して行うことができます。ここでの漁獲量は同じチームあなたの前に提出されたアプリのいずれか(そのシェアプライマリ(最初の)コンテナIDは、あなたのを開発中現在のアプリケーション、またはバンドルIDバンドルIDなければならないということですID)。私は例を持っていきます

私たちはあなたのアプリケーション通常のiPhoneアプリ(a)はバンドルIDcom.yourteam.iphoneappを持っていると仮定しましょう、それはあなたが提出したものだった第一およびApp Storeで利用可能です。次に、ほかのすべてのバージョンのプライマリiCloudコンテナIDと同じIDを指定する必要があります。ここで

は、上記の文書のうち該当するセクションです:Xcodeのターゲットエディタの[概要]タブでは

アプリのために必要として、あなたは として多くのユビキタスコンテナへのアクセスを要求することができます。たとえば、 と言うと、アプリの無料版と有料版を提供しています。 アップグレードを行っているユーザーに、iCloudドキュメントへのアクセスを維持したいと思うでしょう。または、おそらく は、互いに操作し、お互いのファイルにアクセスする必要がある2つのアプリを提供します( )。これらの例の両方で、あなたは一般的なユビキタスコンテナを指定し、各アプリから それへのアクセスを要求 ことにより、必要なアクセスを得ます。

  1. iCloud対応のアプリを選んで、一般的なユビキタスコンテナの主なアプリとして機能させます。その資格同じチーム IDを使用して、あなたが開発している現在の いずれかになります選ぶアプリ、またはApp Storeで 配布のために提出あなたの他のアプリと。 iCloudのためのサポートを与えながら
0

enter image description here iCloud対応の暫定プロファイルを3つ作成する必要があります。同じバージョンのアプリを実行している端末は、同じiCloudコンテナでデータを共有できます。しかし、あなたのアプリケーションの3つのバージョンのいずれかを実行しているデバイスにデータを共有させたい場合は、各バージョンのEntitlementsセクションにそれらの識別子を追加する必要があります。

のiCloud上の良いチュートリアルがhttp://www.raywenderlich.com/6015/beginning-icloud-in-ios-5-tutorial-part-1

からありますが編集:

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

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

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

+0

私はまだそれを得るdidntを恐れている。私は3つの別々のプロビジョニングプロファイルを持っていますが、すべてiCloud対応の独自のアプリケーションID用です。 http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/10/entitlements.pngキーバリューストアとして何を置く必要がありますか?プロビジョニングポータルのそれぞれのバージョンのXXXXXXXX.com.myself.appname文字列または、チュートリアルに示されているようにcom.myself.appname?そして、容器のために何ですか? com.myself.appnameは他のバージョンですか? (合計3つ)自分の開発バージョンがどのように同期できるのだろうか。私は基本的にすべてのバージョンで、ツタンカーメンで同じだった。 – user826955

+0

私は絵で答えを編集しました。 – user523234

+0

ありがとうございます、今はちょっときれいになっています。画像に入れたキーは、自分のアプリのバンドルIDに対応していなければなりません。これは任意の名前ですか? また、コアデータストレージが同期されていることを確認するにはどうすればよいですか?コンテナキーの1つをNSPersistentStoreCoordinatorオプションに渡す必要があります。これは3つのバージョンの3つの異なるオプションか、3つのNSPersistentStoreCoordinator(iphone/lite/ipad)すべてに同じcontainer-idを渡しますか?つまり、3つのコンテナが自動的に同期されるか、3つのコンテナで1つのコンテナを選択して共有する必要がありますか? – user826955

1

あなたはおそらく今では、この問題を解決しましたが、答えはあなただけのすべてのアプリケーションで同じユビキタスコンテナ識別子を使用することです。あなたは一つだけを必要とし、それがアプリ名に依存しない:Appleはあなたが使用するように言わ気づかない「[teamid] .COMを[自分] "[teamid] .COM [自分]を[somenameの]。。"。。 [appname] " 「アプリ名」ではなく、アプリ間で一貫性のある「何らかの名前」を使用します。 (それはあなたが望むものであれば)

+0

情報ありがとうございます。私は実際にiCloud同期をあきらめました。多くの開発者がまだcoredata/icloudを使って同期の問題に直面していることがわかりました。私はもう一度試してみるつもりはないが、私がしたら、あなたのアドバイスを覚えているだろう。 – user826955

+0

私は、同じようなアプリがそれらの間にユーザ作成のドキュメントを共有するように、実際にその方向に進むことにします。 – Kuoni

関連する問題