[5.0.0-beta6] - 2024-02-15

  • [Android] Only expose OCR languages available on Android.

[5.0.0-beta5] - 2024-02-14

  • [ios] Fix occasional crash due to a race condition when deallocating the GSKCameraViewController.
  • [Android] Add ability to preload OCR models. This is useful to ensure models are present when text recognition is processed.

[4.21.1] - 2024-02-13

  • [Android] Fix an issue where the camera preview is black on Redmi Note 9 Pro devices.

[5.0.0-beta4] - 2024-02-09

  • [ios] Prevent potential app hang when deallocating the GSKCameraViewController.
  • [ios] Add missing header file from GSSDK.h umbrella header.
  • [ios] Restore previous GSKScanFlow.startFromViewController Objective-C API.
  • [ios] The new async/await-based GSKScanFlow.resultByStarting API is now only available when using Swift.

[5.0.0-beta3] - 2024-02-09


On iOS, you can now perform receipt and business card extraction with GSKScanFlow. To enable this feature, use the property structuredData on GSKScanFlowConfiguration. Receipt extraction will extract the date, merchant, amount, category, currency and locale. Business card extraction will extract the contact details from a business card or other type of documents.


  • [ios] Make GSKPDFGeneratorError public again.

[5.0.0-beta2] - 2024-02-07

Modernize Android Custom API

Some APIs were modernized, introducing breaking changes for customers with a custom integration:

  • the PDFPage constructor now takes a File instead of a String path for its first argument
  • the pages argument of the PDFDocument constructor has been moved at the first position and all other arguments are optional
  • the DocumentGenerator methods now throw a DocumentGenerator.Exception instead of a DocumentGeneratorException
  • PDFImageProcessor is now an interface instead of an abstract class, and its process method uses File objects rather than String paths
  • the LoggerSeverity enum has been renamed into Logger.Severity, and its values have been renamed: VERBOSELEVEL into Verbose,…
  • the OcrProcessor constructor takes an OcrProcessor.ProgressListener argument rather than an OCREngineProgressListener
  • the TextLayoutToTextConverter class now has an empty constructor, and uses the logger set on GeniusScanSDK
  • the TextLayoutToTextConverter.convert method now returns a TextLayoutToTextConverter.Result and throws a TextLayoutToTextConverter.Exception when an error occurs


  • [Android] Fix incorrect OCR progress.
  • [Android] Expose supported OCR languages.

[5.0.0-beta1] - 2024-01-19

Version 5.0 of the SDK aims to simplify the integration of the SDK. It also introduces support for modern OCR engines, improving the speed and accuracy of text recognition.

Single-framework architecture

Instead of using a modular architecture with 3 different pieces, the SDK now comes as a single module. Concretely, this only affects customers doing a custom integration. The benefit is that you just need to import a single framework, enabling faster iteration and better internal optimizations.


Instead of importing the modular frameworks, you now just import GSSDK:

- import GSSDKCore
- import GSSDKOCR
- import GSSDKScanFlow
+ import GSSDK


Instead of importing several modules, a single module is now needed in your app’s build.gradle file:

- implementation "com.geniusscansdk:gssdk-ocr:4.21.0"
- implementation "com.geniusscansdk:gssdk-core:4.21.0"
- implementation "com.geniusscansdk:gssdk-scanflow:4.21.0"
+ implementation "com.geniusscansdk:gssdk:5.0.0-beta1"

Cross-platform plugins

No change is required.

Modern OCR

The Genius Scan SDK can use the platform OCR engines instead of our legacy engine based on Tesseract. This results in higher performance and accuracy, and the processing still happens fully on-device. If the modern OCR engines do not support a language, the SDK will fall back to our legacy engine.

You must now provide a BCP 47 language tag (en-US) instead of an IOS 639-3 code (eng) to specify the language(s) of the text recognition. The languages supported by the modern OCR engines on both iOS 17 and Android are: Simplified Chinese (zh-Hans), Traditional Chinese (zh-Hant), English (en-US), French (fr-FR), German (de-DE), Italian (it-IT), Japanese (ja-JP), Korean (ko-KR), Brazilian Portuguese (pt-BR), Spanish (es-ES), Vietnamese (vi-VT). An extensive list of all the supported tags will be available on the SDK website.

There is no need to pass in the language model files for the legacy OCR anymore. If the SDK needs to fall back on the legacy engine, it will download the language model files on-demand. The SDK doesn’t need to download any language files for the modern engines.


The API slightly changes:

- let ocrConfiguration = GSKOCRConfiguration()
- ocrConfiguration.languageCodes = ["eng", "fra"]
- ocrConfiguration.trainedDataPath = "…"
+ let ocrConfiguration = GSKOCRConfiguration(languageTags: ["en-US"])


The OCR configuration needs to be adapted:

- OcrConfiguration ocrConfiguration = new OcrConfiguration(Arrays.asList("eng"), trainedDataFolder);
+ OcrConfiguration ocrConfiguration = new OcrConfiguration(Arrays.asList("en-US"));
Cross-platform plugins

The API stays the same, but make sure to change the values of the languages key to BCP 47 language tags: eng must become en-US, etc. Also, remove the languagesDirectoryUrl from the ocrConfiguration dictionary as it is not used anymore.



  • The iOS SDK is now built with Xcode 15.
  • Demo projects now integrate the SDK with SwiftPM and not CocoaPods anymore. CocoaPods is still supported.

[4.21.0] - 2023-12-20

  • [Android] Upgrade to CameraX 1.3.1 to fix a performance issue in camera initialization.

[4.20.1] - 2023-12-12

  • [iOS, ScanFlow] Add missing exported symbol for GSKScanFlowButton.

[4.20.0] - 2023-12-11

  • [Cordova, ReactNative, Flutter, .Net] Add auto-refreshing of license key (see v4.17.0 for more details). The new method used to set the license key is called setLicenseKey and has an autoRefresh boolean flag. The old method, called setLicenceKey is now deprecated. See the documentation for each framework for more details.
  • [iOS, ScanFlow] Correctly report a cancellation error if the user dismissed the system photo picker by swiping down.

