diff --git a/.jazzy.yaml b/.jazzy.yaml index caec3e95..9eddaeb7 100644 --- a/.jazzy.yaml +++ b/.jazzy.yaml @@ -3,11 +3,11 @@ sourcekitten_sourcefile: docs.json clean: true author: Timofey Solomko module: SWCompression -module_version: 4.2.2 +module_version: 4.3.0 copyright: '© 2018 Timofey Solomko' readme: README.md github_url: https://github.com/tsolomko/SWCompression -github_file_prefix: https://github.com/tsolomko/SWCompression/tree/4.2.2 +github_file_prefix: https://github.com/tsolomko/SWCompression/tree/4.3.0 theme: fullwidth custom_categories: diff --git a/CHANGELOG.md b/CHANGELOG.md index dddbb2e9..bba766f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Changelog +## 4.3.0 + +- Updated to support Swift 4.1. +- Minuimum required version of BitByteData is now 1.2.0. +- Added APIs which allow to use custom ZIP Extra Fields. + - Added `ZipExtraField` protocol. + - Added `ZipExtraFieldLocation` enum. + - Added `ZipContainer.customExtraFields` property. + - Added `ZipEntryInfo.customExtraFields` property. +- Added APIs which allow to get information about TAR's format: + - Added `TarContainer.Format` enum which represents various formats of TAR containers. + - Added `TarContainer.formatOf(container:)` function which returns format of the container. + - Added `-f`, `--format` option to swcomp's `tar` command which prints format of TAR container. +- Added `TarEntryInfo.compressionMethod` property which is always equal to `.copy`. +- Added documenation for `Container.Entry` and `ContainerEntry.Info` associated types. +- Reverted "disable symbol stripping" change from 4.2.0 update, since underlying problem was fixed in Carthage. +- Benchmarks changes: + - Iterations number increased from 6 to 10. + - There is now a zeroth iteration which is excluded from averages. + ## 4.2.2 - Fixed skipping entries in `SevenZipContainer.open(container:)` in some rare cases. diff --git a/Cartfile b/Cartfile index 02555728..20558217 100644 --- a/Cartfile +++ b/Cartfile @@ -1 +1 @@ -github "tsolomko/BitByteData" "1.2.0-test.3" +github "tsolomko/BitByteData" ~> 1.2 diff --git a/Package.swift b/Package.swift index 805d1fee..0da00ff9 100644 --- a/Package.swift +++ b/Package.swift @@ -11,9 +11,9 @@ let package = Package( dependencies: [ // SWCOMP: Uncomment the line below to build swcomp example program. // .package(url: "https://github.com/jakeheis/SwiftCLI", - // from: "4.2.0"), + // from: "5.0.0"), .package(url: "https://github.com/tsolomko/BitByteData", - from: "1.2.0-test"), + from: "1.2.0"), ], targets: [ // SWCOMP: Uncomment the lines below to build swcomp example program. diff --git a/README.md b/README.md index 17d230e5..ad77dd44 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ let package = Package( name: "PackageName", dependencies: [ .package(url: "https://github.com/tsolomko/SWCompression.git", - from: "4.2.0") + from: "4.3.0") ], targets: [ .target( @@ -66,7 +66,7 @@ More details you can find in [Swift Package Manager's Documentation](https://git ### CocoaPods -Add `pod 'SWCompression', '~> 4.2'` and `use_frameworks!` to your Podfile. +Add `pod 'SWCompression', '~> 4.3'` and `use_frameworks!` to your Podfile. To complete installation, run `pod install`. @@ -112,7 +112,7 @@ __Note:__ If you use Swift Package Manager or Carthage you always have everythin ### Carthage -Add to your Cartfile `github "tsolomko/SWCompression" ~> 4.2`. +Add to your Cartfile `github "tsolomko/SWCompression" ~> 4.3`. Then run `carthage update`. diff --git a/SWCompression.podspec b/SWCompression.podspec index 0a68532f..a0309604 100644 --- a/SWCompression.podspec +++ b/SWCompression.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "SWCompression" - s.version = "4.2.2" + s.version = "4.3.0" s.summary = "A framework with functions for working with compression, archives and containers." s.description = "A framework with (de)compression algorithms and functions for processing various archives and containers." @@ -22,7 +22,7 @@ Pod::Spec.new do |s| s.swift_version = "4.1" - s.dependency "BitByteData", "~> 1.1" + s.dependency "BitByteData", "~> 1.2.0" s.subspec "Deflate" do |sp| sp.source_files = "Sources/{Deflate/*,Common/*}.swift" diff --git a/SWCompression.xcodeproj/SWCompression.plist b/SWCompression.xcodeproj/SWCompression.plist index 328506ea..f2425192 100644 --- a/SWCompression.xcodeproj/SWCompression.plist +++ b/SWCompression.xcodeproj/SWCompression.plist @@ -15,9 +15,9 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 4.2.2 + 4.3.0 CFBundleVersion - 59 + 62 NSHumanReadableCopyright Copyright © 2018 Timofey Solomko. All rights reserved. diff --git a/SWCompression.xcodeproj/TestSWCompression.plist b/SWCompression.xcodeproj/TestSWCompression.plist index 8b00954d..41412361 100644 --- a/SWCompression.xcodeproj/TestSWCompression.plist +++ b/SWCompression.xcodeproj/TestSWCompression.plist @@ -15,8 +15,8 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 4.2.2 + 4.3.0 CFBundleVersion - 59 + 62 diff --git a/SWCompression.xcodeproj/project.pbxproj b/SWCompression.xcodeproj/project.pbxproj index a27fbd14..800d1067 100644 --- a/SWCompression.xcodeproj/project.pbxproj +++ b/SWCompression.xcodeproj/project.pbxproj @@ -1159,7 +1159,7 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CURRENT_PROJECT_VERSION = 59; + CURRENT_PROJECT_VERSION = 62; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -1216,7 +1216,7 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CURRENT_PROJECT_VERSION = 59; + CURRENT_PROJECT_VERSION = 62; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; "FRAMEWORK_SEARCH_PATHS[sdk=appletvos*]" = "\"$(SRCROOT)/Carthage/Build/tvOS\""; @@ -1254,7 +1254,7 @@ APPLICATION_EXTENSION_API_ONLY = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 59; + DYLIB_CURRENT_VERSION = 62; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = SWCompression.xcodeproj/SWCompression.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -1282,7 +1282,7 @@ APPLICATION_EXTENSION_API_ONLY = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 59; + DYLIB_CURRENT_VERSION = 62; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = SWCompression.xcodeproj/SWCompression.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; diff --git a/Sources/swcomp/main.swift b/Sources/swcomp/main.swift index 5634f3eb..86714538 100644 --- a/Sources/swcomp/main.swift +++ b/Sources/swcomp/main.swift @@ -7,7 +7,7 @@ import Foundation import SWCompression import SwiftCLI -let cli = CLI(name: "swcomp", version: "4.2.2", +let cli = CLI(name: "swcomp", version: "4.3.0", description: """ swcomp - small command-line client for SWCompression framework. Serves as an example of SWCompression usage. diff --git a/Tests/Results.md b/Tests/Results.md index 3a7d19a2..0f749650 100644 --- a/Tests/Results.md +++ b/Tests/Results.md @@ -1,17 +1,22 @@ # Test Results -In this document you can find the results of benchmarking which were run on Macbook Pro, Late 2011. -The main purpose of these results is to track the progress from version to version. +In this document you can find the results of benchmarking which was performed on Macbook Pro, Late 2011. The main +purpose of these results is to track progress from version to version. -__Note:__ Since version 4.1.0 of SWCompression internal functionality related to reading/writing bits and bytes +__Note:__ Since 4.1.0 version of SWCompression internal functionality related to reading/writing bits and bytes is published as a separate framework, [BitByteData](https://github.com/tsolomko/BitByteData). -It is worth mentioning that overall performance depends on the speed of reading and writing, -and thus BitByteData's version (which is specified in a separate column in the tables below) -becomes relevant to benchmarking, since newer version can contain speed improvements. +The overall performance heavily depends on the speed of reading and writing, and thus BitByteData's version, which is +specified in a separate column in the tables below, becomes relevant to benchmarking, since newer versions can contain +performance improvements. + +__Note:__ Since 4.3.0 version of SWCompression the first (zeroth, actually) iteration is excluded from averages +calculation since this iteration has abnormally longer execution time than any of the following iterations. This +exclusion led not only to (artificially) improved results, but also to the increased quality of the results by reducing +calculated uncertainty. ## Tests description -There are three different datasets for testing. When choosing them I was trying to have something, +There are three different datasets for testing. When choosing them the intention was to have something that represents real life situations. For obvious reasons these test files aren't provided anywhere in the repository. @@ -22,52 +27,58 @@ in the repository. All tests were run using swcomp's "benchmark" command. SWCompression (and swcomp) were compiled using "Release" configuration. -__Note:__ All results are averages over 6 iterations. +__Note:__ All results are averages over 10 iterations (6 iterations until 4.3.0 version). ## BZip2 Decompress -|SWCompression
version|BitByteData
version|Test 1|Test 2|Test 3| -|:---:|:---:|---|---|---| -|4.0.0|—|6.821 ± 0.042|54.214 ± 1.398|7.255 ± 0.117| -|4.0.1|—|6.797 ± 0.080|54.046 ± 1.070|7.177 ± 0.029| -|4.1.0|1.0.1|4.452 ± 0.125|36.768 ± 0.382|4.880 ± 0.094| +|SWCompression
version|BitByteData
version|Swift
version|Test 1|Test 2|Test 3| +|:---:|:---:|:---:|---|---|---| +|4.0.0|—|4.0.X|6.821 ± 0.042|54.214 ± 1.398|7.255 ± 0.117| +|4.0.1|—|4.0.X|6.797 ± 0.080|54.046 ± 1.070|7.177 ± 0.029| +|4.1.0|1.0.1|4.0.X|4.452 ± 0.125|36.768 ± 0.382|4.880 ± 0.094| +|4.3.0|1.2.0|4.1.0|3.481 ± 0.038|27.187 ± 0.152|3.914 ± 0.091| ## XZ Unarchive (LZMA/LZMA2 Decompress) -|SWCompression
version|BitByteData
version|Test 1|Test 2|Test 3| -|:---:|:---:|---|---|---| -|4.0.0|—|error|24.663 ± 2.349|2.904 ± 0.076| -|4.0.1|—|2.475 ± 0.067|23.507 ± 0.423|2.901 ± 0.049| -|4.1.0|1.0.1|2.480 ± 0.091|24.126 ± 1.239|2.892 ± 0.052| +|SWCompression
version|BitByteData
version|Swift
version|Test 1|Test 2|Test 3| +|:---:|:---:|:---:|---|---|---| +|4.0.0|—|4.0.X|error|24.663 ± 2.349|2.904 ± 0.076| +|4.0.1|—|4.0.X|2.475 ± 0.067|23.507 ± 0.423|2.901 ± 0.049| +|4.1.0|1.0.1|4.0.X|2.480 ± 0.091|24.126 ± 1.239|2.892 ± 0.052| +|4.3.0|1.2.0|4.1.0|2.664 ± 0.031|26.030 ± 1.200|3.111 ± 0.053| ## GZip Unarchive (Deflate Decompress) -|SWCompression
version|BitByteData
version|Test 1|Test 2|Test 3| -|:---:|:---:|---|---|---| -|4.0.0|—|4.007 ± 0.196|32.043 ± 0.581|4.303 ± 0.045| -|4.0.1|—|3.886 ± 0.100|32.390 ± 0.896|4.295 ± 0.040| -|4.1.0|1.0.1|2.886 ± 0.571|22.134 ± 1.473|2.700 ± 0.168| +|SWCompression
version|BitByteData
version|Swift
version|Test 1|Test 2|Test 3| +|:---:|:---:|:---:|---|---|---| +|4.0.0|—|4.0.X|4.007 ± 0.196|32.043 ± 0.581|4.303 ± 0.045| +|4.0.1|—|4.0.X|3.886 ± 0.100|32.390 ± 0.896|4.295 ± 0.040| +|4.1.0|1.0.1|4.0.X|2.886 ± 0.571|22.134 ± 1.473|2.700 ± 0.168| +|4.3.0|1.2.0|4.1.0|1.622 ± 0.016|13.641 ± 0.069|1.804 ± 0.028| ## 7-Zip Info Function -|SWCompression
version|BitByteData
version|Test 1|Test 2|Test 3| -|:---:|:---:|---|---|---| -|4.0.0|—|0.270 ± 0.010|crash|0.601 ± 0.057| -|4.0.1|—|0.258 ± 0.003|0.601 ± 0.010|0.473 ± 0.008| -|4.1.0|1.0.1|0.062 ± 0.008|0.208 ± 0.010|0.122 ± 0.003| +|SWCompression
version|BitByteData
version|Swift
version|Test 1|Test 2|Test 3| +|:---:|:---:|:---:|---|---|---| +|4.0.0|—|4.0.X|0.270 ± 0.010|crash|0.601 ± 0.057| +|4.0.1|—|4.0.X|0.258 ± 0.003|0.601 ± 0.010|0.473 ± 0.008| +|4.1.0|1.0.1|4.0.X|0.062 ± 0.008|0.208 ± 0.010|0.122 ± 0.003| +|4.3.0|1.2.0|4.1.0|0.060 ± 0.006|0.208 ± 0.008|0.123 ± 0.008| ## TAR Info Function -|SWCompression
version|BitByteData
version|Test 1|Test 2|Test 3| -|:---:|:---:|---|---|---| -|4.0.0|—|0.248 ± 0.172|1.563 ± 0.442|1.254 ± 0.277| -|4.0.1|—|0.187 ± 0.177|1.257 ± 0.404|1.016 ± 0.325| -|4.1.0|1.0.1|0.194 ± 0.190|1.335 ± 0.475|1.062 ± 0.353| +|SWCompression
version|BitByteData
version|Swift
version|Test 1|Test 2|Test 3| +|:---:|:---:|:---:|---|---|---| +|4.0.0|—|4.0.X|0.248 ± 0.172|1.563 ± 0.442|1.254 ± 0.277| +|4.0.1|—|4.0.X|0.187 ± 0.177|1.257 ± 0.404|1.016 ± 0.325| +|4.1.0|1.0.1|4.0.X|0.194 ± 0.190|1.335 ± 0.475|1.062 ± 0.353| +|4.3.0|1.2.0|4.1.0|0.111 ± 0.008|1.014 ± 0.016|0.813 ± 0.015| ## ZIP Info Function -|SWCompression
version|BitByteData
version|Test 1|Test 2|Test 3| -|:---:|:---:|---|---|---| -|4.0.0|—|0.072 ± 0.065|0.669 ± 0.147|0.120 ± 0.081| -|4.0.1|—|0.076 ± 0.064|0.670 ± 0.142|0.123 ± 0.080| -|4.1.0|1.0.1|0.063 ± 0.076|0.148 ± 0.107|0.105 ± 0.089| +|SWCompression
version|BitByteData
version|Swift
version|Test 1|Test 2|Test 3| +|:---:|:---:|:---:|---|---|---| +|4.0.0|—|4.0.X|0.072 ± 0.065|0.669 ± 0.147|0.120 ± 0.081| +|4.0.1|—|4.0.X|0.076 ± 0.064|0.670 ± 0.142|0.123 ± 0.080| +|4.1.0|1.0.1|4.0.X|0.063 ± 0.076|0.148 ± 0.107|0.105 ± 0.089| +|4.3.0|1.2.0|4.1.0|0.044 ± 0.007|0.122 ± 0.009|0.086 ± 0.008|