Skip to content

Upgrading to SDK v10.x

Braden edited this page Apr 14, 2023 · 9 revisions

Upgrading to v10.3.0

There are no code changes required to upgrade to v10.3.0.

New options can be set in the following way:

let options = Options()
options.disableExteriorEffects = true
options.headerBackgroundColor = .yellow

Upgrading to v10.1.3

There are no code changes required to upgrade to v10.1.3.

Upgrading to v10.1.2

You no longer need to refer to SwiftProtobuf if you are using Cocoapods or Carthage to install iProov.

Cocoapods

If you are using Cocoapods, you should update your Podfile as specified in the README as the post_install workaround for Cocoapods needs to be updated. You will need to remove the reference to 'SwiftProtobuf' and then run pod install.

Carthage

If you are using Carthage, you should update your Cartfile as specified in the README and then run carthage update with the appropriate workarounds and arguments.

Upgrading to v10.1

New Strings

SDK v10.1 introduces the following new strings to the app, which are used for the new rotation/multitasking overlay on iPad:

Name Default text (English)
IProov_PromptCloseMultitasking Close multitasking to continue
IProov_PromptRotateDeviceToPortrait Rotate device to portrait to continue
IProov_PromptRotateDeviceUpsideDown Rotate device upside-down to continue

Upgrading to v10

Deployment Target

SDK v10 drops support for iOS 10 and now only supports iOS 11+.

Cocoapods

If you are using Cocoapods, the post_install workaround for Cocoapods needs to be updated. You will need to replace the reference to 'Socket.IO-Client-Swift' with 'SwiftProtobuf' and then run pod install.

Carthage

If you are using Carthage, you should update your Cartfile as specified in the README and then run carthage update with the appropriate workarounds and arguments.

Streaming URL

The SDK now streams over WebSockets instead of Socket.IO. In practice, this means that you should replace any references to https://*.rp.secure.iproov.me with wss://*.rp.secure.iproov.me/ws when passing the streamingURL parameter to IProov.launch().

Further guidance will be forthcoming in due course for any customers making use of reverse proxies. In the meantime, please contact us to discuss your requirements further.

Changes to Options

The structure of Options has been simplified and flattened. Many existing options have been re-mapped to the new hierarchy, while others have been removed as they are no longer applicable to the new user experience.

The following table maps all SDK v9 options to their v10 equivalents:

SDK v9 SDK v10
ui.filter filter (see below)
ui.lineColor Removed (now handled via the LineDrawingFilter)
ui.backgroundColor Removed (now handled via the LineDrawingFilter)
ui.stringsBundle stringsBundle
ui.stringsTable stringsTable
ui.headerBackgroundColor Removed
ui.footerBackgroundColor Removed
ui.headerTextColor titleTextColor
ui.promptTextColor promptTextColor
ui.footerTextColor Removed
ui.closeButtonTintColor closeButtonTintColor
ui.closeButtonImage closeButtonImage
ui.logoImage logoImage
ui.floatingPromptEnabled Removed
ui.floatingPromptRoundedCorners promptRoundedCorners
ui.title title
ui.font font
ui.genuinePresenceAssurance.readyOverlayStrokeColor genuinePresenceAssurance.readyOvalStrokeColor
ui.genuinePresenceAssurance.notReadyOverlayStrokeColor genuinePresenceAssurance.notReadyOvalColor
ui.genuinePresenceAssurance.autoStartDisabled Removed
ui.genuinePresenceAssurance.readyTintColor Removed
ui.genuinePresenceAssurance.notReadyTintColor Removed
ui.genuinePresenceAssurance.progressBarColor Removed
ui.genuinePresenceAssurance.readyFloatingPromptBackgroundColor promptBackgroundColor
ui.genuinePresenceAssurance.notReadyFloatingPromptBackgroundColor promptBackgroundColor
ui.livenessAssurance.primaryTintColor Removed
ui.livenessAssurance.secondaryTintColor Removed
ui.livenessAssurance.floatingPromptBackgroundColor promptBackgroundColor
ui.livenessAssurance.overlayStrokeColor livenessAssurance.ovalStrokeColor
network.timeout timeout
network.path Removed
network.certificates certificates (see below)
capture.genuinePresenceAssurance.maxYaw genuinePresenceAssurance.maxYaw (deprecated)
capture.genuinePresenceAssurance.maxRoll genuinePresenceAssurance.maxRoll (deprecated)
capture.genuinePresenceAssurance.maxPitch genuinePresenceAssurance.maxPitch (deprecated)

In addition to the above, the following new options have been added:

Name Description
livenessAssurance.completedOvalStrokeColor Color for oval stroke after LA scan completes.
surroundColor Color applied the area outside the oval.

Changes to filter

In prior SDK versions, the permitted filter options were .shaded (default), .classic and .vibrant.

These filter options still exist, but are now grouped under a LineDrawingFilter class, and are set via the style property. For example:

options.filter = Options.LineDrawingFilter(style: .vibrant,
                                           foregroundColor: .black, // previously lineColor
                                           backgroundColor: .white)

SDK v10 also introduces a new NaturalFilter which is available in both .clear and .blur styles:

options.filter = Options.NaturalFilter(style: .clear)

Note: NaturalFilter is only available for Liveness Assurance claims. Attempting to use NaturalFilter with Genuine Presence Assurance claims will result in an error.