ScanFlow: Add SwiftUI API for starting a scan flow

ScanFlow now offers a dedicated SwiftUI-based button, GSKScanFlowButton, which acts as a convenience API for starting a scan flow from within a SwiftUI view.

ScanFlow: Bank Details Scanning

ScanFlow now supports scanning bank details (such as IBAN and BIC/SWIFT codes). The feature is launching on iOS but you can already use it in the cross-platform plugins; support for Android will come soon.

To enable this feature, set the flag structuredData to .bankDetails on GSKScanFlowConfiguration.

[4.19.0] - 2023-11-27

  • [Android] Add auto-refreshing of license key (see v4.17.0 for more details).
  • [Android] Accelerate the camera startup. The upgrade to CameraX 1.3 introduced a bug where the camera could take a few seconds to initialize. Several improvements were made internally to mitigate this problem until a fix is available in the CameraX library.
  • [Android] Fix a bug in ScanFragmentLegacy where setting the JPEG quality before the camera was initialized would not be taken into account.

[4.18.0] - 2023-11-15

  • [iOS] Fix build issues with JS plugins due to incorrect iOS headers.

[4.17.0] - 2023-11-14


  • [iOS] iOS 13.0 is now required.
  • [iOS] Auto-refreshing license keys (see below).
  • [Android] Add ability to disable PDF/A format by passing a PDFAConfiguration to the DocumentGenerator. It was already possible to do so on iOS by passing a null iccProfilePath to the GSKPDFGeneratorConfiguration.


  • [iOS] Fix issue where some public Swift symbols were not properly exported.

[iOS] Auto-refreshing License Keys

The Genius Scan SDK no longer requires a new license key to be obtained and updated in your app’s source code annually. While it is still advisable to update the license key each year, you now have the option to enable automatic license key renewal. This provides greater flexibility and ensures that users who do not immediately update your app will continue to have access to the Genius Scan SDK features.

If you use the new APIs, this feature is enabled by default but can be disabled.

API Changes

  • Introduction of a new API setLicenseKey(_:, autoRefresh: Bool) that allows you to set an initial license key. This initial license key will be utilized for automatic renewal of the license key from our servers. Upon your app’s launch, it will ping our licensing server to update the license key, if necessary, with our servers receiving the license key, a random device identifier, and your app’s version. This is the only network connection the SDK will perform.
  • If you want to prevent the license key refresh (for privacy reasons), set the autoRefresh flag to false. This will provide the same behavior as the deprecated initWithLicenseKey(_:) API call and the SDK will make no connection to our licensing server.
  • The former API initWithLicenseKey(_:) throws has been deprecated.

Best Practices for User Experience

  • It is recommended to update the license key annually to ensure a seamless offline experience for your app users.
  • We advise initializing the SDK as early as possible after app launch so that a fresh key is received as early as possible.

[4.16.0] - 2023-11-07

  • [iOS] Properly specify the dSYM path of the different XCFrameworks in the Info.plist, so that the consuming app can properly archive them and upload them to the store and/or crash reporting systems.

[4.15.0] - 2023-11-02

  • [Android] Upgrade AndroidX Camera component to v1.3. This mainly fixes a camera resolution issue on some Samsung devices. We used to workaround this issue by using the legacy Camera API for these devices. We’ve now removed this workaround and the CameraX API is now used for these devices.
  • [Flutter, ReactNative, Cordova, .NET] A new source for the ScanFlow is now officially supported and documented: library. It allows to start the ScanFlow with an image picker, and the image picked by the user will be used as the source of the ScanFlow.

[4.14.0] - 2023-10-17

  • [ScanFlow] Add support for Polish and Hungarian languages.
  • [ScanFlow Android] Change error code and message when the scan flow is canceled by the user to align with the ones on iOS: “E_SCAN_CANCELED” and “Scanning canceled by user”.
  • [ScanFlow] Add ability to configure the format of the text recognition result (outputFormats in the ocrConfiguration). It can be a combination of raw text, hOCR text layout and an invisible layer in the generated PDF documents. Prior to this change, the OCR result was available in all these formats without the ability to skip some of them.
  • [ScanFlow iOS] Breaking changes: the GSKUIOCRConfiguration class was renamed into GSKScanFlowOCRConfiguration, the OCR result returned for each scan is now a GSKScanFlowOCRResult instead of GSKOCRResult and some internal properties of the result scans were removed (appliedQuadrangle, appliedFilter, appliedRotation).

[4.13.0] - 2023-09-01

  • [Core iOS] Fix issue preventing PDF/A-1 files from being properly generated because the ICC profile wasn’t properly loaded from the framework.
  • [Core Android] Fix resolution issue on some Samsung Galaxy devices (A41, Tab S8 Ultra). The Camera legacy API is used until this issue is solved in CameraX library.
  • [ScanFlow Android] Fix crash when multiPageFormat is set to none in crossplatform plugins.
  • [.NET] Revert Android package name to GeniusScanSDK.Scanflow. It was inadvertently modified when migrating from Xamarin to .NET.

[4.12.0] - 2023-06-01

  • [ScanFlow iOS] Fix bug where images are not deleted when the user taps the Retry button.
  • [ScanFlow iOS] Fix bug where custom PDF font file was ignored in the ScanFlow configuration.
  • [ScanFlow iOS] Fix issue where OCR progress wasn’t displayed when the multipage flag was set to false.
  • [Core iOS] Make GSKPDFGeneratorError public again, it was incorrectly made private in 4.11.0.
  • [Core iOS] Expose a GSKPDFGeneratorConfiguration initializer that will use a default ICC profile to create a PDF/A-1.
  • [.NET] This version drops support for Xamarin and adds support for .NET MAUI for both Android and iOS. The NuGet packages keep the same name: GeniusScanSDK.ScanFlow.Android and GeniusScanSDK.ScanFlow.iOS.

