SwiftUI UIDocumentPickerViewControllerで選択したファイルがアプリ内フォルダにあるのか確認

SwiftUIでUIDocumentPickerViewControllerで選択したファイルがアプリ内フォルダにあるのか確認

外部フォルダであれば内部にコピーして使うことを考えていた。
アプリ内部フォルダであればコピーは不要。

選択したファイルがアプリ内フォルダにあるのか確認

アプリフォルダを取得、選択したファイルURLに含まれるか確認する。

let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
if urls[0].absoluteString.contains(documentsPath) == true {
    print("My App Folder")
}

Example documentPicker(_:didPickDocumentsAt:)

extension UIDocumentPickerViewControllerView: UIDocumentPickerDelegate {
    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
        guard urls.count != 0 else {
            return
        }
        print(#function)
        print(urls.debugDescription)
        print(urls[0].lastPathComponent)

        let fileManager = FileManager.default
        let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
        
        print(documentsPath)

        let filePath = documentsPath + "/" + urls[0].lastPathComponent
            
        if urls[0].absoluteString.contains(documentsPath) == true {
            print("My App Folder")
            let _ = urls[0].startAccessingSecurityScopedResource()
            RrfillCalendarApp.refillData.refillImage = UIImage(contentsOfFile: filePath)
            let _ = urls[0].stopAccessingSecurityScopedResource()
        }
        else {
            if fileManager.fileExists(atPath: urls[0].absoluteString) == false {
                let _ = urls[0].startAccessingSecurityScopedResource()
                do {
                    try fileManager.copyItem(at: urls[0], to: URL(fileURLWithPath: filePath))
                    RrfillCalendarApp.refillData.refillImage = UIImage(contentsOfFile: filePath)
                    print(filePath)
                }
                catch let error {
                    print(error)
                }
                let _ = urls[0].stopAccessingSecurityScopedResource()
            }
        }
    }
}

SwiftSwift,SwiftUI

Posted by shi-n