LibzipSwift is a framework suite based on Libzip package for decompressing zip on macOS and iOS.
LibzipSwift is a separate branch based on SwiftLibZip, It provides the following functions via Libzip:
- Enumerate the list of archives in the zip, including the summary attributes (which optimizes the recognition of Chinese encoding)
- Create and modify Zip archives (including deletion and replacement)
- Unzip the Zip archive (for Unix Zip archives, retain Entry's permission attributes)
Once you have your Swift package set up, adding LibzipSwift as a dependency is as easy as adding it to the dependencies value of your Package.swift.
dependencies: [
.package(url: "https://github.com/MartinLau7/LibzipSwift.git", from: "0.1")
]
Open and read
do {
let archive = try ZipArchive(url: newarchiveURL)
defer {
try archive.close()
}
if let entries = try? zipArchive.getEntries() {
// check the entries
}
// You can modify and add entries in here
...
} catch {
// Handle errors here
print("\(Handle errors here)")
}
create zip archive
do {
let archive = try ZipArchive(url: newarchiveURL, mode: [.create, .checkConsistency])
defer {
try archive.close()
}
try archive.addDirectory(dirName: "the folder")
try archive.addFile(path: "/xx/xx/you.file", entryName: "entry name is Optional param") >= 0)
} catch {
// Handle errors here
print("\(Handle errors here)")
}
When you want to undo the changes, you can add discardChanged: false to the close method. like :
try archive.close(discardChanged: false)
If you have questions, you can promptly make or contribute to the code of this project, thanks
-
Complete compression function -
Improved iOS support
-
Preserve more attributes for zip archives on unix
-
Improve unit testing
-
more
-
LibzipSwift : See LICENSE (MIT)
-
Libzip: See Libzip website