[4.11.0] - 2023-05-24

  • [Core] Fix performance regression for the PNG output. The regression was due to the compression factor being switched from 1 to 9. While this improved the compression by about 10%, this caused the compression to be several orders of magnitude slower.
  • [ScanFlow] Generated PDF files are now using the PDF/A-1 format (PDF 1.4), particularly suitable for long-term archiving.
  • [iOS] SDK is now built with Xcode 14.3.
  • [iOS] Catch C++ exceptions raised during document detection and raise them as errors to the GSKCameraSession.
  • [iOS] Prevent a rare crash when the camera session is deallocated.
  • [Android] Fix incorrect behavior when the app is in the background during OCR.

[4.10.1] - 2023-04-20

  • [Android] Fix crash when custom font file is not provided for PDF generation.

[4.10.0] - 2023-04-13

  • [Xamarin Android] Strip Android native debugging symbols from the Xamarin.Android plugin. This reduces considerably the size of the APK when using the plugin.
  • [ScanFlow] Add ability to specify a custom font to the PDF generator. The default font supports a limited set of scripts and a custom font needs to be specified when generating a PDF file with a text layer with non-Latin characters.

[4.9.0] - 2023-03-14

  • [ScanFlow] Android: Add ability to start the ScanFlow with a photo picker (with source gallery). This was already available on iOS.
  • [ScanFlow] Expose OCR text layout (in addition to raw text) in the result of the ScanFlow so that it can be used in the PDF generation.

[4.8.0] - 2023-01-24

  • [Android] Refactor image format management with two breaking changes:
    • The ScanProcessor.process method now takes an OutputConfiguration with a destination folder as input instead of an output file.
    • The GeniusScanSDK.scaleImage method doesn’t accept a filter type as a parameter. Instead, it will automatically infer the type of interpolation needed from the image.
  • [Core] iOS: Catch some memory exceptions to return them as errors instead of crashing.
  • [Core] iOS: Catch some internal exceptions if some conditions attempts to create an image with negative dimensions and return an error instead of crashing.
  • [ScanFlow] iOS: Add distortion correction feature to the scan flow. This toggle button lets the user correct the curvature of documents (curved book pages or folded documents).
  • [ScanFlow] iOS: Display activity indicator during PDF generation.
  • [ScanFlow] iOS: Fix bug where document detection could still be active when performing text recognition and PDF generation on a document with many pages.
  • [ScanFlow] Android: Fix crash when discarding a scan flow with an existing image as input.

[4.7.4] - 2022-12-09

  • [ScanFlow] Android: Stop automatic document detection when dialog is displayed on top of camera screen
  • [Core] Change interpolation mode in curvature correction to avoid aliasing artifacts
  • [Xamarin] Add OCR configuration to demo apps

[4.7.3] - 2022-11-17

  • [Xamarin] Fix Android runtime error because of missing CameraX classes.
  • [Xamarin] Fix Android binding again to expose ScanFragment implementations.
  • [ReactNative] Android: Adapt plugin and demo for ReactNative v0.70.

[4.7.2] - 2022-11-11

  • [ReactNative] Adapt plugin and demo for ReactNative v0.70

[4.7.1] - 2022-11-09

  • [Xamarin] Fix incorrect Java.Interop version used in Android plugin

[4.7.0] - 2022-11-07

  • [Xamarin] Fix an issue with Android binding that prevented some classes (eg ScanFragment) from being exposed.
  • [Xamarin] Fix iOS binding.
  • [Xamarin] Add code sample in demo apps to show how to use document generation.
  • [iOS] Fix close-up camera focus issue on some devices with multiple lenses such as iPhone 14 Pro.
  • [Android] Increase the compression level for PNG files produced when using the Monochrome filter to align with the value on iOS.
  • [Android] Fix a camera resolution issue on Samsung A32 and A32 5G devices. The Camera legacy API is used until this issue is solved in CameraX library.

[4.6.0] - 2022-10-04

  • [Flutter, ReactNative, Cordova, Xamarin] Add a PDF generation method to crossplatform plugins to allow generating a PDF document from a collection of images outside of the Scan Flow. Refer to the documentation of each plugin or to the demo apps for more details on how to use this method.
  • [iOS] Build SDK with Xcode 14.0.
  • [iOS] Remove BCSymbolMaps from the SDK’s XCFrameworks since Bitcode isn’t supported by Xcode 14 anymore.
  • [Android ScanFlow] Use CameraX instead of the legacy Camera API on most devices. The legacy Camera API will still be used on a very limited list of device models that don’t support some features.
  • [Android ScanFlow] Fix missing message on OCR progress dialog.
  • [Android ScanFlow] Support dark theme for dialog.
  • [Android ScanFlow] Keep the user-selected flash mode on all scans in the same scanning session.

[4.5.3] - 2022-08-26

  • [Android] Update CameraX to v1.1.0: this should solve a crash when no camera can be found on some devices.

[4.5.2] - 2022-06-23

  • [Core] Prevent auto-rotation from rotating documents by 180 degrees.
  • [Core] iOS: Take in account sensor orientation for auto-orientation to improve results.

[4.5.1] - 2022-06-10

  • [ScanFlow] iOS: Fix behavior of post processing actions where the Recrop button was hidden when it shouldn’t be.
  • [Core] Android: Fix method not available when using CameraX 1.1.0
  • [iOS] Fix deprecation documentation.

[4.5.0] - 2022-04-19


  • [Core] Auto-rotation: Genius Scan now automatically detects the orientation of your document to make sure users scan documents in the proper orientation.
  • [ScanFlow] Allow zooming in image on validation screen
  • [Core ScanFlow] Add TIFF support as multi-page document format in addition to PDF. When using the ScanFlow module, use the multiPageFormat to specify the output format and the multiPageDocument field in the ScanFlow result to retrieve the document in the right format.
  • [Core ScanFlow] iOS: the recrop view now prevents the creation of a concave selection.
  • [Core] iOS: Allow changing the magnifier crosshair to show the zoomed quadrangle vertex (see GSKMagnifierView)
  • [Core] iOS: Allow customization of the shade color of the area outside and inside the quadrangle (see GSKEditableFrame)


  • [Core ScanFlow] iOS: Added small corners to denote that quadrangle vertices are draggable.
  • [Core ScanFlow] iOS: Make outside of quadrangle shaded in transparent black, as opposed to shading the inside of the quadrangle.
  • [Core] Android: Improve capture callback to allow the caller to handle the capture result. The method takePicture now takes as input an ImageCaptureCallback instead of a File. The previous behavior can be kept by using a FileImageCaptureCallback.


  • [Core] Improve B&W and Color filters for document with dark background.
  • [Core] Return a negative clean image for the Monochrome filter when the background is dark to improve OCR results.
  • [Core ScanFlow] iOS: Ensured magnifier crosshair is visible on both light and dark backgrounds.

