SwiftUI UIDocumentPickerViewControllerで選択したファイルをアプリフォルダにコピーする
SwiftUIでUIDocumentPickerViewControllerで選択したファイルをアプリフォルダにコピーする
Point
- startAccessingSecurityScopedResource()
import SwiftUI
import UIKit
import UniformTypeIdentifiers
final class UIDocumentPickerViewControllerView: NSObject, UIViewControllerRepresentable {
@EnvironmentObject var refillData: RefillData
func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [UTType.jpeg, UTType.png])
documentPicker.delegate = self
return documentPicker
}
func updateUIViewController(_ controller: UIDocumentPickerViewController, context: Context) {
print(#function)
}
}
extension UIDocumentPickerViewControllerView: UIDocumentPickerDelegate {
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard urls.count != 0 else {
return
}
if fileManager.fileExists(atPath: urls[0].absoluteString) == false {
let _ = urls[0].startAccessingSecurityScopedResource()
do {
try fileManager.copyItem(at: urls[0], to: URL(fileURLWithPath: filePath))
}
catch let error {
print(error)
}
let _ = urls[0].stopAccessingSecurityScopedResource()
}
}
}
使用する側Example
:
:
}
.sheet(isPresented: self.$onDocumentPicker, onDismiss: {}, content: {
UIDocumentPickerViewControllerView()
})




