Zipper
is a library to create, read and modify ZIP archive files, written in Swift.
- iOS 9.0+
- macOS 10.11+
- tvOS 9.0+
- watchOS 2.0+
- Linux (with
zlib
) - Xcode 8.0+
- Swift 3.0+
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
target 'YOUR_TARGET_NAME' do
pod 'Zipper'
end
You are welcome to fork and submit pull requests.
Zipper
is released under the MIT
License.
let fileManager = FileManager()
let currentDirectoryURL = URL(fileURLWithPath: fileManager.currentDirectoryPath)
var archiveURL = currentDirectoryURL.appendPathComponent("archive.zip")
var resourcesURL = currentDirectoryURL.appendPathComponent("directory")
// zip:
do {
try fileManager.zip(item: resourcesURL, to: archive)
} catch _ {}
// or:
guard let archive = Zipper(url: archiveURL, accessMode: .create) else { return }
do {
try archive.zip(item: resourcesURL)
} catch _ {}
var archiveURL = currentDirectoryURL.appendPathComponent("archive.zip")
var destinationURL = currentDirectoryURL.appendPathComponent("directory")
// unzip:
do {
try fileManager.createDirectory(at: destinationURL, withIntermediateDirectories: true, attributes: nil)
try fileManager.unzip(item: archiveURL, to: destinationURL)
} catch _ {}
// or:
guard let archive = Zipper(url: archiveURL, accessMode: .read) else { return }
do {
try archive.unzip(to: destinationURL)
} catch _ {}
var archiveURL = currentDirectoryURL.appendPathComponent("archive.zip")
guard let archive = Zipper(url: archiveURL, accessMode: .read) else { return }
guard let entry = archive["file.txt"] else { return }
var destinationURL = currentDirectoryURL.appendPathComponent("output.txt")
do {
try archive.extract(entry, to: destinationURL)
} catch {}
var archiveURL = currentDirectoryURL.appendPathComponent("archive.zip")
var fileURL = currentDirectoryURL.appendPathComponent("file.ext")
Adding:
guard let archive = Zipper(url: archiveURL, accessMode: .update) else { return }
do {
try archive.addEntry(with: fileURL.lastPathComponent, relativeTo: fileURL.deletingLastPathComponent())
} catch {}
Removing:
guard let entry = archive["file.txt"] else { return }
do {
try archive.remove(entry)
} catch {}