Migrate from iOS SDK v2 to v3
iOS SDK v3 cleans up a few long-deprecated APIs, raises the minimum supported iOS version, and adds SwiftUI support. The inquiry flow hasn’t changed, so your existing Dashboard templates and Inquiry IDs continue to work.
This guide walks through what you need to change in your app to move from v2 to v3. Most integrators only need to update a handful of call sites.
At a glance
Migration details
Minimum iOS deployment target is now 15.0
v3 raises the minimum deployment target from iOS 13.0 to iOS 15.0. If your app needs to support iOS 13–14, stay on the latest v2.x release.
CocoaPods is no longer published
v3 ships only via Swift Package Manager and the manual XCFramework. The PersonaInquirySDK2 CocoaPods spec is not updated past v2.
If you must keep using CocoaPods, stay on v2. Otherwise, migrate your install path to SPM. See the iOS Integration Guide.
InquiryConfiguration is no longer public
The InquiryConfiguration struct and its Inquiry(config:delegate:) initializer have been removed from the public surface. Construct inquiries with the builder API instead.
Before
After
The builder exposes all of the configuration that InquiryConfiguration did. See Configuration in the integration guide for the full list.
InquiryDelegate.inquiryError now receives a typed PersonaError
The signature changed from func inquiryError(_ error: Error) to func inquiryError(_ error: PersonaError). PersonaError is an enum describing what went wrong, with cases such as .networking, .misconfigured, .camera, and .permissions.
Before
After
See Handle Errors for a complete example.
Client-side theming is removed
Theming is now fully server-driven through the Theme Editor in the Persona Dashboard. The in-code Inquiry.theme API, InquiryTheme struct, and the theme parameter on InquiryConfiguration are no longer available.
Move any client-side colors, fonts, or styles you previously set in Swift into your dashboard theme. The Migrate iOS Theming from Client to Server guide walks through the mapping.
The one exception is the initial loading screen, the view shown after the inquiry is launched and before the first server response arrives. You can replace it with your own SwiftUI view via the new initialLoadingView builder method.
Async upload APIs are removed
The experimental async upload surface has been removed. This includes Inquiry.doAsyncUpload(...), Inquiry.retrieveUnprocessedFilesForAsyncUpload(), the AsyncUploadDelegate protocol, and the asyncUploadDelegate builder parameter. There is no direct replacement; if your integration relied on these APIs, please contact us to discuss alternatives before upgrading.
routingCountry builder method removed
The routingCountry(_:) builder method has been removed. Routing is handled automatically by Persona. Remove any call to .routingCountry(_:) from your inquiry construction.

