diff --git a/CHANGELOG.md b/CHANGELOG.md index cb0024d0..126fb736 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Release Notes +## 10.2.17 +### Added skipApiSubmission: Whether to skip api submission to SmileID and return only captured images on SmartSelfie enrollment, SmartSelfie authentic , Document verification and Enhanced DocV + ## 10.2.16 ### Fixed * Clear images on retry or start capture with the same jobId diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 2f4db733..f9273bac 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -12,7 +12,7 @@ PODS: - Sentry (8.36.0): - Sentry/Core (= 8.36.0) - Sentry/Core (8.36.0) - - SmileID (10.2.16): + - SmileID (10.2.17): - FingerprintJS - lottie-ios (~> 4.4.2) - ZIPFoundation (~> 0.9) @@ -51,7 +51,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 - SmileID: 3c6d3101c7da84fe9acc36c10d2a189192f00d13 + SmileID: 44fef36001a02aa7362368e8a3f1127c03751166 SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c diff --git a/SmileID.podspec b/SmileID.podspec index 774f949e..9e78b83c 100644 --- a/SmileID.podspec +++ b/SmileID.podspec @@ -1,11 +1,11 @@ Pod::Spec.new do |s| s.name = 'SmileID' - s.version = '10.2.16' + s.version = '10.2.17' s.summary = 'The Official Smile Identity iOS SDK.' s.homepage = 'https://docs.usesmileid.com/integration-options/mobile/ios-v10-beta' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'Japhet' => 'japhet@usesmileid.com', 'Juma Allan' => 'juma@usesmileid.com', 'Vansh Gandhi' => 'vansh@usesmileid.com'} - s.source = { :git => "https://github.com/smileidentity/ios.git", :tag => "v10.2.16" } + s.source = { :git => "https://github.com/smileidentity/ios.git", :tag => "v10.2.17" } s.ios.deployment_target = '13.0' s.dependency 'ZIPFoundation', '~> 0.9' s.dependency 'FingerprintJS' diff --git a/Sources/SmileID/Classes/DocumentVerification/Model/OrchestratedDocumentVerificationViewModel.swift b/Sources/SmileID/Classes/DocumentVerification/Model/OrchestratedDocumentVerificationViewModel.swift index b54ec201..75425e7a 100644 --- a/Sources/SmileID/Classes/DocumentVerification/Model/OrchestratedDocumentVerificationViewModel.swift +++ b/Sources/SmileID/Classes/DocumentVerification/Model/OrchestratedDocumentVerificationViewModel.swift @@ -8,26 +8,27 @@ enum DocumentCaptureFlow: Equatable { case processing(ProcessingState) } -internal class IOrchestratedDocumentVerificationViewModel: ObservableObject { +class IOrchestratedDocumentVerificationViewModel: ObservableObject { // Input properties - internal let userId: String - internal let jobId: String - internal let allowNewEnroll: Bool - internal let countryCode: String - internal let documentType: String? - internal let captureBothSides: Bool - internal let jobType: JobType - internal let extraPartnerParams: [String: String] + let userId: String + let jobId: String + let allowNewEnroll: Bool + let countryCode: String + let documentType: String? + let captureBothSides: Bool + let skipApiSubmission: Bool + let jobType: JobType + let extraPartnerParams: [String: String] // Other properties - internal var documentFrontFile: Data? - internal var documentBackFile: Data? - internal var selfieFile: URL? - internal var livenessFiles: [URL]? - internal var savedFiles: DocumentCaptureResultStore? - internal var stepToRetry: DocumentCaptureFlow? - internal var didSubmitJob: Bool = false - internal var error: Error? + var documentFrontFile: Data? + var documentBackFile: Data? + var selfieFile: URL? + var livenessFiles: [URL]? + var savedFiles: DocumentCaptureResultStore? + var stepToRetry: DocumentCaptureFlow? + var didSubmitJob: Bool = false + var error: Error? var localMetadata: LocalMetadata // UI properties @@ -39,13 +40,14 @@ internal class IOrchestratedDocumentVerificationViewModel: Obse @Published var errorMessage: String? @Published var step = DocumentCaptureFlow.frontDocumentCapture - internal init( + init( userId: String, jobId: String, allowNewEnroll: Bool, countryCode: String, documentType: String?, captureBothSides: Bool, + skipApiSubmission: Bool, selfieFile: URL?, jobType: JobType, extraPartnerParams: [String: String] = [:], @@ -57,6 +59,7 @@ internal class IOrchestratedDocumentVerificationViewModel: Obse self.countryCode = countryCode self.documentType = documentType self.captureBothSides = captureBothSides + self.skipApiSubmission = skipApiSubmission self.selfieFile = selfieFile self.jobType = jobType self.extraPartnerParams = extraPartnerParams @@ -177,6 +180,10 @@ internal class IOrchestratedDocumentVerificationViewModel: Obse selfie: selfieFile, livenessImages: livenessFiles ?? [] ) + if skipApiSubmission { + DispatchQueue.main.async { self.step = .processing(.success) } + return + } let authRequest = AuthenticationRequest( jobType: jobType, enrollment: false, @@ -197,7 +204,7 @@ internal class IOrchestratedDocumentVerificationViewModel: Obse let authResponse = try await SmileID.api.authenticate(request: authRequest) let prepUploadRequest = PrepUploadRequest( partnerParams: authResponse.partnerParams.copy(extras: self.extraPartnerParams), - allowNewEnroll: String(allowNewEnroll), // TODO: - Fix when Michael changes this to boolean + allowNewEnroll: String(allowNewEnroll), // TODO: - Fix when Michael changes this to boolean metadata: localMetadata.metadata.items, timestamp: authResponse.timestamp, signature: authResponse.signature @@ -321,14 +328,14 @@ extension IOrchestratedDocumentVerificationViewModel: SmartSelfieResultDelegate } // swiftlint:disable opening_brace -internal class OrchestratedDocumentVerificationViewModel: +class OrchestratedDocumentVerificationViewModel: IOrchestratedDocumentVerificationViewModel { override func onFinished(delegate: DocumentVerificationResultDelegate) { if let savedFiles, - let selfiePath = getRelativePath(from: selfieFile), - let documentFrontPath = getRelativePath(from: savedFiles.documentFront), - let documentBackPath = getRelativePath(from: savedFiles.documentBack) + let selfiePath = getRelativePath(from: selfieFile), + let documentFrontPath = getRelativePath(from: savedFiles.documentFront), + let documentBackPath = getRelativePath(from: savedFiles.documentBack) { delegate.didSucceed( selfie: selfiePath, @@ -347,16 +354,16 @@ internal class OrchestratedDocumentVerificationViewModel: } // swiftlint:disable opening_brace -internal class OrchestratedEnhancedDocumentVerificationViewModel: +class OrchestratedEnhancedDocumentVerificationViewModel: IOrchestratedDocumentVerificationViewModel< EnhancedDocumentVerificationResultDelegate, EnhancedDocumentVerificationJobResult > { override func onFinished(delegate: EnhancedDocumentVerificationResultDelegate) { if let savedFiles, - let selfiePath = getRelativePath(from: selfieFile), - let documentFrontPath = getRelativePath(from: savedFiles.documentFront), - let documentBackPath = getRelativePath(from: savedFiles.documentBack) + let selfiePath = getRelativePath(from: selfieFile), + let documentFrontPath = getRelativePath(from: savedFiles.documentFront), + let documentBackPath = getRelativePath(from: savedFiles.documentBack) { delegate.didSucceed( selfie: selfiePath, diff --git a/Sources/SmileID/Classes/DocumentVerification/View/OrchestratedDocumentVerificationScreen.swift b/Sources/SmileID/Classes/DocumentVerification/View/OrchestratedDocumentVerificationScreen.swift index 648b81cf..c6695876 100644 --- a/Sources/SmileID/Classes/DocumentVerification/View/OrchestratedDocumentVerificationScreen.swift +++ b/Sources/SmileID/Classes/DocumentVerification/View/OrchestratedDocumentVerificationScreen.swift @@ -14,9 +14,10 @@ struct OrchestratedDocumentVerificationScreen: View { let allowGalleryUpload: Bool let allowAgentMode: Bool let showInstructions: Bool + let skipApiSubmission: Bool let extraPartnerParams: [String: String] let onResult: DocumentVerificationResultDelegate - + var body: some View { IOrchestratedDocumentVerificationScreen( countryCode: countryCode, @@ -31,6 +32,7 @@ struct OrchestratedDocumentVerificationScreen: View { allowGalleryUpload: allowGalleryUpload, allowAgentMode: allowAgentMode, showInstructions: showInstructions, + skipApiSubmission: skipApiSubmission, extraPartnerParams: extraPartnerParams, onResult: onResult, viewModel: OrchestratedDocumentVerificationViewModel( @@ -40,6 +42,7 @@ struct OrchestratedDocumentVerificationScreen: View { countryCode: countryCode, documentType: documentType, captureBothSides: captureBothSides, + skipApiSubmission: skipApiSubmission, selfieFile: bypassSelfieCaptureWithFile, jobType: .documentVerification, extraPartnerParams: extraPartnerParams, @@ -63,9 +66,10 @@ struct OrchestratedEnhancedDocumentVerificationScreen: View { let allowGalleryUpload: Bool let allowAgentMode: Bool let showInstructions: Bool + let skipApiSubmission: Bool let extraPartnerParams: [String: String] let onResult: EnhancedDocumentVerificationResultDelegate - + var body: some View { IOrchestratedDocumentVerificationScreen( countryCode: countryCode, @@ -80,6 +84,7 @@ struct OrchestratedEnhancedDocumentVerificationScreen: View { allowGalleryUpload: allowGalleryUpload, allowAgentMode: allowAgentMode, showInstructions: showInstructions, + skipApiSubmission: skipApiSubmission, extraPartnerParams: extraPartnerParams, onResult: onResult, viewModel: OrchestratedEnhancedDocumentVerificationViewModel( @@ -89,6 +94,7 @@ struct OrchestratedEnhancedDocumentVerificationScreen: View { countryCode: countryCode, documentType: documentType, captureBothSides: captureBothSides, + skipApiSubmission: skipApiSubmission, selfieFile: bypassSelfieCaptureWithFile, jobType: .enhancedDocumentVerification, extraPartnerParams: extraPartnerParams, @@ -111,10 +117,11 @@ private struct IOrchestratedDocumentVerificationScreen: View { let allowGalleryUpload: Bool let allowAgentMode: Bool let showInstructions: Bool + let skipApiSubmission: Bool var extraPartnerParams: [String: String] let onResult: T @ObservedObject var viewModel: IOrchestratedDocumentVerificationViewModel - + init( countryCode: String, documentType: String?, @@ -128,6 +135,7 @@ private struct IOrchestratedDocumentVerificationScreen: View { allowGalleryUpload: Bool, allowAgentMode: Bool, showInstructions: Bool, + skipApiSubmission: Bool, extraPartnerParams: [String: String], onResult: T, viewModel: IOrchestratedDocumentVerificationViewModel @@ -144,97 +152,98 @@ private struct IOrchestratedDocumentVerificationScreen: View { self.allowGalleryUpload = allowGalleryUpload self.allowAgentMode = allowAgentMode self.showInstructions = showInstructions + self.skipApiSubmission = skipApiSubmission self.extraPartnerParams = extraPartnerParams self.onResult = onResult self.viewModel = viewModel } - + var body: some View { switch viewModel.step { - case .frontDocumentCapture: - DocumentCaptureScreen( - side: .front, - showInstructions: showInstructions, - showAttribution: showAttribution, - allowGallerySelection: allowGalleryUpload, - showSkipButton: false, - instructionsHeroImage: SmileIDResourcesHelper.DocVFrontHero, - instructionsTitleText: SmileIDResourcesHelper.localizedString( - for: "Instructions.Document.Front.Header" - ), - instructionsSubtitleText: SmileIDResourcesHelper.localizedString( - for: "Instructions.Document.Front.Callout" - ), - captureTitleText: SmileIDResourcesHelper.localizedString(for: "Action.TakePhoto"), - knownIdAspectRatio: idAspectRatio, - onConfirm: viewModel.onFrontDocumentImageConfirmed, - onError: viewModel.onError - ) - case .backDocumentCapture: - DocumentCaptureScreen( - side: .back, - showInstructions: showInstructions, - showAttribution: showAttribution, - allowGallerySelection: allowGalleryUpload, - showSkipButton: false, - instructionsHeroImage: SmileIDResourcesHelper.DocVBackHero, - instructionsTitleText: SmileIDResourcesHelper.localizedString( - for: "Instructions.Document.Back.Header" - ), - instructionsSubtitleText: SmileIDResourcesHelper.localizedString( - for: "Instructions.Document.Back.Callout" - ), - captureTitleText: SmileIDResourcesHelper.localizedString(for: "Action.TakePhoto"), - knownIdAspectRatio: idAspectRatio, - onConfirm: viewModel.onBackDocumentImageConfirmed, - onError: viewModel.onError, - onSkip: viewModel.onDocumentBackSkip - ) - case .selfieCapture: - OrchestratedSelfieCaptureScreen( - userId: userId, - jobId: jobId, - isEnroll: false, - allowNewEnroll: allowNewEnroll, - allowAgentMode: allowAgentMode, - showAttribution: showAttribution, - showInstructions: showInstructions, - extraPartnerParams: extraPartnerParams, - skipApiSubmission: true, - onResult: viewModel - ) - case let .processing(state): - ProcessingScreen( - processingState: state, - inProgressTitle: SmileIDResourcesHelper.localizedString( - for: "Document.Processing.Header" - ), - inProgressSubtitle: SmileIDResourcesHelper.localizedString( - for: "Document.Processing.Callout" - ), - inProgressIcon: SmileIDResourcesHelper.DocumentProcessing, - successTitle: SmileIDResourcesHelper.localizedString( - for: "Document.Complete.Header" - ), - successSubtitle: SmileIDResourcesHelper.localizedString( - for: $viewModel.errorMessageRes.wrappedValue ?? "Document.Complete.Callout" - ), - successIcon: SmileIDResourcesHelper.CheckBold, - errorTitle: SmileIDResourcesHelper.localizedString(for: "Document.Error.Header"), - errorSubtitle: getErrorSubtitle( - errorMessageRes: $viewModel.errorMessageRes.wrappedValue, - errorMessage: $viewModel.errorMessage.wrappedValue - ), - errorIcon: SmileIDResourcesHelper.Scan, - continueButtonText: SmileIDResourcesHelper.localizedString( - for: "Confirmation.Continue" - ), - onContinue: { viewModel.onFinished(delegate: onResult) }, - retryButtonText: SmileIDResourcesHelper.localizedString(for: "Confirmation.Retry"), - onRetry: viewModel.onRetry, - closeButtonText: SmileIDResourcesHelper.localizedString(for: "Confirmation.Close"), - onClose: { viewModel.onFinished(delegate: onResult) } - ) + case .frontDocumentCapture: + DocumentCaptureScreen( + side: .front, + showInstructions: showInstructions, + showAttribution: showAttribution, + allowGallerySelection: allowGalleryUpload, + showSkipButton: false, + instructionsHeroImage: SmileIDResourcesHelper.DocVFrontHero, + instructionsTitleText: SmileIDResourcesHelper.localizedString( + for: "Instructions.Document.Front.Header" + ), + instructionsSubtitleText: SmileIDResourcesHelper.localizedString( + for: "Instructions.Document.Front.Callout" + ), + captureTitleText: SmileIDResourcesHelper.localizedString(for: "Action.TakePhoto"), + knownIdAspectRatio: idAspectRatio, + onConfirm: viewModel.onFrontDocumentImageConfirmed, + onError: viewModel.onError + ) + case .backDocumentCapture: + DocumentCaptureScreen( + side: .back, + showInstructions: showInstructions, + showAttribution: showAttribution, + allowGallerySelection: allowGalleryUpload, + showSkipButton: false, + instructionsHeroImage: SmileIDResourcesHelper.DocVBackHero, + instructionsTitleText: SmileIDResourcesHelper.localizedString( + for: "Instructions.Document.Back.Header" + ), + instructionsSubtitleText: SmileIDResourcesHelper.localizedString( + for: "Instructions.Document.Back.Callout" + ), + captureTitleText: SmileIDResourcesHelper.localizedString(for: "Action.TakePhoto"), + knownIdAspectRatio: idAspectRatio, + onConfirm: viewModel.onBackDocumentImageConfirmed, + onError: viewModel.onError, + onSkip: viewModel.onDocumentBackSkip + ) + case .selfieCapture: + OrchestratedSelfieCaptureScreen( + userId: userId, + jobId: jobId, + isEnroll: false, + allowNewEnroll: allowNewEnroll, + allowAgentMode: allowAgentMode, + showAttribution: showAttribution, + showInstructions: showInstructions, + extraPartnerParams: extraPartnerParams, + skipApiSubmission: true, + onResult: viewModel + ) + case let .processing(state): + ProcessingScreen( + processingState: state, + inProgressTitle: SmileIDResourcesHelper.localizedString( + for: "Document.Processing.Header" + ), + inProgressSubtitle: SmileIDResourcesHelper.localizedString( + for: "Document.Processing.Callout" + ), + inProgressIcon: SmileIDResourcesHelper.DocumentProcessing, + successTitle: SmileIDResourcesHelper.localizedString( + for: "Document.Complete.Header" + ), + successSubtitle: SmileIDResourcesHelper.localizedString( + for: $viewModel.errorMessageRes.wrappedValue ?? "Document.Complete.Callout" + ), + successIcon: SmileIDResourcesHelper.CheckBold, + errorTitle: SmileIDResourcesHelper.localizedString(for: "Document.Error.Header"), + errorSubtitle: getErrorSubtitle( + errorMessageRes: $viewModel.errorMessageRes.wrappedValue, + errorMessage: $viewModel.errorMessage.wrappedValue + ), + errorIcon: SmileIDResourcesHelper.Scan, + continueButtonText: SmileIDResourcesHelper.localizedString( + for: "Confirmation.Continue" + ), + onContinue: { viewModel.onFinished(delegate: onResult) }, + retryButtonText: SmileIDResourcesHelper.localizedString(for: "Confirmation.Retry"), + onRetry: viewModel.onRetry, + closeButtonText: SmileIDResourcesHelper.localizedString(for: "Confirmation.Close"), + onClose: { viewModel.onFinished(delegate: onResult) } + ) } } } diff --git a/Sources/SmileID/Classes/SmileID.swift b/Sources/SmileID/Classes/SmileID.swift index b56618e0..1f48c71c 100644 --- a/Sources/SmileID/Classes/SmileID.swift +++ b/Sources/SmileID/Classes/SmileID.swift @@ -6,7 +6,7 @@ import UIKit public class SmileID { /// The default value for `timeoutIntervalForRequest` for URLSession default configuration. public static let defaultRequestTimeout: TimeInterval = 60 - public static let version = "10.2.16" + public static let version = "10.2.17" @Injected var injectedApi: SmileIDServiceable public static var configuration: Config { config } @@ -28,7 +28,8 @@ public class SmileID { /// A private static constant that initializes a `URLSession` with a default configuration. /// This `URLSession` is used for creating `URLSessionDataTask`s in the networking layer. - /// The session configuration sets the timeout interval for requests to the value specified by `SmileID.requestTimeout`. + /// The session configuration sets the timeout interval for requests to the value specified by + /// `SmileID.requestTimeout`. /// /// - Returns: A `URLSession` instance with the specified configuration. private static let urlSession: URLSession = { @@ -207,7 +208,7 @@ public class SmileID { LocalStorage.getFileByType(jobId: jobId, fileType: .selfie), LocalStorage.getFileByType(jobId: jobId, fileType: .documentFront), LocalStorage.getFileByType(jobId: jobId, fileType: .documentBack), - LocalStorage.getInfoJsonFile(jobId: jobId), + LocalStorage.getInfoJsonFile(jobId: jobId) ].compactMap { $0 } allFiles = livenessFiles + additionalFiles } catch { @@ -289,6 +290,7 @@ public class SmileID { /// - showAttribution: Whether to show the Smile ID attribution or not on the Instructions /// screen /// - showInstructions: Whether to deactivate capture screen's instructions for SmartSelfie. + /// - skipApiSubmission: Whether to skip api submission to SmileID and return only captured images /// - extraPartnerParams: Custom values specific to partners /// - delegate: Callback to be invoked when the SmartSelfieā„¢ Enrollment is complete. public class func smartSelfieEnrollmentScreen( @@ -298,6 +300,7 @@ public class SmileID { allowAgentMode: Bool = false, showAttribution: Bool = true, showInstructions: Bool = true, + skipApiSubmission: Bool = false, extraPartnerParams: [String: String] = [:], delegate: SmartSelfieResultDelegate ) -> some View { @@ -310,7 +313,7 @@ public class SmileID { showAttribution: showAttribution, showInstructions: showInstructions, extraPartnerParams: extraPartnerParams, - skipApiSubmission: false, + skipApiSubmission: skipApiSubmission, onResult: delegate ) } @@ -333,6 +336,7 @@ public class SmileID { /// - showAttribution: Whether to show the Smile ID attribution or not on the Instructions /// screen /// - showInstructions: Whether to deactivate capture screen's instructions for SmartSelfie. + /// - skipApiSubmission: Whether to skip api submission to SmileID and return only captured images /// - extraPartnerParams: Custom values specific to partners /// - delegate: Callback to be invoked when the SmartSelfieā„¢ Authentication is complete. public class func smartSelfieAuthenticationScreen( @@ -342,6 +346,7 @@ public class SmileID { allowAgentMode: Bool = false, showAttribution: Bool = true, showInstructions: Bool = true, + skipApiSubmission: Bool = false, extraPartnerParams: [String: String] = [:], delegate: SmartSelfieResultDelegate ) -> some View { @@ -354,7 +359,7 @@ public class SmileID { showAttribution: showAttribution, showInstructions: showInstructions, extraPartnerParams: extraPartnerParams, - skipApiSubmission: false, + skipApiSubmission: skipApiSubmission, onResult: delegate ) } @@ -384,6 +389,7 @@ public class SmileID { /// - showInstructions: Whether to deactivate capture screen's instructions for Document /// Verification (NB! If instructions are disabled, gallery upload won't be possible) /// - showAttribution: Whether to show the Smile ID attribution on the Instructions screen + /// - skipApiSubmission: Whether to skip api submission to SmileID and return only captured images /// - extraPartnerParams: Custom values specific to partners /// - delegate: The delegate object that receives the result of the Document Verification public class func documentVerificationScreen( @@ -399,6 +405,7 @@ public class SmileID { allowGalleryUpload: Bool = false, showInstructions: Bool = true, showAttribution: Bool = true, + skipApiSubmission: Bool = false, extraPartnerParams: [String: String] = [:], delegate: DocumentVerificationResultDelegate ) -> some View { @@ -415,6 +422,7 @@ public class SmileID { allowGalleryUpload: allowGalleryUpload, allowAgentMode: allowAgentMode, showInstructions: showInstructions, + skipApiSubmission: skipApiSubmission, extraPartnerParams: extraPartnerParams, onResult: delegate ) @@ -445,6 +453,7 @@ public class SmileID { /// - showInstructions: Whether to deactivate capture screen's instructions for Document /// Verification (NB! If instructions are disabled, gallery upload won't be possible) /// - showAttribution: Whether to show the Smile ID attribution on the Instructions screen + /// - skipApiSubmission: Whether to skip api submission to SmileID and return only captured images /// - extraPartnerParams: Custom values specific to partners /// - delegate: The delegate object that receives the result of the Document Verification public class func enhancedDocumentVerificationScreen( @@ -459,6 +468,7 @@ public class SmileID { allowAgentMode: Bool = false, allowGalleryUpload: Bool = false, showInstructions: Bool = true, + skipApiSubmission: Bool = false, showAttribution: Bool = true, extraPartnerParams: [String: String] = [:], delegate: EnhancedDocumentVerificationResultDelegate @@ -476,6 +486,7 @@ public class SmileID { allowGalleryUpload: allowGalleryUpload, allowAgentMode: allowAgentMode, showInstructions: showInstructions, + skipApiSubmission: skipApiSubmission, extraPartnerParams: extraPartnerParams, onResult: delegate ) @@ -516,6 +527,7 @@ public class SmileID { /// the front camera will be used. /// - showAttribution: Whether to show the Smile ID attribution on the Instructions screen /// - showInstructions: Whether to deactivate capture screen's instructions for SmartSelfie. + /// - skipApiSubmission: Whether to skip api submission to SmileID and return only captured images /// - extraPartnerParams: Custom values specific to partners /// - delegate: Callback to be invoked when the Biometric KYC is complete. public class func biometricKycScreen(