iOSとMacの両方のAppleプラットフォームで動作するiCloudベースのアプリを作成したいと思います。アプリはiOSのUIDocumentとMacのNSDocumentを使用して、ドキュメントベースの同期モデルを作成します。iOSで作成されたドキュメントはMacで利用でき、その逆も同様です。
私が直面している特定の問題は、両方のアプリで同じiCloudコンテナが必要なことです。XCodeは、アプリIDに基づいてアプリのデフォルトコンテナを作成します。これはAppleの要件のようであるため、両方のアプリで異なる必要があります。2つのアプリが異なるプラットフォーム上にある場合でも、同じアプリIDを持つことはできません。
そこで、デフォルトで作成されたコンテナーをそのままにして、MacアプリとiOSアプリの両方に別のコンテナーを追加しました。アプリは正常に動作しているようです。両方のアプリの正しい場所に新しいファイルパッケージを作成できますが、2つの問題があります。
コンテナがiCloud設定管理画面に正しく表示されません。XCodeの資格セクションで
com.mycompany.myapp.mycontainer
、両方のアプリと同じようにコンテナーに名前を付けました。iOSの設定画面([設定]->[一般]->[使用法]->[ストレージの管理]->[すべて表示])で、アプリの実際の名前ではなく、「mycontainer」と表示されます。アプリのInfo.plistに名前とアイコンを指定して、正しくリストすることはできますか?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ドキュメントアプリの作成に関する記事へのポインタをいただければ幸いです。提案、考えは大歓迎です。