diff --git a/.spi.yml b/.spi.yml
new file mode 100644
index 00000000..e661bac1
--- /dev/null
+++ b/.spi.yml
@@ -0,0 +1,4 @@
+version: 1
+builder:
+ configs:
+ - documentation_targets: [Zip]
\ No newline at end of file
diff --git a/.swift-version b/.swift-version
deleted file mode 100644
index d346e2ab..00000000
--- a/.swift-version
+++ /dev/null
@@ -1 +0,0 @@
-5.3
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index ea4417a9..00000000
--- a/.travis.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-osx_image: xcode12
-language: swift
-env:
- global:
- - LC_CTYPE=en_US.UTF-8
- - LANG=en_US.UTF-8
-before_install:
- - gem install cocoapods --pre
-install: echo "<3"
-env:
- - MODE=framework
- - MODE=spm
- - MODE=examples
-script: ./build.sh $MODE
-
-# whitelist
-branches:
- only:
- - master
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index a3001854..00000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# Change Log
-
-## [0.3.0](https://github.com/marmelroy/Zip/tree/0.3.0) (2016-03-07)
-[Full Changelog](https://github.com/marmelroy/Zip/compare/0.2.0...0.3.0)
-
-**Closed issues:**
-
-- No Mac platform support [\#6](https://github.com/marmelroy/Zip/issues/6)
-
-## [0.2.0](https://github.com/marmelroy/Zip/tree/0.2.0) (2016-01-27)
-[Full Changelog](https://github.com/marmelroy/Zip/compare/0.1.5...0.2.0)
-
-**Closed issues:**
-
-- iOS SDK Requirement [\#4](https://github.com/marmelroy/Zip/issues/4)
-- Zipping a folder [\#3](https://github.com/marmelroy/Zip/issues/3)
-
-## [0.1.5](https://github.com/marmelroy/Zip/tree/0.1.5) (2016-01-25)
-[Full Changelog](https://github.com/marmelroy/Zip/compare/0.1.4...0.1.5)
-
-**Closed issues:**
-
-- how to adding some new file to current ziped file? [\#2](https://github.com/marmelroy/Zip/issues/2)
-
-## [0.1.4](https://github.com/marmelroy/Zip/tree/0.1.4) (2016-01-19)
-[Full Changelog](https://github.com/marmelroy/Zip/compare/0.1.3...0.1.4)
-
-## [0.1.3](https://github.com/marmelroy/Zip/tree/0.1.3) (2016-01-18)
-[Full Changelog](https://github.com/marmelroy/Zip/compare/0.1.2...0.1.3)
-
-## [0.1.2](https://github.com/marmelroy/Zip/tree/0.1.2) (2016-01-17)
-[Full Changelog](https://github.com/marmelroy/Zip/compare/0.1.0...0.1.2)
-
-## [0.1.0](https://github.com/marmelroy/Zip/tree/0.1.0) (2016-01-17)
-**Closed issues:**
-
-- Images for README [\#1](https://github.com/marmelroy/Zip/issues/1)
-
-
-
-\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
\ No newline at end of file
diff --git a/LinuxMain.swift b/LinuxMain.swift
deleted file mode 100644
index e0a76d08..00000000
--- a/LinuxMain.swift
+++ /dev/null
@@ -1,8 +0,0 @@
-import XCTest
-
-import ZipTests
-
-var tests = [XCTestCaseEntry]()
-tests += ZipTests.__allTests()
-
-XCTMain(tests)
diff --git a/Package.swift b/Package.swift
index fd33704c..3c7a9fac 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1,5 +1,4 @@
-// swift-tools-version:5.1
-// The swift-tools-version declares the minimum version of Swift required to build this package.
+// swift-tools-version:5.8
import PackageDescription
let package = Package(
@@ -10,20 +9,28 @@ let package = Package(
targets: [
.target(
name: "Minizip",
- dependencies: [],
path: "Zip/minizip",
exclude: ["module"],
linkerSettings: [
.linkedLibrary("z")
- ]),
+ ]
+ ),
.target(
name: "Zip",
- dependencies: ["Minizip"],
+ dependencies: [
+ .target(name: "Minizip"),
+ ],
path: "Zip",
- exclude: ["minizip", "zlib"]),
+ exclude: ["minizip", "zlib"]
+ ),
.testTarget(
name: "ZipTests",
- dependencies: ["Zip"],
- path: "ZipTests"),
+ dependencies: [
+ .target(name: "Zip"),
+ ],
+ resources: [
+ .copy("Resources"),
+ ]
+ ),
]
)
diff --git a/Package@swift-4.2.swift b/Package@swift-4.2.swift
deleted file mode 100644
index 6cb1c985..00000000
--- a/Package@swift-4.2.swift
+++ /dev/null
@@ -1,30 +0,0 @@
-// swift-tools-version:4.2
-// The swift-tools-version declares the minimum version of Swift required to build this package.
-import PackageDescription
-
-let package = Package(
- name: "Zip",
- products: [
- .library(name: "Zip", targets: ["Zip"])
- ],
- targets: [
- .systemLibrary(
- name: "CZlib",
- path: "Zip/zlib",
- pkgConfig: "zlib"),
- .target(
- name: "Minizip",
- dependencies: ["CZlib"],
- path: "Zip/minizip",
- exclude: ["module"]),
- .target(
- name: "Zip",
- dependencies: ["Minizip"],
- path: "Zip",
- exclude: ["minizip", "zlib"]),
- .testTarget(
- name: "ZipTests",
- dependencies: ["Zip"],
- path: "ZipTests"),
- ]
-)
diff --git a/Package@swift-5.0.swift b/Package@swift-5.0.swift
deleted file mode 100644
index 03bcf3a5..00000000
--- a/Package@swift-5.0.swift
+++ /dev/null
@@ -1,29 +0,0 @@
-// swift-tools-version:5.0
-// The swift-tools-version declares the minimum version of Swift required to build this package.
-import PackageDescription
-
-let package = Package(
- name: "Zip",
- products: [
- .library(name: "Zip", targets: ["Zip"])
- ],
- targets: [
- .target(
- name: "Minizip",
- dependencies: [],
- path: "Zip/minizip",
- exclude: ["module"],
- linkerSettings: [
- .linkedLibrary("z")
- ]),
- .target(
- name: "Zip",
- dependencies: ["Minizip"],
- path: "Zip",
- exclude: ["minizip", "zlib"]),
- .testTarget(
- name: "ZipTests",
- dependencies: ["Zip"],
- path: "ZipTests"),
- ]
-)
diff --git a/README.md b/README.md
index a5877eb8..677b0857 100644
--- a/README.md
+++ b/README.md
@@ -1,78 +1,78 @@
-![Zip - Zip and unzip files in Swift](https://cloud.githubusercontent.com/assets/889949/12374908/252373d0-bcac-11e5-8ece-6933aeae8222.png)
+
+
+
+A framework for zipping and unzipping files in Swift.
+
+Simple and quick to use.
+Built on top of [minizip](https://github.com/nmoinvaz/minizip).
+
+Use the SPM string to easily include the dependendency in your `Package.swift` file.
-[![Build Status](https://travis-ci.org/marmelroy/Zip.svg?branch=master)](https://travis-ci.org/marmelroy/Zip) [![Version](http://img.shields.io/cocoapods/v/Zip.svg)](http://cocoapods.org/?q=Zip) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![SPM supported](https://img.shields.io/badge/SPM-supported-brightgreen.svg?style=flat)](https://swift.org/package-manager)
-
-
-# Zip
-A Swift framework for zipping and unzipping files. Simple and quick to use. Built on top of [minizip](https://github.com/nmoinvaz/minizip).
+```swift
+.package(url: "https://github.com/vapor-community/Zip.git", from: "2.1.3")
+```
## Usage
-Import Zip at the top of the Swift file.
+### Quick functions
+
+The easiest way to use Zip is through quick functions. Both take local file paths as `URL`s, throw if an error is encountered and return an `URL` to the destination if successful.
```swift
import Zip
-```
-
-## Quick functions
-The easiest way to use Zip is through quick functions. Both take local file paths as NSURLs, throw if an error is encountered and return an NSURL to the destination if successful.
-```swift
do {
- let filePath = Bundle.main.url(forResource: "file", withExtension: "zip")!
- let unzipDirectory = try Zip.quickUnzipFile(filePath) // Unzip
- let zipFilePath = try Zip.quickZipFiles([filePath], fileName: "archive") // Zip
-}
-catch {
+ let filePath = Bundle.main.url(forResource: "file", withExtension: "zip")!
+ let unzipDirectory = try Zip.quickUnzipFile(filePath)
+ let zipFilePath = try Zip.quickZipFiles([filePath], fileName: "archive")
+} catch {
print("Something went wrong")
}
```
-## Advanced Zip
+### Advanced Zip
-For more advanced usage, Zip has functions that let you set custom destination paths, work with password protected zips and use a progress handling closure. These functions throw if there is an error but don't return.
-```swift
-do {
- let filePath = Bundle.main.url(forResource: "file", withExtension: "zip")!
- let documentsDirectory = FileManager.default.urls(for:.documentDirectory, in: .userDomainMask)[0]
- try Zip.unzipFile(filePath, destination: documentsDirectory, overwrite: true, password: "password", progress: { (progress) -> () in
- print(progress)
- }) // Unzip
+For more advanced usage, Zip has functions that let you set custom destination paths, work with password protected zips and use a progress handling closure. These functions throw if there is an error but don't return.
- let zipFilePath = documentsFolder.appendingPathComponent("archive.zip")
- try Zip.zipFiles([filePath], zipFilePath: zipFilePath, password: "password", progress: { (progress) -> () in
- print(progress)
- }) //Zip
+```swift
+import Zip
-}
-catch {
+do {
+ let filePath = Bundle.main.url(forResource: "file", withExtension: "zip")!
+ let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
+ try Zip.unzipFile(filePath, destination: documentsDirectory, overwrite: true,password: "password", progress: { (progress) -> () in
+ print(progress)
+ })
+
+ let zipFilePath = documentsFolder.appendingPathComponent("archive.zip")
+ try Zip.zipFiles([filePath], zipFilePath: zipFilePath, password: "password", progress: { (progress) -> () in
+ print(progress)
+ })
+} catch {
print("Something went wrong")
}
```
-## Custom File Extensions
+### Custom File Extensions
-Zip supports '.zip' and '.cbz' files out of the box. To support additional zip-derivative file extensions:
-```swift
-Zip.addCustomFileExtension("file-extension-here")
-```
+Zip supports `.zip` and `.cbz` files out of the box. To support additional zip-derivative file extensions:
-### [Preferred] Setting up with [Swift Package Manager](https://swift.org/package-manager)
-To use Zip with Swift Package Manager, add it to your package's dependencies:
```swift
-.package(url: "https://github.com/marmelroy/Zip.git", .upToNextMinor(from: "2.1"))
-```
-
-### Setting up with [CocoaPods](http://cocoapods.org/?q=Zip)
-```ruby
-source 'https://github.com/CocoaPods/Specs.git'
-pod 'Zip', '~> 2.1'
-```
-
-### Setting up with [Carthage](https://github.com/Carthage/Carthage)
-To integrate Zip into your Xcode project using Carthage, specify it in your `Cartfile`:
-
-```ogdl
-github "marmelroy/Zip" ~> 2.1
+Zip.addCustomFileExtension("file-extension-here")
```
-
diff --git a/ZipTests/Resources/3crBXeO.gif b/Tests/ZipTests/Resources/3crBXeO.gif
similarity index 100%
rename from ZipTests/Resources/3crBXeO.gif
rename to Tests/ZipTests/Resources/3crBXeO.gif
diff --git a/ZipTests/Resources/bb8.zip b/Tests/ZipTests/Resources/bb8.zip
similarity index 100%
rename from ZipTests/Resources/bb8.zip
rename to Tests/ZipTests/Resources/bb8.zip
diff --git a/ZipTests/Resources/kYkLkPf.gif b/Tests/ZipTests/Resources/kYkLkPf.gif
similarity index 100%
rename from ZipTests/Resources/kYkLkPf.gif
rename to Tests/ZipTests/Resources/kYkLkPf.gif
diff --git a/ZipTests/Resources/pathTraversal.zip b/Tests/ZipTests/Resources/pathTraversal.zip
similarity index 100%
rename from ZipTests/Resources/pathTraversal.zip
rename to Tests/ZipTests/Resources/pathTraversal.zip
diff --git a/ZipTests/Resources/permissions.zip b/Tests/ZipTests/Resources/permissions.zip
similarity index 100%
rename from ZipTests/Resources/permissions.zip
rename to Tests/ZipTests/Resources/permissions.zip
diff --git a/ZipTests/Resources/unsupported_permissions.zip b/Tests/ZipTests/Resources/unsupported_permissions.zip
similarity index 100%
rename from ZipTests/Resources/unsupported_permissions.zip
rename to Tests/ZipTests/Resources/unsupported_permissions.zip
diff --git a/ZipTests/ZipTests.swift b/Tests/ZipTests/ZipTests.swift
similarity index 78%
rename from ZipTests/ZipTests.swift
rename to Tests/ZipTests/ZipTests.swift
index 957ef51e..12a20fc9 100644
--- a/ZipTests/ZipTests.swift
+++ b/Tests/ZipTests/ZipTests.swift
@@ -9,28 +9,7 @@
import XCTest
@testable import Zip
-class ZipTests: XCTestCase {
-
- #if os(Linux)
- private let tearDownBlocksQueue = DispatchQueue(label: "XCTest.XCTestCase.tearDownBlocks.lock")
- private var tearDownBlocks: [() -> Void] = []
- func addTeardownBlock(_ block: @escaping () -> Void) {
- tearDownBlocksQueue.sync { tearDownBlocks.append(block) }
- }
- #endif
-
- override func setUp() {
- super.setUp()
- }
-
- override func tearDown() {
- super.tearDown()
- #if os(Linux)
- var blocks = tearDownBlocksQueue.sync { tearDownBlocks }
- while let next = blocks.popLast() { next() }
- #endif
- }
-
+final class ZipTests: XCTestCase {
private func url(forResource resource: String, withExtension ext: String? = nil) -> URL? {
#if Xcode
return Bundle(for: ZipTests.self).url(forResource: resource, withExtension: ext)
@@ -102,7 +81,7 @@ class ZipTests: XCTestCase {
let filePath = url(forResource: "bb8", withExtension: "zip")!
let destinationPath = try autoRemovingSandbox()
- try Zip.unzipFile(filePath, destination: destinationPath, overwrite: true, password: "password", progress: nil)
+ XCTAssertNoThrow(try Zip.unzipFile(filePath, destination: destinationPath, overwrite: true, password: "password", progress: nil))
XCTAssertTrue(FileManager.default.fileExists(atPath: destinationPath.path))
}
@@ -144,6 +123,18 @@ class ZipTests: XCTestCase {
try? FileManager.default.removeItem(at: destinationURL)
}
}
+
+ func testQuickZipProgress() throws {
+ let imageURL1 = url(forResource: "3crBXeO", withExtension: "gif")!
+ let imageURL2 = url(forResource: "kYkLkPf", withExtension: "gif")!
+ let destinationURL = try Zip.quickZipFiles([imageURL1, imageURL2], fileName: "archive", progress: { progress in
+ XCTAssertFalse(progress.isNaN)
+ })
+ XCTAssertTrue(FileManager.default.fileExists(atPath:destinationURL.path))
+ addTeardownBlock {
+ try? FileManager.default.removeItem(at: destinationURL)
+ }
+ }
func testQuickZipFolder() throws {
let fileManager = FileManager.default
@@ -166,7 +157,7 @@ class ZipTests: XCTestCase {
let imageURL2 = url(forResource: "kYkLkPf", withExtension: "gif")!
let sandboxFolder = try autoRemovingSandbox()
let zipFilePath = sandboxFolder.appendingPathComponent("archive.zip")
- try Zip.zipFiles(paths: [imageURL1, imageURL2], zipFilePath: zipFilePath, password: nil, progress: nil)
+ XCTAssertNoThrow(try Zip.zipFiles(paths: [imageURL1, imageURL2], zipFilePath: zipFilePath, password: nil, progress: nil))
XCTAssertTrue(FileManager.default.fileExists(atPath: zipFilePath.path))
}
@@ -188,14 +179,13 @@ class ZipTests: XCTestCase {
let unzipDestination = try Zip.quickUnzipFile(permissionsURL)
let permission644 = unzipDestination.appendingPathComponent("unsupported_permission").appendingPathExtension("txt")
let foundPermissions = try FileManager.default.attributesOfItem(atPath: permission644.path)[.posixPermissions] as? Int
- #if os(Linux)
- let expectedPermissions = 0o664
- #else
let expectedPermissions = 0o644
- #endif
XCTAssertNotNil(foundPermissions)
- XCTAssertEqual(foundPermissions, expectedPermissions,
- "\(foundPermissions.map { String($0, radix: 8) } ?? "nil") is not equal to \(String(expectedPermissions, radix: 8))")
+ XCTAssertEqual(
+ foundPermissions,
+ expectedPermissions,
+ "\(foundPermissions.map { String($0, radix: 8) } ?? "nil") is not equal to \(String(expectedPermissions, radix: 8))"
+ )
}
func testUnzipPermissions() throws {
@@ -286,4 +276,47 @@ class ZipTests: XCTestCase {
XCTAssertTrue(Zip.isValidFileExtension("zip"))
XCTAssertTrue(Zip.isValidFileExtension("cbz"))
}
+
+ func testZipData() throws {
+ let archiveFile1 = ArchiveFile(filename: "file1.txt", data: "Hello, World!".data(using: .utf8)!)
+ let archiveFile2 = ArchiveFile(
+ filename: "file2.txt",
+ data: NSData(data: "Hi Mom!".data(using: .utf8)!),
+ modifiedTime: Date()
+ )
+ let emptyArchiveFile = ArchiveFile(filename: "empty.txt", data: Data())
+ let sandboxFolder = try autoRemovingSandbox()
+ let zipFilePath = sandboxFolder.appendingPathComponent("archive.zip")
+ try Zip.zipData(archiveFiles: [archiveFile1, archiveFile2, emptyArchiveFile], zipFilePath: zipFilePath, password: nil, progress: nil)
+ XCTAssertTrue(FileManager.default.fileExists(atPath: zipFilePath.path))
+ }
+
+ func testZipDataProgress() throws {
+ let archiveFile1 = ArchiveFile(filename: "file1.txt", data: "Hello, World!".data(using: .utf8)!)
+ let archiveFile2 = ArchiveFile(
+ filename: "file2.txt",
+ data: NSData(data: "Hi Mom!".data(using: .utf8)!),
+ modifiedTime: Date()
+ )
+ let emptyArchiveFile = ArchiveFile(filename: "empty.txt", data: Data())
+ let sandboxFolder = try autoRemovingSandbox()
+ let zipFilePath = sandboxFolder.appendingPathComponent("archive.zip")
+ try Zip.zipData(archiveFiles: [archiveFile1, archiveFile2, emptyArchiveFile], zipFilePath: zipFilePath, password: nil, progress: { progress in
+ XCTAssertFalse(progress.isNaN)
+ })
+ XCTAssertTrue(FileManager.default.fileExists(atPath: zipFilePath.path))
+ }
+
+ func testZipError() {
+ XCTAssertEqual(ZipError.fileNotFound.description, "File not found.")
+ XCTAssertEqual(ZipError.unzipFail.description, "Failed to unzip file.")
+ XCTAssertEqual(ZipError.zipFail.description, "Failed to zip file.")
+ }
+
+ func testZipCompression() {
+ XCTAssertEqual(ZipCompression.NoCompression.minizipCompression, 0)
+ XCTAssertEqual(ZipCompression.BestSpeed.minizipCompression, 1)
+ XCTAssertEqual(ZipCompression.DefaultCompression.minizipCompression, -1)
+ XCTAssertEqual(ZipCompression.BestCompression.minizipCompression, 9)
+ }
}
diff --git a/Zip.podspec b/Zip.podspec
deleted file mode 100644
index 907757f9..00000000
--- a/Zip.podspec
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Be sure to run `pod lib lint Zip.podspec' to ensure this is a
-# valid spec before submitting.
-#
-# Any lines starting with a # are optional, but their use is encouraged
-# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
-#
-
-Pod::Spec.new do |s|
- s.name = "Zip"
- s.version = "2.1.2"
- s.summary = "Zip and unzip files in Swift."
- s.swift_version = "5.3"
- s.swift_versions = ["4.2", "5.0", "5.1", "5.3"]
-
-# This description is used to generate tags and improve search results.
-# * Think: What does it do? Why did you write it? What is the focus?
-# * Try to keep it short, snappy and to the point.
-# * Write the description between the DESC delimiters below.
-# * Finally, don't worry about the indent, CocoaPods strips it!
- s.description = <<-DESC
- A Swift framework for zipping and unzipping files. Simple and quick to use. Built on top of minizip.
- DESC
-
- s.homepage = "https://github.com/marmelroy/Zip"
- s.license = 'MIT'
- s.author = { "Roy Marmelstein" => "marmelroy@gmail.com" }
- s.source = { :git => "https://github.com/marmelroy/Zip.git", :tag => s.version.to_s}
- s.social_media_url = "http://twitter.com/marmelroy"
-
- s.ios.deployment_target = '9.0'
- s.tvos.deployment_target = '9.0'
- s.watchos.deployment_target = '3.0'
- s.osx.deployment_target = '10.9'
- s.requires_arc = true
-
- s.source_files = 'Zip/*.{swift,h}', 'Zip/minizip/*.{c,h}', 'Zip/minizip/include/*.{c,h}'
- s.public_header_files = 'Zip/*.h'
- s.pod_target_xcconfig = {'SWIFT_INCLUDE_PATHS' => '$(SRCROOT)/Zip/Zip/minizip/**','LIBRARY_SEARCH_PATHS' => '$(SRCROOT)/Zip/Zip/'}
- s.libraries = 'z'
- s.preserve_paths = 'Zip/minizip/module/module.modulemap'
-end
diff --git a/Zip.xcodeproj/project.pbxproj b/Zip.xcodeproj/project.pbxproj
deleted file mode 100644
index 3f6da7db..00000000
--- a/Zip.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,911 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
-
-/* Begin PBXBuildFile section */
- 0770AECE224BDC030040B364 /* Minizip.h in Headers */ = {isa = PBXBuildFile; fileRef = 0770AECD224BDC030040B364 /* Minizip.h */; };
- 0770AECF224BDC120040B364 /* Minizip.h in Headers */ = {isa = PBXBuildFile; fileRef = 0770AECD224BDC030040B364 /* Minizip.h */; };
- 0770AED0224BDC130040B364 /* Minizip.h in Headers */ = {isa = PBXBuildFile; fileRef = 0770AECD224BDC030040B364 /* Minizip.h */; };
- 07B2360221C2C697001E8634 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B235FD21C2C674001E8634 /* crypt.h */; };
- 07B2360321C2C697001E8634 /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B235FE21C2C674001E8634 /* zip.h */; };
- 07B2360421C2C697001E8634 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B235FF21C2C674001E8634 /* unzip.h */; };
- 07B2360521C2C697001E8634 /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B2360121C2C674001E8634 /* ioapi.h */; };
- 07B2360621C2C697001E8634 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B235FD21C2C674001E8634 /* crypt.h */; };
- 07B2360721C2C697001E8634 /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B235FE21C2C674001E8634 /* zip.h */; };
- 07B2360821C2C697001E8634 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B235FF21C2C674001E8634 /* unzip.h */; };
- 07B2360921C2C697001E8634 /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B2360121C2C674001E8634 /* ioapi.h */; };
- 07B2360A21C2C698001E8634 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B235FD21C2C674001E8634 /* crypt.h */; };
- 07B2360B21C2C698001E8634 /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B235FE21C2C674001E8634 /* zip.h */; };
- 07B2360C21C2C698001E8634 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B235FF21C2C674001E8634 /* unzip.h */; };
- 07B2360D21C2C698001E8634 /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B2360121C2C674001E8634 /* ioapi.h */; };
- 303B4F6E1E4CBE5000DC1633 /* permissions.zip in Resources */ = {isa = PBXBuildFile; fileRef = 303B4F6D1E4CBE5000DC1633 /* permissions.zip */; };
- 305237181E64595700CA46D1 /* unsupported_permissions.zip in Resources */ = {isa = PBXBuildFile; fileRef = 305237171E64595700CA46D1 /* unsupported_permissions.zip */; };
- 342545901CE525B200336074 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347E3AD71C1E04C900A11FD3 /* Zip.swift */; };
- 342545921CE525B200336074 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 342FC0EB1C5044DC0023A3C3 /* unzip.c */; };
- 342545941CE525B200336074 /* QuickZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3443A3F51C4AB8A3004AD173 /* QuickZip.swift */; };
- 342545951CE525B200336074 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 342FC0E81C5044DC0023A3C3 /* ioapi.c */; };
- 342545991CE525B200336074 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 342FC0ED1C5044DC0023A3C3 /* zip.c */; };
- 3425459A1CE525B200336074 /* ZipUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 343625BA1C5827DC0023C4C6 /* ZipUtilities.swift */; };
- 3425459E1CE525B200336074 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3430F61F1C45C805007473A6 /* libz.tbd */; };
- 342545AE1CE525B200336074 /* Zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 347E3A771C1DFFB500A11FD3 /* Zip.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 342FC1051C5044DC0023A3C3 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 342FC0E81C5044DC0023A3C3 /* ioapi.c */; };
- 342FC1071C5044DC0023A3C3 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 342FC0EB1C5044DC0023A3C3 /* unzip.c */; };
- 342FC1091C5044DC0023A3C3 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 342FC0ED1C5044DC0023A3C3 /* zip.c */; };
- 3430F6201C45C805007473A6 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3430F61F1C45C805007473A6 /* libz.tbd */; };
- 343625BB1C5827DC0023C4C6 /* ZipUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 343625BA1C5827DC0023C4C6 /* ZipUtilities.swift */; };
- 343F51091C8DAEEC0028C434 /* Zip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 343F50FF1C8DAEEC0028C434 /* Zip.framework */; };
- 343F51161C8DAF3F0028C434 /* ZipUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 343625BA1C5827DC0023C4C6 /* ZipUtilities.swift */; };
- 343F51171C8DAF410028C434 /* QuickZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3443A3F51C4AB8A3004AD173 /* QuickZip.swift */; };
- 343F51181C8DAF450028C434 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347E3AD71C1E04C900A11FD3 /* Zip.swift */; };
- 343F511A1C8DAFD90028C434 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 342FC0E81C5044DC0023A3C3 /* ioapi.c */; };
- 343F511C1C8DAFE00028C434 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 342FC0EB1C5044DC0023A3C3 /* unzip.c */; };
- 343F511E1C8DAFE50028C434 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 342FC0ED1C5044DC0023A3C3 /* zip.c */; };
- 343F51351C8DB0480028C434 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3430F61F1C45C805007473A6 /* libz.tbd */; };
- 343F51361C8DB0720028C434 /* Zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 347E3A771C1DFFB500A11FD3 /* Zip.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 3443A3F61C4AB8A3004AD173 /* QuickZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3443A3F51C4AB8A3004AD173 /* QuickZip.swift */; };
- 3443A3FD1C4AD199004AD173 /* bb8.zip in Resources */ = {isa = PBXBuildFile; fileRef = 3443A3FC1C4AD199004AD173 /* bb8.zip */; };
- 347E3A781C1DFFB500A11FD3 /* Zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 347E3A771C1DFFB500A11FD3 /* Zip.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 347E3A7F1C1DFFB500A11FD3 /* Zip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 347E3A741C1DFFB500A11FD3 /* Zip.framework */; };
- 347E3A841C1DFFB500A11FD3 /* ZipTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347E3A831C1DFFB500A11FD3 /* ZipTests.swift */; };
- 347E3AD81C1E04C900A11FD3 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347E3AD71C1E04C900A11FD3 /* Zip.swift */; };
- 34940A241C58876200D41574 /* 3crBXeO.gif in Resources */ = {isa = PBXBuildFile; fileRef = 34940A221C58876200D41574 /* 3crBXeO.gif */; };
- 34940A251C58876200D41574 /* kYkLkPf.gif in Resources */ = {isa = PBXBuildFile; fileRef = 34940A231C58876200D41574 /* kYkLkPf.gif */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 343F510A1C8DAEEC0028C434 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 347E3A6B1C1DFFB500A11FD3 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 343F50FE1C8DAEEC0028C434;
- remoteInfo = "Zip OSX";
- };
- 347E3A801C1DFFB500A11FD3 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 347E3A6B1C1DFFB500A11FD3 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 347E3A731C1DFFB500A11FD3;
- remoteInfo = Zip;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- 0770AECD224BDC030040B364 /* Minizip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Minizip.h; sourceTree = ""; };
- 0770AED3224BDF080040B364 /* module.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; };
- 07B235FD21C2C674001E8634 /* crypt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = crypt.h; sourceTree = ""; };
- 07B235FE21C2C674001E8634 /* zip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip.h; sourceTree = ""; };
- 07B235FF21C2C674001E8634 /* unzip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = unzip.h; sourceTree = ""; };
- 07B2360121C2C674001E8634 /* ioapi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = ""; };
- 303B4F6D1E4CBE5000DC1633 /* permissions.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = permissions.zip; sourceTree = ""; };
- 305237171E64595700CA46D1 /* unsupported_permissions.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = unsupported_permissions.zip; sourceTree = ""; };
- 342545B51CE525B200336074 /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 342FC0E81C5044DC0023A3C3 /* ioapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ioapi.c; sourceTree = ""; };
- 342FC0EB1C5044DC0023A3C3 /* unzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unzip.c; sourceTree = ""; };
- 342FC0ED1C5044DC0023A3C3 /* zip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip.c; sourceTree = ""; };
- 3430F61F1C45C805007473A6 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
- 343625BA1C5827DC0023C4C6 /* ZipUtilities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZipUtilities.swift; sourceTree = ""; };
- 343F50FF1C8DAEEC0028C434 /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 343F51081C8DAEEC0028C434 /* Zip OSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Zip OSXTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
- 344050D91CE28F59001AFF0F /* Info-tvOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-tvOS.plist"; sourceTree = ""; };
- 3443A3F51C4AB8A3004AD173 /* QuickZip.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuickZip.swift; sourceTree = ""; };
- 3443A3FC1C4AD199004AD173 /* bb8.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = bb8.zip; sourceTree = ""; };
- 347E3A741C1DFFB500A11FD3 /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 347E3A771C1DFFB500A11FD3 /* Zip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Zip.h; sourceTree = ""; };
- 347E3A791C1DFFB500A11FD3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 347E3A7E1C1DFFB500A11FD3 /* ZipTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZipTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 347E3A831C1DFFB500A11FD3 /* ZipTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZipTests.swift; sourceTree = ""; };
- 347E3A851C1DFFB500A11FD3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 347E3AD71C1E04C900A11FD3 /* Zip.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Zip.swift; sourceTree = ""; };
- 34940A221C58876200D41574 /* 3crBXeO.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = 3crBXeO.gif; sourceTree = ""; };
- 34940A231C58876200D41574 /* kYkLkPf.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = kYkLkPf.gif; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 3425459D1CE525B200336074 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3425459E1CE525B200336074 /* libz.tbd in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 343F50FB1C8DAEEC0028C434 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 343F51351C8DB0480028C434 /* libz.tbd in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 343F51051C8DAEEC0028C434 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 343F51091C8DAEEC0028C434 /* Zip.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 347E3A701C1DFFB500A11FD3 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3430F6201C45C805007473A6 /* libz.tbd in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 347E3A7B1C1DFFB500A11FD3 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 347E3A7F1C1DFFB500A11FD3 /* Zip.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 0770AED2224BDF080040B364 /* module */ = {
- isa = PBXGroup;
- children = (
- 0770AED3224BDF080040B364 /* module.modulemap */,
- );
- path = module;
- sourceTree = "";
- };
- 07B235FC21C2C674001E8634 /* include */ = {
- isa = PBXGroup;
- children = (
- 0770AECD224BDC030040B364 /* Minizip.h */,
- 07B235FD21C2C674001E8634 /* crypt.h */,
- 07B235FE21C2C674001E8634 /* zip.h */,
- 07B235FF21C2C674001E8634 /* unzip.h */,
- 07B2360121C2C674001E8634 /* ioapi.h */,
- );
- path = include;
- sourceTree = "";
- };
- 07E4424421A5C385009BE4AB /* Resources */ = {
- isa = PBXGroup;
- children = (
- 305237171E64595700CA46D1 /* unsupported_permissions.zip */,
- 303B4F6D1E4CBE5000DC1633 /* permissions.zip */,
- 34940A221C58876200D41574 /* 3crBXeO.gif */,
- 34940A231C58876200D41574 /* kYkLkPf.gif */,
- 3443A3FC1C4AD199004AD173 /* bb8.zip */,
- );
- path = Resources;
- sourceTree = "";
- };
- 342FC0D01C5044DC0023A3C3 /* minizip */ = {
- isa = PBXGroup;
- children = (
- 0770AED2224BDF080040B364 /* module */,
- 07B235FC21C2C674001E8634 /* include */,
- 342FC0E81C5044DC0023A3C3 /* ioapi.c */,
- 342FC0EB1C5044DC0023A3C3 /* unzip.c */,
- 342FC0ED1C5044DC0023A3C3 /* zip.c */,
- );
- path = minizip;
- sourceTree = "";
- };
- 347E3A6A1C1DFFB500A11FD3 = {
- isa = PBXGroup;
- children = (
- 347E3A761C1DFFB500A11FD3 /* Zip */,
- 347E3A821C1DFFB500A11FD3 /* ZipTests */,
- 347E3A751C1DFFB500A11FD3 /* Products */,
- );
- sourceTree = "";
- };
- 347E3A751C1DFFB500A11FD3 /* Products */ = {
- isa = PBXGroup;
- children = (
- 347E3A741C1DFFB500A11FD3 /* Zip.framework */,
- 347E3A7E1C1DFFB500A11FD3 /* ZipTests.xctest */,
- 343F50FF1C8DAEEC0028C434 /* Zip.framework */,
- 343F51081C8DAEEC0028C434 /* Zip OSXTests.xctest */,
- 342545B51CE525B200336074 /* Zip.framework */,
- );
- name = Products;
- sourceTree = "";
- };
- 347E3A761C1DFFB500A11FD3 /* Zip */ = {
- isa = PBXGroup;
- children = (
- 342FC0D01C5044DC0023A3C3 /* minizip */,
- 347E3A771C1DFFB500A11FD3 /* Zip.h */,
- 347E3A791C1DFFB500A11FD3 /* Info.plist */,
- 344050D91CE28F59001AFF0F /* Info-tvOS.plist */,
- 347E3AD71C1E04C900A11FD3 /* Zip.swift */,
- 343625BA1C5827DC0023C4C6 /* ZipUtilities.swift */,
- 3443A3F51C4AB8A3004AD173 /* QuickZip.swift */,
- 3430F61F1C45C805007473A6 /* libz.tbd */,
- );
- path = Zip;
- sourceTree = "";
- };
- 347E3A821C1DFFB500A11FD3 /* ZipTests */ = {
- isa = PBXGroup;
- children = (
- 07E4424421A5C385009BE4AB /* Resources */,
- 347E3A831C1DFFB500A11FD3 /* ZipTests.swift */,
- 347E3A851C1DFFB500A11FD3 /* Info.plist */,
- );
- path = ZipTests;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
- 3425459F1CE525B200336074 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 07B2360B21C2C698001E8634 /* zip.h in Headers */,
- 342545AE1CE525B200336074 /* Zip.h in Headers */,
- 07B2360A21C2C698001E8634 /* crypt.h in Headers */,
- 0770AED0224BDC130040B364 /* Minizip.h in Headers */,
- 07B2360C21C2C698001E8634 /* unzip.h in Headers */,
- 07B2360D21C2C698001E8634 /* ioapi.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 343F50FC1C8DAEEC0028C434 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 07B2360721C2C697001E8634 /* zip.h in Headers */,
- 343F51361C8DB0720028C434 /* Zip.h in Headers */,
- 07B2360621C2C697001E8634 /* crypt.h in Headers */,
- 0770AECF224BDC120040B364 /* Minizip.h in Headers */,
- 07B2360821C2C697001E8634 /* unzip.h in Headers */,
- 07B2360921C2C697001E8634 /* ioapi.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 347E3A711C1DFFB500A11FD3 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 347E3A781C1DFFB500A11FD3 /* Zip.h in Headers */,
- 07B2360221C2C697001E8634 /* crypt.h in Headers */,
- 07B2360521C2C697001E8634 /* ioapi.h in Headers */,
- 0770AECE224BDC030040B364 /* Minizip.h in Headers */,
- 07B2360421C2C697001E8634 /* unzip.h in Headers */,
- 07B2360321C2C697001E8634 /* zip.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
- 3425458C1CE525B200336074 /* Zip tvOS */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 342545B21CE525B200336074 /* Build configuration list for PBXNativeTarget "Zip tvOS" */;
- buildPhases = (
- 3425458D1CE525B200336074 /* Sources */,
- 3425459D1CE525B200336074 /* Frameworks */,
- 3425459F1CE525B200336074 /* Headers */,
- 342545B11CE525B200336074 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = "Zip tvOS";
- productName = Zip;
- productReference = 342545B51CE525B200336074 /* Zip.framework */;
- productType = "com.apple.product-type.framework";
- };
- 343F50FE1C8DAEEC0028C434 /* Zip OSX */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 343F51141C8DAEEC0028C434 /* Build configuration list for PBXNativeTarget "Zip OSX" */;
- buildPhases = (
- 343F50FA1C8DAEEC0028C434 /* Sources */,
- 343F50FB1C8DAEEC0028C434 /* Frameworks */,
- 343F50FC1C8DAEEC0028C434 /* Headers */,
- 343F50FD1C8DAEEC0028C434 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = "Zip OSX";
- productName = "Zip OSX";
- productReference = 343F50FF1C8DAEEC0028C434 /* Zip.framework */;
- productType = "com.apple.product-type.framework";
- };
- 343F51071C8DAEEC0028C434 /* Zip OSXTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 343F51151C8DAEEC0028C434 /* Build configuration list for PBXNativeTarget "Zip OSXTests" */;
- buildPhases = (
- 343F51041C8DAEEC0028C434 /* Sources */,
- 343F51051C8DAEEC0028C434 /* Frameworks */,
- 343F51061C8DAEEC0028C434 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 343F510B1C8DAEEC0028C434 /* PBXTargetDependency */,
- );
- name = "Zip OSXTests";
- productName = "Zip OSXTests";
- productReference = 343F51081C8DAEEC0028C434 /* Zip OSXTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
- 347E3A731C1DFFB500A11FD3 /* Zip */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 347E3A881C1DFFB500A11FD3 /* Build configuration list for PBXNativeTarget "Zip" */;
- buildPhases = (
- 347E3A6F1C1DFFB500A11FD3 /* Sources */,
- 347E3A701C1DFFB500A11FD3 /* Frameworks */,
- 347E3A711C1DFFB500A11FD3 /* Headers */,
- 347E3A721C1DFFB500A11FD3 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = Zip;
- productName = Zip;
- productReference = 347E3A741C1DFFB500A11FD3 /* Zip.framework */;
- productType = "com.apple.product-type.framework";
- };
- 347E3A7D1C1DFFB500A11FD3 /* ZipTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 347E3A8B1C1DFFB500A11FD3 /* Build configuration list for PBXNativeTarget "ZipTests" */;
- buildPhases = (
- 347E3A7A1C1DFFB500A11FD3 /* Sources */,
- 347E3A7B1C1DFFB500A11FD3 /* Frameworks */,
- 347E3A7C1C1DFFB500A11FD3 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 347E3A811C1DFFB500A11FD3 /* PBXTargetDependency */,
- );
- name = ZipTests;
- productName = ZipTests;
- productReference = 347E3A7E1C1DFFB500A11FD3 /* ZipTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 347E3A6B1C1DFFB500A11FD3 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastSwiftUpdateCheck = 0720;
- LastUpgradeCheck = 1320;
- ORGANIZATIONNAME = "Roy Marmelstein";
- TargetAttributes = {
- 343F50FE1C8DAEEC0028C434 = {
- CreatedOnToolsVersion = 7.2.1;
- };
- 343F51071C8DAEEC0028C434 = {
- CreatedOnToolsVersion = 7.2.1;
- };
- 347E3A731C1DFFB500A11FD3 = {
- CreatedOnToolsVersion = 7.2;
- LastSwiftMigration = 1020;
- };
- 347E3A7D1C1DFFB500A11FD3 = {
- CreatedOnToolsVersion = 7.2;
- LastSwiftMigration = 1020;
- };
- };
- };
- buildConfigurationList = 347E3A6E1C1DFFB500A11FD3 /* Build configuration list for PBXProject "Zip" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 347E3A6A1C1DFFB500A11FD3;
- productRefGroup = 347E3A751C1DFFB500A11FD3 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 347E3A731C1DFFB500A11FD3 /* Zip */,
- 347E3A7D1C1DFFB500A11FD3 /* ZipTests */,
- 343F50FE1C8DAEEC0028C434 /* Zip OSX */,
- 343F51071C8DAEEC0028C434 /* Zip OSXTests */,
- 3425458C1CE525B200336074 /* Zip tvOS */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 342545B11CE525B200336074 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 343F50FD1C8DAEEC0028C434 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 343F51061C8DAEEC0028C434 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 347E3A721C1DFFB500A11FD3 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 347E3A7C1C1DFFB500A11FD3 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 305237181E64595700CA46D1 /* unsupported_permissions.zip in Resources */,
- 303B4F6E1E4CBE5000DC1633 /* permissions.zip in Resources */,
- 34940A251C58876200D41574 /* kYkLkPf.gif in Resources */,
- 3443A3FD1C4AD199004AD173 /* bb8.zip in Resources */,
- 34940A241C58876200D41574 /* 3crBXeO.gif in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 3425458D1CE525B200336074 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 342545901CE525B200336074 /* Zip.swift in Sources */,
- 342545921CE525B200336074 /* unzip.c in Sources */,
- 342545941CE525B200336074 /* QuickZip.swift in Sources */,
- 342545951CE525B200336074 /* ioapi.c in Sources */,
- 342545991CE525B200336074 /* zip.c in Sources */,
- 3425459A1CE525B200336074 /* ZipUtilities.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 343F50FA1C8DAEEC0028C434 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 343F51161C8DAF3F0028C434 /* ZipUtilities.swift in Sources */,
- 343F511C1C8DAFE00028C434 /* unzip.c in Sources */,
- 343F51171C8DAF410028C434 /* QuickZip.swift in Sources */,
- 343F511E1C8DAFE50028C434 /* zip.c in Sources */,
- 343F511A1C8DAFD90028C434 /* ioapi.c in Sources */,
- 343F51181C8DAF450028C434 /* Zip.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 343F51041C8DAEEC0028C434 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 347E3A6F1C1DFFB500A11FD3 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 347E3AD81C1E04C900A11FD3 /* Zip.swift in Sources */,
- 342FC1071C5044DC0023A3C3 /* unzip.c in Sources */,
- 3443A3F61C4AB8A3004AD173 /* QuickZip.swift in Sources */,
- 342FC1051C5044DC0023A3C3 /* ioapi.c in Sources */,
- 342FC1091C5044DC0023A3C3 /* zip.c in Sources */,
- 343625BB1C5827DC0023C4C6 /* ZipUtilities.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 347E3A7A1C1DFFB500A11FD3 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 347E3A841C1DFFB500A11FD3 /* ZipTests.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 343F510B1C8DAEEC0028C434 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 343F50FE1C8DAEEC0028C434 /* Zip OSX */;
- targetProxy = 343F510A1C8DAEEC0028C434 /* PBXContainerItemProxy */;
- };
- 347E3A811C1DFFB500A11FD3 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 347E3A731C1DFFB500A11FD3 /* Zip */;
- targetProxy = 347E3A801C1DFFB500A11FD3 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
- 342545B31CE525B200336074 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
- CLANG_ENABLE_MODULES = YES;
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = "Zip/Info-tvOS.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- LIBRARY_SEARCH_PATHS = "$(inherited)";
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.Zip;
- PRODUCT_NAME = Zip;
- SDKROOT = appletvos;
- SKIP_INSTALL = YES;
- SUPPORTED_PLATFORMS = "appletvsimulator appletvos";
- SWIFT_INCLUDE_PATHS = "${SRCROOT}/Zip/minizip/**";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- TARGETED_DEVICE_FAMILY = 3;
- TVOS_DEPLOYMENT_TARGET = 9.0;
- };
- name = Debug;
- };
- 342545B41CE525B200336074 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
- CLANG_ENABLE_MODULES = YES;
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = "Zip/Info-tvOS.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- LIBRARY_SEARCH_PATHS = "$(inherited)";
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.Zip;
- PRODUCT_NAME = Zip;
- SDKROOT = appletvos;
- SKIP_INSTALL = YES;
- SUPPORTED_PLATFORMS = "appletvsimulator appletvos";
- SWIFT_INCLUDE_PATHS = "${SRCROOT}/Zip/minizip/**";
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- TARGETED_DEVICE_FAMILY = 3;
- TVOS_DEPLOYMENT_TARGET = 9.0;
- };
- name = Release;
- };
- 343F51101C8DAEEC0028C434 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CODE_SIGN_IDENTITY = "-";
- COMBINE_HIDPI_IMAGES = YES;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- FRAMEWORK_VERSION = A;
- INFOPLIST_FILE = Zip/Info.plist;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
- MACOSX_DEPLOYMENT_TARGET = 10.9;
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.Zip;
- PRODUCT_NAME = Zip;
- SDKROOT = macosx;
- SKIP_INSTALL = YES;
- SWIFT_INCLUDE_PATHS = "${SRCROOT}/Zip/minizip/**";
- };
- name = Debug;
- };
- 343F51111C8DAEEC0028C434 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CODE_SIGN_IDENTITY = "-";
- COMBINE_HIDPI_IMAGES = YES;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- FRAMEWORK_VERSION = A;
- INFOPLIST_FILE = Zip/Info.plist;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
- MACOSX_DEPLOYMENT_TARGET = 10.9;
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.Zip;
- PRODUCT_NAME = Zip;
- SDKROOT = macosx;
- SKIP_INSTALL = YES;
- SWIFT_INCLUDE_PATHS = "${SRCROOT}/Zip/minizip/**";
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- };
- name = Release;
- };
- 343F51121C8DAEEC0028C434 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- APPLICATION_EXTENSION_API_ONLY = NO;
- CODE_SIGN_IDENTITY = "-";
- COMBINE_HIDPI_IMAGES = YES;
- INFOPLIST_FILE = "Zip OSXTests/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
- MACOSX_DEPLOYMENT_TARGET = 10.11;
- PRODUCT_BUNDLE_IDENTIFIER = "com.roymarmelstein.Zip-OSXTests";
- PRODUCT_NAME = "$(TARGET_NAME)";
- SDKROOT = macosx;
- };
- name = Debug;
- };
- 343F51131C8DAEEC0028C434 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- APPLICATION_EXTENSION_API_ONLY = NO;
- CODE_SIGN_IDENTITY = "-";
- COMBINE_HIDPI_IMAGES = YES;
- INFOPLIST_FILE = "Zip OSXTests/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
- MACOSX_DEPLOYMENT_TARGET = 10.11;
- PRODUCT_BUNDLE_IDENTIFIER = "com.roymarmelstein.Zip-OSXTests";
- PRODUCT_NAME = "$(TARGET_NAME)";
- SDKROOT = macosx;
- };
- name = Release;
- };
- 347E3A861C1DFFB500A11FD3 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- APPLICATION_EXTENSION_API_ONLY = YES;
- BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 17;
- DEBUG_INFORMATION_FORMAT = dwarf;
- DYLIB_CURRENT_VERSION = 17;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.2;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = Xcode;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
- 347E3A871C1DFFB500A11FD3 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- APPLICATION_EXTENSION_API_ONLY = YES;
- BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 17;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- DYLIB_CURRENT_VERSION = 17;
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.2;
- MTL_ENABLE_DEBUG_INFO = NO;
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = Xcode;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Release;
- };
- 347E3A891C1DFFB500A11FD3 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
- CLANG_ENABLE_MODULES = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = Zip/Info.plist;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- LIBRARY_SEARCH_PATHS = "$(inherited)";
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.Zip;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SKIP_INSTALL = YES;
- SWIFT_INCLUDE_PATHS = "${SRCROOT}/Zip/minizip/**";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- };
- name = Debug;
- };
- 347E3A8A1C1DFFB500A11FD3 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
- CLANG_ENABLE_MODULES = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = Zip/Info.plist;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- LIBRARY_SEARCH_PATHS = "$(inherited)";
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.Zip;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SKIP_INSTALL = YES;
- SWIFT_INCLUDE_PATHS = "${SRCROOT}/Zip/minizip/**";
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- };
- name = Release;
- };
- 347E3A8C1C1DFFB500A11FD3 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- APPLICATION_EXTENSION_API_ONLY = NO;
- INFOPLIST_FILE = ZipTests/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.ZipTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Debug;
- };
- 347E3A8D1C1DFFB500A11FD3 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- APPLICATION_EXTENSION_API_ONLY = NO;
- INFOPLIST_FILE = ZipTests/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.ZipTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 342545B21CE525B200336074 /* Build configuration list for PBXNativeTarget "Zip tvOS" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 342545B31CE525B200336074 /* Debug */,
- 342545B41CE525B200336074 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 343F51141C8DAEEC0028C434 /* Build configuration list for PBXNativeTarget "Zip OSX" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 343F51101C8DAEEC0028C434 /* Debug */,
- 343F51111C8DAEEC0028C434 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 343F51151C8DAEEC0028C434 /* Build configuration list for PBXNativeTarget "Zip OSXTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 343F51121C8DAEEC0028C434 /* Debug */,
- 343F51131C8DAEEC0028C434 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 347E3A6E1C1DFFB500A11FD3 /* Build configuration list for PBXProject "Zip" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 347E3A861C1DFFB500A11FD3 /* Debug */,
- 347E3A871C1DFFB500A11FD3 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 347E3A881C1DFFB500A11FD3 /* Build configuration list for PBXNativeTarget "Zip" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 347E3A891C1DFFB500A11FD3 /* Debug */,
- 347E3A8A1C1DFFB500A11FD3 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 347E3A8B1C1DFFB500A11FD3 /* Build configuration list for PBXNativeTarget "ZipTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 347E3A8C1C1DFFB500A11FD3 /* Debug */,
- 347E3A8D1C1DFFB500A11FD3 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 347E3A6B1C1DFFB500A11FD3 /* Project object */;
-}
diff --git a/Zip.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Zip.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 567bc50f..00000000
--- a/Zip.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/Zip.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Zip.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d98100..00000000
--- a/Zip.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/Zip.xcodeproj/project.xcworkspace/xcshareddata/Zip.xcscmblueprint b/Zip.xcodeproj/project.xcworkspace/xcshareddata/Zip.xcscmblueprint
deleted file mode 100644
index 0b4f0601..00000000
--- a/Zip.xcodeproj/project.xcworkspace/xcshareddata/Zip.xcscmblueprint
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "3DD768C8AB2D6A2647C9EF99992D3CC5820E77C4",
- "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
-
- },
- "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
- "8DA5B175D3FDB92A3B3CCBD4109A734F1316A3DD" : 0,
- "3DD768C8AB2D6A2647C9EF99992D3CC5820E77C4" : 0
- },
- "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "F3707899-72AE-49DA-9BDD-5CB0B64CF03A",
- "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
- "8DA5B175D3FDB92A3B3CCBD4109A734F1316A3DD" : "Zip\/Zip\/minizip\/",
- "3DD768C8AB2D6A2647C9EF99992D3CC5820E77C4" : "Zip\/"
- },
- "DVTSourceControlWorkspaceBlueprintNameKey" : "Zip",
- "DVTSourceControlWorkspaceBlueprintVersion" : 204,
- "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "Zip.xcodeproj",
- "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
- {
- "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/marmelroy\/Zip.git",
- "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
- "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "3DD768C8AB2D6A2647C9EF99992D3CC5820E77C4"
- },
- {
- "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/marmelroy\/minizip.git",
- "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
- "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "8DA5B175D3FDB92A3B3CCBD4109A734F1316A3DD"
- }
- ]
-}
\ No newline at end of file
diff --git a/Zip.xcodeproj/xcshareddata/xcschemes/Zip OSX.xcscheme b/Zip.xcodeproj/xcshareddata/xcschemes/Zip OSX.xcscheme
deleted file mode 100644
index e6beda45..00000000
--- a/Zip.xcodeproj/xcshareddata/xcschemes/Zip OSX.xcscheme
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Zip.xcodeproj/xcshareddata/xcschemes/Zip tvOS.xcscheme b/Zip.xcodeproj/xcshareddata/xcschemes/Zip tvOS.xcscheme
deleted file mode 100644
index 2027c749..00000000
--- a/Zip.xcodeproj/xcshareddata/xcschemes/Zip tvOS.xcscheme
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Zip.xcodeproj/xcshareddata/xcschemes/Zip.xcscheme b/Zip.xcodeproj/xcshareddata/xcschemes/Zip.xcscheme
deleted file mode 100644
index 879c63f3..00000000
--- a/Zip.xcodeproj/xcshareddata/xcschemes/Zip.xcscheme
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Zip.xcodeproj/xcshareddata/xcschemes/ZipTests.xcscheme b/Zip.xcodeproj/xcshareddata/xcschemes/ZipTests.xcscheme
deleted file mode 100644
index f7898895..00000000
--- a/Zip.xcodeproj/xcshareddata/xcschemes/ZipTests.xcscheme
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Zip/ArchiveFile.swift b/Zip/ArchiveFile.swift
new file mode 100644
index 00000000..750c011f
--- /dev/null
+++ b/Zip/ArchiveFile.swift
@@ -0,0 +1,139 @@
+//
+// ArchiveFile.swift
+// Zip
+//
+// Created by Francesco Paolo Severino on 16/08/2024.
+//
+
+import Foundation
+@_implementationOnly import Minizip
+
+/// Defines data saved in memory that will be archived as a file.
+public struct ArchiveFile {
+ var filename: String
+ var data: Data
+ var modifiedTime: Date?
+
+ /// Creates an ``ArchiveFile`` instance.
+ ///
+ /// - Parameters:
+ /// - filename: The name of the file represented by the data.
+ /// - data: The `Data` to be archived.
+ /// - modifiedTime: The last modification date of the file. Optional.
+ public init(filename: String, data: Data, modifiedTime: Date? = nil) {
+ self.filename = filename
+ self.data = data
+ self.modifiedTime = modifiedTime
+ }
+
+ /// Creates an ``ArchiveFile`` instance.
+ ///
+ /// - Parameters:
+ /// - filename: The name of the file represented by the data.
+ /// - data: The `NSData` to be archived.
+ /// - modifiedTime: The last modification date of the file. Optional.
+ @available(*, deprecated, message: "Use the initializer that takes Foundation's `Data` instead.")
+ public init(filename: String, data: NSData, modifiedTime: Date? = nil) {
+ self.filename = filename
+ self.data = Data(referencing: data)
+ self.modifiedTime = modifiedTime
+ }
+}
+
+extension Zip {
+ /**
+ Creates a zip file from an array of ``ArchiveFile``s
+
+ - Parameters:
+ - archiveFiles: Array of ``ArchiveFile``.
+ - zipFilePath: Destination `URL`, should lead to a `.zip` filepath.
+ - password: Password string. Optional.
+ - compression: Compression strategy
+ - progress: A progress closure called after unzipping each file in the archive. Double value betweem 0 and 1.
+
+ - Throws: `ZipError.zipFail` if zipping fails.
+
+ > Note: Supports implicit progress composition.
+ */
+ public class func zipData(archiveFiles: [ArchiveFile], zipFilePath: URL, password: String?, compression: ZipCompression = .DefaultCompression, progress: ((_ progress: Double) -> ())?) throws {
+ let destinationPath = zipFilePath.path
+
+ // Progress handler set up
+ var currentPosition: Int = 0
+ var totalSize: Int = 0
+
+ for archiveFile in archiveFiles {
+ totalSize += archiveFile.data.count
+ }
+
+ let progressTracker = Progress(totalUnitCount: Int64(totalSize))
+ progressTracker.isCancellable = false
+ progressTracker.isPausable = false
+ progressTracker.kind = ProgressKind.file
+
+ // Begin Zipping
+ let zip = zipOpen(destinationPath, APPEND_STATUS_CREATE)
+
+ for archiveFile in archiveFiles {
+ // Skip empty data
+ if archiveFile.data.isEmpty {
+ continue
+ }
+
+ // Setup the zip file info
+ var zipInfo = zip_fileinfo(
+ tmz_date: tm_zip(tm_sec: 0, tm_min: 0, tm_hour: 0, tm_mday: 0, tm_mon: 0, tm_year: 0),
+ dosDate: 0,
+ internal_fa: 0,
+ external_fa: 0
+ )
+
+ if let modifiedTime = archiveFile.modifiedTime {
+ let calendar = Calendar.current
+ zipInfo.tmz_date.tm_sec = UInt32(calendar.component(.second, from: modifiedTime))
+ zipInfo.tmz_date.tm_min = UInt32(calendar.component(.minute, from: modifiedTime))
+ zipInfo.tmz_date.tm_hour = UInt32(calendar.component(.hour, from: modifiedTime))
+ zipInfo.tmz_date.tm_mday = UInt32(calendar.component(.day, from: modifiedTime))
+ zipInfo.tmz_date.tm_mon = UInt32(calendar.component(.month, from: modifiedTime))
+ zipInfo.tmz_date.tm_year = UInt32(calendar.component(.year, from: modifiedTime))
+ }
+
+ // Write the data as a file to zip
+ zipOpenNewFileInZip3(
+ zip, archiveFile.filename, &zipInfo,
+ nil, 0, nil, 0,
+ nil,
+ Z_DEFLATED,
+ compression.minizipCompression,
+ 0,
+ -MAX_WBITS,
+ DEF_MEM_LEVEL,
+ Z_DEFAULT_STRATEGY,
+ password,
+ 0
+ )
+ let _ = archiveFile.data.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) in
+ zipWriteInFileInZip(zip, bytes.baseAddress, UInt32(archiveFile.data.count))
+ }
+ zipCloseFileInZip(zip)
+
+ // Update progress handler
+ currentPosition += archiveFile.data.count
+
+ if let progressHandler = progress {
+ progressHandler((Double(currentPosition/totalSize)))
+ }
+
+ progressTracker.completedUnitCount = Int64(currentPosition)
+ }
+
+ zipClose(zip, nil)
+
+ // Completed. Update progress handler.
+ if let progressHandler = progress {
+ progressHandler(1.0)
+ }
+
+ progressTracker.completedUnitCount = Int64(totalSize)
+ }
+}
\ No newline at end of file
diff --git a/Zip/Info-tvOS.plist b/Zip/Info-tvOS.plist
deleted file mode 100644
index bc21553c..00000000
--- a/Zip/Info-tvOS.plist
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- FMWK
- CFBundleShortVersionString
- 2.1.2
- CFBundleSignature
- ????
- CFBundleVersion
- 17
- NSPrincipalClass
-
-
-
diff --git a/Zip/Info.plist b/Zip/Info.plist
deleted file mode 100644
index bc21553c..00000000
--- a/Zip/Info.plist
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- FMWK
- CFBundleShortVersionString
- 2.1.2
- CFBundleSignature
- ????
- CFBundleVersion
- 17
- NSPrincipalClass
-
-
-
diff --git a/Zip/QuickZip.swift b/Zip/QuickZip.swift
index 779912a8..3d70416e 100644
--- a/Zip/QuickZip.swift
+++ b/Zip/QuickZip.swift
@@ -28,29 +28,34 @@ extension Zip {
//MARK: Quick Unzip
/**
- Quick unzip a file. Unzips to a new folder inside the app's documents folder with the zip file's name.
+ Quickly unzips a file.
- - parameter path: Path of zipped file. NSURL.
+ Unzips to a new folder inside the app's documents folder with the zip file's name.
- - throws: Error if unzipping fails or if file is not found. Can be printed with a description variable.
+ - Parameter path: Path of zipped file.
- - returns: NSURL of the destination folder.
+ - Throws: `ZipError.unzipFail` if unzipping fails or `ZipError.fileNotFound` if file is not found.
+
+ - Returns: `URL` of the destination folder.
*/
public class func quickUnzipFile(_ path: URL) throws -> URL {
return try quickUnzipFile(path, progress: nil)
}
/**
- Quick unzip a file. Unzips to a new folder inside the app's documents folder with the zip file's name.
+ Quickly unzips a file.
+
+ Unzips to a new folder inside the app's documents folder with the zip file's name.
- - parameter path: Path of zipped file. NSURL.
- - parameter progress: A progress closure called after unzipping each file in the archive. Double value betweem 0 and 1.
+ - Parameters:
+ - path: Path of zipped file.
+ - progress: A progress closure called after unzipping each file in the archive. `Double` value between 0 and 1.
- - throws: Error if unzipping fails or if file is not found. Can be printed with a description variable.
+ - Throws: `ZipError.unzipFail` if unzipping fails or `ZipError.fileNotFound` if file is not found.
- - notes: Supports implicit progress composition
+ > Note: Supports implicit progress composition.
- - returns: NSURL of the destination folder.
+ - Returns: `URL` of the destination folder.
*/
public class func quickUnzipFile(_ path: URL, progress: ((_ progress: Double) -> ())?) throws -> URL {
let fileManager = FileManager.default
@@ -79,33 +84,35 @@ extension Zip {
//MARK: Quick Zip
/**
- Quick zip files.
+ Quickly zips files.
- - parameter paths: Array of NSURL filepaths.
- - parameter fileName: File name for the resulting zip file.
+ - Parameters:
+ - paths: Array of `URL` filepaths.
+ - fileName: File name for the resulting zip file.
- - throws: Error if zipping fails.
+ - Throws: `ZipError.zipFail` if zipping fails.
- - notes: Supports implicit progress composition
+ > Note: Supports implicit progress composition.
- - returns: NSURL of the destination folder.
+ - Returns: `URL` of the destination folder.
*/
public class func quickZipFiles(_ paths: [URL], fileName: String) throws -> URL {
return try quickZipFiles(paths, fileName: fileName, progress: nil)
}
/**
- Quick zip files.
+ Quickly zips files.
- - parameter paths: Array of NSURL filepaths.
- - parameter fileName: File name for the resulting zip file.
- - parameter progress: A progress closure called after unzipping each file in the archive. Double value betweem 0 and 1.
+ - Parameters:
+ - paths: Array of `URL` filepaths.
+ - fileName: File name for the resulting zip file.
+ - progress: A progress closure called after unzipping each file in the archive. `Double` value between 0 and 1.
- - throws: Error if zipping fails.
+ - Throws: `ZipError.zipFail` if zipping fails.
- - notes: Supports implicit progress composition
+ > Note: Supports implicit progress composition.
- - returns: NSURL of the destination folder.
+ - Returns: `URL` of the destination folder.
*/
public class func quickZipFiles(_ paths: [URL], fileName: String, progress: ((_ progress: Double) -> ())?) throws -> URL {
let fileManager = FileManager.default
@@ -120,6 +127,4 @@ extension Zip {
try self.zipFiles(paths: paths, zipFilePath: destinationUrl, password: nil, progress: progress)
return destinationUrl
}
-
-
}
diff --git a/Zip/Zip.swift b/Zip/Zip.swift
index f6830c92..1318de1a 100644
--- a/Zip/Zip.swift
+++ b/Zip/Zip.swift
@@ -9,95 +9,35 @@
import Foundation
@_implementationOnly import Minizip
-/// Zip error type
-public enum ZipError: Error {
- /// File not found
- case fileNotFound
- /// Unzip fail
- case unzipFail
- /// Zip fail
- case zipFail
-
- /// User readable description
- public var description: String {
- switch self {
- case .fileNotFound: return NSLocalizedString("File not found.", comment: "")
- case .unzipFail: return NSLocalizedString("Failed to unzip file.", comment: "")
- case .zipFail: return NSLocalizedString("Failed to zip file.", comment: "")
- }
- }
-}
-
-public enum ZipCompression: Int {
- case NoCompression
- case BestSpeed
- case DefaultCompression
- case BestCompression
-
- internal var minizipCompression: Int32 {
- switch self {
- case .NoCompression:
- return Z_NO_COMPRESSION
- case .BestSpeed:
- return Z_BEST_SPEED
- case .DefaultCompression:
- return Z_DEFAULT_COMPRESSION
- case .BestCompression:
- return Z_BEST_COMPRESSION
- }
- }
-}
-
-/// Data in memory that will be archived as a file.
-public struct ArchiveFile {
- var filename:String
- var data:NSData
- var modifiedTime:Date?
-
- public init(filename:String, data:NSData, modifiedTime:Date?) {
- self.filename = filename
- self.data = data
- self.modifiedTime = modifiedTime
- }
-}
-
-
-/// Zip class
+/// Main class that handles zipping and unzipping of files.
public class Zip {
-
/**
Set of vaild file extensions
*/
internal static var customFileExtensions: Set = []
-
+
// MARK: Lifecycle
-
- /**
- Init
-
- - returns: Zip object
- */
- public init () {
- }
+
+ @available(*, deprecated, message: "Do not use this initializer. Zip is a utility class and should not be instantiated.")
+ public init () {}
// MARK: Unzip
/**
- Unzip file
+ Unzips a file.
- - parameter zipFilePath: Local file path of zipped file. NSURL.
- - parameter destination: Local file path to unzip to. NSURL.
- - parameter overwrite: Overwrite bool.
- - parameter password: Optional password if file is protected.
- - parameter progress: A progress closure called after unzipping each file in the archive. Double value betweem 0 and 1.
+ - Parameters:
+ - zipFilePath: Local file path of zipped file.
+ - destination: Local file path to unzip to.
+ - overwrite: Overwrite `bool`.
+ - password: Optional password if file is protected.
+ - progress: A progress closure called after unzipping each file in the archive. `Double` value between 0 and 1.
+
+ - Throws: `ZipError.unzipFail` if unzipping fails or if fail is not found.
- - throws: Error if unzipping fails or if fail is not found. Can be printed with a description variable.
-
- - notes: Supports implicit progress composition
+ > Note: Supports implicit progress composition
*/
-
public class func unzipFile(_ zipFilePath: URL, destination: URL, overwrite: Bool, password: String?, progress: ((_ progress: Double) -> ())? = nil, fileOutputHandler: ((_ unzippedFile: URL) -> Void)? = nil) throws {
-
// File manager
let fileManager = FileManager.default
@@ -138,8 +78,7 @@ public class Zip {
repeat {
if let cPassword = password?.cString(using: String.Encoding.ascii) {
ret = unzOpenCurrentFilePassword(zip, cPassword)
- }
- else {
+ } else {
ret = unzOpenCurrentFile(zip);
}
if ret != UNZ_OK {
@@ -192,15 +131,16 @@ public class Zip {
// See https://github.com/apple/swift-corelibs-foundation/blob/swift-4.2-branch/Foundation/FileManager.swift#L182-L196
directoryAttributes = nil
#else
- directoryAttributes = [.creationDate : creationDate,
- .modificationDate : creationDate]
+ directoryAttributes = [
+ .creationDate: creationDate,
+ .modificationDate: creationDate
+ ]
#endif
do {
if isDirectory {
try fileManager.createDirectory(atPath: fullPath, withIntermediateDirectories: true, attributes: directoryAttributes)
- }
- else {
+ } else {
let parentDirectory = (fullPath as NSString).deletingLastPathComponent
try fileManager.createDirectory(atPath: parentDirectory, withIntermediateDirectories: true, attributes: directoryAttributes)
}
@@ -220,10 +160,7 @@ public class Zip {
throw ZipError.unzipFail
}
writeBytes += UInt64(readBytes)
- }
- else {
- break
- }
+ } else { break }
}
if let fp = filePointer { fclose(fp) }
@@ -272,27 +209,25 @@ public class Zip {
}
progressTracker.completedUnitCount = Int64(totalSize)
-
}
// MARK: Zip
-
/**
- Zip files.
+ Zips a group of files.
- - parameter paths: Array of NSURL filepaths.
- - parameter zipFilePath: Destination NSURL, should lead to a .zip filepath.
- - parameter password: Password string. Optional.
- - parameter compression: Compression strategy
- - parameter progress: A progress closure called after unzipping each file in the archive. Double value betweem 0 and 1.
+ - Parameters:
+ - paths: Array of `URL` filepaths.
+ - zipFilePath: Destination `URL`, should lead to a `.zip` filepath.
+ - password: Password string. Optional.
+ - compression: Compression strategy
+ - progress: A progress closure called after unzipping each file in the archive. `Double` value between 0 and 1.
+
+ - Throws: `ZipError.zipFail` if zipping fails.
- - throws: Error if zipping fails.
-
- - notes: Supports implicit progress composition
+ > Note: Supports implicit progress composition
*/
public class func zipFiles(paths: [URL], zipFilePath: URL, password: String?, compression: ZipCompression = .DefaultCompression, progress: ((_ progress: Double) -> ())?) throws {
-
// File manager
let fileManager = FileManager.default
@@ -317,8 +252,7 @@ public class Zip {
if let fileSize = fileSize {
totalSize += fileSize
}
- }
- catch {}
+ } catch {}
}
let progressTracker = Progress(totalUnitCount: Int64(totalSize))
@@ -353,18 +287,15 @@ public class Zip {
if let fileSize = fileAttributes[FileAttributeKey.size] as? Double {
currentPosition += fileSize
}
- }
- catch {}
+ } catch {}
guard let buffer = malloc(chunkSize) else {
throw ZipError.zipFail
}
if let password = password, let fileName = fileName {
zipOpenNewFileInZip3(zip, fileName, &zipInfo, nil, 0, nil, 0, nil,Z_DEFLATED, compression.minizipCompression, 0, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, password, 0)
- }
- else if let fileName = fileName {
+ } else if let fileName = fileName {
zipOpenNewFileInZip3(zip, fileName, &zipInfo, nil, 0, nil, 0, nil,Z_DEFLATED, compression.minizipCompression, 0, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, nil, 0)
- }
- else {
+ } else {
throw ZipError.zipFail
}
var length: Int = 0
@@ -395,147 +326,46 @@ public class Zip {
progressTracker.completedUnitCount = Int64(totalSize)
}
-
- /**
- Zip data in memory.
-
- - parameter archiveFiles:Array of Archive Files.
- - parameter zipFilePath: Destination NSURL, should lead to a .zip filepath.
- - parameter password: Password string. Optional.
- - parameter compression: Compression strategy
- - parameter progress: A progress closure called after unzipping each file in the archive. Double value betweem 0 and 1.
-
- - throws: Error if zipping fails.
-
- - notes: Supports implicit progress composition
- */
- public class func zipData(archiveFiles:[ArchiveFile], zipFilePath:URL, password: String?, compression: ZipCompression = .DefaultCompression, progress: ((_ progress: Double) -> ())?) throws {
-
- let destinationPath = zipFilePath.path
-
- // Progress handler set up
- var currentPosition: Int = 0
- var totalSize: Int = 0
-
- for archiveFile in archiveFiles {
- totalSize += archiveFile.data.length
- }
-
- let progressTracker = Progress(totalUnitCount: Int64(totalSize))
- progressTracker.isCancellable = false
- progressTracker.isPausable = false
- progressTracker.kind = ProgressKind.file
-
- // Begin Zipping
- let zip = zipOpen(destinationPath, APPEND_STATUS_CREATE)
-
- for archiveFile in archiveFiles {
-
- // Skip empty data
- if archiveFile.data.length == 0 {
- continue
- }
-
- // Setup the zip file info
- var zipInfo = zip_fileinfo(tmz_date: tm_zip(tm_sec: 0, tm_min: 0, tm_hour: 0, tm_mday: 0, tm_mon: 0, tm_year: 0),
- dosDate: 0,
- internal_fa: 0,
- external_fa: 0)
-
- if let modifiedTime = archiveFile.modifiedTime {
- let calendar = Calendar.current
- zipInfo.tmz_date.tm_sec = UInt32(calendar.component(.second, from: modifiedTime))
- zipInfo.tmz_date.tm_min = UInt32(calendar.component(.minute, from: modifiedTime))
- zipInfo.tmz_date.tm_hour = UInt32(calendar.component(.hour, from: modifiedTime))
- zipInfo.tmz_date.tm_mday = UInt32(calendar.component(.day, from: modifiedTime))
- zipInfo.tmz_date.tm_mon = UInt32(calendar.component(.month, from: modifiedTime))
- zipInfo.tmz_date.tm_year = UInt32(calendar.component(.year, from: modifiedTime))
- }
-
- // Write the data as a file to zip
- zipOpenNewFileInZip3(zip,
- archiveFile.filename,
- &zipInfo,
- nil,
- 0,
- nil,
- 0,
- nil,
- Z_DEFLATED,
- compression.minizipCompression,
- 0,
- -MAX_WBITS,
- DEF_MEM_LEVEL,
- Z_DEFAULT_STRATEGY,
- password,
- 0)
- zipWriteInFileInZip(zip, archiveFile.data.bytes, UInt32(archiveFile.data.length))
- zipCloseFileInZip(zip)
-
- // Update progress handler
- currentPosition += archiveFile.data.length
-
- if let progressHandler = progress{
- progressHandler((Double(currentPosition/totalSize)))
- }
-
- progressTracker.completedUnitCount = Int64(currentPosition)
- }
-
- zipClose(zip, nil)
-
- // Completed. Update progress handler.
- if let progressHandler = progress{
- progressHandler(1.0)
- }
-
- progressTracker.completedUnitCount = Int64(totalSize)
- }
/**
Check if file extension is invalid.
- parameter fileExtension: A file extension.
- - returns: false if the extension is a valid file extension, otherwise true.
+ - returns: `false` if the extension is a valid file extension, otherwise `true`.
*/
internal class func fileExtensionIsInvalid(_ fileExtension: String?) -> Bool {
-
guard let fileExtension = fileExtension else { return true }
-
return !isValidFileExtension(fileExtension)
}
/**
- Add a file extension to the set of custom file extensions
+ Adds a file extension to the set of custom file extensions.
- - parameter fileExtension: A file extension.
+ - Parameter fileExtension: A file extension.
*/
public class func addCustomFileExtension(_ fileExtension: String) {
customFileExtensions.insert(fileExtension)
}
/**
- Remove a file extension from the set of custom file extensions
+ Removes a file extension from the set of custom file extensions.
- - parameter fileExtension: A file extension.
+ - Parameter fileExtension: A file extension.
*/
public class func removeCustomFileExtension(_ fileExtension: String) {
customFileExtensions.remove(fileExtension)
}
/**
- Check if a specific file extension is valid
+ Checks if a specific file extension is valid.
- - parameter fileExtension: A file extension.
+ - Parameter fileExtension: A file extension to check.
- - returns: true if the extension valid, otherwise false.
+ - Returns: `true` if the extension valid, otherwise `false`.
*/
public class func isValidFileExtension(_ fileExtension: String) -> Bool {
-
let validFileExtensions: Set = customFileExtensions.union(["zip", "cbz"])
-
return validFileExtensions.contains(fileExtension)
}
-
}
diff --git a/Zip/ZipCompression.swift b/Zip/ZipCompression.swift
new file mode 100644
index 00000000..d0708f9b
--- /dev/null
+++ b/Zip/ZipCompression.swift
@@ -0,0 +1,29 @@
+//
+// ZipCompression.swift
+// Zip
+//
+// Created by Francesco Paolo Severino on 16/08/2024.
+//
+
+@_implementationOnly import Minizip
+
+/// Zip compression strategies.
+public enum ZipCompression: Int {
+ case NoCompression
+ case BestSpeed
+ case DefaultCompression
+ case BestCompression
+
+ internal var minizipCompression: Int32 {
+ switch self {
+ case .NoCompression:
+ return Z_NO_COMPRESSION
+ case .BestSpeed:
+ return Z_BEST_SPEED
+ case .DefaultCompression:
+ return Z_DEFAULT_COMPRESSION
+ case .BestCompression:
+ return Z_BEST_COMPRESSION
+ }
+ }
+}
\ No newline at end of file
diff --git a/Zip/ZipError.swift b/Zip/ZipError.swift
new file mode 100644
index 00000000..fdbc413b
--- /dev/null
+++ b/Zip/ZipError.swift
@@ -0,0 +1,27 @@
+//
+// ZipError.swift
+// Zip
+//
+// Created by Francesco Paolo Severino on 16/08/2024.
+//
+
+import Foundation
+
+/// Errors that can be thrown by Zip.
+public enum ZipError: Error {
+ /// The file was not found
+ case fileNotFound
+ /// Unzip failure
+ case unzipFail
+ /// Zip failure
+ case zipFail
+
+ /// A textual representation of this error.
+ public var description: String {
+ switch self {
+ case .fileNotFound: return NSLocalizedString("File not found.", comment: "")
+ case .unzipFail: return NSLocalizedString("Failed to unzip file.", comment: "")
+ case .zipFail: return NSLocalizedString("Failed to zip file.", comment: "")
+ }
+ }
+}
diff --git a/Zip/ZipUtilities.swift b/Zip/ZipUtilities.swift
index 0bcec54e..01cd6885 100644
--- a/Zip/ZipUtilities.swift
+++ b/Zip/ZipUtilities.swift
@@ -9,7 +9,6 @@
import Foundation
internal class ZipUtilities {
-
/*
Include root directory.
Default is true.
@@ -55,7 +54,7 @@ internal class ZipUtilities {
- returns: Array of ProcessedFilePath structs.
*/
- internal func processZipPaths(_ paths: [URL]) -> [ProcessedFilePath]{
+ internal func processZipPaths(_ paths: [URL]) -> [ProcessedFilePath] {
var processedFilePaths = [ProcessedFilePath]()
for path in paths {
let filePath = path.path
@@ -64,8 +63,7 @@ internal class ZipUtilities {
if !isDirectory.boolValue {
let processedPath = ProcessedFilePath(filePathURL: path, fileName: path.lastPathComponent)
processedFilePaths.append(processedPath)
- }
- else {
+ } else {
let directoryContents = expandDirectoryFilePath(path)
processedFilePaths.append(contentsOf: directoryContents)
}
diff --git a/ZipTests/Info.plist b/ZipTests/Info.plist
deleted file mode 100644
index db36cdf0..00000000
--- a/ZipTests/Info.plist
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- BNDL
- CFBundleShortVersionString
- 2.1.2
- CFBundleSignature
- ????
- CFBundleVersion
- 17
-
-
diff --git a/ZipTests/XCTestManifests.swift b/ZipTests/XCTestManifests.swift
deleted file mode 100644
index b90685d6..00000000
--- a/ZipTests/XCTestManifests.swift
+++ /dev/null
@@ -1,39 +0,0 @@
-#if !canImport(ObjectiveC)
-import XCTest
-
-extension ZipTests {
- // DO NOT MODIFY: This is autogenerated, use:
- // `swift test --generate-linuxmain`
- // to regenerate.
- static let __allTests__ZipTests = [
- ("testAddedCustomFileExtensionIsValid", testAddedCustomFileExtensionIsValid),
- ("testDefaultFileExtensionsIsNotRemoved", testDefaultFileExtensionsIsNotRemoved),
- ("testDefaultFileExtensionsIsValid", testDefaultFileExtensionsIsValid),
- ("testFileExtensionIsInvalidForInvalidUrl", testFileExtensionIsInvalidForInvalidUrl),
- ("testFileExtensionIsNotInvalidForValidUrl", testFileExtensionIsNotInvalidForValidUrl),
- ("testImplicitProgressUnzip", testImplicitProgressUnzip),
- ("testImplicitProgressZip", testImplicitProgressZip),
- ("testQuickUnzip", testQuickUnzip),
- ("testQuickUnzipNonExistingPath", testQuickUnzipNonExistingPath),
- ("testQuickUnzipNonZipPath", testQuickUnzipNonZipPath),
- ("testQuickUnzipOnlineURL", testQuickUnzipOnlineURL),
- ("testQuickUnzipProgress", testQuickUnzipProgress),
- ("testQuickUnzipSubDir", testQuickUnzipSubDir),
- ("testQuickZip", testQuickZip),
- ("testQuickZipFolder", testQuickZipFolder),
- ("testRemovedCustomFileExtensionIsInvalid", testRemovedCustomFileExtensionIsInvalid),
- ("testUnzip", testUnzip),
- ("testUnzipPermissions", testUnzipPermissions),
- ("testUnzipProtectsAgainstPathTraversal", testUnzipProtectsAgainstPathTraversal),
- ("testUnzipWithUnsupportedPermissions", testUnzipWithUnsupportedPermissions),
- ("testZip", testZip),
- ("testZipUnzipPassword", testZipUnzipPassword),
- ]
-}
-
-public func __allTests() -> [XCTestCaseEntry] {
- return [
- testCase(ZipTests.__allTests__ZipTests),
- ]
-}
-#endif
diff --git a/build-universal-xcframework.sh b/build-universal-xcframework.sh
deleted file mode 100755
index 33bfe88f..00000000
--- a/build-universal-xcframework.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-
-# build-universal-xcframework.sh
-# Zip
-#
-# Created by Rohan on 13/01/21.
-# Copyright © 2021 Roy Marmelstein. All rights reserved.
-
-set -e
-
-BUILD_DIR=build
-NAME=Zip
-
-# clean build folders
-if [ -d ${BUILD_DIR} ]; then
- rm -rf ${BUILD_DIR}
-fi
-
-if [ -d "${NAME}.xcframework" ]; then
- rm -rf "${NAME}.xcframework"
-fi
-
-mkdir ${BUILD_DIR}
-
-# iOS devices
-TARGET=iphoneos
-xcodebuild archive \
- -scheme ${NAME} \
- -archivePath "./${BUILD_DIR}/${NAME}-${TARGET}.xcarchive" \
- -sdk ${TARGET} \
- SKIP_INSTALL=NO \
- BUILD_LIBRARY_FOR_DISTRIBUTION=YES
-
-# iOS simulator
-TARGET=iphonesimulator
-xcodebuild archive \
- -scheme ${NAME} \
- -archivePath "./${BUILD_DIR}/${NAME}-${TARGET}.xcarchive" \
- -sdk ${TARGET} \
- SKIP_INSTALL=NO \
- BUILD_LIBRARY_FOR_DISTRIBUTION=YES
-
-# tvOS devices
-TARGET=appletvos
-xcodebuild archive \
- -scheme "${NAME} tvOS" \
- -archivePath "./${BUILD_DIR}/${NAME}-${TARGET}.xcarchive" \
- -sdk ${TARGET} \
- SKIP_INSTALL=NO \
- BUILD_LIBRARY_FOR_DISTRIBUTION=YES
-
-# tvOS simulator
-TARGET=appletvsimulator
-xcodebuild archive \
- -scheme "${NAME} tvOS" \
- -archivePath "./${BUILD_DIR}/${NAME}-${TARGET}.xcarchive" \
- -sdk ${TARGET} \
- SKIP_INSTALL=NO \
- BUILD_LIBRARY_FOR_DISTRIBUTION=YES
-
-# macOS devices
-TARGET=macosx
-xcodebuild archive \
- -scheme "${NAME} OSX" \
- -archivePath "./${BUILD_DIR}/${NAME}-${TARGET}.xcarchive" \
- -sdk ${TARGET} \
- SKIP_INSTALL=NO \
- BUILD_LIBRARY_FOR_DISTRIBUTION=YES
-
-# packing .framework to .xcframework
-FWMK_FILES=$(find "./${BUILD_DIR}" -name "*.framework")
-for FWMK_FILE in ${FWMK_FILES}
-do
- FWMK_FILES_CMD="-framework ${FWMK_FILE} ${FWMK_FILES_CMD}"
-done
-
-xcodebuild -create-xcframework \
- ${FWMK_FILES_CMD} \
- -output "${NAME}.xcframework"
diff --git a/build.sh b/build.sh
deleted file mode 100755
index 6135daaf..00000000
--- a/build.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/bash
-
-# **** Update me when new Xcode versions are released! ****
-PLATFORM="platform=iOS Simulator,OS=14.0,name=iPhone 11"
-SDK="iphonesimulator"
-
-# It is pitch black.
-set -e
-function trap_handler() {
- echo -e "\n\nOh no! You walked directly into the slavering fangs of a lurking grue!"
- echo "**** You have died ****"
- exit 255
-}
-trap trap_handler INT TERM EXIT
-
-MODE="$1"
-
-if [ "$MODE" = "framework" ]; then
- echo "Building and testing Zip."
- xcodebuild \
- -project Zip.xcodeproj \
- -scheme Zip \
- -sdk "$SDK" \
- -destination "$PLATFORM" \
- test
- trap - EXIT
- exit 0
-fi
-
-if [ "$MODE" = "spm" ]; then
- echo "Building and testing Zip with SPM."
- swift test
- trap - EXIT
- exit 0
-fi
-
-if [ "$MODE" = "examples" ]; then
- echo "Building all Zip examples."
-
- for example in examples/*/; do
- echo "Building $example."
- xcodebuild \
- -project "${example}Sample.xcodeproj" \
- -scheme Sample \
- -sdk "$SDK" \
- -destination "$PLATFORM"
- done
- trap - EXIT
- exit 0
-fi
-
-echo "Unrecognised mode '$MODE'."
diff --git a/examples/README.md b/examples/README.md
deleted file mode 100644
index 3c01ad68..00000000
--- a/examples/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Sample projects
-
-## Building
-
-Run `pod install` in each sample project directory to set up their
-dependencies.
diff --git a/examples/Sample/Sample.xcodeproj/project.pbxproj b/examples/Sample/Sample.xcodeproj/project.pbxproj
deleted file mode 100644
index 9138945b..00000000
--- a/examples/Sample/Sample.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,506 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 52;
- objects = {
-
-/* Begin PBXBuildFile section */
- 34220B42251D38BB007597C4 /* Zip in Frameworks */ = {isa = PBXBuildFile; productRef = 34220B41251D38BB007597C4 /* Zip */; };
- 3430F6711C45C930007473A6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3430F6701C45C930007473A6 /* AppDelegate.swift */; };
- 3430F6761C45C930007473A6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3430F6741C45C930007473A6 /* Main.storyboard */; };
- 3430F6781C45C930007473A6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3430F6771C45C930007473A6 /* Assets.xcassets */; };
- 3430F67B1C45C930007473A6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3430F6791C45C930007473A6 /* LaunchScreen.storyboard */; };
- 3430F6861C45C930007473A6 /* SampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3430F6851C45C930007473A6 /* SampleTests.swift */; };
- 3467DAED1C4BADB700BA3DB8 /* FileBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3467DAEC1C4BADB700BA3DB8 /* FileBrowser.swift */; };
- 3467DAF31C4BF17900BA3DB8 /* Image1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 3467DAEF1C4BF17900BA3DB8 /* Image1.jpg */; };
- 3467DAF41C4BF17900BA3DB8 /* Image2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 3467DAF01C4BF17900BA3DB8 /* Image2.jpg */; };
- 3467DAF51C4BF17900BA3DB8 /* Image3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 3467DAF11C4BF17900BA3DB8 /* Image3.jpg */; };
- 3467DAF61C4BF17900BA3DB8 /* Images.zip in Resources */ = {isa = PBXBuildFile; fileRef = 3467DAF21C4BF17900BA3DB8 /* Images.zip */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 3430F6821C45C930007473A6 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 3430F6651C45C930007473A6 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3430F66C1C45C930007473A6;
- remoteInfo = Sample;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
- 3430F69D1C45C949007473A6 /* Embed Frameworks */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 10;
- files = (
- );
- name = "Embed Frameworks";
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
- 3430F66D1C45C930007473A6 /* Sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Sample.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 3430F6701C45C930007473A6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
- 3430F6751C45C930007473A6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
- 3430F6771C45C930007473A6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
- 3430F67A1C45C930007473A6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
- 3430F67C1C45C930007473A6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 3430F6811C45C930007473A6 /* SampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 3430F6851C45C930007473A6 /* SampleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleTests.swift; sourceTree = ""; };
- 3430F6871C45C930007473A6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 3467DAEC1C4BADB700BA3DB8 /* FileBrowser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileBrowser.swift; sourceTree = ""; };
- 3467DAEF1C4BF17900BA3DB8 /* Image1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = Image1.jpg; sourceTree = ""; };
- 3467DAF01C4BF17900BA3DB8 /* Image2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = Image2.jpg; sourceTree = ""; };
- 3467DAF11C4BF17900BA3DB8 /* Image3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = Image3.jpg; sourceTree = ""; };
- 3467DAF21C4BF17900BA3DB8 /* Images.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = Images.zip; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 3430F66A1C45C930007473A6 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 34220B42251D38BB007597C4 /* Zip in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3430F67E1C45C930007473A6 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 3430F6641C45C930007473A6 = {
- isa = PBXGroup;
- children = (
- 3430F66F1C45C930007473A6 /* Sample */,
- 3430F6841C45C930007473A6 /* SampleTests */,
- 3430F66E1C45C930007473A6 /* Products */,
- );
- sourceTree = "";
- };
- 3430F66E1C45C930007473A6 /* Products */ = {
- isa = PBXGroup;
- children = (
- 3430F66D1C45C930007473A6 /* Sample.app */,
- 3430F6811C45C930007473A6 /* SampleTests.xctest */,
- );
- name = Products;
- sourceTree = "";
- };
- 3430F66F1C45C930007473A6 /* Sample */ = {
- isa = PBXGroup;
- children = (
- 3430F6701C45C930007473A6 /* AppDelegate.swift */,
- 3467DAEC1C4BADB700BA3DB8 /* FileBrowser.swift */,
- 3467DAEF1C4BF17900BA3DB8 /* Image1.jpg */,
- 3467DAF01C4BF17900BA3DB8 /* Image2.jpg */,
- 3467DAF11C4BF17900BA3DB8 /* Image3.jpg */,
- 3467DAF21C4BF17900BA3DB8 /* Images.zip */,
- 3430F6741C45C930007473A6 /* Main.storyboard */,
- 3430F6771C45C930007473A6 /* Assets.xcassets */,
- 3430F6791C45C930007473A6 /* LaunchScreen.storyboard */,
- 3430F67C1C45C930007473A6 /* Info.plist */,
- );
- path = Sample;
- sourceTree = "";
- };
- 3430F6841C45C930007473A6 /* SampleTests */ = {
- isa = PBXGroup;
- children = (
- 3430F6851C45C930007473A6 /* SampleTests.swift */,
- 3430F6871C45C930007473A6 /* Info.plist */,
- );
- path = SampleTests;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 3430F66C1C45C930007473A6 /* Sample */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3430F68A1C45C930007473A6 /* Build configuration list for PBXNativeTarget "Sample" */;
- buildPhases = (
- 3430F6691C45C930007473A6 /* Sources */,
- 3430F66A1C45C930007473A6 /* Frameworks */,
- 3430F66B1C45C930007473A6 /* Resources */,
- 3430F69D1C45C949007473A6 /* Embed Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = Sample;
- packageProductDependencies = (
- 34220B41251D38BB007597C4 /* Zip */,
- );
- productName = Sample;
- productReference = 3430F66D1C45C930007473A6 /* Sample.app */;
- productType = "com.apple.product-type.application";
- };
- 3430F6801C45C930007473A6 /* SampleTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3430F68D1C45C930007473A6 /* Build configuration list for PBXNativeTarget "SampleTests" */;
- buildPhases = (
- 3430F67D1C45C930007473A6 /* Sources */,
- 3430F67E1C45C930007473A6 /* Frameworks */,
- 3430F67F1C45C930007473A6 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 3430F6831C45C930007473A6 /* PBXTargetDependency */,
- );
- name = SampleTests;
- productName = SampleTests;
- productReference = 3430F6811C45C930007473A6 /* SampleTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 3430F6651C45C930007473A6 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastSwiftUpdateCheck = 0720;
- LastUpgradeCheck = 1200;
- ORGANIZATIONNAME = "Roy Marmelstein";
- TargetAttributes = {
- 3430F66C1C45C930007473A6 = {
- CreatedOnToolsVersion = 7.2;
- LastSwiftMigration = 0800;
- };
- 3430F6801C45C930007473A6 = {
- CreatedOnToolsVersion = 7.2;
- LastSwiftMigration = 0800;
- TestTargetID = 3430F66C1C45C930007473A6;
- };
- };
- };
- buildConfigurationList = 3430F6681C45C930007473A6 /* Build configuration list for PBXProject "Sample" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 3430F6641C45C930007473A6;
- packageReferences = (
- 34220B40251D38BA007597C4 /* XCRemoteSwiftPackageReference "Zip" */,
- );
- productRefGroup = 3430F66E1C45C930007473A6 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 3430F66C1C45C930007473A6 /* Sample */,
- 3430F6801C45C930007473A6 /* SampleTests */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 3430F66B1C45C930007473A6 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3467DAF41C4BF17900BA3DB8 /* Image2.jpg in Resources */,
- 3467DAF51C4BF17900BA3DB8 /* Image3.jpg in Resources */,
- 3430F67B1C45C930007473A6 /* LaunchScreen.storyboard in Resources */,
- 3467DAF61C4BF17900BA3DB8 /* Images.zip in Resources */,
- 3467DAF31C4BF17900BA3DB8 /* Image1.jpg in Resources */,
- 3430F6781C45C930007473A6 /* Assets.xcassets in Resources */,
- 3430F6761C45C930007473A6 /* Main.storyboard in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3430F67F1C45C930007473A6 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 3430F6691C45C930007473A6 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3467DAED1C4BADB700BA3DB8 /* FileBrowser.swift in Sources */,
- 3430F6711C45C930007473A6 /* AppDelegate.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3430F67D1C45C930007473A6 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3430F6861C45C930007473A6 /* SampleTests.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 3430F6831C45C930007473A6 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3430F66C1C45C930007473A6 /* Sample */;
- targetProxy = 3430F6821C45C930007473A6 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
- 3430F6741C45C930007473A6 /* Main.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- 3430F6751C45C930007473A6 /* Base */,
- );
- name = Main.storyboard;
- sourceTree = "";
- };
- 3430F6791C45C930007473A6 /* LaunchScreen.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- 3430F67A1C45C930007473A6 /* Base */,
- );
- name = LaunchScreen.storyboard;
- sourceTree = "";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- 3430F6881C45C930007473A6 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- };
- name = Debug;
- };
- 3430F6891C45C930007473A6 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- MTL_ENABLE_DEBUG_INFO = NO;
- SDKROOT = iphoneos;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
- SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- 3430F68B1C45C930007473A6 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- INFOPLIST_FILE = Sample/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.Sample;
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Debug;
- };
- 3430F68C1C45C930007473A6 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- INFOPLIST_FILE = Sample/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.Sample;
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Release;
- };
- 3430F68E1C45C930007473A6 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- BUNDLE_LOADER = "$(TEST_HOST)";
- INFOPLIST_FILE = SampleTests/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.SampleTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Sample.app/Sample";
- };
- name = Debug;
- };
- 3430F68F1C45C930007473A6 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- BUNDLE_LOADER = "$(TEST_HOST)";
- INFOPLIST_FILE = SampleTests/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.SampleTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Sample.app/Sample";
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 3430F6681C45C930007473A6 /* Build configuration list for PBXProject "Sample" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3430F6881C45C930007473A6 /* Debug */,
- 3430F6891C45C930007473A6 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3430F68A1C45C930007473A6 /* Build configuration list for PBXNativeTarget "Sample" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3430F68B1C45C930007473A6 /* Debug */,
- 3430F68C1C45C930007473A6 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3430F68D1C45C930007473A6 /* Build configuration list for PBXNativeTarget "SampleTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3430F68E1C45C930007473A6 /* Debug */,
- 3430F68F1C45C930007473A6 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
-
-/* Begin XCRemoteSwiftPackageReference section */
- 34220B40251D38BA007597C4 /* XCRemoteSwiftPackageReference "Zip" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/marmelroy/Zip.git";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 2.0.0;
- };
- };
-/* End XCRemoteSwiftPackageReference section */
-
-/* Begin XCSwiftPackageProductDependency section */
- 34220B41251D38BB007597C4 /* Zip */ = {
- isa = XCSwiftPackageProductDependency;
- package = 34220B40251D38BA007597C4 /* XCRemoteSwiftPackageReference "Zip" */;
- productName = Zip;
- };
-/* End XCSwiftPackageProductDependency section */
- };
- rootObject = 3430F6651C45C930007473A6 /* Project object */;
-}
diff --git a/examples/Sample/Sample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/Sample/Sample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 919434a6..00000000
--- a/examples/Sample/Sample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/examples/Sample/Sample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/Sample/Sample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d98100..00000000
--- a/examples/Sample/Sample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/examples/Sample/Sample.xcodeproj/project.xcworkspace/xcshareddata/Sample.xcscmblueprint b/examples/Sample/Sample.xcodeproj/project.xcworkspace/xcshareddata/Sample.xcscmblueprint
deleted file mode 100644
index e1e6f1fe..00000000
--- a/examples/Sample/Sample.xcodeproj/project.xcworkspace/xcshareddata/Sample.xcscmblueprint
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "3DD768C8AB2D6A2647C9EF99992D3CC5820E77C4",
- "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
-
- },
- "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
- "8DA5B175D3FDB92A3B3CCBD4109A734F1316A3DD" : 0,
- "3DD768C8AB2D6A2647C9EF99992D3CC5820E77C4" : 0
- },
- "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "D9F60A06-A36C-464E-8749-2F7A099F0BEC",
- "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
- "8DA5B175D3FDB92A3B3CCBD4109A734F1316A3DD" : "Zip\/Zip\/minizip\/",
- "3DD768C8AB2D6A2647C9EF99992D3CC5820E77C4" : "Zip\/"
- },
- "DVTSourceControlWorkspaceBlueprintNameKey" : "Sample",
- "DVTSourceControlWorkspaceBlueprintVersion" : 204,
- "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "examples\/Sample\/Sample.xcodeproj",
- "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
- {
- "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/marmelroy\/Zip.git",
- "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
- "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "3DD768C8AB2D6A2647C9EF99992D3CC5820E77C4"
- },
- {
- "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/nmoinvaz\/minizip.git",
- "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
- "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "8DA5B175D3FDB92A3B3CCBD4109A734F1316A3DD"
- }
- ]
-}
\ No newline at end of file
diff --git a/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme b/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme
deleted file mode 100644
index 9a1824b1..00000000
--- a/examples/Sample/Sample.xcodeproj/xcshareddata/xcschemes/Sample.xcscheme
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/Sample/Sample/AppDelegate.swift b/examples/Sample/Sample/AppDelegate.swift
deleted file mode 100644
index 7083e133..00000000
--- a/examples/Sample/Sample/AppDelegate.swift
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// AppDelegate.swift
-// Sample
-//
-// Created by Roy Marmelstein on 13/01/2016.
-// Copyright © 2016 Roy Marmelstein. All rights reserved.
-//
-
-import UIKit
-
-@UIApplicationMain
-class AppDelegate: UIResponder, UIApplicationDelegate {
-
- var window: UIWindow?
-
-
- func applicationDidFinishLaunching(_ application: UIApplication) {
- if UserDefaults.standard.bool(forKey: "firstLaunch") == false {
- UserDefaults.standard.set(true, forKey: "firstLaunch")
- UserDefaults.standard.synchronize()
- let fileManager = FileManager.default
- let fileNames = ["Image1.jpg", "Image2.jpg", "Image3.jpg", "Images.zip"]
- let documentsUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] as URL
- let bundleUrl = Bundle.main.resourceURL
- for file in fileNames {
- if let srcPath = bundleUrl?.appendingPathComponent(file).path{
- let toPath = documentsUrl.appendingPathComponent(file).path
- do {
- try fileManager.copyItem(atPath: srcPath, toPath: toPath)
- } catch {}
- }
- }
- }
- }
-
- func applicationWillResignActive(_ application: UIApplication) {
- // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
- // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
- }
-
- func applicationDidEnterBackground(_ application: UIApplication) {
- // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
- // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
- }
-
- func applicationWillEnterForeground(_ application: UIApplication) {
- // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
- }
-
- func applicationDidBecomeActive(_ application: UIApplication) {
- // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
- }
-
- func applicationWillTerminate(_ application: UIApplication) {
- // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
- }
-
-
-}
-
diff --git a/examples/Sample/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/Sample/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 118c98f7..00000000
--- a/examples/Sample/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "iphone",
- "size" : "29x29",
- "scale" : "2x"
- },
- {
- "idiom" : "iphone",
- "size" : "29x29",
- "scale" : "3x"
- },
- {
- "idiom" : "iphone",
- "size" : "40x40",
- "scale" : "2x"
- },
- {
- "idiom" : "iphone",
- "size" : "40x40",
- "scale" : "3x"
- },
- {
- "idiom" : "iphone",
- "size" : "60x60",
- "scale" : "2x"
- },
- {
- "idiom" : "iphone",
- "size" : "60x60",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/examples/Sample/Sample/Assets.xcassets/Contents.json b/examples/Sample/Sample/Assets.xcassets/Contents.json
deleted file mode 100644
index da4a164c..00000000
--- a/examples/Sample/Sample/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/examples/Sample/Sample/Assets.xcassets/File.imageset/738-document-1.png b/examples/Sample/Sample/Assets.xcassets/File.imageset/738-document-1.png
deleted file mode 100644
index b604d45e..00000000
Binary files a/examples/Sample/Sample/Assets.xcassets/File.imageset/738-document-1.png and /dev/null differ
diff --git a/examples/Sample/Sample/Assets.xcassets/File.imageset/738-document-1@2x.png b/examples/Sample/Sample/Assets.xcassets/File.imageset/738-document-1@2x.png
deleted file mode 100644
index 358af8b1..00000000
Binary files a/examples/Sample/Sample/Assets.xcassets/File.imageset/738-document-1@2x.png and /dev/null differ
diff --git a/examples/Sample/Sample/Assets.xcassets/File.imageset/Contents.json b/examples/Sample/Sample/Assets.xcassets/File.imageset/Contents.json
deleted file mode 100644
index 826f17f9..00000000
--- a/examples/Sample/Sample/Assets.xcassets/File.imageset/Contents.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "738-document-1.png",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "filename" : "738-document-1@2x.png",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/examples/Sample/Sample/Assets.xcassets/Folder.imageset/710-folder.png b/examples/Sample/Sample/Assets.xcassets/Folder.imageset/710-folder.png
deleted file mode 100644
index b1a422b6..00000000
Binary files a/examples/Sample/Sample/Assets.xcassets/Folder.imageset/710-folder.png and /dev/null differ
diff --git a/examples/Sample/Sample/Assets.xcassets/Folder.imageset/710-folder@2x.png b/examples/Sample/Sample/Assets.xcassets/Folder.imageset/710-folder@2x.png
deleted file mode 100644
index f79e8b7b..00000000
Binary files a/examples/Sample/Sample/Assets.xcassets/Folder.imageset/710-folder@2x.png and /dev/null differ
diff --git a/examples/Sample/Sample/Assets.xcassets/Folder.imageset/Contents.json b/examples/Sample/Sample/Assets.xcassets/Folder.imageset/Contents.json
deleted file mode 100644
index 89993576..00000000
--- a/examples/Sample/Sample/Assets.xcassets/Folder.imageset/Contents.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "710-folder.png",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "filename" : "710-folder@2x.png",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/examples/Sample/Sample/Base.lproj/LaunchScreen.storyboard b/examples/Sample/Sample/Base.lproj/LaunchScreen.storyboard
deleted file mode 100644
index 78686cd0..00000000
--- a/examples/Sample/Sample/Base.lproj/LaunchScreen.storyboard
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/Sample/Sample/Base.lproj/Main.storyboard b/examples/Sample/Sample/Base.lproj/Main.storyboard
deleted file mode 100644
index 9e3617cc..00000000
--- a/examples/Sample/Sample/Base.lproj/Main.storyboard
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/Sample/Sample/FileBrowser.swift b/examples/Sample/Sample/FileBrowser.swift
deleted file mode 100644
index 75c6d672..00000000
--- a/examples/Sample/Sample/FileBrowser.swift
+++ /dev/null
@@ -1,166 +0,0 @@
-//
-// FileBrowser.swift
-// Sample
-//
-// Created by Roy Marmelstein on 17/01/2016.
-// Copyright © 2016 Roy Marmelstein. All rights reserved.
-//
-
-import UIKit
-import Zip
-
-class FileBrowser: UIViewController, UITableViewDataSource, UITableViewDelegate {
-
- // IBOutlets
- @IBOutlet weak var tableView: UITableView!
- @IBOutlet weak var selectionCounter: UIBarButtonItem!
- @IBOutlet weak var zipButton: UIBarButtonItem!
- @IBOutlet weak var unzipButton: UIBarButtonItem!
-
- let fileManager = FileManager.default
-
- var path: URL? {
- didSet {
- updateFiles()
- }
- }
-
-
- var files = [String]()
-
- var selectedFiles = [String]()
-
- //MARK: Lifecycle
-
- override func viewDidLoad() {
- if self.path == nil {
- let documentsUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] as URL
- self.path = documentsUrl
- }
- updateSelection()
- }
-
- //MARK: File manager
-
- func updateFiles() {
- if let filePath = path {
- var tempFiles = [String]()
- do {
- self.title = filePath.lastPathComponent
- tempFiles = try self.fileManager.contentsOfDirectory(atPath: filePath.path)
- } catch {
- if filePath.path == "/System" {
- tempFiles = ["Library"]
- }
- if filePath.path == "/Library" {
- tempFiles = ["Preferences"]
- }
- if filePath.path == "/var" {
- tempFiles = ["mobile"]
- }
- if filePath.path == "/usr" {
- tempFiles = ["lib", "libexec", "bin"]
- }
- }
- self.files = tempFiles.sorted(){$0 < $1}
- tableView.reloadData()
- }
- }
-
- //MARK: UITableView Data Source and Delegate
-
- func numberOfSections(in tableView: UITableView) -> Int {
- return 1
- }
-
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return files.count
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cellIdentifier = "FileCell"
- var cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellIdentifier)
- if let reuseCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) {
- cell = reuseCell
- }
- guard let path = path else {
- return cell
- }
- cell.selectionStyle = .none
- let filePath = files[(indexPath as NSIndexPath).row]
- let newPath = path.appendingPathComponent(filePath).path
- var isDirectory: ObjCBool = false
- fileManager.fileExists(atPath: newPath, isDirectory: &isDirectory)
- cell.textLabel?.text = files[(indexPath as NSIndexPath).row]
- if isDirectory.boolValue {
- cell.imageView?.image = UIImage(named: "Folder")
- }
- else {
- cell.imageView?.image = UIImage(named: "File")
- }
- cell.backgroundColor = (selectedFiles.contains(filePath)) ? UIColor(white: 0.9, alpha: 1.0):UIColor.white
- return cell
- }
-
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- let filePath = files[(indexPath as NSIndexPath).row]
- if let index = selectedFiles.firstIndex(of: filePath), selectedFiles.contains(filePath) {
- selectedFiles.remove(at: index)
- }
- else {
- selectedFiles.append(filePath)
- }
- updateSelection()
- }
-
- func updateSelection() {
- tableView.reloadData()
- selectionCounter.title = "\(selectedFiles.count) Selected"
-
- zipButton.isEnabled = (selectedFiles.count > 0)
- if (selectedFiles.count == 1) {
- let filePath = selectedFiles.first
- let pathExtension = path!.appendingPathComponent(filePath!).pathExtension
- if pathExtension == "zip" {
- unzipButton.isEnabled = true
- }
- else {
- unzipButton.isEnabled = false
- }
- }
- else {
- unzipButton.isEnabled = false
- }
- }
-
- //MARK: Actions
-
- @IBAction func unzipSelection(_ sender: AnyObject) {
- let filePath = selectedFiles.first
- let pathURL = path!.appendingPathComponent(filePath!)
- do {
- let _ = try Zip.quickUnzipFile(pathURL)
- self.selectedFiles.removeAll()
- updateSelection()
- updateFiles()
- } catch {
- print("ERROR")
- }
- }
-
- @IBAction func zipSelection(_ sender: AnyObject) {
- var urlPaths = [URL]()
- for filePath in selectedFiles {
- urlPaths.append(path!.appendingPathComponent(filePath))
- }
- do {
- let _ = try Zip.quickZipFiles(urlPaths, fileName: "Archive")
- self.selectedFiles.removeAll()
- updateSelection()
- updateFiles()
- } catch {
- print("ERROR")
- }
- }
-
-}
diff --git a/examples/Sample/Sample/Image1.jpg b/examples/Sample/Sample/Image1.jpg
deleted file mode 100644
index 11a55187..00000000
Binary files a/examples/Sample/Sample/Image1.jpg and /dev/null differ
diff --git a/examples/Sample/Sample/Image2.jpg b/examples/Sample/Sample/Image2.jpg
deleted file mode 100644
index ecbe8a9d..00000000
Binary files a/examples/Sample/Sample/Image2.jpg and /dev/null differ
diff --git a/examples/Sample/Sample/Image3.jpg b/examples/Sample/Sample/Image3.jpg
deleted file mode 100644
index 08fa6430..00000000
Binary files a/examples/Sample/Sample/Image3.jpg and /dev/null differ
diff --git a/examples/Sample/Sample/Images.zip b/examples/Sample/Sample/Images.zip
deleted file mode 100644
index 4d903fe1..00000000
Binary files a/examples/Sample/Sample/Images.zip and /dev/null differ
diff --git a/examples/Sample/Sample/Info.plist b/examples/Sample/Sample/Info.plist
deleted file mode 100644
index 6905cc67..00000000
--- a/examples/Sample/Sample/Info.plist
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- 1.0
- CFBundleSignature
- ????
- CFBundleVersion
- 1
- LSRequiresIPhoneOS
-
- UILaunchStoryboardName
- LaunchScreen
- UIMainStoryboardFile
- Main
- UIRequiredDeviceCapabilities
-
- armv7
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
-
-
diff --git a/examples/Sample/SampleTests/Info.plist b/examples/Sample/SampleTests/Info.plist
deleted file mode 100644
index ba72822e..00000000
--- a/examples/Sample/SampleTests/Info.plist
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- BNDL
- CFBundleShortVersionString
- 1.0
- CFBundleSignature
- ????
- CFBundleVersion
- 1
-
-
diff --git a/examples/Sample/SampleTests/SampleTests.swift b/examples/Sample/SampleTests/SampleTests.swift
deleted file mode 100644
index 38fa1d66..00000000
--- a/examples/Sample/SampleTests/SampleTests.swift
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-// SampleTests.swift
-// SampleTests
-//
-// Created by Roy Marmelstein on 13/01/2016.
-// Copyright © 2016 Roy Marmelstein. All rights reserved.
-//
-
-import XCTest
-@testable import Sample
-
-class SampleTests: XCTestCase {
-
- override func setUp() {
- super.setUp()
- // Put setup code here. This method is called before the invocation of each test method in the class.
- }
-
- override func tearDown() {
- // Put teardown code here. This method is called after the invocation of each test method in the class.
- super.tearDown()
- }
-
- func testExample() {
- // This is an example of a functional test case.
- // Use XCTAssert and related functions to verify your tests produce the correct results.
- }
-
- func testPerformanceExample() {
- // This is an example of a performance test case.
- self.measure {
- // Put the code you want to measure the time of here.
- }
- }
-
-}