Swift iCloud上のファイルURLをUserDefaultsに保存
概要
SceneDelegate.scene(_:openURLContexts:)、UIDocumentPickerViewControllerで取得したURLを次回使用したい。
やってしまった誤り
URL自体をUserDefaultsで保存。
読み出し後、ファイルのアクセス許可が取得出来ない。
対応
Apple Development Document
Providing Access to Directoriesの
Save the URL as a Bookmarkに記載されいる。
Example
保存
do {
let url = ★URL SceneDelegate.scene(_:openURLContexts:)で取得、UIDocumentPickerViewControllerで取得等★
let bookmarkData = try url.bookmarkData(options: .minimalBookmark, includingResourceValuesForKeys: nil, relativeTo: nil)
Log.info(bookmarkData.description)
UserDefaults.standard.set(bookmarkData, forKey: "url")
}
catch let error {
print(error.localizedDescription)
}
読み出し
if let urlData = UserDefaults.standard.data(forKey: "url") {
do {
var isStale = false
let url = try URL(resolvingBookmarkData: urlData, bookmarkDataIsStale: &isStale)
if isStale == true {
★異常処理 guardで抜けるとか★
}
print("UserDefaults:\(url)")
}
catch let error {
print(error.localizedDescription)
}
}






