Skip to content

feat: Bump Android and iOS SDKs to v11.1.9 and add forceAgentMode option#162

Open
Harun Wangereka (wangerekaharun) wants to merge 12 commits intomainfrom
feat/update-android-iOS-v11.1.9
Open

feat: Bump Android and iOS SDKs to v11.1.9 and add forceAgentMode option#162
Harun Wangereka (wangerekaharun) wants to merge 12 commits intomainfrom
feat/update-android-iOS-v11.1.9

Conversation

@wangerekaharun
Copy link
Copy Markdown
Member

@wangerekaharun Harun Wangereka (wangerekaharun) commented Mar 17, 2026

User description

Story: https://app.shortcut.com/smileid/story/xxx

Summary

Bump Android and iOS SDKs to v11.1.9 and add forceAgentMode option

Known Issues

Any shortcomings in your work. This may include corner cases not correctly handled or issues related
to but not within the scope of your PR. Design compromises should be discussed here if they were not
already discussed above.

Test Instructions

Concise test instructions on how to verify that your feature works as intended. This should include
changes to the development environment (if applicable) and all commands needed to run your work.

Screenshot

If applicable (e.g. UI changes), add screenshots to help explain your work.


PR Type

Enhancement


Description

  • Bump Android SDK and iOS SDK to v11.1.9

  • Add forceAgentMode option across all products

    • SmartSelfie Enrollment/Authentication, Document Verification
    • Enhanced Document Verification, Biometric KYC
    • Selfie Capture view
  • Add skipApiSubmission to BiometricKYC and DocumentVerification

  • Remove allowAgentMode from Consent and DocumentCapture views


Diagram Walkthrough

flowchart LR
  SDK["SDK Bump v11.1.9"]
  FAM["forceAgentMode prop"]
  Views["Android & iOS Views"]
  VMs["View Managers"]
  Types["TypeScript Types"]
  SDK --> Views
  FAM --> VMs
  VMs --> Views
  FAM --> Types
Loading

File Walkthrough

