iOS v26.11.0
Compatibility Overview
| Component | Version |
|---|---|
| Minimum iOS Version | 16.0 |
| Minimum watchOS Version | 9.0 |
| Built Using Xcode | 26.6 |
| Swift Version | 5.0 |
| Swift Tools Version | 5.10 |
| Package Manager | Swift Package |
| Q2MobileApp | 26.11.0 |
| Q2DevApp | 26.11.0 |
Q2MobileApp Dependencies
| Library | Version |
|---|---|
| Firebase | 11.5.0 |
| Bugsnag | 6.30.1 |
| Pendo | 3.13.0 |
Added
Q2ModuleInterfaces
-
Added
PasswordAuthentication,PasswordCredential, andPasswordAuthenticationResultfor custom authentication modules that need standard username/password login without constructingWebServiceRequestcalls directly. Core provides the implementation (wrapping the existingLogonUserOperationinfrastructure) via the newAuthenticationModuleContext.passwordAuthenticationproperty.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)PasswordAuthenticationResultincludesasAuthenticationModuleResponse()to convert directly to the type expected byModuleDelegate.completePlatformAuthentication(with:). Failures surface through the existingMobileCoreLoginFailureenum (.invalidCredentials,.networkUnavailable,.genericError,.insecure).
This module may be subject to additional enhancements and changes in future releases as we continue to evolve its capabilities.
AuthenticationModuleContext.init has a new required parameterAuthenticationModuleContext.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 SwiftUIFont.semiBoldAppFont(ofSize:relativeTo:). Each wraps the base font withUIFontMetrics(forTextStyle:)so it scales with the user's Accessibility text size setting. -
Added
sheetBgandsheetTextpublished properties onQ2FlexTextTheming, used to theme the background and body copy of the expanded "Read more" sheet onQ2FlexText.
Updated
Q2UIComponents
-
UIFontandFonttext 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. -
Q2PasswordTextFieldnow setsadjustsFontForContentSizeCategoryon its underlyingUITextFieldand reports its Dynamic-Type-scaled intrinsic height throughsizeThatFits(_:uiView:context:), so the field grows taller at larger text sizes instead of clipping. -
Q2AlertView.defaultandQ2AlertView.authchanged from storedstatic letconstants to computedstatic varproperties. They now re-readThemeProvider.shared.themeon 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 ofUIFont.appFont(ofSize:relativeTo:)from Q2UIComponents, which scales with Dynamic Type.font(withSize:)continues to work but does not scale.
Behaviour Changes
Q2UIComponents
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.
Q2Mobvars.mobFlextTextLinkContrast renamedThe 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.
| Module | Package | Version | Min Q2MobileApp | Integration Guide |
|---|---|---|---|---|
| InboundSSO | q2-inboundsso-ios | 3.11.1 | 26.11.0 | InboundSSO Configuration |
| NativeLogin | Q2NativeLogin | 26.11.0 | 26.11.0 | Native 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.