# 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?[](#what-changed)

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

## Upgrade process[](#upgrade-process)

### Attributes[](#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[](#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]?`