Swiftpack.co - Package - iProov/ios

iProov iOS SDK v7.6.0-beta1

πŸ“– Table of contents

🀳 Introduction

The iProov iOS SDK enables you to integrate iProov into your iOS app. We also have an Android SDK, Xamarin bindings and Web SDK.

Requirements

  • iOS 9.0 and above
  • Xcode 11.0 and above

The framework has been written in Swift 5.2.4, and we recommend use of Swift for the simplest and cleanest integration, however it is also possible to call iProov from within an Objective-C app using our Objective-C API, which provides an Objective-C friendly API to invoke the Swift code.

Dependencies

The iProov SDK has dependencies on the following third-party frameworks:

The SDK also utilises a forked version of GPUImage2 and includes a vendored copy of Expression.

Module Stability

As of iProov SDK 7.2.0, module stability is supported for Swift 5.1 and above. The advantage of this is that the iProov SDK no longer needs to be recompiled for every new version of the Swift compiler.

iProov is built with the "Build Libraries for Distribution" build setting enabled, which means that its dependencies must also be built in the same fashion. However, this is still not fully supported in either Cocoapods nor Carthage as of April 2020, therefore some workarounds are required (see installation documentation for details).

πŸ“¦ Repository contents

The framework package is provided via this repository, which contains the following:

  • README.md - This document!
  • WaterlooBank - A sample project of iProov for the fictitious "Waterloo Bank", written in Swift.
  • iProov.xcframework - The iProov framework in XCFramework format. You can add this to your project manually if you aren't using a dependency manager.
  • iProov.framework - The iProov framework as a "fat" dynamic framework for both device & simulator. (You can use this if you are unable to use the XCFramework version for whatever reason.)
  • iProov.podspec - Required by Cocoapods. You do not need to do anything with this file.
  • resources - Directory containing additional development resources you may find helpful.

⬆ Upgrading from earlier versions

If you're already using an older version of the iProov SDK, consult the Upgrade Guide for detailed information about how to upgrade your app.

✍ Registration

You can obtain API credentials by registering on the iProov Portal.

πŸ“² Installation

Integration with your app is supported via both Cocoapods and Carthage. We recommend Cocoapods for the easiest installation.

Cocoapods

As of iProov SDK 7.4.0 the framework is now distributed as an XCFramework, you are therefore required to use Cocoapods 1.9.0 or newer.

  1. If you are not yet using Cocoapods in your project, first run sudo gem install cocoapods followed by pod init. (For further information on installing Cocoapods, click here.)

  2. Add the following to your Podfile (inside the target section):

    pod 'iProov'
    
  3. Add the following to the bottom of your Podfile:

    post_install do |installer|
        installer.pods_project.targets.each do |target|
          if ['iProov', 'KeychainAccess', 'Socket.IO-Client-Swift', 'Starscream' 'SwiftyJSON'].include? target.name
            target.build_configurations.each do |config|
                config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
            end
          end
        end
    end
    

    🧰 MODULE STABILITY WORKAROUND: You must add this code, because whilst iProov (since 7.2.0) supports module stability, it is not directly supported in Cocoapods. This code will manually enable module stability for all of iProov's dependencies. This is due to be fixed in Cocoapods 1.10.0.

  4. Run pod install.

  5. Add an NSCameraUsageDescription entry to your app's Info.plist, with the reason why your app requires camera access (e.g. β€œTo iProov you in order to verify your identity.”)

Carthage

Cocoapods is recommend for the easiest integration, however we also support Carthage. Full instructions installing and setting up Carthage are available here.

