当使用UIDocumentPickerViewController时,是否需要额外的功能、权限或沙箱配置?我错过了警告吗?
使用催化剂在macOS (11.4)上运行以下代码,在选择文件时永远不会调用didPickDocumentsAt:委托函数。但是,如果选择器被拒绝或尝试打开文件,则会调用documentPickerWasCancelled。
我最初怀疑由于SwiftUI的View娱乐而导致的不正确的内容类型或委托取消分配,但由于as cancel被调用,我怀疑没有。
确定的一个警告是,asCopy在为macOS配置UIDocumentPickerViewController时必须是macOS,而为iOS配置true时必须是true。
此错误指示沙盒权限错误:
DocumentPickerSwiftUI[42570:1472986] Failed to create an FPSandboxingURLWrapper for file:///Users/ed/test_file.txt. Error: Error Domain=NSPOSIXErrorDomain Code=1 "couldn't issue sandbox extension com.apple.app-sandbox.read-write for '/Users/ed/test_file.txt': Operation not permitted" UserInfo={NSDescription=couldn't issue sandbox extension com.apple.app-sandbox.read-write for '/Users/ed/test_file.txt': Operation not permitted}
当前功能配置(用户选择的文件的只读访问):

import SwiftUI
import UIKit
import UniformTypeIdentifiers
struct ContentView: View {
@State var showDocumentPicker: Bool = false
var body: some View {
documentPickerButton
}
private var documentPickerButton: some View {
Button(action: {
showDocumentPicker.toggle()
}, label: {
Text("Open")
})
.sheet(isPresented: self.$showDocumentPicker) {
AudioFilePicker()
}
}
}
final class AudioFilePicker: UIViewControllerRepresentable {
var viewController = UIDocumentPickerViewController(forOpeningContentTypes: [.item], asCopy: false)
class Coordinator: NSObject, UIDocumentPickerDelegate {
var parent: AudioFilePicker
init(parent: AudioFilePicker) {
self.parent = parent
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
print("Picker Loaded: \(String(describing: urls.first?.absoluteString))")
// Do something with URL (never called)
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
print("Picker Cancelled")
}
}
func makeCoordinator() -> Coordinator {
return Coordinator(parent: self)
}
func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
viewController.delegate = context.coordinator
return viewController
}
func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: Context) { }
}发布于 2021-06-28 10:55:12
此错误表示权限错误。试着添加:
<key>com.apple.security.files.user-selected.read-write</key>
<true/>https://stackoverflow.com/questions/68161958
复制相似问题