Skip to main content

iOS v26.11.0

Compatibility Overview​

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

Q2MobileApp Dependencies​

LibraryVersion
Firebase11.5.0
Bugsnag6.30.1
Pendo3.13.0

Added​

Q2ModuleInterfaces​

  • Added PasswordAuthentication, PasswordCredential, and PasswordAuthenticationResult for custom authentication modules that need standard username/password login without constructing WebServiceRequest calls directly. Core provides the implementation (wrapping the existing LogonUserOperation infrastructure) via the new AuthenticationModuleContext.passwordAuthentication property.

    let credential = PasswordCredential(username: username, password: password)
    let result = try await context.passwordAuthentication.authenticate(using: credential)
    let response = result.asAuthenticationModuleResponse()
    try await moduleDelegate.completePlatformAuthentication(with: response)

    PasswordAuthenticationResult includes asAuthenticationModuleResponse() to convert directly to the type expected by ModuleDelegate.completePlatformAuthentication(with:). Failures surface through the existing MobileCoreLoginFailure enum (.invalidCredentials, .networkUnavailable, .genericError, .insecure).

Subject to Change

This module may be subject to additional enhancements and changes in future releases as we continue to evolve its capabilities.

danger
Breaking: AuthenticationModuleContext.init has a new required parameter

AuthenticationModuleContext.init now requires passwordAuthentication: any PasswordAuthentication. Core constructs every context delivered to modules, so this is transparent at runtime — but any module that builds its own AuthenticationModuleContext for previews or tests (the same way Q2TesterModule's preview login view does internally) must supply a PasswordAuthentication conformance to keep compiling.

Q2UIComponents​

  • Added Dynamic Type–aware overloads across the font helpers: UIFont.appFont(ofSize: relativeTo:), boldAppFont, semiBoldAppFont, italicAppFont, lightAppFont, italicComplianceFont, and the SwiftUI Font.semiBoldAppFont(ofSize:relativeTo:). Each wraps the base font with UIFontMetrics(forTextStyle:) so it scales with the user's Accessibility text size setting.

  • Added sheetBg and sheetText published properties on Q2FlexTextTheming, used to theme the background and body copy of the expanded "Read more" sheet on Q2FlexText.

Updated​

Q2UIComponents​

  • UIFont and Font text styles (bodyTextStyle, bodyEmphasizedTextStyle, headlineTextStyle, subheadTextStyle, subheadEmphasizedTextStyle) now scale with Dynamic Type instead of returning a fixed point size. Views that rely on a fixed height for these styles should re-check their layout at larger accessibility text sizes — see Behaviour Changes below.

  • Q2PasswordTextField now sets adjustsFontForContentSizeCategory on its underlying UITextField and reports its Dynamic-Type-scaled intrinsic height through sizeThatFits(_:uiView:context:), so the field grows taller at larger text sizes instead of clipping.

  • Q2AlertView.default and Q2AlertView.auth changed from stored static let constants to computed static var properties. They now re-read ThemeProvider.shared.theme on every access instead of capturing it once, so an alert presented after a runtime theme reload reflects the current theme.

Q2ModuleInterfaces​

  • ThemeProvider.font(withSize:) is deprecated in favor of UIFont.appFont(ofSize:relativeTo:) from Q2UIComponents, which scales with Dynamic Type. font(withSize:) continues to work but does not scale.

Behaviour Changes​

Q2UIComponents​

Dynamic Type now affects existing text styles

Any module consuming Q2UIComponents' shared text styles (bodyTextStyle, headlineTextStyle, subheadTextStyle, and their SwiftUI/UIKit variants) will see those fonts grow with the user's Accessibility text size setting, where previously they were a fixed point size. Layouts built assuming a fixed line height for these styles should be re-verified at larger accessibility sizes.

danger
Breaking: Q2Mobvars.mobFlextTextLinkContrast renamed

The misspelled mobFlextTextLinkContrast published property on Q2Mobvars is renamed to mobFlexTextLinkContrast. The theme JSON key it reads is also renamed from mobFlextTextLinkContrast to mobFlexTextLinkContrast (falling back to the existing mobLinkContrast key if neither is present). FI theme configs that set the old mobFlextTextLinkContrast key are no longer read and will fall back to the mobLinkContrast-derived default.

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 repos.

ModulePackageVersionMin Q2MobileAppIntegration Guide
InboundSSOq2-inboundsso-ios3.11.126.11.0InboundSSO Configuration
NativeLoginQ2NativeLogin26.11.026.11.0Native Login Configuration

Migration Notes​

Adopting PasswordAuthentication​

See the Custom Password Authentication Module Guide for a full walkthrough of wiring a custom login module to context.passwordAuthentication.

Dynamic Type layout check​

Modules that lay out UI around Q2UIComponents text styles should test at the largest Accessibility text sizes (Settings > Accessibility > Display & Text Size > Larger Text) to confirm containers accommodate the now-scaling fonts.