Requirements
- iOS 15.0 or higher
- Swift 5.9 or higher
- Xcode 14.0 or higher
Installation
Swift Package Manager
The Linkrunner SDK can be installed via Swift Package Manager (SPM), which is integrated directly into Xcode.- In Xcode, select File → Add Package Dependencies…
- Enter the following repository URL:
- Select the version you want to use (we recommend using the latest version)
- Click Add Package
- Choose the library type LinkrunnerKitStatic
Package.swift file:
Importing in Swift
After installation, you can import the SDK in your Swift files:Use
import LinkrunnerKit for v3.0.0 and later. The public API remains LinkrunnerSDK.shared.Required Permissions
App Tracking Transparency
If you plan to use IDFA (Identifier for Advertisers), you need to request permission from the user through App Tracking Transparency. Add the following to yourInfo.plist file:
SKAdNetwork Configuration
To enable SKAdNetwork postback copies to be sent to Linkrunner, add the following keys to yourInfo.plist file:
Network Access
The SDK requires network access to communicate with Linkrunner services. Make sure your app has the appropriate permissions for network access.Initialization (Required)
Initialize the Linkrunner SDK in your app’s startup code, typically in yourAppDelegate or SceneDelegate:
You can find your project token here.
Note: The initialization method doesn’t return any value. To get attribution data and deeplink information, use the getAttributionData method.
SDK Signing Parameters (Optional)
For enhanced security, the LinkRunner SDK requires the following signing parameters during initialization:secretKey: A unique secret key used for request signing and authenticationkeyId: A unique identifier for the key pair used in the signing processdisableIdfa(optional): Boolean flag to disable IDFA collection (defaults to false)debug(optional): Boolean flag to enable debug mode for development (defaults to false)
Setting the Customer User ID
UsesetCustomerUserId to attach your own user identifier to the device right after init. Once set, the identifier is stored securely on-device and automatically included in every event you track, so you never have to pass it on each trackEvent call.
Call it as early as the user’s ID is available. This guarantees every event carries a user_id from the very first event, and is especially useful for existing users who were already onboarded before this feature shipped.
Available from iOS SDK v3.11.0.
Best practice: set the Customer User ID as early as possible. The
user_id is only attached to events tracked after it’s set, and is not applied retroactively. Use a stable, unique identifier from your own system (for example your internal user ID or a UUID) rather than an email address or other PII.The identifier is stored in the Keychain and persists across app restarts. Calling
setCustomerUserId again with a different identifier updates the stored value; passing the same identifier is a no-op. signup() / setUserData() also update it.User Identification (Required)
Call thesignup method as soon as the user is identified — whether through signup or login. This is the moment Linkrunner ties the install (and any future events) to a user identifier.
It is strongly recommended to use the integrated platform’s identify function to set a persistent user_id once it becomes available (typically after signup or login).
- Mixpanel - ID Management & User Identification
- PostHog - How User Identification Works
- Amplitude - Identify Users Documentation
- mixpanelDistinctId for Mixpanel
- amplitudeDeviceId for Amplitude
- posthogDistinctId for PostHog
Handle Deeplink
To enable remarketing and reattribution, you need to capture deep links and pass them to the Linkrunner SDK. This allows Linkrunner to detect returning users who open the app via a deep link. Add the following to yourSceneDelegate.swift:
deeplink as the resolved destination instead of the original tracking URL.
Getting Attribution Data
To get attribution data and deeplink information for the current installation, use thegetAttributionData function:
Setting User Data
CallsetUserData each time the app opens and the user is logged in:
setUserData is optional and is not a replacement for signup. Always call signup first as soon as the user is identified (signup or login). Use setUserData afterwards only when additional user details become available later — for example, when the user adds a phone number, email, or completes their profile after identification.Setting CleverTap ID
UsesetAdditionalData to add CleverTap ID to the SDK:
Revenue Tracking
Revenue data is only stored and displayed for attributed users. Make sure you have implemented the
.signup function before capturing payments. To attribute a test user, follow the Integration Testing guide. You can verify your events are being captured on the Events Settings page.Capturing Payments
Track payment information:Available Payment Types
Available Payment Statuses
Removing Payments
Remove payment records (for refunds or cancellations):Tracking Custom Events
From iOS SDK v3.11.0, custom events automatically include the
user_id you set during signup() / setUserData(). The SDK stores this identifier securely on-device (Keychain) and attaches it to every trackEvent call, so you no longer need to pass it manually. Events tracked before signup are sent without a user_id.Events are only stored and displayed for attributed users. Make sure you have implemented the
.signup function before tracking events. To attribute a test user, follow the Integration Testing guide. You can verify your events are being captured on the Events Settings page. For capturing revenue, it is recommended to use the .capturePayment method instead of .trackEvent.Parameters for LinkrunnerSDK.shared.trackEvent
eventName:String(required) - Name of the event to trackeventData:[String: Any](optional) - Key-value pairs for additional event data, including Meta ecommerce propertieseventId:String(optional) - Your own unique identifier for the event, useful for deduplication and correlating with your backend
Revenue Sharing with Ad Networks
To enable revenue sharing with ad networks like Google Ads and Meta, include anamount parameter as a number in your custom event data. This allows the ad networks to optimize campaigns based on the revenue value of conversions:
For revenue sharing with ad networks to work properly, ensure the
amount parameter is passed as a number (Double
or Int), not as a string.Ecommerce Events
Minimum SDK Version: Ecommerce Event Manager requires linkrunner-ios v3.8.0 or above. Please ensure your SDK is updated before using this feature.
If you are tracking Ecommerce events to sync with Meta Catalog Sales, you must format your eventData to include Meta’s required fields. You also need to map your custom event to the standard commerce event in the Linkrunner Dashboard.
For detailed explanations of the required fields like content_ids, contents, and value, refer to our Meta Commerce Manager documentation.
Add To Cart Example
Use thetrackEvent method to send an AddToCart event:
View Content Example
Use thetrackEvent method to send a ViewContent event:
Payment / Purchase Example
Use thecapturePayment method to send a Purchase event containing the ecommerce payload:
Note: For more information on testing and verifying your ecommerce events, please see our Testing Ecommerce Events guide.
Enhanced Privacy Controls
The SDK offers options to enhance user privacy:Uninstall Tracking
Before you begin
Here’s what you need to know before getting started: Requirements:- iOS SDK 3.4.0 and later
- Registering your app with APNs
iOS
Connect APNs with LinkrunnerApple Developer Portal
Apple Developer Portal
Get the required credentials from the Apple Developer Portal:APNs Authentication Key (p8) and Key ID:
- Go to the Apple Developer Portal.
- Select Identifiers under Certificates, IDs & Profiles.
- Click on the app you want to track uninstalls for. Then, under Capabilities, search for Push Notifications and enable it.
- Under Certificates, IDs & Profiles, select Keys and click on plus (+) icon to create a key. Enable APNs when creating the key and download the key file (p8).
- The Key ID can be found in the Keys tab.
- Under Identifiers, click on your app and you will see the Bundle ID and Team ID (App ID Prefix).
Linkrunner Dashboard
Linkrunner Dashboard
- In Linkrunner, go to Settings > Uninstall Tracking.
-
Under the iOS tab, upload the APNs Authentication Key (p8) file and enter the Key ID, Bundle ID and Team ID (App ID Prefix) that you copied from the Apple Developer Portal.