[4.4.7] - 2022-03-25

  • [Android] Fix behavior of setPreviewAspectFill option when using CameraX.
  • [Android] Stop the preview before (rather than after) calling the onPictureTaken callback when using CameraX.

[4.4.6] - 2022-03-15

  • [Android] Fix document detection not working when using CameraX on some devices.

[4.4.5] - 2022-03-01

  • [Android] Fix rare crash when using CameraX and SurfaceView is not properly laid out.

[4.4.4] - 2022-02-16

  • [iOS, ScanFlow] Fix memory leak when using OCR in ScanFlow. This could cause the scan flow to crash especially for JS plugins.

[4.4.3] - 2022-01-16

  • [Android] Fix crash in ScanFlow when the Recrop action was used before the page was processed.
  • [Android] Fix crash in ScanFlow when using ScanfragmentX without FocusIndicator
  • [Android] Fix bug where the overlay color of the ScanFragment could not be set to white.

[4.4.2] - 2021-12-14

  • [Android] Fix optimization level for native code which resulted in slower code and a bigger library size.

[4.4.1] - 2021-12-08

  • [Android] Fix crash when using CameraX.
  • [Flutter, ReactNative, Cordova] Remove Android binaries from plugins. The plugins now depend on Genius Scan Android SDK via Maven.

[4.4.0] - 2021-12-07

  • [iOS] Add support for simulator on Apple Silicon
  • [Android] The minimum version required is increased from Android 4.4 (API level 19) to Android 5.0 (API level 21). This covers more than 98% of Android devices.
  • [Android] Fix crash when flash mode is switched before camera is initialized.
  • [Xamarin] Improve iOS plugin: shortened paths, unique target name, better temporary file management.

[4.3.0] - 2021-11-23

  • [Android] Core: Add a new camera screen with CameraX API. The goal of this change is to prepare the replacement of the Camera API which is deprecated. The ScanFragment class has been converted to an interface, the ScanFragmentLegacy is an implementation of this interface using the legacy Camera API and ScanFragmentX is a new implementation using CameraX API. The ScanFragmentLegacy implementation will still be used by default for now but it’s possible to try the ScanFragmentX implementation when using the Core module of the SDK.
  • [Android] Core: Fix a bug where the camera preview would not be centered on screen when setting setPreviewAspectFill to true on the ScanFragment.
  • [iOS] ScanFlow: Fix innocuous Auto-Layout warnings.
  • [Xamarin] Add support for iOS simulators (x86_64 only for now).

[4.2.2] - 2021-11-12

  • [Flutter] Fix missing iOS frameworks in plugin.
  • [Flutter] Remove Android native symbols to limit plugin size to 100MB.
  • [ScanFlow] Android: Disable Next button until scan is proccessed to avoid errors in PDF generation.

[4.2.1] - 2021-11-09

  • [iOS] Fix issue resulting in invalid archive when archiving an app linked with the Genius Scan SDK installed through CocoaPods.

[4.2.0] - 2021-11-08

  • [ScanFlow] Add ability to perform Text Recognition (OCR) in ScanFlow. To enable it, add an ocrConfiguration to your ScanFlow configuration and add the required Tesseract language files to your application. This change increases the footprint of the ScanFlow module by approximately 15%.
  • [OCR] Android: Fix the OcrProcessor to avoid loading language models for each page that is processed.
  • [Flutter] Support the new Android plugins APIs.

[4.1.4] - 2021-10-26

  • [iOS] Fix potential crash when app moves to the background and image stream still being processed. This wasn’t affecting users but could be potentially seem in your app’s crash reports.

[4.1.3] - 2021-09-28

  • [Android] Fix bug where the JPEG quality setting was ignored in image processing operations.

[4.1.2] - 2021-09-13

  • [Xamarin] Change plugin dependencies to proper AndroidX libraries.
  • [ScanFlow] iOS: Fix bug where discarding a page would also discard the previous one.

[4.1.1] - 2021-09-10

  • Fix 4.1 publication issue.
  • [ScanFlow] Add missing translations.

[4.1.0] - 2021-09-09

  • [Android] Migrate to AndroidX and Java 8 language level.

[4.0.12] - 2021-08-26

  • [ScanFlow] Properly handle case where camera permission was previously denied by user.
  • [ScanFlow] Tweak localizations in French and Spanish.
  • [Android] Fix minor memory leak involving the singleton class BorderDetectionThreadManager.

[4.0.11] - 2021-08-18

  • [ReactNative] Remove iOS debug symbols from ReactNative plugin to avoid a Cocoapods bug which results in corrupt archives.

[4.0.10] - 2021-07-02

  • [iOS] Properly apply curvature correction on images rotated by 90° or 270°.

[4.0.9] - 2021-06-24

  • [iOS] Include dSYMs and BCSymbolMaps as part of the SDK’s XCFrameworks.

[4.0.8] - 2021-05-07

  • [Android] ScanFlow: Prevent crash when changing filter before processing is finished.
  • [Core] Improve perspective correction interpolation to avoid aliasing issues.
  • [Flutter] Migrate Flutter plugin to null safety. The minimum required Dart version is now 2.12.

[4.0.7] - 2021-03-31

  • [Android] ScanFlow: Prevent multiple clicks on rotation button to avoid image corruption.