Changes to certificates

In SDK v9.1 and above it was possible to pass certificates as either String values (treated as paths to the certificate, generally included in your app bundle), or Data values (the certificates themselves). In SDK v9.0 and below it was possible to specify String values only.

In SDK v10 it is now only possible to pass certificates as Data.

If you have an existing certificate (certificate.der) you wish to load from your app bundle, you can use the following code:

options.certificates = [try! Data(contentsOf: URL(fileURLWithPath: Bundle.main.path(forResource: "certificate", ofType: "der")!))]

You may prefer to load your certificate directly from base64-encoded data, such as:

options.certificates = Data(base64Encoded: "...")

Deprecation of Pose Control

The genuinePresenceAssurance.maxYaw, genuinePresenceAssurance.maxRoll & genuinePresenceAssurance.maxPitch options all relate to "pose control" which is a deprecated feature which will be removed from a future SDK version.

If you believe you may be affected by the future removal of pose control, please contact us to discuss further.

Changes to Callbacks

IProov.launch() parameters

In SDK v9 and below, the final parameter passed to IProov.launch() was named callback, which meant that the following was possible:

IProov.launch(streamingURL: "...", callback: { status in ... })

In SDK v10 the parameter is now unnamed, which further encourages use of Swift's trailing closure syntax:

IProov.launch(streamingURL: "...") { status in ... }

.success(SuccessResult)

SuccessResult no longer contains the token property. This property is redundant, because the token is the same as the one passed to IProov.launch().

.failure(FailureResult)

FailureResult no longer contains the token property. This property is redundant, because the token is the same as the one passed to IProov.launch().

The reason property on FailureResult has been changed. It is no longer a String to be displayed to the user, instead it is now an enum of potential failure reasons.

Instead of using failureResult.reason, you can now use failureResult.localizedDescription for a user-facing localized description of how to recover from the failure.

.cancelled(Canceller)

.cancelled now has an associated value of type Canceller which will be either .user (if the user cancelled the scan by pressing the back button in the iProov UI or suspending the app), or .app if the SDK was cancelled by you calling the new .cancel() API to cancel the SDK programmatically from your app.

Strings

The SDK strings have been updated and are now available in 9 additional languages alongside English. For your convenience, you can find a copy of the latest Localizable.strings file in the resources folder here.

The following strings have been added:

Name Default text (English)
IProov_PromptAlignFace Put your face in the oval
IProov_FailureEyesClosed Keep your eyes open
IProov_FailureFaceTooClose Move your face farther from the screen
IProov_FailureFaceTooFar Move your face closer to the screen
IProov_FailureMisalignedFace Keep your face in the oval
IProov_FailureNotSupported Device is not supported
IProov_FailureObscuredFace Remove any face coverings
IProov_FailureSunglasses Remove sunglasses
IProov_FailureTooBright Move somewhere darker
IProov_FailureTooDark Move somewhere brighter
IProov_FailureTooMuchMovement Keep still
IProov_FailureUnknown Try again
IProov_FailureUserTimeout Try again
IProov_AccessibilityLabelSecuredByIProov Secured by iProov

The following strings have been renamed:

v9 v10
IProov_AlignFaceVoiceOverPrompt IProov_AccessibilityPromptAlignFace
IProov_CloseButtonAccessibilityLabel IProov_AccessibilityLabelCloseButton
IProov_PromptScanning IProov_AccessibilityPromptScanning
IProov_ErrorCameraPermissionDeniedMessageIos IProov_ErrorCameraPermissionDeniedMessage

The following strings have been removed:

Name Rationale
IProov_MessageFormat Relates to auto-generated title, removed in SDK v9.5.0
IProov_PromptTapToBegin "Tap to start" feature has been removed
IProov_PromptLivenessAlignFace Use IProov_PromptAlignFace instead (see above)
IProov_PromptLivenessNoTarget Use IProov_PromptAlignFace instead (see above)
IProov_PromptGenuinePresenceAlignFace Use IProov_PromptAlignFace instead (see above)
IProov_ProgressStreamingSlow This can now be handled in your app instead
IProov_PromptGrantPermission Use IProov_ErrorCameraPermissionDenied instead
IProov_PromptGrantPermissionMessage Use IProov_ErrorCameraPermissionDeniedMessage instead
IProov_FailureAmbiguousOutcome Use IProov_FailureUnknown instead (see above)
IProov_FailureLightingBacklit Use new failure cases instead (see above)
IProov_FailureLightingFaceTooBright Use IProov_FailureTooBright instead (see above)
IProov_FailureLightingFlashReflectionTooLow Use new failure cases instead (see above)
IProov_FailureLightingTooDark Use IProov_FailureTooDark instead (see above)
IProov_FailureMotionTooMuchMouthMovement Use IProov_FailureTooMuchMovement instead (see above)
IProov_FailureMotionTooMuchMovement Use IProov_FailureTooMuchMovement instead (see above)

Native Bridge

If you are using the iOS Biometrics SDK in conjunction with the Web Biometrics SDK via Native Bridge, you are recommended to upgrade to Web SDK v4.0+ as the Native Bridge protocol has been updated.

Reverse Proxies

SDK v10 uses WebSockets rather than Socket.IO for network connectivity. Customers requiring additional support for reverse proxy configuration should contact us.