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
保存
1 2 3 4 5 6 7 8 9 | 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 ) } |
読み出し
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 ) } } |