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






