web-dev-qa-db-ja.com

NSCocoaErrorDomain Code = 257ファイルを表示する権限がないため、ファイルを開くことができませんでした:iOS13ではFileManager attributesOfItemがnilを返します

IOS 13デバイスで、ファイルサイズを取得しようとするとFileManagerが権限エラーを返します。

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

返されたエラー:

エラードメイン= NSCocoaErrorDomainコード= 257「ファイル "trim.1A9FFC19-EE2C-438A-BF3D-97E05A97EF9E.MOV」は、表示する権限がないため、開くことができませんでした。」 UserInfo = {NSFilePath =/private/var/mobile/Containers/Data/PluginKitPlugin/ADB8684E-12B5-451D-A20F-158B899BB3DD/tmp/trim.1A9FFC19-EE2C-438A-BF3D-97E05A97EF9E.MOV、NSUnderlyingError = 0x = NSPOSIXErrorDomain Code = 1 "操作は許可されていません"}}

この問題は、iOS 13にアップデートした後にのみ発生しました。以前のバージョンでは、すべてが正常に機能しています。

8
manukv

iOS 13 SDKは写真アプリを別のアプリと見なすため、イメージピッカーコントローラーを閉じると、ビデオの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)
              }

   }
2
Subin