Swift — Импорт и открытие пользовательских расширений файлов

#ios #swift #file #import #file-extension

#iOS #swift #файл #импорт #расширение файла

Вопрос:

Мне нужно открыть пользовательский файл в приложении, которое я создаю, но я не уверен, как это сделать. Импортированный файл содержит только папки внутри него, которые содержат список

например, fileName.customExtension/name uuid/name.plist

если я открою пользовательский файл, скопируйте и вставьте другую папку «name uuid» в обычную папку, которую затем импортирую в приложение, она работает нормально.

например, fileName /name uuid/name.plist

Итак, как я могу импортировать папку с пользовательским расширением непосредственно в приложение?

Я написал приведенный ниже код на случай, если пользовательский файл в данный момент добавлен в приложение для тестирования, но он не работает, поскольку я предполагаю, что я не конвертирую расширение в обычную папку, а вместо этого просто удаляю его.

функция loadImportedFiles(){

     var fileName: String = ""
    let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    do {
        let fileUrls = try FileManager.default.contentsOfDirectory(at: documentsDirectoryURL, includingPropertiesForKeys: nil)
        for plist in fileUrls {
            let path: String = plist.path
            let file = URL(fileURLWithPath: path).lastPathComponent

            if file.contains(".CustomExtension"){
                fileName = URL(fileURLWithPath: path).deletingPathExtension().lastPathComponent
            }
        }
    } catch {
        print("error path")
    }

    var objCBool: ObjCBool = true
    let mainPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0];
    let folderPath = mainPath   "/Folder/(fileName)"

    let isExist = FileManager.default.fileExists(atPath: folderPath, isDirectory: amp;objCBool)
    if !isExist {
        do {
            try FileManager.default.createDirectory(atPath: folderPath, withIntermediateDirectories: true, attributes: nil)
        } catch {
            print(error)
        }
    }


    let originalDataFilePath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("(fileName).CustomExtension")
    let newDestinationPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("Folder/(fileName)")

    do { try FileManager.default.moveItem(at: originalDataFilePath!, to: newDestinationPath!)
        print("imported")
    } catch {
        print(error)
    }


}
  

Если бы кто-нибудь мог направить меня в правильном направлении, это было бы большое спасибо!

Ответ №1:

Решение заключается в использовании пользовательских типов файлов в списке Info. Вам нужно будет добавить «UTI экспортируемого типа» и «Типы документов» в информационный список. Затем ваши пользовательские файлы будут распознаны.

Ниже приведен учебник, который я использовал для его реализации.

https://chariotsolutions.com/blog/post/importing-data-via-custom-file-types-in/