WARNING: I accidentally broke c++ ABI compatibility between 2.1.0 and 2.2.0. This is fixed here. There will likely be a 2.2.1 patch release. If you are packaging this software for distribution, you might want to skip packaging this version or make sure the above patch is applied in your build. For all the wrapper code, this has no impact whatsoever. Please join the discussion if you have comments regarding the situation.
Major Changes
This release is mostly about the Python, Android and iOS wrappers. The latter 2 have changed considerably to have an API that is more in line with each other and with the core c++ library. The changes will most likely break existing app code but set a proper foundation for the future.
-
Python:
- Multithreading Support via GIL by @billmccartney in #616
- Remove numpy requirement, use buffer protocol instead by @EchterAgo in #615
- Support sliced numpy arrays
- Expose return_errors parameter to Python wrapper APIs. by @gregtws in #618
- Expose Result::ecLevel method as python property by @marcoffee in #600
- Build wheels for Python 3.12. by @dainnilsson in #625
-
Android:
- Android wrapper: Modernize build files by @okarmazin in #619
- Fix permissions on Android R+ by @markusfisch in #656
- Android wrapper improvements by @markusfisch in #659
- android: add consumerProguardFiles by @markusfisch in #660
- android: Fix build with NDK 26 by @michaelweghorn in #674
- Build with C++20 (improved DataMatrix detection) by default
- Don't
close()
theImageProxy
insideread()
anymore, need to do that outside now (this breaks existing code) - Change package name from
com.zxingcpp
to simplyzxingcpp
(breaking change) - publish library on mavenCentral for lowest possible barrier of entry
-
iOS/macOS:
- iOS Wrapper improvements by @benjohnde in #630
- iOS wrapper: Add functionality of encoding binary data into Barcodes by @alexmanzer in #635
- Rename ZXingCppWrapper to ZXingCpp by @alexmanzer in #638
- iOS: Enable CocoaPods by providing a podspec by @benjohnde in #637
- Build with C++20 (improved DataMatrix detection) by default
- ios: specify EC level/margin for generation by @markusfisch in #644
- ios: expose all native result items in wrapper by @markusfisch in #649
- ios: clean up ZXIDecodeHints by @markusfisch in #652
- ios: use a default error text instead of crashing by @markusfisch in #661
- ios: improve exception handling by @markusfisch in #664
- ios: rename
ZXIDecodeHints
toZXIReaderOptions
-
General:
- Rename
DecodeHints
toReaderOptions
. The old name is still available for backward API compatibility but deprecated. Since the C-API and the Qt wrapper code are not officially part of the library, they changed without backward compatibility. - WASM: bytes in
ReadResult
by @Sec-ant in #588 - DataMatrix: use charset for encoding by @markusfisch in #628
- QRCode: Support QR Code Model1 by @sayzzy-nt in #633
- rMQR Code: Support Rectangular Micro QR Code by @gitlost in #681
- Rename
Minor Changes and Fixes
- Fix QT 6 QML Crash & Enable QML Shape by @LeonnardoVerol in #597
- Python: Fix wrapper build on MSVC not having __cplusplus for BitHacks by @EchterAgo in #613
- Correctly handle supported image formats on Android APIs < 23 by @okarmazin in #622
- Add
DecodeHints.setMaxNumberOfSymbols()
to C API by @siiky in #665 - aztec: on decoding check for padding bits after B/S by @gitlost in #671
New Contributors
- @Sec-ant made their first contribution in #588
- @LeonnardoVerol made their first contribution in #597
- @EchterAgo made their first contribution in #613
- @billmccartney made their first contribution in #616
- @gregtws made their first contribution in #618
- @okarmazin made their first contribution in #619
- @alexmanzer made their first contribution in #624
- @dainnilsson made their first contribution in #625
- @benjohnde made their first contribution in #630
- @sayzzy-nt made their first contribution in #633
- @michaelweghorn made their first contribution in #674
Full Changelog: v2.1.0...v2.2.0