At the time of writing, Carthage still does not properly support XCFrameworks, therefore it will install the traditional fat framework instead.

  1. Add the following to your Cartfile:

    github "socketio/socket.io-client-swift" == 15.2.0
    github "kishikawakatsumi/KeychainAccess" ~> 4.1
    github "SwiftyJSON/SwiftyJSON" ~> 5.0
    binary "https://raw.githubusercontent.com/iProov/ios/master/carthage/IProov.json"
    
  2. You can now build the dependencies with Carthage (see the note below about the custom build settings for module stability).

    echo 'BUILD_LIBRARY_FOR_DISTRIBUTION=YES'>/tmp/iproov.xcconfig; XCODE_XCCONFIG_FILE=/tmp/iproov.xcconfig carthage build; rm /tmp/iproov.xcconfig
    

    🧰 MODULE STABILITY WORKAROUND: iProov 7.2.0 supports module stability and therefore all its dependencies must be built in with the "Build Libraries for Distribution" setting enabled, however this is not currently supported in Carthage. Running this custom build command will ensure Xcode builds the dependencies with the correct settings. Once Carthage supports module stability, this workaround can be removed. Progress on this feature can be tracked here.

  3. Add an NSCameraUsageDescription entry to your app's Info.plist, with the reason why your app requires camera access (e.g. "To iProov you in order to verify your identity.")

πŸš€ Get started

Before being able to launch iProov, you need to get a token to iProov against. There are 2 different token types:

  1. A verify token - for logging-in an existing user
  2. An enrol token - for registering a new user

In a production app, you normally would want to obtain the token via a server-to-server back-end call. For the purposes of on-device demos/testing, we provide Swift/Alamofire sample code for obtaining tokens via iProov API v2 with our open-source iOS API Client.

Once you have obtained the token, you can simply call IProov.launch():

let token = "{{ your token here }}"

