> This page is part of the [Customer.io documentation](https://docs.customer.io). For the complete index, see [llms.txt](https://docs.customer.io/llms.txt).
> Last updated: October 26, 2026
> To take actions in Customer.io from an agent, use the [Customer.io CLI](https://docs.customer.io/ai/cli/get-started.md) or the [MCP server](https://docs.customer.io/ai/mcp/get-started.md).
> This page has tabbed examples for: Swift Package Manager (SPM), CocoaPods. Add `?tab=<name>` to the URL to get only that tab, and repeat it for more than one, for example `?tab=swift-package-manager-spm&tab=cocoapods`.

# Upgrade from 4.x to 5.0.0

Version 5.0.0 of the iOS SDK requires iOS 15 or later. If you send push notifications through Firebase Cloud Messaging (FCM), you now get the `CioFirebaseWrapper` package from `customerio-ios` instead of `customerio-ios-fcm`.

## What changed?

Version 5.0.0 has two changes that can affect your app:

*   **iOS 15 or later**: The SDK now requires iOS 15 or later. If your app needs to support iOS 13 or 14, stay on version 4.x.
*   **`CioFirebaseWrapper` moved into `customerio-ios`**: If you use FCM, you now get `CioFirebaseWrapper` from the `customerio-ios` package, and it has the same version number as the rest of the SDK. The separate `customerio-ios-fcm` package only works with SDK versions before 5.0.0, so you need to remove it.

If you send push notifications through Apple Push Notification service (APNs), the new iOS minimum is the only change that affects you. Your app doesn’t need Firebase.

You don’t need to change your code. Your import statements and your `MessagingPushFCM.initialize` call stay the same.

## Upgrade process

### 1\. Raise your deployment target to iOS 15

In Xcode, set the minimum deployment target to iOS 15.0 or later for your app and for any app extension that uses the SDK, like your Notification Service Extension.

If you use CocoaPods, update the platform in your `Podfile` too:

```
platform :ios, '15.0'
```

### 2\. Update your dependencies

<!-- tabs -->

<!-- tab: Swift Package Manager (SPM) -->

#### Swift Package Manager (SPM)

1.  If you added the `customerio-ios-fcm` package, remove it. In Xcode, select your project, go to **Package Dependencies**, select `customerio-ios-fcm`, and click **\-**. Swift Package Manager can’t resolve `customerio-ios` 5.0.0 while `customerio-ios-fcm` is still in your project.
2.  Update `customerio-ios` to version 5.0.0 or later. If you use the *Up to Next Major Version* dependency rule, set it to start at 5.0.0.
3.  If you use FCM, add the `CioFirebaseWrapper` product from `customerio-ios` to your app target. Select your app target, go to **General** > **Frameworks, Libraries, and Embedded Content**, click **+**, and select `CioFirebaseWrapper`.
4.  If you use FCM, make sure your app includes the `FirebaseMessaging` product from `https://github.com/firebase/firebase-ios-sdk`, version 8.7.0 or later. The `customerio-ios-fcm` package added Firebase to your app for you, but `customerio-ios` doesn’t. If your app doesn’t have `FirebaseMessaging` yet, add it.

<!-- /tab -->

<!-- tab: CocoaPods -->

#### CocoaPods

1.  If you use FCM, update `CioFirebaseWrapper` in your `Podfile`:

    ```
    pod 'CioFirebaseWrapper', '~> 5.0'
    ```

    This pod also installs `FirebaseMessaging`. If your app gets Firebase another way, like through Swift Package Manager, use `pod 'CioFirebaseWrapper/Core', '~> 5.0'` instead. It installs `CioFirebaseWrapper` without Firebase.

    If you set versions for your `CustomerIO` pods, change them to `'~> 5.0'` too.

2.  Update your pods. If you use FCM, run:

    ```
    pod update CustomerIO CioFirebaseWrapper
    ```

    If you use APNs, run `pod update CustomerIO`.

<!-- /tab -->

<!-- /tabs -->

### 3\. Check that Firebase is linked (FCM only)

The SDK finds `FirebaseMessaging` in your app when your app runs. If your app doesn’t link `FirebaseMessaging` when you call `MessagingPushFCM.initialize`, the SDK stops your app with an error that tells you to add it. Check this if you use Swift Package Manager or `CioFirebaseWrapper/Core`, because neither one installs Firebase for you.

If your app links Firebase statically, make sure your app target includes `-ObjC` in **Build Settings** > **Other Linker Flags**.
