> 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 17, 2025

# Upgrade from 3.x to 3.13.0

 There's a new version available!

These pages cover version 3 of our SDK, but a newer version is available. In general, we suggest that you update to the latest version to take advantage of new features and fixes.

*   Are you new to our SDKs? [Check out the latest docs.](/integrations/sdk/ios/getting-started)
*   Otherwise, [learn about updating to the latest version](/integrations/sdk/ios/whats-new/)

This page introduces a new `CioAppDelegateWrapper` pattern for iOS that simplifies push notification setup and eliminates the need for method swizzling.

## What changed?

The changes are mainly to align our SDK APIs across different platforms. No functional changes to be expected.

## Upgrade process

### Attributes

*   `profileAttributes` property is deprecated
    *   Getter has no replacement, the mobile SDK doesn’t expose the user’s profile attributes
    *   Setter is replaced with `setProfileAttributes(attributes: [String: Any])`
*   `deviceAttributes` property is deprecated
    *   Getter has no replacement, the mobile SDK doesn’t expose the user’s device attributes
    *   Setter is replaced with `setDeviceAttributes(attributes: [String: Any])`

### Tracking

*   Identifying a user
    
    *   These variants of `identify` are deprecated:
        *   `identify<T: Codable>(traits: T)` where traits are a generic type
        *   `identify<RequestBody: Codable>(userId: String, traits: RequestBody?)`
    *   You should use this instead:
        *   `identify(userId: String, traits: [String: Any]?)`
        *   `setProfileAttributes(attributes: [String: Any])` can now be used to track anonymous profile attributes
*   Tracking an event
    
    *   These variants of `track` are deprecated:
        *   `track<RequestBody: Codable>(name: String, properties: RequestBody?)` where traits are a generic type
    *   You should use this instead:
        *   `track(name: String, properties: [String: Any]?)`
*   Screen tracking
    
    *   These variants of `screen` are deprecated:
        *   `screen<RequestBody: Codable>(title: String, properties: RequestBody?)` where traits are a generic type
    *   You should use this instead:
        *   `screen(title: String, properties: [String: Any]?`

Version[](https://github.com/customerio/customerio-ios/releases/tag/4.6.0 "See this release in GitHub")

4.6.0 (Current)3.14.02.14.2

*   *   [What changed?](#what-changed)
    *   [Upgrade process](#upgrade-process)
        *   [Attributes](#attributes)
        *   [Tracking](#tracking)

Copy page

Copy page [Download .md](/integrations/sdk/ios/3.x/whats-new/3.13.0-upgrade.md) [Download iOS 3.x SDK bundle](/files/ios-3.x-sdk-docs.md)

Is this page helpful?

![](https://docs.customer.io/images/export-success.png) ![](https://docs.customer.io/images/export-failure.png)

# How can we make it better?

Close

Do you need help from Customer.io support?  No  
 Yes

What part of Customer.io do you need help with? 

How can we improve this page?

Email (optional):  Please provide a valid email address

 I am not a bot

 

We appreciate your feedback!

Our support team will contact you as soon as possible
