1

アプリの iCloud ディレクトリに保存されているセキュリティ スコープのブックマークがあり、iCloud にも保存されているファイルを指しているので、ブックマークとファイルはアプリを再インストールした後でも利用できます。今度は、同じ iCloud アカウントを使用して同期された、別のデバイスのブックマークとファイルにアクセスしたいと思います。

別のデバイスで作成されたブックマークを介してそのようなファイルにアクセスすることはできますか? Apple のドキュメンテーションは、そのトピックについて把握するのが難しいです。ドキュメントには次のように記載されています。

アプリ スコープのブックマークの場合、ブックマークを作成したアプリ以外のサンドボックス化されたアプリは、(ブックマークから取得した) URL が指すファイル システム リソースへのアクセスを取得できません。具体的には、ブックマークを作成した呼び出し元と同じコード署名 ID を呼び出し元が持っていない場合、セキュリティ スコープで作成されたブックマークの解決に失敗します。

ドキュメント スコープのブックマークの場合、ブックマーク データ自体にアクセスでき、ブックマークを所有するドキュメントにアクセスできるサンドボックス化されたアプリは、リソースへのアクセスを取得できます。

ドキュメントスコープのブックマークを作成したいのですが、これまでの試みはすべてエラーで終わります。ドキュメント スコープのブックマークは macOS のみに予約されており、iOS では使用できませんか?

アップデート

次のコードを使用してブックマークを保存しています。

let bookmarkData = try url.bookmarkData(options: .minimalBookmark, includingResourceValuesForKeys: nil, relativeTo: nil)
try bookmarkData.write(to: bookmarkUrl)

url は UIDocumentBrowserViewController によって返され (そして、既にダウンロードされて利用可能な iCloud ファイルを指します)、bookmarkUrl は iCloud アプリ ディレクトリのブックマークの場所を指します。次に、コードを使用してそれを読み取ります。

let bookmarkData = try Data(contentsOf: bookmarkUrl)
var isStale = false
let url = try URL(resolvingBookmarkData: bookmarkData, bookmarkDataIsStale: &isStale)

iOS 13.6 を実行している同じデバイスにアプリを再インストールする間は問題なく動作します。iOS 14.4 を実行している他のデバイスでは、アプリを再インストールした後でも、最後の行でエラーが発生します。

Error Domain=NSCocoaErrorDomain Code=257 "The file couldn’t be opened because you don’t have permission to view it."

新しい iOS 14 パーミッション ルールに関連する何かが欠けているようです。また、一方の電話で作成されたブックマークはもう一方の電話でアクセスできますが、ブックマークからリソース URL を解決しようとすると、次のエラーで終了します。

Error Domain=NSCocoaErrorDomain Code=4 "The file doesn’t exist."
4

0 に答える 0