mirror of
https://github.com/tsolomko/SWCompression.git
synced 2026-06-23 14:56:41 +00:00
642 lines
30 KiB
Markdown
642 lines
30 KiB
Markdown
# Changelog
|
|
|
|
## 4.9.1
|
|
|
|
- Fixed an issue where `GzipError.cannotEncodeISOLatin1` is incorrectly thrown on non-Darwin platforms with Swift 6.0.
|
|
- Fixed an issue where `ZipError.wrongTextField` is incorrectly thrown on non-Darwin platforms with Swift 6.0 and 6.1.
|
|
|
|
## 4.9.0
|
|
|
|
- Swift versions from 5.3 up to and including 5.8 are no longer supported.
|
|
- Cocoapods and Carthage installation methods are no longer supported.
|
|
- Enabled visionOS platform for SPM.
|
|
- Increased minimum deployment versions for Darwin platforms: macOS from 10.13 to 14.0, iOS from 11.0 to 17.0, tvOS from
|
|
11.0 to 17.0, and watchOS from 4.0 to 10.0.
|
|
- Increased the lowest required version of BitByteData dependency to 2.1.
|
|
- Added `BZip2.multiDecompress` function.
|
|
- Improved performance of BZip2 compression and decompression.
|
|
- Slighlty improved performance of LZMA/LZMA2 decompression.
|
|
- Improved performance of Deflate compression and decompression.
|
|
- Fixed potential crashes when processing truncated BZip2 archives.
|
|
- Fixed potential crashes when processing truncated Zlib archives.
|
|
- Fixed potential crashes when processing truncated or corrupted data compressed with Deflate.
|
|
- Fixed incorrect parsing of LZMA dictionary sizes larger than 2<sup>24</sup>-1 in 7-Zip containers (PR #61 by @analytical-engines and @nekonya).
|
|
- swcomp changes:
|
|
- SPM target is now enabled only on macOS.
|
|
- Added `-m`, `--multi-decompress` option to `bz2` command.
|
|
- Benchmark metadatas are now printed in a standard order.
|
|
- Benchmarking warmup iteration results are now printed and saved into a file.
|
|
- Benchmarking raw data is now saved into a file.
|
|
- Improved benchmarking output for multi-way comparsions.
|
|
- Added `--print-uuid` option to `benchmark show` command.
|
|
- Added `--metadata-only` option to `benchmark show` command.
|
|
- Added `--self-compare` option to `benchmark show` command.
|
|
- Added `benchmark remove-run` command.
|
|
- Updated benchmark results file format.
|
|
- Added `benchmark convert` command.
|
|
|
|
## 4.8.7
|
|
|
|
- Pinned BitByteData version to 2.0.4 (PR #64 by @wkonury-an).
|
|
|
|
## 4.8.6
|
|
|
|
- Swift 5.2 is no longer supported.
|
|
- Enabled visionOS deployment target (only for Carthage users).
|
|
- Added PrivacyInfo file.
|
|
- Fixed a documentation error in `TarEntryInfo.deviceMinorNumber`.
|
|
|
|
## 4.8.5
|
|
|
|
- Fixed an issue where in some cases LZMA2 decompression would fail with an incorrectly thrown error.
|
|
|
|
## 4.8.4
|
|
|
|
- Fixed an issue where in some cases BZip2 compression would produce incorrect output.
|
|
- `TarReader` methods now always return `nil` after reaching the end of a TAR container.
|
|
|
|
## 4.8.3
|
|
|
|
- There are now minimum deployment targets specified in Swift Package Manager manifest.
|
|
- The properties of `GzipHeader` are now `var`-properties (instead of `let`).
|
|
- GZip extra fields are now supported.
|
|
- Added `GzipHeader.ExtraField` struct.
|
|
- Added `GzipHeader.extraFields` property.
|
|
- Added a new `extraFields` argument to `GzipArchive.archive` function (with a default array empty value).
|
|
- Fixed potential crashes that could occur when processing GZip archives truncated in a header or a "footer".
|
|
- Some non-well-formed values of PAX extended header records no longer cause `TarError.wrongPaxHeaderEntry` to be thrown.
|
|
- The record values with newline characters are now fully processed.
|
|
- The record values that do not contain UTF-8 strings are now ignored.
|
|
- swcomp changes:
|
|
- The symbolic links are now extracted with the values recorded in the containers.
|
|
- The hard links are now extracted from TAR containers instead of being ignored.
|
|
- Fixed build issues on Linux and Windows.
|
|
- `benchmark` is now a command group with two commands, `run` and `show`.
|
|
- Added `-a`, `--append` option to the `benchmark run` command.
|
|
- Added `-d`, `--description` option to the `benchmark run` command.
|
|
- Added `-t`, `--preserve-timestamp` option to the `benchmark run` command.
|
|
- The file format of saved results is now more flexible and allows multi-way comparisons.
|
|
- Improved precision of time measurements in benchmarks.
|
|
|
|
## 4.8.2
|
|
|
|
- Swift 5.1 is no longer supported.
|
|
- Increased minimum deployment versions (when installed via CocoaPods or Carthage) for Darwin platforms: macOS from 10.10
|
|
to 10.13, iOS from 9.0 to 11.0, tvOS from 9.0 to 11.0, and watchOS from 2.0 to 4.0.
|
|
- Fixed issues when building for iOS either directly or via Carthage on systems with Xcode 14.
|
|
- Fixed potential crashes that could occur when decompressing truncated Deflate inputs.
|
|
- swcomp changes:
|
|
- swcomp is now enabled by default in Swift Package Manager manifest.
|
|
- Added `-l`, `--list` option to container commands (`7z`, `tar`, and `zip`).
|
|
- Systematized error exit codes and messages.
|
|
- Added `-s`, `--save` option to the `benchmark` command.
|
|
- Added `-c`, `--compare` option to the `benchmark` command.
|
|
- Added `-i`, `--iteration-count` option to the `benchmark` command.
|
|
- Added `-W`, `--no-warmup` option to the `benchmark` command.
|
|
- Benchmarks now output standard deviation instead of speed uncertainty.
|
|
|
|
## 4.8.1
|
|
|
|
- Fix incorrect detection of truncated GZip archives.
|
|
|
|
## 4.8.0
|
|
|
|
- Added `TarReader` and `TarWriter` structs which allow more iterative work with TAR containers while helping with
|
|
reducing memory usage.
|
|
- Fixed a crash that could happen when decompressing Deflate and BZip2 inputs truncated in a certain way.
|
|
- In API reference documentation the Container category has been split into separate categories for each container type.
|
|
- swcomp changes:
|
|
- Certain error messages were made a bit clearer.
|
|
- Added `reader-tar` and `writer-tar` subcommands to the `benchmark` command.
|
|
- Changed the printing format of the benchmark speed.
|
|
|
|
## 4.7.0
|
|
|
|
- Added full-featured support for LZ4 compression and decompression by introducing 5 new functions inside `LZ4` enum.
|
|
- This enum conforms to the `DecompressionAlgorithm` and `CompressionAlgorithm` protocols.
|
|
- Added SWCompression/LZ4 subspec for CocoaPods users.
|
|
- Added support for LZ4 algorithm used in 7-Zip containers.
|
|
- Added `DataError` enum which conforms to `Error` and `Equatable` protocols.
|
|
- Swift 5.0 is no longer supported.
|
|
- Fixed an issue where in some cases Deflate compression would produce incorrect output.
|
|
- Optimized performance of Deflate compression.
|
|
- swcomp changes:
|
|
- Increased the lowest required version of SwiftCLI dependency to 6.0.0.
|
|
- Added `lz4` command with many options to support all LZ4 features (both compression and decompression).
|
|
- Added `--use-format` option to the `tar` command which when used with the `-c` option allows to force usage of a
|
|
selected TAR format when creating a TAR container.
|
|
- The `-j` and `-z` options of the `tar` command can now be used together with the `-c` option to create compressed
|
|
TAR containers.
|
|
- Added `un-lz4`, `comp-lz4`, and `comp-lz4-bd` subcommands to the `benchmark` command.
|
|
- Benchmark commands for compression now report compression ratio.
|
|
|
|
## 4.6.1
|
|
|
|
- Fixed a crash in LZMA2 when trying to process an empty `Data`.
|
|
- swcomp changes:
|
|
- Added `benchmark create-tar` benchmarking command.
|
|
- Benchmarking results are now printed in the units of speed instead of time elapsed.
|
|
|
|
## 4.6.0
|
|
|
|
- Swift 4.2 is no longer supported.
|
|
- Minimum iOS deployment version (when installed via CocoaPods or Carthage) is now 9.0.
|
|
- Increased the lowest required version of BitByteData dependency to 2.0.
|
|
- Added the `TarContainer.create(from:force:)` function which allows to specify TAR format.
|
|
- It is now possible to create TAR containers of GNU, ustar (POSIX), and pre-POSIX formats.
|
|
- The `TarContainer.create(from:)` function (alongside with the newly added function) no longer throws.
|
|
- The `TarCreateError.utf8NonEncodable` error is now never thrown.
|
|
- Handling of truncated TAR containers should now be more consistent.
|
|
- Previously introduced check for truncated containers now throws the `TarError.tooSmallFileIsPassed` error instead
|
|
of `TarError.wrongField`.
|
|
- Documentation has been updated:
|
|
- Adjusted documentation of the `TarEntryInfo` properties to account for other formats used in creation of a
|
|
container.
|
|
- Adjusted documentation of the `TarError.tooSmallFileIsPassed` error to mention its use in all situations when
|
|
truncated data is encountered.
|
|
- swcomp changes:
|
|
- `zip -i` command now prints entry comments only if they are not empty.
|
|
- Slight grammatical improvements to the help messages of swcomp.
|
|
|
|
## 4.5.11
|
|
|
|
- Fixed a crash when processing a truncated TAR file.
|
|
- Added missing documentation for `LZMAProperties.init()`.
|
|
- Windows is now supported.
|
|
|
|
## 4.5.10
|
|
|
|
- Fixed compilation issues on Windows (PR #22 by @trametheka).
|
|
- Performed minor optimizations to BZip2 and Deflate compression functionality.
|
|
- Increased the lowest required version of BitByteData dependency to 1.4.4.
|
|
|
|
## 4.5.9
|
|
|
|
- Improved performance of LZMA/LZMA2 and, consequently, of XZ.
|
|
- Fixed a rare crash when processing a BZip2 archive which uses non-standard (but allowed) run length values.
|
|
|
|
## 4.5.8
|
|
|
|
- Fixed incompatibility with Carthage `--use-xcframeworks` method of installation.
|
|
|
|
## 4.5.7
|
|
|
|
- Fixed a crash when trying to open a very small file as a 7-Zip container, a BZip2 "archive", a GZip archive (both when
|
|
using `unarchive` and `multiUnarchive`), a LZMA "archive", a XZ archive (both when using `unarchive` and `splitUnarchive`),
|
|
a ZIP container, or a Zlib archive.
|
|
- Fixed a crash when trying to open an unexpectedly truncated file as a GZip or XZ archive.
|
|
- Fixed a crash when trying to open an invalid file as a ZIP container. The `ZipError.notFoundCentralDirectoryEnd` error
|
|
is now thrown instead as was originally intended.
|
|
- Fixed a crash when trying to read a GZip or Zlib header from a very small file.
|
|
- Fixed a compilation warning in BZip2.
|
|
|
|
## 4.5.6
|
|
|
|
- Fixed a compiling issue on Linux with Swift 5.3.
|
|
|
|
## 4.5.5
|
|
|
|
- Fixed a crash which was sometimes happening when encountering non well-formed Extended Timestamp in ZIP files.
|
|
|
|
## 4.5.4
|
|
|
|
- Fixed issues when installing using SPM or Xcode in certain situations.
|
|
- Fixed incompatibility with Swift Package Manager from Swift 4.2.
|
|
|
|
## 4.5.3
|
|
|
|
- Improved compatibility with the latest versions of Swift (5.x) and Xcode.
|
|
|
|
## 4.5.2
|
|
|
|
- Increased the lowest required version of BitByteData dependency to 1.4.1.
|
|
|
|
## 4.5.1
|
|
|
|
- Minimum required version of BitByteData is now 1.4.0.
|
|
- Updated to support Swift 4.2.
|
|
- Added default values to the properties of `LZMAProperties` struct.
|
|
- Added `init()` to `LZMAProperties` struct.
|
|
- Improved the detection of Swift versions less than 4.2 in the workaround for the crash in `Data.prefix(upTo:)`.
|
|
- Documentation updates:
|
|
- Fixed an outdated example in README (PR #4 by @brianantonelli).
|
|
- Fixed grammar issues related to the usage of articles, during/while, and others.
|
|
- swcomp changes:
|
|
- Minimum required version of SwiftCLI is now 5.2.0.
|
|
- Improved the layout of output of benchmark commands.
|
|
|
|
## 4.5.0
|
|
|
|
- Added APIs which allow to specify LZMA properties for decompression:
|
|
- Added `LZMAProperties` struct with simple memberwise initializer.
|
|
- Added `LZMA.decompress(data:properties:uncompressedSize:)` function with `uncompressedSize` argument being optional.
|
|
- Added support Delta "filter" in both XZ archives and 7-Zip containers.
|
|
- Added support for SHA-256 check type in XZ archives.
|
|
- Added `ZipEntryInfo.crc` property.
|
|
- Fixed incorrect result of `XZArchive.unarchive` and `XZArchive.splitUnarchive` functions when more than one "filter"
|
|
was used.
|
|
- Reduced in-memory size of `ZipEntryInfo` instances.
|
|
- Clarified documentation for `LZMA.decompress(data:)` to explain expectation about `data` argument.
|
|
- swcomp changes:
|
|
- `zip -i` command now also prints CRC32 for all entries.
|
|
- `-v` is now accepted as an alias for `--verbose` option.
|
|
|
|
## 4.4.0
|
|
|
|
- Added APIs which allow creation of new TAR containers:
|
|
- Added `TarContainer.create(from:)` function.
|
|
- Added `TarCreateError` error type with a single case `utf8NonEncodable`.
|
|
- `TarEntry.info` and `TarEntry.data` are now `var`-properties (instead of `let`).
|
|
- Accessing setter of `TarEntry.data` now automatically updates corresponding `TarEntry.info.size` with `data.count`
|
|
value (or 0 if `data` is `nil`).
|
|
- Added `TarEntry.init(info:data:)` initializer.
|
|
- Most public properties of `TarEntry` are now `var`-properties (instead of `let`). Exceptions: `size` and `type`.
|
|
- Added `TarEntryInfo.init(name:type:)` initializer.
|
|
- Improved compatibility with other TAR implementations:
|
|
- All string fields of TAR headers are now treated as UTF-8 strings.
|
|
- Non-well-formed integer fields of TAR headers no longer cause `TarError.wrongField` to be thrown and instead
|
|
result in `nil` values of corresponding properties of `TarEntryInfo` (exception: `size` field).
|
|
- Base-256 encoding of numeric fields is now supported.
|
|
- Leading NULLs and whitespaces in numeric fields are now correctly skipped.
|
|
- Sun Extended Headers are now processed as local PAX extended headers instead of being considered entries with
|
|
`.unknown` type.
|
|
- GNU TAR format features for incremental backups are now partially supported (access and creation time).
|
|
- `TarContainer.formatOf` now correctly returns `TarFormat.gnu` when GNU format "magic" field is encountered.
|
|
- A new (copy) `Data` object is now created for `TarEntry.data` property instead of using a slice of input data.
|
|
- Fixed incorrect file name of TAR entries from containers with GNU TAR format-specific features being used.
|
|
- Fixed `TarError.wrongPaxHeaderEntry` error being thrown when header with multi-byte UTF-8 characters is encountered.
|
|
- Fixed incorrect values of `TarEntryInfo.ownerID`, `groupID`, `deviceMajorNumber` and `deviceMinorNumber` properties.
|
|
- Slightly improved performance of LZMA/LZMA2 operations by making internal classes declared as `final`.
|
|
- swcomp changes:
|
|
- Added `-c`, `--create` option to `tar` command which creates a new TAR container.
|
|
- Output of bencmark commands is now properly flushed on non-Linux platforms.
|
|
- Results for omitted iterations of benchmark commands are now also printed.
|
|
- Iteration number in benchmark commands is now printed with leading zeros.
|
|
- Fixed compilation error on Linux platforms due to `ObjCBool` no longer being an alias for `Bool`.
|
|
|
|
## 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.
|
|
- Fixed crash in `SevenZipContainer.info(container:)` when either entry's size or CRC32 is not present in the container.
|
|
- Updated some Container-related documentation.
|
|
|
|
## 4.2.1
|
|
|
|
- Now accepts 7-Zip containers with minor format versions from 1 to 4 (previously, was only 4).
|
|
|
|
## 4.2.0
|
|
|
|
- Minuimum required version of BitByteData is now 1.1.0.
|
|
- Added `ownerID` and `groupID` properties to `ZipEntryInfo`, which stores uid and gid from Info-ZIP New Unix and
|
|
Info-Zip Unix extra fields.
|
|
- Added `unknownExtendedHeaderRecords` property to `TarEntryInfo` which includes unrecognized entries from PAX
|
|
extended headers.
|
|
- Prevent double slashes in `TarEntryInfo.name` when prefix header's field was used, but it had trailing slash,
|
|
which is, by the way, against TAR format.
|
|
- Additionally improved speed of BZip2 compression: Now doesn't create more Huffman trees when they cannot be used,
|
|
since maximum amount of Huffman tables was generated.
|
|
- Disable symbol stripping in archives generated by Carthage and published on GitHub Releases.
|
|
- swcomp changes:
|
|
- Replaced 9 block size options of `bz2` command with a single one: `-b` (`--block-size`).
|
|
- Now prints entry type-specific properties in output of `tar`, `zip` and `7z` commands with
|
|
`-i` (`--info`) option.
|
|
- Renamed `perf-test` command group to `benchmark`.
|
|
|
|
## 4.1.1
|
|
|
|
- Fixed incorrect value of `TarEntryInfo.name` when ustar format's "prefix" field was used.
|
|
- Updated documentation for `TarEntryInfo`.
|
|
|
|
## 4.1.0
|
|
|
|
- Some internal classes were published as a separate project, [BitByteData](https://github.com/tsolomko/BitByteData).
|
|
This project is now used by SWCompression.
|
|
- Several performance improvements have been made.
|
|
- "Fixed" a problem when some BZip2 archives created by SWCompression could not be opened by original BZip2 implementation.
|
|
- Modification time stored in ZIP's "native" field is now calculated relative to current system's calendar and time zone.
|
|
- swcomp additions:
|
|
- Added `-1`...`-9` options to `bz2 -c` command which specifies what block size to use for BZip2 compression.
|
|
- Added `-i`, `--info` option to `gz` command which prints GZip's header.
|
|
- Added `comp-deflate` and `comp-bz2` subcommands to `perf-test` command
|
|
which can be used for performance testing of Deflate and BZip2 compression.
|
|
- Corrected descriptions of `-e` options for `zip`, `tar` and `7z` commands.
|
|
- Now sets permissions for extracted files only if they are greater than 0.
|
|
|
|
## 4.0.1
|
|
|
|
- Git tag for updates no longer has "v" prefix.
|
|
- Fixed incorrectly thrown `XZError.wrongDataSize` without actually trying to decompress anything.
|
|
- Fixed crash when opening 7-Zip containers with more than 255 entries with empty streams.
|
|
- No longer verify if ZIP string field needs UTF-8 encoding, if language encoding flag is set.
|
|
- Reduced memory usage by Deflate compression.
|
|
- Added "perf-test" command to swcomp, which is used for measuring performance.
|
|
- Internal changes to tests:
|
|
- `LONG_TESTS` and `PERF_TESTS` compiler flags are no longer used for testing.
|
|
- Reduced size of test6 and test7 from 5 megabytes to 1 megabyte.
|
|
- Removed test7 for BZip2 compression.
|
|
- Added results for 4.0.0 and 4.0.1 from new performance measuring scheme.
|
|
|
|
## 4.0.0
|
|
|
|
- Reworked Container API:
|
|
- New protocol: `ContainerEntryInfo`.
|
|
- `ContainerEntry`:
|
|
- Now has an associated type `Info: ContainerEntryInfo`.
|
|
- Now has only two members: `info` and `data` properties; all previous members were removed.
|
|
- `Container`:
|
|
- Now has an associated type `Entry: ContainerEntry`.
|
|
- `open` function now returns an array of associated type `Entry`.
|
|
- Added new function `info`, which returns an array of `Entry.Info`.
|
|
- All existing ZIP, TAR and 7-Zip types now conform to these protocols.
|
|
- All `Entry` types now have only two members: `info` and `data` (see `ContainerEntry` protocol).
|
|
- Added missing types for ZIP, TAR and 7-Zip with conformance to these protocols.
|
|
- Standardized behavior when `ContainerEntry.data` can be `nil`:
|
|
- If entry is a directory.
|
|
- If data is unavailable, but error wasn't thrown for some reason.
|
|
- 7-Zip only: if entry is an anti-file.
|
|
|
|
- Added several new common types, which are used across the framework:
|
|
- `CompressionMethod`.
|
|
- Used in `GzipHeader.compressionMethod`, `ZlibHeader.compressionMethod`, `ZipEntryInfo.compressionMethod`.
|
|
- `ContainerEntryType`.
|
|
- Used in `ContainerEntryInfo.type` and types that conform to `ContainerEntryInfo` protocol.
|
|
- `DosAttributes`.
|
|
- It is the same as previous `SevenZipEntryInfo.DosAttributes` type.
|
|
- Used in `SevenZipEntryInfo.dosAttributes` and `ZipEntryInfo.dosAttributes`.
|
|
- `Permissions`.
|
|
- It is the same as previous `SevenZipEntryInfo.Permissions` type.
|
|
- Used in `ContainerEntryInfo.permissions` and types that conform to `ContainerEntryInfo` protocol.
|
|
- `FileSystemType`.
|
|
- Used in `GzipHeader.osType` and `ZipEntryInfo.fileSystemType`.
|
|
- Removed `GzipHeader.FileSystemType`.
|
|
- Removed `GzipHeader.CompressionMethod`.
|
|
- Removed `TarEntry.EntryType`.
|
|
|
|
- Removed following errors:
|
|
- `SevenZipError.dataIsUnavailable`
|
|
- `LZMAError.decoderIsNotInitialised`
|
|
- `LZMA2Error.wrongProperties` (`LZMA2Error.wrongDictionarySize` is thrown instead).
|
|
- `TarError.wrongUstarVersion`.
|
|
- `TarError.notAsciiString` (`TarError.wrongField` is thrown instead).
|
|
- `XZError.wrongFieldValue` (`XZError.wrongField` is thrown instead).
|
|
- Renamed following errors:
|
|
- `BZip2Error.wrongHuffmanLengthCode` to `BZip2Error.wrongHuffmanCodeLength`.
|
|
- `BZip2Error.wrongCompressionMethod` to `BZip2Error.wrongVersion`.
|
|
- `TarError.fieldIsNotNumber` to `TarError.wrongField`.
|
|
- `XZError.reservedFieldValue` to `XZError.wrongField`.
|
|
- Standardized behavior for errors named similar to `wrongCRC`:
|
|
- These errors mean that everything went well, except for comparing the checksum.
|
|
- Their associated values now contain all "successfully" unpacked data, including the one, which caused such an error.
|
|
- This change affects `BZip2.decompress`, `GzipArchive.multiUnarchive`, `XZArchive.unarchive`,
|
|
`XZArchive.splitUnarchive`, `ZipContainer.open`.
|
|
- Some of these errors now have arrays as associated values to account for the situations with unpacked data split.
|
|
- This change affects `GzipArchive.multiUnarchive`, `XZArchive.unarchive`, `XZArchive.splitUnarchive`, `ZipContainer.open`.
|
|
|
|
- Removed `SevenZipEntryInfo.isDirectory`. Use `type` property instead.
|
|
- `SevenZipEntryInfo.name` is no longer `Optional`.
|
|
- Now throws `SevenZipError.internalStructureError` when file names cannot be properly processed.
|
|
- Entries now have empty strings as names when no names were found in container.
|
|
- Renamed `XZArchive.multiUnarchive` to `XZArchive.splitUnarchive`.
|
|
- `XZArchive.unarchive` now processes all XZ streams similar to `splitUnarchive`, but combines them into one output `Data`.
|
|
- Fixed "bitReader is not aligned" precondition crash in Zlib.
|
|
- Fixed potential incorrect behavior when opening ZIP containers with size bigger than 4 GB..
|
|
- Updated to use Swift 4.
|
|
- Various improvements to documentation.
|
|
- "swcomp" is now included is as part of this repository.
|
|
|
|
## 3.4.0
|
|
|
|
- Added support for BZip2 compression.
|
|
- Added `CompressionAlgorithm` protocol.
|
|
- `Deflate` now conforms to `CompressionAlgorithm` protocol (as well as `BZip2`).
|
|
- `Deflate.compress(data:)` no longer throws.
|
|
- `ZlibArchive.archive(data:)` no longer throws.
|
|
- Fixed crash in some rare cases for corrupted BZip2 archives (but throws `BZip2Error` instead).
|
|
|
|
## 3.3.1
|
|
|
|
- Fixed out of range index crash in BitReader.
|
|
|
|
## v3.3.0
|
|
|
|
- Introduced support for 7-Zip containers.
|
|
- Added `TarEntry.isLink`.
|
|
- Added `ZipEntry.isLink` and `ZipEntry.linkPath`.
|
|
- Added `ZipEntry.isTextFile`.
|
|
- Added `ContainerEntry.isLink` and `ContainerEntry.linkPath`.
|
|
- Added support for NTFS extra fields in ZIP containers.
|
|
- Detection of UTF-8 in ZIP string fields now favors Code Page 437 more.
|
|
- Renamed build flags included in Cocoapods configurations.
|
|
- Fixed multithreading problems for `ZipEntry.data()`.
|
|
- Fixed `posixPermissions` in `TarEntry.entryAttributes` containing UNIX type byte in some cases.
|
|
|
|
## v3.2.0
|
|
|
|
- Split source files.
|
|
- Removed SWCompression/Common subpodspec.
|
|
- Moved test files into separate repository as a submodule.
|
|
- Fixed problem with Swift Package Manager requirement to disable smudge-filter of git-lfs.
|
|
- Support creation time for TarEntries.
|
|
- Add support for ZIP standardized CP437 encoding of string fields.
|
|
- Fallback to UTF-8 if this encoding is unavailable on the platform.
|
|
- Fallback to UTF-8 if it is detected that string fields is in UTF-8.
|
|
- Necessary, because Info-ZIP doesn't marks fields it creates with UTF-8 flag.
|
|
- Fixed problem with finding zip64 end of Central Directory locator.
|
|
- Fixed problem with accessing `ZipEntry`'s data two or more times.
|
|
- Fixed problem with accessing data of BZip2 compressed `ZipEntry`.
|
|
- Fixed problem with reading zip64 data descriptor.
|
|
|
|
## v3.1.3
|
|
|
|
- Added support for GNU LongLinkName and LongName extensions of TAR format.
|
|
- Added support for modification timestamp from extended timestamps ZIP extra field.
|
|
|
|
## v3.1.2
|
|
|
|
- `wrongUstarVersion` error is no longer incorrectly thrown for GNU tar containers.
|
|
|
|
## v3.1.1
|
|
|
|
- Permissions attributes for TarEntry are now base-10.
|
|
- Now throws `fieldIsNotNumber` error when encounters non-number required field in TAR header.
|
|
- Slightly improved documentation.
|
|
|
|
## v3.1.0
|
|
|
|
- Added support for multi-member GZip archives.
|
|
- Added support for multi-stream XZ archives.
|
|
- Added property which allows access various entry's attributes for both Tar and ZIP.
|
|
- Several Container/Zip/TarEntry's properties are now considered deprecated.
|
|
- ZipEntry now provides access to modification time, posix permission and entry type using the new `entryAttributes` property.
|
|
- Added support for PAX link path.
|
|
- Fixed several problems with decompressing files compressed into ZIP container using LZMA.
|
|
- Fixed discarding ZIP containers with `wrongVersion` error when they contain LZMA or BZip2 compressed files.
|
|
- Encrypted ZIP containers should now be detected properly.
|
|
- `ZipError.compressionNotSupported` is now only thrown when trying to get entry's data and not when just opening the archive.
|
|
- Text fields from GZip header are now decoded with correct encoding.
|
|
- Improved Deflate comrpession rate for some corner cases.
|
|
- Improved BZip2 performance for cases of big data sizes.
|
|
|
|
## v3.0.1
|
|
|
|
- Significanty reduced memory usage and improved speed of Deflate compression.
|
|
|
|
## v3.0.0
|
|
|
|
- All errors have been renamed, so they conform to Swift Naming Conventions (lowerCamelCase).
|
|
- Added `Container` and `ContainerEntry` protocols.
|
|
- Most methods have their arguments' labels renamed to make usage shorter.
|
|
- Most documentation have been edited to improve readability.
|
|
- Multiple files with results of performance tests replaced with consolidated one.
|
|
- Enabled support for LZMA and BZip2 compression algorithms.
|
|
- `ZipEntry` now conforms to `ContainerEntry` protocol.
|
|
- This also means that entry's data is now provided through `ZipEntry.data()` instead of `ZipContainer`'s function.
|
|
- Improved detection of directories if ZIP container was created on MS-DOS or UNIX-like systems.
|
|
- `ZipError.wrongCRC32` now contains entry's data as associated value.
|
|
- Fixed a problem where Zip64 sized fields weren't used during processing of Data Descriptor.
|
|
- Added some measures to prevent crashes when it is impossible to read ZIP text fields (file name or comment) in UTF-8 encoding
|
|
- Added support for TAR containers in various format versions.
|
|
- Now `GzipArchive.unarchive` function unarchives only first 'member' of archive.
|
|
- Added support for GZip archive's option in `archive` function.
|
|
- `GzipHeader.modificationTime` is now Optional.
|
|
- `GzipHeader.originalFileName` renamed to `GzipHeader.fileName`.
|
|
- Added `GzipHeader.isTextFile` property which corresponds to same named flag in archive's header.
|
|
- Now `XZArchive.unarchive` function unarchives only first stream of archive.
|
|
- Check for xz archive's footer's 'magic' bytes is now performed at the beginning of processing.
|
|
- XZ header's checksum is now checked before parsing reserved flags.
|
|
- BZip2 now performs CRC32 check for decompressed data.
|
|
- Removed internal `LZMAOutWindow` auxiliary class.
|
|
|
|
## v2.4.3
|
|
|
|
- Fixed incorrect calculation of header's checksum for GZip archives.
|
|
|
|
## v2.4.2
|
|
|
|
- Fixed a problem, where ZipEntry.fileName was returning fileComment instead.
|
|
|
|
## v2.4.1
|
|
|
|
- Lowered deployment targets versions for all (supported) Apple platforms.
|
|
|
|
## v2.4.0
|
|
|
|
- Reduced memory usage in some cases.
|
|
- Added Zlib archiving function.
|
|
|
|
## v2.3.0
|
|
|
|
- Improved Deflate compression performance.
|
|
- Added GZip archiving function.
|
|
- Fixed a problem when Deflate uncompressed blocks were created with one extra byte.
|
|
|
|
## v2.2.2
|
|
|
|
- Fixed problem with zero-length uncompressed blocks.
|
|
|
|
## v2.2.1
|
|
|
|
- Now creates uncompressed block instead of huffman if it will provide better results (in terms of "compression").
|
|
- Small internal changes.
|
|
|
|
## v2.2.0
|
|
|
|
- Somewhat limited support for Deflate compression.
|
|
- API for parsing ZIP entries.
|
|
|
|
## v2.1.0
|
|
|
|
- ZIP containers support.
|
|
- HuffmanTree is no longer part of SWCompression/Common.
|
|
- Updated documentation.
|
|
|
|
## v2.0.1
|
|
|
|
- Fixed incorrect reading adler32 checksum from zlib archives.
|
|
- Removed LZMA_INFO and LZMA_DIAG build options.
|
|
- (2.0.0) GZip archives with multiple 'members' are now parsed correctly.
|
|
|
|
## v2.0.0
|
|
|
|
- LZMA decompression.
|
|
- XZ unarchiving.
|
|
- Once again performance improvement (this time for real).
|
|
- Added public API functions for reading gzip/zlib headers.
|
|
- Added documentation.
|
|
- Added checksums support.
|
|
- Added new errors subtypes.
|
|
- Added two build options for diagnostical use.
|
|
- Rephrased comments to public API.
|
|
|
|
## v1.2.2
|
|
|
|
- Small performance improvement.
|
|
|
|
## v1.2.1
|
|
|
|
- Removed HuffmanLength.
|
|
- Rewritten DataWithPointer.
|
|
- Added performance tests.
|
|
|
|
## v1.2.0
|
|
|
|
- Reimplemented Huffman Coding using a tree-like structure.
|
|
- Now only DataWithPointer is used during the processing.
|
|
|
|
## v1.1.2
|
|
|
|
- Fixed memory problem in Deflate.
|
|
- Improved overall performance.
|
|
|
|
## v1.1.1
|
|
|
|
- Fixed problems when building with Swift Package Manager.
|
|
- Added missing files to watchOS scheme.
|
|
- Every release on github now will have an archive with pre-built framework.
|
|
- Added info about performance to README.
|
|
|
|
## v1.1.0
|
|
|
|
- Added BZip2 decompression.
|
|
- Introduced subspecs with parts of functionality.
|
|
- Additional performance improvements.
|
|
- Fixed potential memory problems.
|
|
- Added a lot of (educational) comments for Deflate
|
|
|
|
## v1.0.3
|
|
|
|
Great performance improvements (but there is still room for more improvements).
|
|
|
|
## v1.0.2
|
|
|
|
- Fixed a problem when decompressed amount of data was greater than expected.
|
|
- Performance improvement.
|
|
|
|
## v1.0.1
|
|
|
|
Fixed several crashes caused by mistyping and shift 'overflow' (when it becomes greater than 15).
|
|
|
|
## v1.0.0
|
|
|
|
Initial release, which features support for Deflate, Gzip and Zlib decompression.
|