web-dev-qa-db-fra.com

Impossible d'ouvrir le fichier NSCocoaErrorDomain Code = 257 car vous n'êtes pas autorisé à le visualiser: FileManager attributesOfItem renvoie zéro dans iOS13

FileManager renvoie une erreur d'autorisation lors de la tentative d'obtention de la taille du fichier, sur les appareils iOS 13.

do {
    let attr = try FileManager.default.attributesOfItem(atPath: my_file_path) //--> Getting nil
    fileSize = attr[FileAttributeKey.size] as! UInt64
} catch {
    print("Error: \(error)")
}

Erreur renvoyée:

Domaine d'erreur = NSCocoaErrorDomain Code = 257 "Le fichier" trim.1A9FFC19-EE2C-438A-BF3D-97E05A97EF9E.MOV "n'a pas pu être ouvert car vous n'êtes pas autorisé à le consulter." UserInfo = {NSFilePath =/private/var/mobile/Containers/Data/PluginKitPlugin/ADB8684E-12B5-451D-A20F-158B899BB3DD/tmp/trim. = NSPOSIXErrorDomain Code = 1 "Opération non autorisée"}}

Le problème n'a été observé qu'après la mise à jour vers iOS 13. Dans les versions antérieures, tout fonctionnait bien.

8
manukv

le SDK iOS 13 considère l'application photo comme une autre application, donc lorsque nous rejetons l'URL vidéo du contrôleur du sélecteur d'images, elle sera invalidée.

J'ai eu le problème avant lorsque j'essaie de télécharger une vidéo sur AWS, ce que j'ai fait juste créer un dossier temporaire et copier le chemin d'URL vidéo existant avant de fermer l'Image-picker.

    func createDirectory(videoURL:URL){
            let Directorypath = getDirectoryPath()
            var objcBool:ObjCBool = true
            let isExist =  FileManager.default.fileExists(atPath:Directorypath,isDirectory: &objcBool)
            // If the folder with the given path doesn't exist already, create it
            if isExist == false{
                do{
                    try FileManager.default.createDirectory(atPath: Directorypath, withIntermediateDirectories: true, attributes: nil)
                }catch{

                    print("Something went wrong while creating a new folder")
                }
            }
            let fileManager = FileManager()

            do {
                if fileManager.fileExists(atPath:Directorypath) {
                    try? fileManager.removeItem(at: URL(fileURLWithPath:Directorypath))
                }
                try fileManager.copyItem(at:videoURL.absoluteURL, to: URL(fileURLWithPath:Directorypath))

                 self.imagePicker.dismiss(animated: true, completion:nil)
              }catch let error {
                              print(error.localizedDescription)
              }

   }
2
Subin