Relevant files
Enhancement
31 files
SmileIDBiometricKYCViewManager.kt
Add forceAgentMode and skipApiSubmission properties           
+2/-0     
SmileIDConsentViewManager.kt
Remove allowAgentMode from consent view manager                   
+0/-1     
SmileIDDocumentCaptureViewManager.kt
Remove allowAgentMode from document capture manager           
+0/-1     
SmileIDDocumentVerificationViewManager.kt
Add forceAgentMode and skipApiSubmission properties           
+2/-0     
SmileIDEnhancedDocumentVerificationViewManager.kt
Add forceAgentMode and skipApiSubmission properties           
+2/-0     
SmileIDSmartSelfieAuthenticationViewManager.kt
Add forceAgentMode property to auth view manager                 
+1/-0     
SmileIDSmartSelfieCaptureViewManager.kt
Add forceAgentMode property to capture view manager           
+1/-0     
SmileIDSmartSelfieEnrollmentViewManager.kt
Add forceAgentMode property to enrollment view manager     
+1/-0     
SmileIDBiometricKYCView.kt
Pass forceAgentMode and skipApiSubmission to BiometricKYC
+2/-0     
SmileIDDocumentVerificationView.kt
Pass forceAgentMode and skipApiSubmission to composable   
+2/-0     
SmileIDEnhancedDocumentVerificationView.kt
Pass forceAgentMode and skipApiSubmission to composable   
+2/-0     
SmileIDSmartSelfieAuthenticationView.kt
Pass forceAgentMode to smart selfie authentication             
+1/-0     
SmileIDSmartSelfieCaptureView.kt
Add forceAgentMode to selfie capture and view model           
+10/-1   
SmileIDSmartSelfieEnrollmentView.kt
Pass forceAgentMode to smart selfie enrollment                     
+1/-0     
SmileIDView.kt
Add forceAgentMode field and cleanup layout params             
+5/-6     
SmileIDBiometricKYCView.swift
Add forceAgentMode and skipApiSubmission to biometric KYC
+2/-0     
SmileIDDocumentVerificationView.swift
Add forceAgentMode to document verification view                 
+1/-0     
SmileIDEnhancedDocumentVerificationView.swift
Add forceAgentMode to enhanced doc verification view         
+1/-0     
SmileIDSmartSelfieAuthView.swift
Add forceAgentMode to smart selfie auth view                         
+1/-0     
SmileIDSmartSelfieCaptureView.swift
Refactor view model creation with forceAgentMode support 
+56/-38 
SmileIDSmartSelfieEnrollmentView.swift
Add forceAgentMode to smart selfie enrollment view             
+1/-0     
SmileIDBiometricKYCViewManager.swift
Parse forceAgentMode and skipApiSubmission from params     
+2/-0     
SmileIDDocumentCaptureViewManager.swift
Remove allowAgentMode from document capture manager           
+0/-1     
SmileIDDocumentVerificationViewManager.swift
Parse forceAgentMode from params                                                 
+1/-0     
SmileIDEnhancedDocumentVerificationViewManager.swift
Parse forceAgentMode from params                                                 
+1/-0     
SmileIDSmartSelfieAuthenticationViewManager.swift
Parse forceAgentMode from params                                                 
+1/-0     
SmileIDSmartSelfieCaptureViewManager.swift
Refactor view model init and add forceAgentMode                   
+4/-7     
SmileIDSmartSelfieEnrollmentViewManager.swift
Parse forceAgentMode from params                                                 
+1/-0     
SmileIDProductModel.swift
Add forceAgentMode published property to model                     
+1/-0     
HomeScreen.tsx
Add forceAgentMode default and update defaults                     
+4/-2     
types.ts
Add forceAgentMode type and update ConsentRequest               
+8/-1     
Bug fix
1 files
SmileIDConsentView.kt
Pass showAttribution to consent composable                             
+1/-0     
Formatting
1 files
SmileIDDocumentCaptureView.kt
Remove unused imports from document capture view                 
+0/-10   
Dependencies
2 files
react-native-smile-id.podspec
Bump iOS SmileID dependency to v11.1.9                                     
+1/-1     
gradle.properties
Bump Android SDK version to v11.1.9                                           
+1/-1     
Documentation
1 files
CHANGELOG.md
Add v11.1.8 release notes with SDK bump details                   
+8/-1     
Configuration changes
1 files
package.json
Bump package version to 11.1.8                                                     
+1/-1     