[4.0.6] - 2021-03-29

  • [Xamarin] Add Xamarin plugins wrapping the ScanFlow module on nuget. Xamarin.Forms demo apps are available on our demo repository.
  • [OCR] Improve hOCR to text conversion.

[4.0.5] - 2021-03-16

  • [OCR] Return a proper exception in java instead of crashing if OCR engine cannot be initialized.

[4.0.4] - 2021-03-12

  • [Android] Core: Fix the scaleImage(float aspectRatio) method that was not correctly processing images with an exif orientation.
  • [Core] Tune the B&W and Color filters to better process white text over dark background.

[4.0.3] - 2021-03-05

  • [iOS] Core: Fix a regression where Red and Blue channels were systematically swapped.
  • [OCR] Fix a crash when OCR engine cannot find text.

[4.0.2] - 2021-03-04

  • [OCR] Return an error instead of crashing if OCR engine cannot be initialized because of a corrupt language file.
  • [Android] Fix crash when taking photo on devices without flash. Add method to list available flash modes to be able to properly initialize the flash button: ScanFragment.getAvailableFlashModes().
  • [Android] Fix resource leak in document detector.
  • [iOS] Swift Package support. Point to to get the Swift Package.
  • [iOS] Core: Fix issue where Red and Blue channels could be swapped when resizing images.
  • [iOS] ScanFlow: When editing the crop area, properly show the current area.
  • [iOS] ScanFlow: Return GSKScanFlowUserCancelationError when user cancels scanning from source, library.
  • [iOS] ScanFlow: Hide flash button on devices without a flash.
  • [iOS, Android] ScanFlow: Improve Russian, Japanese localizations.
  • [Flutter, ReactNative] Remove UIViewControllerBasedStatusBarAppearance=NO from Info.plist. Note: The Genius Scan SDK only supports the modern, view controller-based, status bar appearance. In particular, the camera screen is designed to work the status bar hidden.
  • [Flutter, ReactNative, Cordova] Better forwarding of iOS error codes.

[4.0.1] - 2021-01-27

  • [iOS] Fix crash when taking photo on devices without flash.
  • [iOS] iOS demo apps are now available on our Github repository.

[4.0.0] - 2021-01-11

Genius Scan SDK 4.0 is an entire rewrite from scratch of the Genius Scan SDK, using entirely new technologies and algorithms. Genius Scan 4.0 introduces breaking changes to the API.

Document Detection

The document detection has been entirely rewritten using deep learning. The document detection is more accurate and more robust to low-contrast, low-light or unusual settings.

API Change

On Android, instead of using GeniusScanLibrary.detectFrame(path), use the DocumentDetector class. On iOS, use the GSKDocumentDetector class.

Document Enhancement

New Algorithms

We used novel algorithms to improve the image filters to achieve enhanced quality and readability for your scanned documents. You can expect better removal of shadows, white-balancing, and treatment of the colors in text documents.

In automatic mode, the document enhancement pipeline can now automatically select one of the four filters: no filter if the image doesn’t contain any document, black and white if the image is a text document with little color, color for text documents with some colors, or photo when the document mainly contains visuals but not so much text.

Edge Cleaning

Edge cleaning is a powerful enhancement that cleans up the edges of the documents. Often, after you crop a scan, some artifacts are left on the edges. The edge cleaning cleans them up. This step results in a cleaner document and helps with the accuracy of the OCR step. Edge cleaning only applies to the monochrome, black and white, and color filters.

API Change

The document enhancement pipeline is available through a single processor object set up with configuration objects. Use the ScanProcessor on Android or the GSKScanProcessor on iOS instead of the static methods on GeniusScanLibrary and GSK. When creating a processor, use the associated configuration object to tune the processing to your liking.


We’ve renamed the ScannerUI framework into ScanFlow.

We’ve simplified the ScanFlow module to two main screens: a Camera screen and a Scan Review screen, from which one can change the filter and edit the cropping area of the current page.

The batch scanning mode is now streamlined: after validating a page on the post-processing screen, instead of being prompted to add a new page, the user is brought back to the camera screen. Hitting the Done button validates the scanned pages and terminates the flow. Hitting the Cancel button cancels the entire scan flow after a confirmation.

API Change

On Android, the class containing all the static methods to manage the scan flow has been renamed from GeniusScanSdkUI to ScanFlow.

PDF Generation

We’ve made several changes to optimize the size of PDF files created with the SDK. When using the Monochrome filter, you have the ability to save the output as monochrome 1-bit PNG images. Resulting PDF files using these PNG images are up to 10 times smaller.



The SDK is now packaged as XCFrameworks. We’ve removed support for Carthage.


All package names and Maven articfact groups have changed from com.thegrizzlylabs.geniusscan.sdk to com.geniusscansdk to match our website URL.

Modules have also been renamed as follows:

  • gs-sdk-core into gssdk-core
  • gs-sdk-ui into gssdk-scanflow
  • gs-sdk-ocr into gs-sdk-ocr

Other Changes

  • Improve API documentation. Up-to-date API documentation is now provided directly on the website.
  • Rewrite iOS demo apps in Swift.
  • Large API simplifications.
  • Remove the Android interface ScanContainer which was used to hold the result of a capture and replace it with a File object.
  • Improve performance of algorithms.

[4.0.0-beta15] - 2021-01-07

  • [iOS] Fix issue where grayscale images were not processed properly with OCR.
  • [iOS] Fix issue where 16-bit images were not properly imported and resulted in garbled scans.
  • [ScanFlow] Add missing translations

[4.0.0-beta14] - 2021-01-04

  • [Android] Fix a plural string in the ScanFlow module.
  • [Android] Prefix all string resources with “gssdk_” to avoid conflicts with other libraries resources.
  • [Android] Remove a useless empty constructor in OcrConfiguration.
  • [iOS] Mark quadrangle in GSKDocumentDetectionResult as non-null.
  • [iOS] ScanFlow: Fix bug preventing flash button from having any effect.

