ユーザーがiCloud Drive経由でファイルをインポートおよびエクスポートできるiCloud対応アプリを開発しています。(iOS 8) または Finder (OS X Yosemite)を使用して iCloud DriveUIDocumentPickerViewController
を参照すると、Automator、Keynote、TextEdit などの他の iCloud-Drive 対応アプリによって作成/所有されているディレクトリが表示されます。
私たちのアプリがどこにでもあるドキュメント ディレクトリを iCloud Drive にも公開するようにしたいのですが、まだ解決できていません。前述のアプリのInfo.plist
ファイルのいくつかの中で、次のキーを発見しました。
<key>NSUbiquitousContainers</key>
<dict>
<key>com.apple.TextEdit</key>
<dict>
<key>NSUbiquitousContainerIsDocumentScopePublic</key>
<true/>
<key>NSUbiquitousContainerSupportedFolderLevels</key>
<string>Any</string>
</dict>
</dict>
これらのキーはここにも文書化されていますが、より広範な主題に関する他の文書は見つかりませんでした。編集/注:私の質問に対する回答は含まれていませんが、ドキュメント ピッカー プログラミング ガイドは役立つリソースです。
上記のキー/値をアプリに追加しようとしましたが、効果がありませんでした。私が気づいた/試したこと:
サード パーティ製アプリの場合、iCloud コンテナーは次のように構成されます
iCloud.$(CFBundleIdentifier)
。iCloud.
TextEdit が純粋なバンドル識別子のみを使用する理由はわかりませんが、識別子については、接頭辞を付けた場合と付けない場合の両方の方法を試しました。iCloud.$(CFBundleIdentifier)
また、ビルド時に PLIST の値のみが解決され、キーは解決されないように見えるため、バンドル識別子をハードコーディングする (つまり、 を使用しない) 必要があることも認識しています。サブディレクトリをプログラムで (に
<containerPath>/Documents
) 追加したので、コンテナーは空ではありません。ただし、他のすべてのアプリのディレクトリも最初は空だったので、これは問題ではありません。Info.plist
iCloud Drive に表示される一部の Apple アプリでは、Numbers や Pages などにこれらのエントリがありません。iCloud は正しく設定されており、 によって返された URL を使用して、ユビキタス コンテナーをプログラムで調べることができます
[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
。iCloud Drive が有効になっている iCloud アカウントにログインしています。で iCloud Drive のコンテンツを確認できます
UIDocumentPickerViewController
。私は iOS 8 ベータ 5 シミュレーター (および Yosemite ベータ 5 を使用して Mac で iCloud Drive ディレクトリを表示) を使用しています (編集/注:これはベータ 6 にも同様に適用されます) 。
これは私の権利ファイルがどのように見えるかです(関連部分のみ)
<key>com.apple.developer.icloud-container-identifiers</key>
<array>
<string>iCloud.$(CFBundleIdentifier)</string>
</array>
<key>com.apple.developer.icloud-services</key>
<array>
<string>CloudDocuments</string>
</array>
<key>com.apple.developer.ubiquity-container-identifiers</key>
<array/>
Capabilities セクションで Xcode の UI を使用してこれを設定しました。最後のキーにエントリがない理由はわかりませんが、追加<string>iCloud.$(CFBundleIdentifier)</string>
しても役に立ちません。代わりに、Capabilities UI で Xcode が不平を言うので、削除しました。編集/注: Xcode ベータ 6 では、これは修正されています。つまり、ユビキタス コンテナー識別子を設定する必要があり、Xcode がそれを修正できます。
元の質問:それで... バグですか? まだ機能しませんか?私はそれを間違っていますか?リリース ノートで既知の問題を見つけることができませんでした。
編集:
私が試した2つのこと:
NSUbiquitousContainerName
Erikmitk の提案に従って、コンテナ固有の辞書に(オプションの)キー (+ 値) を追加します。WWDC サンプル アプリの 1 つ(NewBox を探します)
NSUbiquitousContainerIsDocumentScopePublic
で行われているように、コンテナー固有のディクショナリではなく、キー/値のみを PLIST ルート ディクショナリに追加します。