Upgrade — iOS minimum version 15.0#
From 5.7.0, the HAAPI iOS frameworks — IdsvrHaapiDriver, IdsvrHaapiSdk and IdsvrHaapiUIKit — require iOS 15.0 or later and Xcode 27 or later.
The driver is Apple’s toolchain rather than a product decision: Xcode 27 refuses to build for any iOS version below 15.0, so a lower floor is no longer expressible. A project targeting iOS 14 cannot link 5.7.0.
This is a breaking change in a minor release. Breaking changes are normally reserved for major versions; the exception is made here because the toolchain leaves no alternative. Plan the upgrade rather than picking it up incidentally.
What changed#
| Before (5.6.0 and earlier) | After (5.7.0) |
|---|---|
| iOS 14.0 minimum | iOS 15.0 minimum |
| Built with Xcode 15+ | Xcode 27+ |
Haapi.isSupported reported whether the OS was new enough | Removed — see below |
HaapiManager.isSupported delegated to it | Removed |
Affected surfaces#
- Driver Layer, iOS — deployment target raised; the
Haapiclass removed. - SDK Layer, iOS — deployment target raised;
HaapiManager.isSupportedremoved. - UI Layer, iOS — deployment target raised. No behavioural change to the flow, the view controllers or theming.
- Android and React Native — unaffected. React Native’s iOS deployment target is already 16.4, so an RN integration needs no change.
Migration#
1. Raise your deployment target#
Set IPHONEOS_DEPLOYMENT_TARGET to 15.0 or higher on every target that links a HAAPI framework, and build with Xcode 27 or later. If any target is left below 15.0, the build fails with:
error: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 14.0,
but the range of supported deployment target versions is 15.0 to 27.0.x.
2. Delete your device-support check#
Haapi.isSupported answered a single question: is this device’s OS new enough to run HAAPI? At a 15.0 minimum it can only ever answer “yes”, so the check — and any fallback behind it — is unreachable. Both it and the Haapi class it belonged to are removed, along with HaapiManager.isSupported.
// Before
if Haapi.isSupported {
startHaapiFlow()
} else {
fallBackToAlternativeAuthentication()
}
// After — the guard is unconditional at a 15.0 floor
startHaapiFlow()// Before
if ([Haapi isSupported]) {
[self startHaapiFlow];
}
// After
[self startHaapiFlow];Delete the else branch with it. It was already unreachable on any device capable of running the framework.
DCAppAttestService.isSupported is a different, unrelated Apple API and is unaffected. Only the HAAPI Haapi.isSupported and HaapiManager.isSupported are removed.
3. CocoaPods — only if you upgrade Xcode before 5.7.0#
Podspecs for 5.6.0 and earlier declare an iOS 14.0 deployment target, which Xcode 27 rejects. If you move to Xcode 27 while still on an older release, the generated Pods project fails to build with the error above — pointing at Pods.xcodeproj rather than at the cause.
Raise the generated pod targets in your Podfile until you move to 5.7.0:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
current = config.build_settings['IPHONEOS_DEPLOYMENT_TARGET']
if current.nil? || Gem::Version.new(current.to_s) < Gem::Version.new('15.0')
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
end
end
end
end
It only ever raises a target, so a pod declaring a higher minimum keeps it. On 5.7.0 the podspecs declare 15.0 and the hook becomes unnecessary.
What did not change#
No other public API is added, renamed or withdrawn. Availability annotations on the frameworks’ types now read @available(iOS 15.0, *) instead of 14.0, which is visible in the generated interface but changes nothing you call. Flow behaviour, theming, attestation, DPoP and WebAuthn are all unaffected on a supported device.
If you already target iOS 15 or later and never branched on Haapi.isSupported, upgrading to 5.7.0 requires no source change.