IProov.launch(token: token, callback: { (status) in

	switch status {
	case .connecting:
		// The SDK is connecting to the server. You should provide an indeterminate progress indicator
		// to let the user know that the connection is taking place.
		
	case .connected:
		// The SDK has connected, and the iProov user interface will now be displayed. You should hide
		// any progress indication at this point.
	
	case let .processing(progress, message):
		// The scan has completed, and the SDK will update your app with the progress of streaming
		// to the server and authenticating the user.
		// This will be called multiple times as the progress updates.
	    
	case let .success(token):
		// The user was successfully verified/enrolled and the token has been validated.
		// The token passed back will be the same as the one passed in to the original call.
	    
	case let .failure(reason, feedbackCode):
		// The user was not successfully verified/enrolled, as their identity could not be verified,
		// or there was another issue with their verification/enrollment. A reason (as a string)
		// is provided as to why the claim failed, along with a feedback code from the back-end.
		
	case .cancelled:
		// The user cancelled iProov, either by pressing the close button at the top right, or sending
		// the app to the background.
	    
	case let .error(error):
		// The user was not successfully verified/enrolled due to an error (e.g. lost internet connection)
		// along with an `iProovError` with more information about the error (NSError in Objective-C).
		// It will be called once, or never.
		
	}
	
}

By default, iProov will stream to our EU back-end platform. If you wish to stream to a different back-end, you can pass a streamingURL as the first parameter to IProov.launch() with the base URL of the back-end to stream to.

⚠️ SECURITY NOTICE: You should never use iProov as a local authentication method. You cannot rely on the fact that the success result was returned to prove that the user was authenticated or enrolled successfully (it is possible the iProov process could be manipulated locally by a malicious user). You can treat the success callback as a hint to your app to update the UI, etc. but you must always independently validate the token server-side (using the validate API call) before performing any authenticated user actions.

βš™ Options

You can customize the iProov session by passing in an Options object when launching iProov and setting any of these variables:

let options = Options()

/*
	UIOptions
	Configure options relating to the user interface
*/

options.ui.filter = .shaded // Adjust the filter used for the face preview. Can be .classic (as in pre-v7), .shaded (additional detail, the default in v7) or .vibrant (full color).

// Adjust various colors for the camera preview:
options.ui.lineColor = .white
options.ui.backgroundColor = .black
options.ui.loadingTintColor = .lightGray
options.ui.notReadyTintColor = .orange
options.ui.readyTintColor = .green

options.ui.title = "Authenticating to ACME Bank" // Specify a custom title to be shown. Defaults to nil which will show an iProov-generated message. Set to empty string ("") to hide the message entirely.
options.ui.font = "SomeFont" // You can specify your own font. This can either be a system font or a custom font in your app bundle (in which case don't forget to also add the font file to your Info.plist).
options.ui.logoImage = UIImage(named: "AcmeLogo") // A custom logo to be shown at the top-right of the iProov screen.
options.ui.scanLineDisabled = false // Disables the vertical sweeping scanline whilst flashing introduced in SDK v7.
options.ui.autoStartDisabled = false // Disable the "auto start" countdown functionality. The user will have to tap the screen to start iProoving.
options.ui.presentationDelegate = MyPresentationDelegate() // See the section below entitled "Custom IProovPresentationDelegate".
options.ui.stringsBundle = Bundle(for: Foo.class) // Pass a custom bundle for string localization (see Localization Guide for further information).

/*
	NetworkOptions
	Configure options relating to networking & security
*/

options.network.certificates = [Bundle.main.path(forResource: "custom_cert", ofType: "der")!] // Supply an array of paths of certificates to be used for pinning. Useful when using your own proxy server, or for overriding the built-in certificate pinning for some other reason. Certificates should be generated in DER-encoded X.509 certificate format, eg. with the command: $ openssl x509 -in cert.crt -outform der -out cert.der
options.network.certificatePinningDisabled = false	// Disables SSL/TLS certificate pinning to the server. WARNING! Do not enable this in production apps.
options.network.timeout = 10 // The network timeout in seconds.
options.network.path = "/socket.io/v2/" // The path to use when streaming, defaults to /socket.io/v2/. You should not need to change this unless directed to do so by iProov.

/*
	CaptureOptions
	Configure options relating to the capture functionality
*/

// You can specify max yaw/roll/pitch deviation of the user's face to ensure a given pose. Values are provided in normalised units.
// These options should not be set for general use. Please contact iProov for further information if you would like to use this feature.

options.capture.maxYaw = 0.03
options.capture.maxRoll = 0.03
options.capture.maxPitch = 0.03

Custom IProovPresentationDelegate

By default, upon launching the SDK, it will get a reference to your app delegate's window's rootViewController, then iterate through the view controller stack to find the top-most view controller and then present() iProov's view controller as a modal view controller from the top-most view controller on the stack.

This may not always be the desirable behaviour; for instance, you may wish to present iProov as part of a UINavigationController-based flow. Therefore, it is also possible to set the options.ui.presentationDelegate property, which allows you to override the presentation/dismissal behaviour of the iProov view controller by conforming to the IProovPresentationDelegate protocol:

extension MyViewController: IProovPresentationDelegate {

    func present(iProovViewController: UIViewController) {
        // How should we present the iProov view controller?
    }

    func dismiss(iProovViewController: UIViewController) {
        // How should we dismiss the iProov view controller once it's done?
    }

}

⚠️ IMPORTANT: There are a couple of important rules you must follow when using this functionality:

  1. With great power comes great responsibility! The iProov view controller requires full cover of the entire screen in order to work properly. Do not attempt to present your view controller to the user in such a way that it only occupies part of the screen, or is obscured by other views. Also, you must ensure that the view controller is entirely removed from the user's view once dismissed.

  2. To avoid the risk of retain cycles, Options only holds a weak reference to your presentation delegate. Ensure that your presentation delegate is retained for the lifetime of the iProov capture session, or you may result in a defective flow.

🌎 Localization

The SDK ships with English strings only. If you wish to customise the strings in the app or localize them into a different language, see our Localization Guide.

πŸ’₯ Handling failures & errors

Failures

Failures occur when the user's identity could not be verified for some reason. A failure means that the capture was successfully received and processed by the server, which returned a result. Crucially, this differs from an error, where the capture itself failed due to a system failure.

Failures are caught via the .failure(reason, feedbackCode) enum case in the callback:

  • reason - The reason that the user could not be verified/enrolled. You should present this to the user as it may provide an informative hint for the user to increase their chances of iProoving successfully next time

  • feedbackCode - An internal representation of the failure code.

The current feedback codes and reasons are as follows:

| feedbackCode | reason | |-----------------------------------|---------------------------------------------------------------| | ambiguous_outcome | Sorry, ambiguous outcome | | network_problem | Sorry, network problem | | motion_too_much_movement | Please do not move while iProoving | | lighting_flash_reflection_too_low | Ambient light too strong or screen brightness too low | | lighting_backlit | Strong light source detected behind you | | lighting_too_dark | Your environment appears too dark | | lighting_face_too_bright | Too much light detected on your face | | motion_too_much_mouth_movement | Please do not talk while iProoving | | user_timeout | Sorry, your session has timed out |

The list of feedback codes and reasons is subject to change.

Errors

Errors occur when the capture could not be completed due to a technical problem or user action which prevents the capture from completing.

Errors are caught via the .error(error) enum case in the callback. The error parameter provides the reason the iProov process failed as an IProovError.

A description of these cases are as follows:

  • captureAlreadyActive - An existing iProov capture is already in progress. Wait until the current capture completes before starting a new one.
  • streamingError(String?) - An error occurred with the video streaming process. Consult the error associated value for more information.
  • encoderError(code: Int32?) - An error occurred with the video encoder. Report the error code to iProov for further assistance.
  • lightingModelError - An error occurred with the lighting mode. This should be reported to iProov for further assistance.
  • cameraError(String?) - An error occurred with the camera.
  • cameraPermissionDenied - The user disallowed access to the camera when prompted. You should direct the user to re-enable camera access via Settings.
  • serverError(String?) - A server-side error/token invalidation occurred. The associated string will contain further information about the error.

🏦 Sample code

For a simple iProov experience that is ready to run out-of-the-box, check out the Waterloo Bank sample project.

Installation

  1. Ensure that you have Cocoapods installed and then run pod install from the WaterlooBank directory to install the required dependencies.

  2. Open WaterlooBank.xcworkspace then navigate to HomeViewController.swift and add your API key and Secret on the appropriate lines.

  3. You can now build and run the project. Please note that you can only launch iProov on a real device; it will not work in the simulator.

⚠️ SECURITY NOTICE: The Waterloo Bank sample project uses the iOS API Client to directly fetch tokens on-device and this is inherently insecure. Production implementations of iProov should always obtain tokens securely from a server-to-server call.

❓ Help & support

You may find your question is answered in our FAQs or one of our other Wiki pages.

For further help with integrating the SDK, please contact support@iproov.com.

Github

link
Stars: 9

Dependencies

Used By

Total: 0

Releases

v7.6.0-beta1 - 2020-07-01 02:08:11

⚑️ Connection callbacks - The SDK now provides callbacks indicating the connection state whilst the SDK connects to iProov's servers. This means that you can now provide your own custom UI in this state as the iProov UI will only appear once the connection has been established. Consult the Upgrade Guide for further details.

⚠️ This is a pre-release version of the iProov SDK, and should not be used in production.

v7.5.0 - 2020-05-23 23:35:30

πŸŒ‰ Native Bridge 2.0 - The Native Bridge has been completely rewritten from the ground-up making it far simpler to integrate and more robust.

πŸ› Bugfix - Fixed a rare crash which could occur during the camera preview.

⏫ Updated dependency - SwiftyJSON has been updated to 5.0.0.

v7.4.2 - 2020-05-15 13:31:35

v7.4.2 fixes a video encoding issue which could result in an error when launching claims on iPhone 7 and newer devices running iOS 12 or below.

⚠️ This is a critical bugfix, all customers using iOS SDK v7.4.0 and above should upgrade to this version immediately.

v7.4.1 - 2020-05-06 16:30:45

v7.4.1 fixes an issue where simulator builds would crash on launch when using the XCFramework.

v7.4.0 - 2020-04-28 09:42:24

🎞 New dynamic encoder with support for additional codecs - This release includes a new video encoder that provides support for additional codecs and enables future flexibility around video encoding parameters.

🧰 XCFramework support - The SDK is now distributed in the new XCFramework format alongside the traditional dynamic universal ("fat") framework. Use of the XCFramework is now the default for Cocoapods users and also highly recommended for those who have opted for manual installation. Users of Carthage and Xamarin will continue to use the dynamic framework as these tools lack support for XCFramework at this time.

v7.3.0 - 2020-03-17 23:35:47

v7.3.0 is the latest update to the v7 SDK and includes 2 important new features:

πŸŒ‰ HTML5/Native bridge - The iOS SDK now support seamless bridging between iProov's HTML5 client and the native iOS SDK to provide official support for WebView-based apps on iOS. Please consult this Wiki page for further details.

πŸ›  Improved Objective-C support - Objective-C support has now been refined and extended to cover all customizable options. This lays the essential foundation to support Xamarin (coming soon).

v7.2.2 - 2019-12-03 17:19:19

v7.2.2 fixes a bug where iProov would not launch correctly from scene-based apps (introduced in iOS 13).

v7.2.1 - 2019-12-02 18:09:39

v7.2.1 is a bugfix update to v7.2.0 released last month.

🐞 Bugfixes

  • Fixed a bug where the iProov SDK would also dismiss the parent view controller after having been presented from a modal view controller.
  • Fixed a bug where the yaw would not be correctly reported when using pose control on devices running iOS 13.
  • Fixes a bug where refusal to grant camera permissions would not be correctly reported as an error.
  • Fixes a bug where refusal to grant camera permissions would result in general cameraError with the string "Unsupported device", rather than cameraPermissionDenied.
  • Fixes an issue where Socket.IO timeouts could result in a malformed claim rather than correctly returning an error.

πŸ”¨ Other minor changes

  • Streaming URLs are now treated as having an implicit https:// prefix.
  • Updated Socket.IO-Client-Swift to v15.2.0
  • Updated KeychainAccess to v4.1.0

v7.2.0 - 2019-11-07 16:54:47

v7.2.0 is the latest update to the v7 ("nextgen") SDK. There are a number of important optimizations and API simplifications in this update, which also now fully enables module stability both for the iProov SDK and its dependencies.

🧰Module stability - Whilst module stability was previously listed as included in SDK v7.1.0, due to an issue with the build process it did not work properly. v7.2.0 now fully enables module stability and also documents the necessary workarounds for Cocoapods & Carthage to enable module stability for transitive dependencies. NOTE: This requires specific changes to your Podfile/Carthage build process, so please see the README for further details.

πŸ‡ΊπŸ‡³New localization logic - The localization logic has been overhauled. The options.ui.locale option to force a given locale has been removed. Instead, you should simply add the necessary Localizable.strings files to your app for the locales you wish to support. As a result of this responsibility shift, all non-English translations have been removed from the SDK. If you wish to override all strings, simply add a Localizable.strings for the "Base" locale. If you are embedding iProov into your own SDK for redistribution to customers, you can make use of the new options.ui.stringsBundle setting, which allows you to specify a custom bundle to use for loading strings.

πŸ–‹Simplification of custom fonts - The API for changing fonts has been simplified. Instead of regularFont and boldFont, there is now a single option named font. If you are using a custom font supplied with your app, you no longer need to specify it in your options.ui.fonts, however you must add it to your app's Info.plist instead.

🧠Memory management improvements - The SDK is now more efficient in terms of memory usage and ensures resources are properly cleared away when the iProov capture completes.

πŸ”Œ Removal of the network transport option - The network.transport option which was introduced in 7.1.0 has been removed due to a security issue identified in Socket.IO where certificate pinning is not applied to non-websocket connections. This will only impact integrations where the network.transport option has been explicitly set to a value other than .webSocket.

πŸ—œSmaller SDK size - Improvements in the build process and removal of non-English translations have allowed us to reduce the size of the framework binary.

v7.1.0 - 2019-09-24 23:13:34

v7.1.0 is a minor update to the v7.0.0 next-generation SDK launched in July:

🌍 Additional network configurability - You can now specify path, timeout and transport (websockets/polling/auto) for video streaming. See the documentation for further details.

πŸ—œ Network compression - Compression is now enabled for all client-server traffic which should result in faster performance, especially in poor-connectivity environments.

πŸ‡ΊπŸ‡³ Improved localization support - We have now improved the string localization/customisation support. It is now possible to localize the iProov SDK into multiple languages from your app. We have a full guide to localization available on our Wiki.

πŸ› Minor bugfixes/tweaks - Fixed the APIs for Objective-C support; fixed an issue where vibration would be disabled for iOS 10+ devices without a Taptic Engine; improvements to default lighting model; improved support for 2019 iOS devices.

v7.0.0 - 2019-07-15 10:40:13

This production release incorporates all the changes from 7.0.0-beta1, 7.0.0-beta2 & 7.0.0-beta3:

πŸ”Œ The streaming process is now asynchronous - Previously, the iProov SDK controlled the UI whilst streaming, and then provided a result back to your app once the entire process was completed. v7 now hands back control to your app after the screen flashing, you can provide your own streaming progress UI or allow the user to continue with other activities whilst the capture streams in the background.

πŸ•― Overhauled lighting model - v7 introduces our next-generation evolutionary and adaptive lighting model. This means iProov will now perform better in a wider range of environmental lighting conditions and provide more useful user feedback.

🀠 Additional filter options are now available - Along with the classic canny visual filter, there is now a new default β€œshaded” feature which adds a hint of colour, as well as a β€œvibrant” option which provides a full-colour more detailed visual effect.

🧭 Pose control - It is now possible to set maximum roll/pitch/yaw values to obtain front-on β€œselfie” images from the SDK to enable the use of the iProov image in an interchangeable format for other face matching use cases.

🎨 Greater customisation options - It is now possible to specify a title whilst iProoving, and to pass a custom presentation delegate to control how the iProov view controller is presented and dismissed in more complex UI journeys.

πŸ–Œ UI improvements - Following user feedback there is now a vertical scan-line which sweeps up the screen whilst iProoving. When using auto-start, the 3 second numeric countdown has been replaced with a 2 second progress bar along the bottom. The UI has been updated for consistency with our nextgen Android & HTML5 clients.

πŸ›  Simplified API surface - Previously there were 6 different ways to launch iProov, all of which have now been replaced with IProov.launch().

πŸ—‘ Legacy features have been removed - Privacy policy and instructions UI has now been removed from the SDK. The functionality obtain tokens has also been removed from within the SDK (which should never have been used in production anyway) and is instead now provided by the iOS API Client. Push and URL claims are no longer supported directly within the SDK and should instead be implemented within your app.

βœ‚οΈ Third-party dependencies have been reduced - As a result of removing the legacy features, it has been possible to remove Alamofire, AlamofireImage, GPUImage & MBProgressHUD as dependencies, resulting in smaller SDK size. A lightweight fork of GPUImage2 is included, bundled-into the SDK.

πŸ•· Bugfixes - The main thread checker warning from GPUImage has been fixed, along with various other minor issues and performance optimisations.

🧹 Many other minor improvements - Optimisations for the iPhone X, Xs & Xs Max, haptic feedback on supported devices, refactored Options API for clarity and consistency, improvements to localisation, and use of Vision Framework on iOS 11+ for more accurate face detection.

v7.0.0-beta3 - 2019-07-09 21:16:52

v7.0.0-beta3 makes a few small tweaks to beta2 as we approach the release of v7.0.0 to production (planned for the end of this week), based on internal and customer feedback.

Changes since v7.0.0-beta2

  • Added support for presentationDelegate to Options.UI - it is now possible to set a custom delegate to handle the presentation & dismissal of the iProov view controller. This means that you now have control over how iProov's view controller is displayed, and opens up a great deal of flexibility (for example, presenting iProov within a UINavigationController flow). See this section of the README for more information and examples.

  • Added new title property to Options.UI - you can now pass a custom title string to be displayed at the top of the iProov view controller, to replace the default iProov-generated title. As a result of this, the messageHidden property has now been removed (you can simply pass empty string ("") to title to have no title at all). See the Options section of the README for more information and examples.

  • UI changes - the logo image has now been moved to the right-hand side, and the close button has been moved to the left-hand side.

  • Upgraded Socket.IO to 15.1.0 - we have updated to the latest version of socket.io-client-swift.

v7.0.0-beta2 - 2019-06-20 20:29:57

v7.0.0-beta2 builds upon the progress made in beta1 by adding the remaining functionality required for the next-generation SDK platform, and further refines and optimises the improvements in beta1.

Barring any showstoppers, we anticipate this to be the final beta before v7.0.0 production release.

Major changes since v7.0.0-beta1

  • Lighting model is now enabled. The next-generation evolutionary and adaptive lighting model has now been integrated and enabled. This means iProov will now perform better in a wider range of environmental lighting conditions and provide more useful feedback to the user about whether they are likely to be able to successfully iProov in particularly bright environments. IMPORTANT: Please note that at this the lighting model is still undergoing training and will be refined further over time.

  • New filters. It is now possible to customise the video filter which is applied to the face. The new default is called .shaded and applies a light level of shading with more detail to the user's face. Other options include .classic (which reverts to the original monochromatic design pre-v7.0.0-beta2) and .vibrant which dials up the colour vibrancy to the max! See the README for additional details.

  • Introducing iOS API Client. The Sample Code has now been removed from the SDK repo and has been moved to its own separate framework which can be found here.

Minor changes since v7.0.0-beta1

  • Haptic feedback. Rather than the phone vibrating to provide user feedback, on iOS devices with the Taptic Engine, the device will now more gracefully "tap" when the face is found and at the start of flashing.

  • Refactor to Options. The Options API has been updated for additional clarity and consistency. See the README for additional details.

  • Misc other improvements. Improvements to localisation and error handling, minor improvements to the UI for aligning the face,

v7.0.0-beta1 - 2019-04-10 16:26:16

Main changes

  • Breaking API changes. Previously there were 6 different ways to launch iProov, which have now all been replaced with IProov.launch().

  • The streaming process is now asynchronous. Previously, the iProov SDK controlled the UI whilst streaming, and then provided a result back to your app once the entire process was completed. v7 now hands back control to your app after the screen flashing, you can provide your own streaming progress UI or allow the user to continue with other activities whilst the capture streams in the background. This required an overhaul of the public API.

  • There is no built-in UI for streaming progress. This is part of making the SDK asynchronous (see above). You should now provide your own UI for streaming progress (if desired).

  • Push & URL claims are no longer supported as distinct launch methods. Just iProov against a token obtained from a push notification/URL as normal, and implement this behaviour (if required) in your own app.

  • The SDK no longer has fetching a token as built-in functionality. Prior to v7 of the SDK it was possible to launch iProov with only a service provider, this functionality has been removed, and you should obtain a token through a secure server-to-server call from your back-end to iProov. For local development purposes, you can obtain a token using the demo API client in the the Waterloo Bank sample code.

  • Privacy policy & instructions are no longer part of the SDK. You should ensure you obtain suitable user consent within your app for iProov, and suitable instructions are provided to the user prior to iProoving. Contact us for further details on this.

Other changes

  • Alamofire, AlamofireImage & MBProgressHUD are removed as dependencies.
  • GPUImage no longer a standalone dependency, a lightweight fork of GPUImage2 is now bundled-in.
  • Optimized for iPhone X, Xs & Xs Max.
  • Overhauled, more robust lighting model (to follow in future beta).
  • Vertical scan-line whilst iProoving.
  • The 3 second auto-start countdown has been replaced with a 2 second progress bar.
  • iProovConfig has been renamed to Options.
  • Fixes main thread warnings from GPUImage.