[iOS] ファイルの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より抜粋)
let bookmarkdata = try? url.bookmarkData()
var bookmarkdataisstale = false
var documentURL = try? URL(resolvingBookmarkData: bookmarkData,
bookmarkDataIsStale: &bookmarkDataIsStale)
参考文献
- https://developer.apple.com/videos/play/wwdc2018/216/
- 35:00~で今回のテーマが扱われている