Skip to main content

iOS v26.8.0

Compatibility Overview

ComponentVersion
Minimum iOS Version16.0
Minimum watchOS Version9.0
Built Using Xcode26.0.1
Swift Version5.0
Swift Tools Version5.10
Package ManagerSwift Package
Q2MobileApp26.8.0
Q2DevApp26.8.0

Q2MobileApp Dependencies

LibraryVersion
Firebase11.5.0
Bugsnag6.30.1
Pendo3.13.0

Added

Q2ModuleInterfaces

  • Added ProfileSwitchInfo and Q2LifecycleModule.userDidSwitchProfile(_:) so lifecycle modules can respond when the active profile changes while the host app remains authenticated.

    public struct ProfileSwitchInfo {
    public let userId: Int
    public let username: String
    }

    public protocol Q2LifecycleModule: LifecycleModule {
    func userDidSwitchProfile(_ info: ProfileSwitchInfo)
    }

    Q2ModuleBase provides a no-op default implementation, so existing modules that do not need profile-switch events require no source changes.

Q2UIComponents

  • Added Q2KeyboardDismissToolbar, a reusable SwiftUI keyboard accessory toolbar with a trailing dismiss action.

  • Added Q2ToolbarItem, a toolbar wrapper for Q2ToolbarButton that hides the iOS 26 Liquid Glass shared toolbar background when appropriate.

  • Added .q2Focused(_:) for Q2PasswordTextField, giving UIKit-backed password fields a native-style focus binding API.

Updated

Q2ModuleInterfaces

  • AuthenticationModuleContext now uses shouldAllowAutoLogin, a @MainActor closure evaluated when the authentication module decides whether to start auto-login.

    public struct AuthenticationModuleContext {
    public var presentWithLocalizedErrorMessage: String?
    public var shouldAllowAutoLogin: @MainActor () -> Bool
    }

    This replaces the previous captured allowAutoLogin Boolean so late-arriving app events, such as push-notification taps, can still affect auto-login behavior.

Q2NativeLogin

  • Added profile-switch handling for native login. When the host app switches profiles, NativeLogin updates its active user, clears the previous user's volatile password, and seeds a user entry when the switched-to profile has not previously logged in natively.

  • Added a step-up authentication flow used when NativeLogin needs to re-confirm the active user's password after profile switch or other protected-account transitions.

  • Improved login keyboard behavior with a dismiss-only Done affordance and more stable password focus handling.

Q2UIComponents

  • Reworked Q2PasswordTextField to keep a single UIKit text field alive when toggling Show/Hide. This preserves the password manager/QuickType bar and avoids keyboard jumps while editing.

  • Shared text field visual styling through Q2TextFieldChrome, aligning regular and password text field chrome, focus, error, and accessory behavior.

  • Refined toolbar button behavior for iOS 26 Liquid Glass while retaining the existing toolbar appearance on earlier iOS versions.

Migration Notes

AuthenticationModuleContext.allowAutoLogin

If your authentication module reads context.allowAutoLogin, update it to call context.shouldAllowAutoLogin() instead:

// Before (26.7.0 and earlier)
if context.allowAutoLogin {
// Start auto-login
}

// After (26.8.0+)
if context.shouldAllowAutoLogin() {
// Start auto-login
}

Q2LifecycleModule.userDidSwitchProfile(_:)

Modules that implement Q2LifecycleModule directly must add userDidSwitchProfile(_:). Modules that subclass Q2ModuleBase inherit the default no-op implementation and require no source changes.

func userDidSwitchProfile(_ info: ProfileSwitchInfo) {
// Refresh state for info.username if needed.
}

Q2PasswordTextField Focus

For programmatic focus, prefer the new .q2Focused($isFocused) modifier or the isFocused: initializer parameter on Q2PasswordTextField. This replaces custom SwiftUI focus bridging around the password field.


Supported Internal Modules

The following Q2-provided modules are available for this release. These modules are distributed as pre-built xcframeworks and are consumed via SPM from the Q2 distribution repository.

ModulePackageVersionMin Q2MobileAppIntegration Guide
InboundSSOq2-inboundsso-ios3.9.026.8.0InboundSSO Configuration
NativeLoginQ2NativeLogin26.8.026.8.0Native Login Configuration