iOS Fileのsecurity scopeについて
理解が怪しい
iOSのアプリはSandboxの中で動作しているため、自らのSandboxの外にあるファイルには通常アクセスできない。
この制限を超えるにはUIDocumentPickerViewControllerやUIDocumentBrowserViewControllerから返されるURLを利用する必要がある。
このURLにはシステムからファイルへの一時アクセス許可が付与されており、url.startAccessingSecurityScopedResource()とurl.stopAccessingSecurityScopedResource()を用いてurlのデータにアクセスすることができる。
ファイルへのアクセス許可はアプリを再起動すると失われるため、URLへ永続的にアクセスするにはurl.bookmarkData()を用いてData型のsecurity scoped bookmarkを取得しておく必要がある。
以下サンプルコード(WWDC2018 Managing Documents In Your iOS Appsより抜粋)
code:swift
let bookmarkdata = try? url.bookmarkData()
var bookmarkdataisstale = false
var documentURL = try? URL(resolvingBookmarkData: bookmarkData,
bookmarkDataIsStale: &bookmarkDataIsStale)
参考文献
35:00~で今回のテーマが扱われている