Need help?
  • Type /help how to ... in the comments thread for any questions about PR-Agent usage.
  • Check out the documentation for more information.
  • @prfectionist
    Copy link
    Copy Markdown
    Contributor

    prfectionist bot commented Mar 17, 2026

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

    ⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
    🏅 Score: 78
    🧪 No relevant tests
    🔒 No security concerns identified
    🔀 No multiple PR themes
    ⚡ Recommended focus areas for review

    Race Condition

    The createViewModelIfNeeded method uses a guard viewModel == nil check, but it's triggered by onReceive of a combineLatest publisher on allowAgentMode and forceAgentMode. If allowAgentMode is set first and the view model is created, then when forceAgentMode is subsequently set, the view model won't be recreated with the updated forceAgentMode value. The view model will be stuck with the initial forceAgentMode value from when it was first created.

            .onReceive(product.$allowAgentMode.combineLatest(product.$forceAgentMode)) { _ in
                createViewModelIfNeeded()
            }
    }
    
    private func createViewModelIfNeeded() {
        guard viewModel == nil else { return }
        viewModel = SelfieViewModel(
            isEnroll: false,
            userId: product.userId ?? generateUserId(),
            jobId: product.jobId ?? generateJobId(),
            allowNewEnroll: false,
            allowAgentMode: product.allowAgentMode,
            forceAgentMode: product.forceAgentMode,
            skipApiSubmission: true,
            extraPartnerParams: [:]
        )
    Force Unwrap Crash

    UIImage(data: selfieToConfirm)! uses a force unwrap that will crash the app if the data cannot be converted to a UIImage. This was present in the old code but was carried forward in the refactor.

    image: UIImage(data: selfieToConfirm)!,
    Unused Check

    The if self.bridge.uiManager.view(forReactTag: node) is BaseSmileIDView check replaced the previous if let component = ... as? BaseSmileIDView pattern, but the result of the check is never used (the old code bound it to component). More importantly, the properties are set on self.product regardless of whether the view exists, so the guard is effectively a no-op since the code inside the if block doesn't use the view reference.

    if self.bridge.uiManager.view(forReactTag: node) is BaseSmileIDView {
    Missing Default

    skipApiSubmission is passed directly without a null-safe default (skipApiSubmission = skipApiSubmission), while other boolean properties use ?: false. If the underlying view property is nullable, this could pass an unexpected value. Verify that skipApiSubmission in SmileIDView is non-nullable (it appears to be Boolean = false), so this should be fine, but it's inconsistent with the pattern used for other booleans like forceAgentMode ?: false.

    skipApiSubmission = skipApiSubmission
    Default Change

    allowAgentMode default changed from true to false and useStrictMode from true to false in the sample app. While the sample is not production code, this is a behavioral change that could confuse developers using the sample as a reference. The useStrictMode comment says "set to false... to use old SmartSelfie™ capture" which may not be the desired default for all products.

    allowAgentMode: false,
    forceAgentMode: false,
    showInstructions: true,
    showAttribution: true,
    showConfirmation: true,
    isDocumentFrontSide: true,
    allowGalleryUpload: true,
    useStrictMode: false, // set to false for biometric KYC,doc V and enhanced doc V to use old SmartSelfie™ capture

    Copy link
    Copy Markdown
    Contributor

    Copilot AI left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Pull request overview

    Adds a new forceAgentMode option to the React Native wrapper so partners can enforce Agent Mode (back camera only, no UI toggle) across supported SmileID flows, while also bumping native SDK dependencies.

    Changes:

    • Introduce forceAgentMode into the TS request types and wire it through Android/iOS view managers into the native SDK screens.
    • Bump native SmileID SDK versions (Android + iOS) to 11.1.9 and update sample app defaults/changelog accordingly.
    • Refactor iOS SmartSelfie Capture view initialization to defer SelfieViewModel creation.

    Reviewed changes

    Copilot reviewed 37 out of 38 changed files in this pull request and generated 4 comments.

    Show a summary per file
    File Description
    src/types.ts Adds forceAgentMode to SmartSelfie-related request typing and adjusts ConsentRequest omission list.
    sample/src/HomeScreen.tsx Updates sample defaults to include forceAgentMode and tweaks Agent Mode / strict mode defaults.
    sample/ios/Podfile.lock Updates sample’s iOS pod lockfile to SmileID 11.1.9.
    react-native-smile-id.podspec Bumps SmileID iOS pod dependency to 11.1.9.
    package.json Bumps wrapper package version to 11.1.8.
    ios/ViewModels/SmileIDProductModel.swift Adds @Published forceAgentMode to shared product model.
    ios/ViewManagers/*.swift Plumbs forceAgentMode from RN params into iOS product model across relevant managers.
    ios/View/*.swift Passes forceAgentMode into SmileID SwiftUI screens; refactors SmartSelfie Capture view model handling.
    CHANGELOG.md Adds 11.1.8 release notes mentioning native SDK bumps and forceAgentMode.
    android/src/main/java/com/smileidentity/react/views/*.kt Adds forceAgentMode to Android view properties and passes through to Compose screens where supported.
    android/src/main/java/com/smileidentity/react/viewmanagers/*.kt Reads forceAgentMode (and some skipApiSubmission) from RN props and assigns into views.
    android/gradle.properties Bumps SmileID Android SDK version to 11.1.9.

    💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

    You can also share your feedback on Copilot code review. Take the survey.

    @github-actions
    Copy link
    Copy Markdown

    github-actions bot commented Apr 6, 2026

    🔍 Semgrep Security Scan Results

    ✅ No security findings detected by p/security-audit ruleset.

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Projects

    None yet

    Development

    Successfully merging this pull request may close these issues.

    3 participants