A Swift framework with classes for reading and writing bits and bytes.
BitByteData can be integrated into your project using Swift Package Manager, CocoaPods or Carthage.
Swift Package Manager
To install using SPM, add BitByteData to you package dependencies and specify it as a dependency for your target, e.g.:
import PackageDescription let package = Package( name: "PackageName", dependencies: [ .package(url: "https://github.com/tsolomko/BitByteData.git", from: "1.3.0") ], targets: [ .target( name: "TargetName", dependencies: ["BitByteData"] ) ] )
More details you can find in Swift Package Manager's Documentation.
pod 'BitByteData', '~> 1.3' and
use_frameworks! to your Podfile.
To complete installation, run
Add to your Cartfile
github "tsolomko/BitByteData" ~> 1.3.
Finally, drag and drop
into the "Embedded Binaries" section on your targets' "General" tab in Xcode.
ByteReader class to read bytes.
For reading bits there are two classes:
MsbBitReader, which implement
for two bit-numbering schemes ("LSB 0" and "MSB 0" correspondingly).
MsbBitReader classes inherit from
ByteReader so you can also use them to read bytes
(but they must be aligned, see documentation for more details).
Writing bits is implemented in two classes
MsbBitWriter (again, for two bit-numbering schemes).
They both conform to
Note: All readers and writers aren't structs, but classes intentionally.
This is done to make it easier to pass them as arguments to functions and to eliminate unnecessary copying and
Every function or type of BitByteData's public API is documented. This documentation can be found at its own website.
Whether you find a bug, have a suggestion, idea or something else, please create an issue on GitHub.
If you'd like to contribute code, please create a pull request on GitHub.
Note: If you are considering working on BitByteData, please note that Xcode project (BitByteData.xcodeproj)
was created manually and you shouldn't use
swift package generate-xcodeproj command.
Help us keep the lights on
1.3.1 - Nov 8, 2018
- Improved performance of
ByteReader's functions and computed properties when BitByteData is compiled with Swift 4.2 compiler.
1.3.0 - Nov 1, 2018
- Updated to support Swift 4.2.
advance(by:)function to both
write(unsignedNumber:bitsCount:)function to both
MsbBitWriter(thanks to @cowgp for proposing and implementing this in PR #1).
Comment: There are plans to add both
write(unsignedNumber:bitsCount:) functions to corresponding protocols in the next major update.
Known potential issues:
For Cocoapods users. It seems like Xcode 10 changed how it sets build environment variables. Particularly, it no longer sets variables which have empty string values. This change breaks custom build scripts added to projects by Cocoapods. If you encounter problems with building/installing BitByteData with something about "unbound variable" in your Cocoapods verbose log, this means that you, most likely, have this issue. Thankfully, 1.6.0 version of Cocoapods is going to fix this problem, but at the time of this writing it hasn't been released yet. Meanwhile, I would like to recommend upgrading to the beta version of Cocoapods 1.6.0 if you have this problem. You can learn more about this issue here.
For Carthage users. You may notice that the size of "BitByteData.framework.zip" archive attached to this release (that is generated and used by Carthage) is significantly smaller than the one for 1.2.0 update. Upon investigation I discovered that dSym files inside it have become a lot smaller, but I am currently unable to determine what exactly has changed about them. If you encounter any problems which may be connected with this observation, please, let me know.
1.3.0-test - Oct 28, 2018
This is a test release for the upcoming 1.3.0 update which will include several API additions and some other minor changes.
1.2.0 - Apr 29, 2018
- Updated to support Swift 4.1.
bytesReadcomputed properties to
ByteReader(and bit readers, since they are inherited from
MsbBitReader, as well as
int(fromBits:)function now has a precondition that its argument doesn't exceed
- Reverted "disable symbol stripping" change from 1.1.1 update, since underlying problem in Carthage was fixed.
- Small updates to documentation.
1.2.0-test.3 - Apr 9, 2018
- Updated to Swift 4.1/Xcode 9.3.
- Reverted change, that explicitly disabled STRIP_INSTALLED_PRODUCT Xcode project setting to workaround Carthage problems with archiving.
- Small updates to documentation.