[4.0.0-beta13] - 2020-12-17

  • [iOS] Properly handle ARGB, ABGR -> RGB conversions.
  • [iOS] Renamed GSKDocumentProcessor into GSKScanProcessor.
  • [Android] The public API for document detection is now DocumentDetector instead of CnnDocumentDetection.

[4.0.0-beta12] - 2020-12-08

  • [Core] Add a new document detection configuration, which improves the precision of the document detection.
  • [iOS] API change: GSKDocumentProcessor now takes a single configuration object.


  • [iOS] Add cancel button when changing filter.
  • [iOS] Fix regression allowing ScanFlow to run in landscape mode.
  • [iOS] Layout fixes.
  • [iOS] Fix status bar text color in Dark Mode.
  • [iOS] Fix toolbar tint color that wasn’t taking in account the foregroundColor.
  • [Android] Fix navigation bar color on devices with an old Android version.

[3.0.27] - 2020-12-03

  • [React Native] Android: Remove tag from plugin manifest resulting in a warning while building your project.

[4.0.0-beta11] - 2020-11-26

  • [iOS] Fix localization of “Detect” text in ScanFlow module.
  • [iOS] Remove the beta modifier in Framework’s SDK version as this doesn’t respect the semantic versioning required by CFBundleShortVersionString. Instead of v4.0.0-beta11, the framework’s version will be 4.0.0 even for beta versions.
  • [Android] Simplify the API of the ScanFlow result: you don’t need to use ImageStore to get the file path of the images.

[4.0.0-beta10] - 2020-11-24

  • [Flutter] Fix missing iOS frameworks.

[4.0.0-beta9] - 2020-11-23

  • [iOS] Further simplify the GSKCameraSession API: you don’t have to call setup on it anymore, the GSKCameraViewController will call it at the appropriate time.
  • [iOS] Add SDK version as part of the Framework Info.plist.
  • [iOS] Rewrite Custom Demo in Swift.
  • [core] Improve stability of image detection.

[4.0.0-beta8] - 2020-11-13

  • [Android] Rename ImageType into FilterType.
  • [iOS] Simplify API of the GSKCameraSession. The session doesn’t require a GSKScanProtocol/GSKScanFactory, and will simply return a GSKScan object with the new scan. See GSKCustomDemo for an updated implementation reference.
  • [iOS] Prevent crash if a concave quadrangle is passed to the GSKDocumentProcessor. Instead, an error will be returned by the processor.
  • [iOS] ScanFlow: Add padding around user guidance labels.

[4.0.0-beta7] - 2020-11-06

  • [Android] Fix ScanProcessor behavior when no perspective correction should be done.
  • [Android] Fix rotation of empty quadrangle.
  • [Cordova] iOS: Fix plugin that included incorrect headers.

Improved ScanFlow UI

We’ve simplified the ScanFlow module to 2 main screens: a Camera screen, and a Post-processing screen, from which one can change the filter and edit the cropping area of the current page.

Also, the batch scanning mode has been changed: after validating a page on the post-processing screen, the user is brought back to the Camera screen. Hitting the Done button validates the scanned pages and terminates the flow. Hitting the Cancel button cancels the entire scan flow after a confirmation.

[4.0.0-beta6] - 2020-10-26

  • [iOS/Android] Smoother real-time display of the detected document.
  • [React Native] Android: Remove tag from plugin manifest resulting in a warning while building your project.

[4.0.0-beta5] - 2020-10-23

  • [iOS, Android] Improve the document processor API to avoid confusing parameter combinations.

Edge Cleaning

Edge cleaning is a powerful enhancement that cleans up the edges of the documents. Often, after you crop a document, some artifacts are left on the edges of the document. The edge cleaning cleans them up. This results in a cleaner document and helps with the accuracy of the OCR step.

[3.0.26] - 2020-10-19

  • [Core] Accelerate perspective correction
  • [Android] Fix a crash happening on Android 11 when performing perspective correction

[4.0.0-beta4] - 2020-10-14

  • [Android] Add ability to set an additional camera frame processing. A onPreviewFrame method has been added to the CameraManager.Callback.

[4.0.0-beta3] - 2020-10-07

Best filter detection

The Best filter detection algorithm, which takes an image as input and returns the best filter to apply to this image, has been completely changed. It used to return only two outputs: Black & White or Photo. It now has 4 outputs:

  • None when the image does not contain a document
  • Black & White for text documents with very little color
  • Color for text documents with some color
  • Photo when the document contains mainly graphic parts and little text

Other changes

  • [Android] Revert incorrect renaming of the UI package in the Core module
  • [Core] The document detection now returns an empty quadrangle when no document has been detected on the image. A full quadrangle is returned when the detected document fills the entire image (e.g. no crop is needed).

[4.0.0-beta2] - 2020-10-05

  • Fix documentation and demo apps

[4.0.0-beta1] - 2020-10-02

Document detection

Document detection has been entirely rewritten using deep learning and a new interface is now available for Android and iOS.

On Android, instead of using GeniusScanLibrary.detectFrame(path), you need to build a CnnDocumentDetection object and call one of the detectDocument methods on it. Similarly, on iOS, instead of using [GSK detectQuadrangleFromImage:imageOutOfCamera options:0], use the GSKDocumentDetector class and the detectQuadrangle* methods.

Scan processor

A new interface is also available for the different scan processing operations such as perspective correction, filtering and distortion correction. A single call is now needed to process an image and get a clean and readable document.

On Android, the corresponding methods have been removed from the GeniusScanLibrary class and have been replaced by a ScanProcessor class. On iOS, the GSKDocumentProcessor class replaces previous methods from GSKCore.

Image filters

The different image filters (Photo, Color, Black and White, Monochrome) have also been rewritten from scratch using novel algorithms to improve the quality and readability of the scanned documents. This results in a better removal of shadows, a correction of the colored tint that appears on some documents because of ambient light, and a better treatment of colors in text documents.

Monochrome filter and smaller PDF files

We’ve made several changes to optimize the size of PDF files created with the SDK. When using the Monochrome filter, you have the ability to save the output as monochrome 1-bit PNG images. Resulting PDF files using these PNG images are up to 10 times smaller.

