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) } }