Создайте zip — файл без сторонних библиотек и родительского каталога в swift

#ios #swift #zip

Вопрос:

Мне нужно создать простой zip-файл с файлами, включенными без родительского каталога в swift.

Я нашел хорошее решение у Робина Кунде https://recoursive.com/2021/02/25/create_zip_archive_using_only_foundation/ но у файлов есть родительский каталог в zip-файле.

Поэтому, когда вы распаковываете файлы, появляется каталог с именем, например «Документы». Мне не нужно реальное сжатие или другие функции zip. Наш серверный сервер проверяет содержимое, и папка должна быть удалена.

Я не думаю, что это возможно даже без библиотеки C 🙁

Я попытался декодировать ZIP-файл в UTF-8, удалить имена папок и сохранить данные в файл. Файл был поврежден.

 let fm = FileManager.default
    let baseDirectoryUrl = fm.urls(for: .documentDirectory, in: .userDomainMask).first!

    let data = try! Data(contentsOf: baseDirectoryUrl.appendingPathComponent("archive.zip"))
    let str = String(decoding: data, as: UTF8.self)

    let newstr = str.replacingOccurrences(of: "Documents/", with: "")

    do {
        try newstr.write(to: baseDirectoryUrl.appendingPathComponent("archive_without_parent_name.zip"), atomically: true, encoding: .utf8)
    } catch {
        print(error.localizedDescription)
    }