Other changes

  • [Cordova ReactNative Flutter] iOS: Change the output format to match the documentation. Now, the scans and the generated PDF all have a URL in the form file:///path/to/file.ext.

[3.0.25] - 2020-10-01

  • [Android] Add support for Android 11
  • [Cordova] Fix Ionic documentation

[3.0.24] - 2020-08-24

  • [PDF] Add ability to set creation and last update dates of PDF files metadata.
  • [UI] Fix bug where current page was saved when the validation dialog was canceled.
  • [Core] Android: Properly throw an exception in perspective correction when quadrangle is invalid.
  • [Core] iOS: Fix crash in perspective correction when two vertices of the quadrangle are really close.

[3.0.23] - 2020-07-21

  • [UI] Improve translations, mainly in Turkish.
  • [Android] Keep symbols in AARs to be able to track crashes (eg with Firebase Crashlytics). This shouldn’t result in bigger APKs since native symbols are stripped when built in Release mode.

[3.0.22] - 2020-07-15

  • [OCR] Improve error reporting in TextLayoutToTextConverter.
  • [UI] Improve German localization.
  • [UI] iOS: Add cancel button when picking an image from the Photos or scanning directly from a URL.
  • [UI] iOS: Prevent conflict between interactive pop gesture and dragging to adjust the document’s detected edges.

[3.0.21] - 2020-07-13

  • [Android] Core: ScanFragment now checks if its parent fragment implements CameraCallbackProvider, not only its parent activity.
  • [iOS] Fix crash with 64-bit images.
  • [OCR] Fix TextLayoutToTextConverter issue on some images with no text.

[3.0.20] - 2020-07-06

  • [Android] Fix a Proguard issue regarding TextLayoutToTextConverter class

[3.0.19] - 2020-06-23

  • [Android] Fix dependencies of Maven artifacts
  • [UI] Android: Fix a minor issue closing a dialog that was causing an error being logged
  • [UI] Android: Fix Camera screen on devices with a 16:9 camera
  • [OCR] Add a TextLayout to Text converter to convert OCR result into a legible text

[3.0.18] - 2020-05-12

  • [iOS] SDK is now built with Xcode 11.4.1.
  • [Flutter, RN, Cordova] Fix Android dependency (Bolt Tasks) that was causing a crash

[3.0.17] - 2020-05-05

  • [OCR] Remove preprocessed parameter. This parameter let the caller specify that the image was already preprocessed for OCR and that the SDK didn’t need to reprocess it. The OCR stack will now always preprocess images for optimal results. The caller doesn’t have the ability to prevent that anymore.
  • [UI] Fix some translations
  • [UI] Android: optimize bitmap loading, especially for devices with a very large resolution camera

[3.0.16] - 2020-04-22

  • [Core] Fix regression introduced in 3.0.15 where the PDF generation was broken if the images were resized during PDF generation.
  • [OCR] Report error rather than crashing if language files are missing.

[3.0.15] - 2020-04-21

  • [Core] Drastically reduce memory usage during PDF creation.

[3.0.14] - 2020-04-06

  • Internal changes only

[3.0.13] - 2020-03-31

  • [OCR] Improve quality of OCR for non-preprocessed images.

[3.0.12] - 2020-03-17


  • [Cordova] Make plugin compatible with Capacitor

[3.0.11] - 2020-03-06


  • [Flutter] Android: Fixed our plugin to work with the new plugin embedding system (for apps created with Flutter 1.12 and above)

[3.0.10] - 2020-01-10


  • [OCR] Android: Improve interface and include a preprocessing step if requested. OcrProcessor should now be used.
  • [ReactNative] Android: Fix jpegQuality and pdfMaxScanDimension that were Double values instead of integers.

[3.0.9] - 2019-11-29


  • [Core] Android: Improve detectWarpEnhance method that takes a Bitmap as input and rename it to process now that it also handles distortion correction.

[3.0.8] - 2019-11-07


  • [Flutter] Improve integration of the plugin on Android, it’s no longer needed to edit an app’s android/build.gradle file to include the plugin native libraries.
  • [Flutter] Android: Fix crash when onActivityResult wasn’t called with this plugin request code.

[3.0.7] - 2019-10-21


  • [Core] Improve the robustness of the distortion/curvature correction


  • [UI] Add a parameter jpegQuality to set the JPEG quality of scanned pages
  • [UI] Add a parameter pdfMaxScanDimension to reduce size of pages before PDF generation

[3.0.6] - 2019-10-02


  • [iOS] Prevent scan 180° rotation when iPhone is tilted upside down.
  • [Flutter] Android: Migrate to AndroidX
  • [Cordova] Android Support library version can now be passed as parameter when adding the plugin.
  • [Android] Remove the unneeded permission WRITE_EXTERNAL_STORAGE from manifest since SDK only writes to app specific directory.

