NSCocoaErrorDomain Code = 257 файл не может быть открыт, потому что у вас нет разрешения на его просмотр: FileManager attributesOfItem возвращает nil в iOS13

FileManager возвращает ошибку разрешения при попытке получить размер файла на устройствах 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)")
}

Возвращена ошибка:

Error Domain = NSCocoaErrorDomain Code = 257 «Не удалось открыть файл trim.1A9FFC19-EE2C-438A-BF3D-97E05A97EF9E.MOV, потому что у вас нет разрешения на его просмотр». UserInfo = {NSFilePath = / частный / вар / мобильный / Контейнеры / Data / PluginKitPlugin / ADB8684E-12B5-451D-A20F-158B899BB3DD / TMP / trim.1A9FFC19-EE2C-438A-BF3D-97E05A97EF9E.MOV, NSUnderlyingError = 0x280af0510 {Ошибка домена = NSPOSIXErrorDomain Code = 1 «Операция запрещена»}}

Проблема возникла только после того, как я обновился до iOS 13. В более ранних версиях все работает нормально.


person manukv    schedule 24.09.2019    source источник
comment
моя загрузка s3 не работает, бросая ту же проблему. Я искал проблему в течение нескольких дней. попробовал url.startAccessingSecurityScopedResource () url.stopAccessingSecurityScopedResource (), решения пока нет   -  person Vijay    schedule 01.10.2019


Ответы (1)


iOS 13 SDK рассматривает приложение для фотографий как другое приложение, поэтому, когда мы отклоняем URL-адрес контроллера средства выбора изображений, URL-адрес видео станет недействительным.

У меня была проблема раньше, когда я пытался загрузить видео в AWS, я просто создал временную папку и скопировал существующий путь URL-адреса видео, прежде чем закрыть 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)
              }

   }
person Subin    schedule 30.10.2019