Flutter: Verständnis von Dateien außerhalb von App -Verzeichnissen verstehen
Posted: 03 Apr 2025, 09:47
Ich erstelle gerade eine Anwendung, in der ich Dateien mit einer benutzerdefinierten Erweiterung (aber XML -Inhalt) mit meiner App öffnen möchte. Für iOS habe ich das Problem, dass ich PathaccessException erhalte, um die Datei zu öffnen, wenn die App geschlossen ist. Wenn Sie jedoch im Hintergrund ausgeführt werden, funktioniert es gut. Ich greife auch auf die URL in beide Richtungen über Start AccesssingSesingSecurityScopedResource und StopAccessingSecurityScopedResource zu, wenn der Auftrag erledigt ist. Außerdem ist es verwirrend, dass es funktioniert, wenn die Anwendung im Hintergrund geöffnet ist, jedoch nicht im Start. Aber es sollte auch auf APAPRAUCH funktionieren.
Code: Select all
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool {
setupEventChannel()
if let options = launchOptions, let url = options[.url] as? URL, url.isFileURL {
pendingFilePath = handleFileUrl(url: url)
}
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions:launchOptions)
}
private func handleFileUrl(url: URL) -> String {
var filePath: String
let securityGranted = url.startAccessingSecurityScopedResource()
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileName = url.lastPathComponent
let destinationURL = documentsDirectory.appendingPathComponent(fileName)
do {
if FileManager.default.fileExists(atPath: destinationURL.path) {
try FileManager.default.removeItem(at: destinationURL)
}
try FileManager.default.copyItem(at: url, to: destinationURL)
filePath = destinationURL.path
} catch {
filePath = url.path
}
if securityGranted {
url.stopAccessingSecurityScopedResource()
}
return filePath
}