Migration Difficulty: Easy | Estimated Time: 15 minutes | Breaking Changes: None
What’s New in v2.6.0
Automatic IDFA collection
The SDK captures the IDFA as an
idfa alias when enabled in your workspace config and the user has authorized trackingAutomatic IDFV collection
The SDK captures the
identifierForVendor as an idfv alias — no user permission requiredAutomatic IP collection
The SDK captures the user’s IP as an
ip_address alias from an internal endpoint — no app changes requiredGood news: This release is fully backward compatible with no breaking changes or deprecations. Automatic collection is off by default and is enabled remotely through your dashboard.
How Automatic ID Collection Works
Collection is driven by your workspace configuration, not by app code. Once you enable it for your workspace in the dashboard, the SDK picks it up on its next config refresh.IDFA collection
IDFA collection
- Stored as an alias with tag
idfa, the priority defined in your config. - Only collected when the user has authorized tracking via App Tracking Transparency (ATT status
authorized). Requires iOS 14+. - If ATT status is not determined, collection is skipped until the user responds — the SDK does not present the ATT prompt itself.
- If ATT status is denied or restricted, no alias is stored and any existing
idfaalias is cleared. - A zeroed-out IDFA (
00000000-0000-0000-0000-000000000000) is treated as no IDFA — nothing is stored. - If an alias with the same tag and value already exists, storage is skipped to avoid duplicates.
IDFV collection
IDFV collection
- Stored as an alias with tag
idfv, the priority defined in your config. - Uses
identifierForVendor— no user permission is required, and it works on both iOS and tvOS.
IP address collection
IP address collection
- Stored as an alias with tag
ip_address, the priority defined in your config. - Retrieved from an internal endpoint and updated when the IP changes.
- No app or privacy-manifest changes are required for IP collection.
Standard Upgrade
Upgrading the SDK requires only a dependency bump.- Swift Package Manager
- CocoaPods
Update the package to
2.6.0 (or later) in Xcode via File → Packages → Update to Latest Package Versions, or pin the version in Package.swift:Opting Into IDFA Collection
The Permutive SDK links theAppTrackingTransparency framework so it can read the ATT status. This affects your App Store submission and privacy declarations even if your app never used ATT before — follow the path that matches your app.
If you already use App Tracking Transparency
Your app already declaresNSUserTrackingUsageDescription and requests authorization, so the only requirement is to keep your privacy manifest consistent.
If you opt into IDFA collection but do not already use App Tracking Transparency
To collect the IDFA, the SDK reads the ATT authorization status and the advertising identifier. If your app does not already use ATT, you need to add a tracking usage description and decide how your app declares tracking before enabling IDFA collection.Add NSUserTrackingUsageDescription to Info.plist
The presence of The value can be any descriptive string — it will not be shown to users unless your app explicitly calls
AppTrackingTransparency symbols in the binary requires a NSUserTrackingUsageDescription key in Info.plist to pass App Store review:ATTrackingManager.requestTrackingAuthorization(). Without this key, the app submission will be rejected regardless of whether IDFA collection is active.The Permutive SDK does not present the ATT prompt for you. If you want IDFA to actually be collected, your app must request authorization (and be granted it) — otherwise only IDFV/IP are collected.
Verifying Collection
Enable developer logging and look for the identity being set:ATT not yet determined by user, ATT status is denied, or IDFA is zeroed out). See the Verification Guide for complete steps.
Manual vs. Automatic IDFA Collection
If you currently set the IDFA yourself (for example viasetIdentityForIDFA — see the IDFA Provider guide), we recommend removing the manual code once automatic collection is enabled, unless you have a specific use case for it. Automatic, config-driven collection covers the same capture, lets you enable or disable it without shipping an app update, and is managed centrally from the dashboard.
Running both is safe in the meantime — automatic collection skips storage when an
idfa alias with the same value already exists, so you won’t get duplicate identities during the transition.Manual (setIdentityForIDFA) | Automatic (config-driven) | |
|---|---|---|
| Enablement | App code | Workspace config (remote) |
| App update needed to toggle | Yes | No |
| ATT authorization required | Yes (iOS 14+) | Yes (iOS 14+) |
NSUserTrackingUsageDescription required | Yes | Yes |
| Available on tvOS | Yes (tvOS 14.5+) | Yes (tvOS 14.5+) |
| Alias tag | idfa | idfa |
Rollback
If you need to roll back to v2.5.x, pin the previous version:- Swift Package Manager
- CocoaPods
NSUserTrackingUsageDescription key in your Info.plist — it is harmless when collection is disabled.
Getting Help
IDFA Provider
Manual IDFA capture, ATT, and privacy considerations
Identity Management
How aliases and identities work
Verification
Verify identity capture
Issues
Solutions to common issues