Release Notes
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
|
The API documentation for the current version (16.0.0) is available here. |
[16.0.0] - 2026-09-30
|
iOS: Adopt the Scene-Based Life Cycle for Xcode 27
iOS 27 now enforces the scene-based life cycle: if you build your app with Xcode 27, you must adopt it in your own app. This is an Apple requirement and the SDK cannot do it for you. |
Changed
iOS
| Breaking change: Xcode 27 now rejects deployment targets below 15.0, and an integrator on Xcode 27 will not be able to build against the previous value. Devices below iOS 15.0 are not supported by this release. If your app still supports them, please stay on version 15.5.0. |
-
Raised the SDK’s minimum iOS version from 13.4 to 15.0.
Fixed
iOS
-
Fixed landscape scanning in apps built with Xcode 27 and running on iOS 27. iOS 27 enforces the scene-based life cycle, and the app-wide interface orientation the SDK previously relied on no longer reports a usable value there, so in landscape the rotate-device warning stayed on screen and the scan process never started. The SDK now reads the orientation from the view’s window scene. Apps built with Xcode 26 or earlier are unaffected.
-
Fixed the scan screen closing when the app lost focus before a scan had started, for example right after the camera permission was granted on iOS 27.
-
Fixed the torch staying on after closing the scan screen shortly after opening it.
[15.3.3] - 2026-07-21
Fixed
iOS
-
Tire Sidewall Scanner: fixed an issue where the scanner could fail to open on a fresh app installation, showing a black screen until the OS terminated the app after about 10 seconds. This affected installations where camera access had already been granted before the scanner was first opened; subsequent attempts would gradually start working.
[15.3.2] - 2026-07-16
[15.3.0] - 2026-07-08
Added
Android & iOS
-
InitOptions.uploadTimeoutMillis— configurable per-attempt timeout for image uploads, passed toAnylineTireTread.initialize(…)viaInitOptions. Default is 20 s. -
See Getting Started for usage.
[15.2.0] - 2026-06-25
Added
Android & iOS
-
New
AnylineTireSidewallScannerAPI for reading tire sidewalls. It presents a guided, full-screen camera that scans the sidewall automatically once it is correctly framed, and returns the structured reading together with the captured image - so you do not need to integrate the Cloud API yourself.-
scan()takes the host, your Cloud API client ID, and an optionalTswScannerConfig, and delivers the outcome (Completed,Failed, orAborted) once to theonResultcallback on the main thread. -
isSupported()reports device support before launching, without initializing the SDK. -
Completedcarries the reading (resultJson), the captured image (imageBytes), andTswScanMetadatawith theenvironmentLightingat capture. -
For full usage, see the Tire Sidewall Scanner guide.
-
[15.1.0] - 2026-06-12
Added
Android & iOS
-
New
AnylineTireTread.isDeviceSupported()API to check whether the current device is supported by the SDK before starting a scan. On Android, it returns the newCAMERA_PERMISSION_DENIEDErrorCodeif the camera permission has not been granted.
[15.0.0] - 2026-03-18
Breaking Changes
Android & iOS
-
Replaced
TireTreadScanViewcomposable/UIView withAnylineTireTreadScanner().scan(). The scan UI is now launched via a single callback-based method that returns aScanOutcome.-
CompletedOutcomereplacesonScanProcessCompletedcallback. -
AbortedOutcomereplacesonScanAbortedcallback. -
FailedOutcomereplacesonErrorcallback. Includes anSdkErrorwith structured error information.
-
-
Replaced exception-based initialization with callback-based
AnylineTireTread.initialize()that returnsSdkResult<Unit>. -
Replaced
Response.Success/Response.Error/Response.ExceptionwithSdkResult.Ok/SdkResult.Errfor all async operations.-
Access result data via
.result(not.valueor.data). -
Access errors via
.errorwhich returnsSdkErrorwithcode,type,message, and optionaldebugfields.
-
-
Replaced
AnylineTireTreadSdk.getTreadDepthReportResult()withAnylineTireTread.getResult(). -
Renamed API entry points:
-
AnylineTireTreadSdk→AnylineTireTread(runtime: init, results, feedback) -
Scanner UI →
AnylineTireTreadScanner(ownsscan()only)
-
Changed
Android & iOS
-
Replaced
ScanEventand all per-frame event types (OnScanStarted,OnScanStopped,OnImageUploaded,OnDistanceChanged,OnTireWidthProvided) with theScanOutcome-based scan flow. -
Replaced
startScanning(),stopScanning(), andabortScanning()manual scan controls withAnylineTireTreadScanner().scan().
Added
Android & iOS
-
New
SdkErrormodel with 17ErrorCodevalues across 5ErrorTypecategories for structured error handling. See the v14 → v15 Migration Guide for detailed transition instructions.
[14.0.0] - 2025-12-15
Breaking Change
Android
-
The legacy bypass on the
TireWidthInputscreen has been removed.-
The Tire Width must be provided either via integration or by the user through the SDK’s UI input.
-
-
The TireTreadSDK has been updated to comply with Android’s new page size requirements as outlined in the Android Developer Guide. This change ensures compatibility with Android 15+ devices that enforce 16KB page sizes.
-
Increased the minimum Gradle version from 8.2.1 to 8.7.
-
Increased the minimum Android Gradle Plugin version from 8.2.1 to 8.5.1.
-
Android & iOS
-
The
useDefaultUianduseDefaultHapticboolean properties inUIConfighave been replaced with a unifiedappearanceenum property.-
The new
appearanceproperty accepts the supported themes:-
"Classic"- Classic UI appearance with haptic feedback -
"Neon"- New neon UI appearance with haptic feedback (default)
-
-
Migration:
-
Replace
"useDefaultUi": truewith"appearance": "Neon"(or omit for default) -
Replace
"useDefaultUi": falsewith your own wrapper-side custom handling instead of a built-in appearance
-
-
[13.1.0] - 2025-11-20
Added
Android & iOS
-
Added movement direction detection to measurement results.
-
The SDK now automatically detects and reports the device movement direction during tire scanning.
-
The movement direction is available through the new
measurementMetadata.movementDirectionproperty inTreadDepthResult. -
Possible values are:
Unknown(direction could not be determined),LeftToRight(device moved from left to right), andRightToLeft(device moved from right to left). -
This information helps understand the scanning orientation and can be useful for result interpretation.
-
See the Results documentation for more information.
-
[13.0.2] - 2025-06-18
[13.0.0] - 2025-05-19
We have completed a major update to the Anyline Tire Tread ScanView Config classes in version 13.
If you are coming from a previous Anyline version, it is helpful to go over some of the more significant changes in the Migrating from SDK v12.x to v13+ page.
Breaking Changes
Android & iOS
-
The
TireTreadScanViewConfig, was now replaced by theTireTreadConfig. This new configuration object includes:-
UIConfig: Configuration for the user interface. -
ScanConfig: Configuration for the scanning process. -
AdditionalContext: Any additional context required for a measurement.
-
You can find further implementation details in the Scan Process - Overview page and in the API docs.
iOS
-
The
ScanViewControllerHolderinterface was removed.-
Starting with this version, the
TireTreadScanViewcreation will directly return an instance of theTireScannerViewController. -
Remove the
ScanViewControllerHolderinterface implementation, and directly set the return of theTireTreadScanViewcreation to thescannerViewController, previously defined by the interface. -
The
dismissViewControllercan be completely removed, as the dismiss behaviour should be provided by theonScanAborted,onScanProcessCompleted, andonErrorcallback implementations.
-
-
The
contextparameter of theTireTreadScanViewwas removed.-
It is not necessary to provide your controller’s
selfanymore.
-
For more details, check the iOS scan process page.
Added
-
The TreadResultRegion for the User-Corrected Regional Values can now also be initialized using Inch32nds.
[12.1.0] - 2025-04-23
Changed
-
The default scan speed is now
ScanSpeed.Fast.-
The scan process will now, by default, take 7 seconds to be completed (instead of 10 seconds).
-
This configuration can still be changed by setting the
TireTreadConfig.uiConfig.scanSpeedproperty toScanSpeed.Slow.
-
Added
-
The
TireTreadScanViewcan now also be initialized without any config object/string.-
In this scenario, the default config values will be used.
-
For more details, refer to the Scan Process - Overview page.
-
[12.0.0] - 2025-04-02
Breaking Changes
-
Renamed the parameter
jsonConfigof theTireTreadScanViewcomposable to`config -
Replaced the "minimum value" properties in the
TreadDepthResultwith a singleminimumValueproperty of typeTreadResultRegion.
Added
-
Permissions required by the SDK are now handled internally
-
Added a new
MissingPermissionscreen to theDefaultUI, which can be configured via theMissingPermissionConfig-
If
DefaultUIis not used, a black screen will be shown, when the user denies camera permission.
-
-
Added edge-to-edge support in the
DefaultUIfor Android API 35 and above
Changed
-
For the following API calls we changed the generic
IllegalStateExceptiontoScanProcessNotCompletedExceptionin case the scan process wasn’t completed at the time of the API request:-
AnylineTireTreadSdk.getTreadDepthReportResult -
AnylineTireTreadSdk.getTreadDepthReportPdf -
AnylineTireTreadSdk.getTreadDepthReportUrlString
-
[11.2.0] - 2025-02-28
Added
-
Added the minimum value of the measured tread depths to the
TreadDepthResult. You can access it via.minimumValueMmfor millimetres or.minimumValueInchandminimumValueInch32ndsfor inches. -
Added a hint to inform the user to enable auto-rotation to the
OrientationWarningscreen. You can configure the text via theOrientationWarningConfig.rotationLockHintproperty.
[11.0.0] - 2025-01-22
Breaking Changes
-
We Split
TireTreadScanViewCallbackinto separate function callbacks to further accentuate the correct flow of information-
onScanAbortedfunction callback has to be provided now to handle the case when the scan gets aborted -
onErrorfunction callback has to be provided now to handle an error that occurred during scanning -
onScanProcessCompletedfunction callback has to be provided now to continue the user flow after the scanning process has finished -
For more information, check the documentation for Android and iOS
-
-
Removed
onUploadAbortedevent as it was consolidated intoonScanAbortedto simplify the communication with the app -
Removed
onUploadFailedevent as it was consolidated intoonErrorto simplify the communication with the app -
Removed
onUploadFinishedevent as it was consolidated intoonProcessCompletedto simplify the communication with the app
Added
-
Added new classes representing the various scan events that can happen during a scan
-
The new
OnTireWidthProvidedevent (Android only) notifies when the user provided a tire width or just skipped the step -
TireWidthInputConfighas new configurable values to customize the user experience-
Added a new configurable value
prefilledInputWidthto prefill the tire width in the text field in theTireWidthInputscreen -
Added a new configurable value
tireWidthRangeto limit the possible values the user can enter in theTireWidthInputscreen -
Added a new configurable value
tireWidthOptionsrepresenting the shortcut button values the user can choose from when selecting a tire width in theTireWidthInputscreen
-
[10.0.0] - 2024-12-16
Changed
-
Deprecated
AnylineTireTreadSdk.getTreadDepthReportUrlString()andAnylineTireTreadSdk.getTreadDepthReportPdf()-
PDF reports are now deprecated and will be removed in the next versions.
-
-
Enhanced management of lifecycle events during rotation
Android
-
Changed the signature of the
TireTreadScanViewinitialization function to include theTireTreadScanViewCallbackto be able to observe events during scan process -
Changed the signature of the
TireTreadScanViewinitialization function to include a lambda function to observe a failed initialization
Removed
Android
-
Removed the possibility to directly set up the
TireTreadScanViewvia XML attributes to streamline the integrator experience -
Removed
TireTreadScanView.tireTreadScanViewCallbackattribute, it can now be set via theTireTreadScanView.init()function -
Removed
TireTreadScanView.onInitializationFailedattribute, it can now be set via theTireTreadScanView.init()function
[9.0.0] - 2024-11-14
Changed
-
Introduced a new and improved
DefaultUI, that is more streamlined to provide the user a simpler scanning experience with less friction. Changes include:-
New icon and default text for the
OrientationWarningfor a sleeker experience -
New icon and default text for the
TapToStartScanningTooltipto be a more prominent guiding experience -
TapStoStartScanningTooltipnow also makes the user aware when they have to move the device before starting the scan -
Added a new animation to the
FocusPointTooltipto better visualize how to get to a focussed camera quicker -
Introduced a more prominent
Countdownthat shows how many seconds are left until the scan is done -
Introduced a visual guide in
ScanDirectionto show the user in which direction he should move the device for an optimal scan result
-
-
Introduced a custom tag during SDK initialization to identify different devices of the same model
-
This feature is experimental and only meant for internal use
-
-
Using the
DefaultUIdoes not block the user from starting the scan, if the distance to the tire is not optimal (around 20cm or 8in)
[8.0.0] - 2024-10-10
Breaking changes
Android
-
The companion object (
AnylineTireTreadSdk.companion) for calling the functions was removed to provide a better integrator experience (an example of its usage can be found here)
iOS
-
Removed the unnecessary context parameter from the SDK initialisation. The SDK can now be initialised with just the license key (an example implementation can be found here).
-
The object for calling the functions changed from
AnylineTireTreadSdk.companiontoAnylineTireTreadSdk.shared(an example of its usage can be found here)
[7.0.0] - 2024-09-23
[6.0.0] - 2024-08-20
Added
-
Added the SDK’s API documentation detailing the functions and interfaces the integrator can use
-
Added an
Orientation Warningto theDefault UImaking the user aware to hold the device in landscape mode for an optimal scan experience
Breaking Changes
-
Reworked the way results from network requests are handled: instead of two callbacks (one for failure and one for success) only one is needed to be passed as a parameter (an example of how this works for fetching the result can be found here)
[5.2.0] - 2024-06-17
[5.0.0] - 2024-05-24
| Please be aware of the breaking changes listed below. |
Added
-
Scan process can now be set up via a JSON configuration
-
Scan result can now easily be converted to a JSON for further processing on integrator side
-
Simple use the
toJson()extension function in theTreadDepthResultobject
-
Removed
-
Replaced some functions of
TireTreadScanViewConfigwith a single functionwithScanConfig()to make the setup process more streamlined.
Breaking changes
-
Removed the
Builderfrom theTireTreadScanViewConfig. The configuration can be now done directly using the fields of aTireTreadScanViewConfigobject.-
Builder.withScanSpeedis nowtireTreadScanViewConfig.scanSpeed -
Builder.withAdditionalContextis nowtireTreadScanViewConfig.additionalContext -
Builder.withMeasurementSystemis nowtireTreadScanViewConfig.measurementSystem -
Builder.withCustomDefaultUiConfigis nowtireTreadScanViewConfig.defaultUiConfig -
Builder.disableDefaultHapticis nowtireTreadScanViewConfig.useDefaultHaptic -
Builder.disableDefaultUiis nowtireTreadScanViewConfig.useDefaultUi
-
[4.2.0] - 2024-04-05
This release introduces several enhancements to the Default UI, resulting in a more accurate and intuitive scanning process. Additionally, the Default UI now supports localization and customization.
Check the Default UI specific documentation for more details.
Added
-
A new
DefaultUiConfigclass now allows fine-grained customization of the Default UI’s components.-
In the component configuration classes,
visibleproperties enable you to selectively hide specific elements while keeping others visible. -
textproperties can be used to define custom texts for the components. -
Check the Default UI’s Customizing and Elements page for customization options, a detailed list of components, and their respective configuration classes.
-
[4.1.0] - 2024-03-08
This release introduces several improvements to the Default UI’s user experience and scan guidance. Additionally, it includes a new feature that allows for providing and retrieving more context for measurements. A small bug fix has also been implemented for Android.
Added
Android & iOS
-
[Default UI] Introduced a tire-shaped grid overlay to the Default UI, making it simpler to align the camera correctly with the tire’s shoulder.
-
The speed and direction to where the phone should be moved during the scan process are now guided by the tire-shaped overlay’s movement.
-
The scanning process should always be performed from the outer side to the inner side of the tire.
-
When the phone is rotated, both the overlay and the scan direction are automatically adapted.
-
-
[Default UI] Added a tooltip informing the user how to position the tire overlay to be in line with the shoulder of the tire.
-
[Additional Context] A new class
AdditionalContextwas added to enable holding more context about a specific measurement.-
This information can be provided when initializing the
TireTreadScanView. -
If provided, its information will be returned in the measurement’s result.
-
Check the platform-specific 'scan process' documentation pages for more information.
-
-
[Scan View] The
TireTreadScanViewConfigbuilder has a new.addAdditionalContext(AdditionalContext)function, enabling you to provide more context to a measurement. -
[Result] Added a new property called
measurementInfo(of typeMeasurementInfo) to theTreadDepthResultclass.-
This class can be used to retrieve more information about the measurement such as
UUID,statusandadditionalContext(if previously provided).
-
Removed
-
[Default UI] As part of the user guidance improvements, the tooltip messages on the top of the UI were removed.
Fixed
[Android]
-
Fixed an issue where the distance feedback would continue to be played after leaving the Scan View.
-
In some specific scenarios, the
TireTreadScanView's distance feedback would continue to be played even after ending the scan process. -
With this release, users will not experience this issue anymore, regardless of how the TireTreadScanView is implemented.
-
[4.0.0] - 2024-01-25
| Please be aware of the breaking changes listed below. |
Changed
-
Default UI redesign
-
We reorganized the UI to offer a better user experience with the help of tool tips.
-
The Default UI now intercepts user touches to start and stop the scan process instead of using buttons.
-
We also updated the distance indicator to tell the user whether they have to move closer or farther away from the tire.
-
-
The
DistanceStatusenum has a new status (UNKNOWNon Android -unknownon iOS), returned when no distance information is available.-
This is the case when the device’s camera was not yet able to focus on the scan target.
-
Added
-
Added a new
captureDistanceStatusproperty to theTireTreadScannerinstance, of typeDistanceStatus.-
This property can be used to check if the user has the device correctly positioned for the scan process.
-
-
Added a tooltip icon that signalises that the camera is in optimal position to start the scanning process
[3.0.1] - 2024-01-17
[3.0.0] - 2023-12-28
This major release includes many improvements in the usability and stability of the Tire Tread SDK (both for integration and usage).
Please be aware of the breaking changes below:
Breaking changes
[Android & iOS]
-
Scan →
TireTreadScanViewConfig-
defaultUianddefaultHapticare now enabled by default. -
The
TireTreadScanViewConfigconstructor was changed to a Builder pattern, as shown below:-
TireTreadScanViewConfig.Builder().build()- For more details and examples, check the platform-specific "Scan Process" pages.
-
-
-
Results →
getTreadDepthReportResult:-
You no longer need to call
getTreadDepthReportResultrepeatedly until the measurement result becomes available. Just call the function on a background thread, and listen for callbacks on success and on failure. -
getTreadDepthReportResultfunction is now void. -
getTreadDepthReportResult's success callback has been renamed from Succeed to Succeeded. -
onGetTreadDepthReportResultSucceededcallback now provides the result as aTreadDepthResultobject. -
onGetTreadDepthReportResultFailedcallback now provides the failure information as aMeasurementErrorobject.
-
-
Results →
TreadResultRegionobject:-
The field
confidencewas removed.
-
-
Results / PDF Report →
getTreadDepthReportPdffunction:-
This function is now void.
-
The success callback has been renamed from Succeed to Succeeded.
-
The
onGetTreadDepthReportSucceededcallback provides the ByteArray of the PDF Report. -
The
onGetTreadDepthReportFailedcallback provides now only an Exception.
-
[Android]
-
The minimum version requirements have been increased to:
-
JDK 17
-
Gradle 8.1.0
-
compileSdk 34
-
minSdk 26
-
Compose Compiler v1.5.0
-
-
Scan →
TireTreadScanView-
The attributes
useDefaultUianduseDefaultHapticof the TireTreadScanView have been renamed todisableDefaultUianddisableDefaultHapticrespectively, with default values set tofalse.-
Default UI and Haptic will be enabled by default, unless explicitly disabled.
-
-
Added
[2.3.0] - 2023-10-25
-
In the
TreadDepthResult, a new field valueInch32nds is now available, containing the result in 32 seconds of an inch.
[2.2.0] - 2023-10-09
-
[Android] Added audio feedback in form of a beep when the tire is too far or too close to the camera
-
[Android] Added haptic feedback when the tire is too far or too close to the camera