---
title: Migrating iOS apps to the Orchestration SDK
description: PingOne Advanced Identity Cloud PingAM iOS
component: orchsdks
page_id: orchsdks:journey:migration/ios
canonical_url: https://developer.pingidentity.com/orchsdks/journey/migration/ios.html
revdate: Tue, 7 Apr 2026 14:57:06 +0100
section_ids:
  high_level_changes: High-level changes
  package_dependency_changes: Package dependency changes
  code_change_examples: Code change examples
  navigating_authentication_journeys: Navigating authentication journeys
  users_and_sessions: Users and sessions
  journey_node_callback_handling: Journey node callback handling
  error_handling: Error handling
  migrating_using_ai_assistants: Migrating using AI assistants
---

# Migrating iOS apps to the Orchestration SDK

[icon: circle-check, set=far]PingOne Advanced Identity Cloud [icon: circle-check, set=far]PingAM [icon: apple, set=fab]iOS

The migration from the legacy ForgeRock SDK for iOS, which uses the `FRAuth` module, to the modern Orchestration SDK for iOS, represents a fundamental architectural shift towards modern Swift concurrency and modularity.

The Orchestration SDK for iOS fully embraces async/await patterns, replacing traditional callback-based completion handlers for asynchronous operations.

## High-level changes

* Modular Architecture

  A significant breakdown into smaller, specialized modules including, **PingJourney**, **PingOidc**, **PingDeviceProfile**, and **PingFido**, and more, that allows developers to include only the necessary components, reducing app size and complexity.

* Declarative Configuration

  Orchestration SDK initialization and module configuration is now handled declaratively using closures, offering a more flexible and readable setup.

* Workflow-Centric Design

  The Orchestration SDK now explicitly models authentication and orchestration flows using a workflow pattern with distinct node states, such as `ContinueNode`, `SuccessNode`, `FailureNode`, and `ErrorNode`.

  This provides clearer control over the user journey.

* Concurrency Model

  A complete transition to Swift's native async/await for all network and asynchronous operations, simplifying code and improving readability.

* Enhanced Type Safety

  Callback properties are now strongly typed and accessed directly, for instance using specific `callback.name` or `callback.password`, instead of the generic `callback.setValue()`, which improves code reliability.

* Updated Minimum Requirements

  The SDK requires iOS 16.0+ and Swift 6.0+, leveraging newer platform capabilities.

Overall, the new Orchestration SDK aims to provide a more modern, efficient, and developer-friendly experience by aligning with contemporary Swift development practices.

## Package dependency changes

The modular architecture of the Orchestration SDKs means you only have to import the functionality you require in your apps.

The table below shows the dependency names from the old ForgeRock SDK, and the dependencies available in the new Orchestration SDK for iOS:

**Journey-related dependencies for iOS SDKs**

| ForgeRock SDK                                                                                                                                                                                         | Orchestration SDK                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ```swift
import FRAuth
import FRCore
import FRAuthenticator
import FRDeviceBinding
import FRProximity
import FRGoogleSignIn
import FRFacebookSignIn
import PingProtect
import FRCaptchaEnterprise
``` | ```swift
import PingOrchestrate
import PingJourney
import PingOidc
import PingDeviceProfile
import PingDeviceClient
import PingDeviceId
import PingBinding
import PingOath
import PingPush
import PingFido
import PingExternalIdP
import PingExternalIdPApple
import PingExternalIdPGoogle
import PingExternalIdPFacebook
import PingProtect
import PingReCaptchaEnterprise
``` |

## Code change examples

The following table covers some of the code changes you will need to make to your ForgeRock SDK for iOS apps to adopt the Orchestration SDK instead.

### Navigating authentication journeys

| ForgeRock SDK                              | Orchestration SDK                         | Details                                                                                                                                                                                     |
| ------------------------------------------ | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `FRAuth.start(options:)`                   | `Journey.createJourney { config in ... }` | Use declarative configuration when creating a journey instance.Learn more in [Configuring the Journey module on iOS](../usage/ios/03-configuring-the-journey-module.html).                  |
| `FRUser.login()``FRSession.authenticate()` | `journey.start()`                         | Use `start()` to begin a journey, which now returns explicit node types.Learn more in [Starting an authentication journey on iOS](../usage/ios/04-starting-an-authentication-journey.html). |
| `Node.next()`                              | `await node.next()`                       | Traverse a journey using async and await, instead of callbacks.Learn more in [Navigating an authentication journey on iOS](../usage/ios/05-navigating-an-authentication-journey.html).      |
| `Node`                                     | `ContinueNode`                            | Changed the class to be more specific.Learn more in [Handling ContinueNode](../usage/ios/05-navigating-an-authentication-journey.html#handling-continuenode).                               |

### Users and sessions

| ForgeRock SDK        | Orchestration SDK             | Details                                                                                                                                                                   |
| -------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `FRUser.currentUser` | `await journey.journeyUser()` | Access properties asynchronously.Learn more in [Getting a user object and session token](../usage/ios/06-handling-sessions.html#getting-a-user-object-and-session-token). |

### Journey node callback handling

| ForgeRock SDK                    | Orchestration SDK                                          | Details                                           |
| -------------------------------- | ---------------------------------------------------------- | ------------------------------------------------- |
| `callback.setValue(value)`       | `callback.name``callback.password``callback.selectedIndex` | Different callbacks now have specific properties. |
| `WebAuthnRegistrationCallback`   | `FidoRegistrationCallback`                                 | Renamed for clarity.                              |
| `WebAuthnAuthenticationCallback` | `FidoAuthenticationCallback`                               | Renamed for clarity.                              |
| `SelectIdPCallback`              | `SelectIdpCallback`                                        | Case changed.                                     |

### Error handling

| ForgeRock SDK             | Orchestration SDK   | Details                                                                                                                                                                             |
| ------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| N/A (used `Error` object) | `failureNode.cause` | New property for failure handling.Learn more in [Handling FailureNode and ErrorNode](../usage/ios/05-navigating-an-authentication-journey.html#handling-failurenode-and-errornode). |
| N/A (used `Error` object) | `errorNode.message` | New property for error handling.Learn more in [Handling FailureNode and ErrorNode](../usage/ios/05-navigating-an-authentication-journey.html#handling-failurenode-and-errornode).   |

## Migrating using AI assistants

To help you migrate applications from the legacy ForgeRock SDK for iOS to the new Orchestration SDK for iOS using an AI assistant, we have created a `migration.md` file.

This file contains a detailed mapping and example snippets of changes between the two SDK versions, which AI assistants can utilize to help you migrate your app.

[icon: square-github, set=fab, size=3x]

#### [migration.md](https://github.com/ForgeRock/ping-ios-sdk/blob/6053c385340d10954b0c4110f0e4d8b31f6bfc03/Journey/migration.md)

View and download the ForgeRock SDK to Orchestration SDK migration.md file for iOS.

This approach is designed to reduce manual effort and improve consistency during the migration process.