Integrate with Linkrunner SDK
Integrate with Linkrunner SDK
Follow these instructions to integrate APNs with the Linkrunner SDK:For SwiftUI apps using the new app lifecycle:
- Set up Push Notifications:
- Configure your app to provide the device’s APNs token to the Linkrunner SDK.
Function Placement Guide
| Function | Where to Place | When to Call |
|---|---|---|
LinkrunnerSDK.shared.initialize | App initialization | Once when app starts |
LinkrunnerSDK.shared.getAttributionData | Attribution data handling flow | Whenever the attribution data is needed |
LinkrunnerSDK.shared.setAdditionalData | Integration code | When third-party integration IDs are available |
LinkrunnerSDK.shared.signup | Identification flow (signup or login) | Once when the user is identified |
LinkrunnerSDK.shared.setUserData | Authentication logic | Every time app opens with logged-in user |
LinkrunnerSDK.shared.trackEvent | Throughout app | When specific user actions occur |
LinkrunnerSDK.shared.capturePayment | Payment processing | When user makes a payment |
LinkrunnerSDK.shared.removePayment | Refund flow | When payment needs to be removed |
LinkrunnerSDK.shared.setPushToken | Push notification setup | When APNs token is available |
LinkrunnerSDK.shared.handleDeeplink | SceneDelegate deep link entry points | When app is opened via a deep link |
Complete Example
Here’s a simplified example showing how to integrate Linkrunner in a SwiftUI iOS app: You can find your project token here.Next Steps
Test Your Integration
Validate your setup end-to-end
Set Up Deep Linking
Configure deep links for your app