[3.0.5] - 2019-09-19


  • [iOS] ScannerUI: the status bar color now automatically adapts to the chosen background color’s contrast (


  • [Flutter] Android: Fix return of setLicenceKey method. An error with message java.lang.IllegalStateException: Reply already submitted was logged before this fix.

[3.0.4] - 2019-09-12


  • [iOS] Fix link issue by exposing some missing symbols

[3.0.3] - 2019-08-28


  • [Flutter] Add a Flutter plugin using the UI module of the SDK on


  • [Flutter/iOS] Fix a crash when canceling the scan flow
  • [Android Cordova ReactNative] Parameter name imageUrl has been changed into image. This parameter still expects the image URL and not the image itself.
  • [Android] UI: Fix visibility of a class to be able to access individual pages in scan flow result

[3.0.2] - 2019-07-31

  • [iOS] Fixed missing symbol in GSKScannerUI framework. This was resulting in a linker error when trying to access the GSKScannerUI results as individual scans (GSKScannerUIScan).

[3.0.1] - 2019-07-22


  • [Android] UI: Default multiPage to true
  • [ReactNative] Ensure compatibility of plugin with ReactNative 0.60

[3.0.0] - 2019-07-09

As of this release, the native SDK and the cross-platform plugins will be versioned under the same version number


  • [Android, iOS] Add a new “Scanner UI” module that allows to start a customizable capture flow with 3 screens in one command
  • [Android, iOS] Add a new “Simple demo” app that shows how to use the Scanner UI module
  • [Android] Split SDK into 3 libraries (AAR): gs-sdk (core scanning methods and PDF generation), gs-sdk-ocr (text and layout extraction from an image), gs-sdk-ui (simple scan flow UI)
  • [iOS] Split SDK into three frameworks: GSSDK, GSSDKScannerUI and GSSDKOCR
  • Add localization into 10 new languages
  • [iOS] Utils: Add methods to rotate and fix orientation of an image
  • [iOS] Utils: Add method to scale an image


  • [ReactNative, Cordova] Switched to using the new SDK Scanner UI module
  • [iOS] API: Improved documentation
  • [iOS] API: Cleaned up API for Swift
  • [iOS] Camera UI: Redesigned shutter button
  • [iOS] Camera UI: Added animation when document is detected
  • [iOS] API: Renamed filters Color -> Photo, Whiteboard -> Color
  • [Android] UI: Fix shutter button not animating after camera permission dialog.


  • [Cordova, ReactNative] Removed support for title, password for the generated PDF file
  • [iOS] Removed distortion correction from iOS native demo

[ReactNative_2.5.2] - 2019-06-10


  • [Android] Fixed setLicenceKey method which was not returning properly

[ReactNative_2.5.1, Cordova_2.5.1] - 2019-05-07


  • [Cordova, ReactNative] Fixed typos in UI
  • [Cordova, ReactNative] Android: Fixed layout issue

[ReactNative_2.5.0, Cordova_2.5.0] - 2019-04-30


  • [Cordova, ReactNative] Android: Page format for PDF generation is FIT rather than A4
  • [Cordova, ReactNative] Android: PDF title is used for filename, in addition to PDF metadata
  • [Cordova, ReactNative] Android: Image type was incorrectly detected on original image, instead of warped image


  • [Cordova, ReactNative] Document detection status
  • [Cordova, ReactNative] Scan functions now return original image Uri, in addition to enhanced image

[2.4.2] 2019-03-07


  • [Android] Made focus before trigger optional


  • [iOS, Android] Improved OCR progress report (was between 0 and 70, should be between 0 and 100 now)
  • [Android] Improved speed of OCR

[2.4.1] 2019-03-05


  • [Android] Correctly throw exception when SDK initialized with incorrect license key
  • [Android] Support landscape camera screen
  • [iOS] Fix AutoTrigger flag that couldn’t be disabled

[2.4] [ReactNative_2.4.2, Cordova_2.4.2] 2019-02-27


  • [iOS, Android] Added OCR. Ability to extract text and layout from an image and generate PDF documents with this text information to make it searchable and selectable.
  • [iOS] Added distortion correction to demo
  • [React] Added ability to specify “ENHANCEMENT_NONE” to avoid filter phase
  • [React] Added cancel button on iOS camera screen
  • [React] Added automatic photo trigger on Android


  • [Cordova] Compatibility with android-cordova >= v7.0.0

[2.3.4] 2019-02-20

[2.3.3] 2019-01-29


  • [iOS, Android] Added distortion correction
  • [Android] Added support x86_64 architecture


  • [iOS] Fixed crash with B&W images (#274)
  • Improved exceptions handling (eg license check) (#280)
  • [Android] Upgraded to Android P
  • [Android] Upgraded OpenCV to 3.4.3

[ReactNative_2.4.1] 2018-12-05


  • [React] Fixed wrong method name to set license key

[ReactNative_2.4.0] 2018-12-05


  • PDF generation with generatePDF
  • Selecting an enhancement type by default with defaultEnhancement option


  • [iOS] Fix crash on ipad when clicking “Edit” button
  • [Android] Fix error when activity result code too long

  • [iOS] Bump minim version to iOS 11. Removed armv7 armv7s and i386 architectures.

[2.3.2] 2018-08-22

  • [Android] Fixed export in demo for Android 7 and above

[2.3.1] 2018-07-25

  • [iOS] Fixed resize of scaled image
  • [Android] Added Auto Trigger to demo
  • [Cordova] Added upgrade instructions to doc

[2.3] 2018-11-07

  • [iOS] Added Auto Trigger to demo app
  • [Android] Camera is released in an async task
  • [ReactNative] Added plugin and demo
  • [Cordova] Breaking changes:
    • Licence needs to be set via setLicence
    • scan is now scanImage
    • New method to scan from camera scanCamera

[2.2] 2018-06-26

  • [iOS] Fixed empty Apple documentation
  • [iOS] On iPad, changed picture orientation to be based on UI instead of sensors
  • [Android] Breaking change
    • ScanFragment is now a fragment from the Support library, instead of a native fragment
  • [Android] SDK is now published to our Maven repository on S3

[2.1.9] 2018-03-06

  • [Android] Fixed Proguard

[2.1.8] 2018-02-27

  • [Android] Fixed logging, especially to notify that SDK is not initialized
  • [Cordova] Changed demo app to use image instead of camera in simulator
  • [Cordova] Upgraded SDK, added docs for Plugman and Ionic

[2.1.7] 2017-01-31

  • [iOS] Reduced size of SDK: footprint of Universal IPA according to App Thinning Report (~ 500 KB)
  • [iOS] Removed need for adding OpenCV dependency to Podfile
  • Updated READMEs

[2.1.6] 2017-01-18

  • Added timer to allow tests for a minute without a license

[2.1.5] 2017-01-08

  • [iOS] Added support for bitcode and Xcode 9.2

[2.1.10] 2018-04-03

  • Improved enhancement of shadows in B&W
  • [iOS] Added Appledoc
  • [Android] Changed preview to stop after each picture is taken
  • [Cordova] Added translations: de, en, es, fr, it, ja, pt-BR, ru, zh-Hans, zh-Hant

© 2024 The Grizzly Labs. All rights reserved.