3

iOSとMacの両方のAppleプラットフォームで動作するiCloudベースのアプリを作成したいと思います。アプリはiOSのUIDocumentとMacのNSDocumentを使用して、ドキュメントベースの同期モデルを作成します。iOSで作成されたドキュメントはMacで利用でき、その逆も同様です。

私が直面している特定の問題は、両方のアプリで同じiCloudコンテナが必要なことです。XCodeは、アプリIDに基づいてアプリのデフォルトコンテナを作成します。これはAppleの要件のようであるため、両方のアプリで異なる必要があります。2つのアプリが異なるプラットフォーム上にある場合でも、同じアプリIDを持つことはできません。

そこで、デフォルトで作成されたコンテナーをそのままにして、MacアプリとiOSアプリの両方に別のコンテナーを追加しました。アプリ正常に動作しているようです。両方のアプリの正しい場所に新しいファイルパッケージを作成できますが、2つの問題があります。

  1. コンテナがiCloud設定管理画面に正しく表示されません。XCodeの資格セクションでcom.mycompany.myapp.mycontainer、両方のアプリと同じようにコンテナーに名前を付けました。iOSの設定画面([設定]->[一般]->[使用法]->[ストレージの管理]->[すべて表示])で、アプリの実際の名前ではなく、「mycontainer」と表示されます。アプリのInfo.plistに名前とアイコンを指定して、正しくリストすることはできますか?

  2. NSMetadataQueryが正しく機能していません。空のアプリケーションテンプレートを使用してiOSアプリを作成したため、Info.plistがCFBundleDocumentTypesキーで適切に設定されていませんでしたが、それを理解して修正しました。iOSアプリでNSMetadataQueryを起動するために、次を使用しています。

    [self.queryCloud setPredicate:[NSPredicate predicateWithFormat:@"%K like '*.myextension*'",NSMetadataItemFSNameKey]];

    検索範囲を次のように設定します。

    [self.queryCloud setSearchScopes:[NSArray arrayWithObjects:NSMetadataQueryUbiquitousDocumentsScope, NSMetadataQueryUbiquitousDataScope, nil]];

コンテナのURLを確立した後にクエリを実行すると、通知の収集が開始および終了しますが、からの更新通知は取得されませんNSMetadataQuery。先に進んで新しいドキュメントを作成しない限り。ドキュメントを作成すると、更新の通知が届きますが、そのセッションでのみ発生します。次回アプリを起動したときに、同じ設定でからの更新通知が表示されませんNSMetadataQuery

私は何が間違っているのですか?MacとiOSの両方を対象としたiCloudドキュメントアプリの作成に関する記事へのポインタをいただければ幸いです。提案、考えは大歓迎です。

4

1 に答える 1

6

あなたの NSMetadataQuery の問題についてはわかりませんが、共有の iCloud コンテナーを追加するのは簡単です。

  1. 共有クラウド コンテナーとなるアプリ ID を 1 つ選択します。iOS か Mac OS X かに関係なく、このアプリを公開する必要があり、iCloud コンテナーを他のアプリで使用できるようにするには、Apple レビュー チーム* から承認を受ける必要があります。例えば

     com.company.myawesomeapp
    
  2. アプリ ID ( com.company.myawesomeapp .cloudcontainer ) の後にコンテナー名を使用しないでください。appID のみを使用してください。

  3. 2 つ目のアプリ ID を選択し (実際には関係ありません)、2 つ目のアプリを作成します。Xcode を開き、機能ペインで iCloud を有効にします。次に、「iCloud Container Identifiers」の下に、最初の (公開および承認された) アプリの識別子を追加します。

     com.company.myawesomeapp
    

それでおしまい!この 1 つのキャッチだけがあり、それが結論です。

コンテナを使用するには、アプリが利用可能で承認されている必要があります。技術的には、アプリが承認されるとすぐにコンテナーが存在するため、承認されるまで他のアプリはコンテナーにアクセスできません。実際には、AppStore で入手可能である必要はありません。承認される必要があります (開発者が保持するリリースである可能性があります)。

アプリが公開され、承認されている場合にのみ、(共有) iCloud コンテナーを使用できます。

于 2014-03-05T14:52:12.467 に答える