▸Install the Swift (iOS) SDK
// Package.swift
dependencies: [
.package(url: "https://github.com/respectlytics/respectlytics-swift.git", from: "3.0.0")
]
// Or via Xcode → File → Add Packages → paste the URL above.
The SDK ships only via Swift Package Manager. CocoaPods and Carthage are not published — fewer integration paths means fewer surfaces to keep audited.
▸Initialize Respectlytics in Swift (iOS)
import Respectlytics
@main
struct MyApp: App {
init() {
Respectlytics.configure(appKey: "<YOUR_APP_KEY>")
}
var body: some Scene { WindowGroup { ContentView() } }
}
Call configure once at app launch — typically in your App struct's init. No Info.plist keys are required: the SDK does not call ATTrackingManager and does not request the IDFA, so NSUserTrackingUsageDescription should NOT be added.
✦Privacy & implementation notes
The ATT prompt's denial rate ranges 50–80% depending on category and phrasing — gaming and ad-heavy apps see the highest denials. The product consequence is that any analytics tied to IDFA effectively works for the minority who consent. Respectlytics produces the same data for 100% of users because it does not depend on IDFA at all.
App Review historical pattern: apps that ship NSUserTrackingUsageDescription in Info.plist while their code never actually calls ATTrackingManager.requestTrackingAuthorization are flagged as inconsistent — the key implies tracking that the code doesn't perform. Remove the key when you remove tracking; don't leave it as a relic.
Apple rejected approximately 3% of apps in 2024 for incorrectly omitting NSUserTrackingUsageDescription when ATT was required by the SDKs they shipped. Respectlytics doesn't trigger ATT. The corollary is also true: do not add the key on Respectlytics's account — its presence implies you track across apps, even if your code never calls requestTrackingAuthorization.
Internally the Swift SDK uses Swift Concurrency: events are queued in an actor-isolated buffer (RAM-only), flushed on a 30-second timer and on UIApplication.willResignActiveNotification. Force-quit before flush drops queued events — by design. There is no UserDefaults or file backing.
⇋How this compares to other analytics SDKs
| ATT prompt behaviour | Firebase Analytics | Mixpanel | AppsFlyer | Respectlytics |
|---|---|---|---|---|
| Triggers ATT prompt by default | Yes (when IDFA enabled) | Yes (optional) | Yes (always) | No |
| Requires NSUserTrackingUsageDescription | Yes (when collecting IDFA) | Conditional | Yes | No |
| Behavior when user denies ATT | Limited tracking | Limited tracking | Restricted IDFA | Identical (ATT not in path) |
| Conversion-rate impact of prompt | Negative (~10–30% denial) | Negative | Negative | No prompt |
❓Frequently asked questions
Should we still implement ATT for other reasons?
Only if another SDK in your app needs it — e.g., an Ads SDK that uses the IDFA. If you remove all such SDKs, you can also remove the NSUserTrackingUsageDescription key. The presence of the key without a matching requestTrackingAuthorization call is itself a signal Apple considers.
What about post-install attribution from ad campaigns?
Use Apple's SKAdNetwork (deterministic, deterministic install attribution without IDFA) or AdAttributionKit (iOS 17.4+). Both work without ATT. These are not Respectlytics features — they're Apple frameworks your app implements directly. Respectlytics doesn't ingest install attribution.
Will the App Store reject my app if there's no ATT prompt?
No, as long as no SDK in your app actually tracks across other apps. Apps that genuinely don't track are not required to show ATT. The risk is the inverse: showing the prompt without backing the choice in code (or vice versa) gets flagged. Respectlytics's posture is consistent — no tracking, no prompt.
Does Respectlytics affect ATT prompt timing for OTHER SDKs in our app?
No. Each SDK calls requestTrackingAuthorization independently. Respectlytics's silent-on-ATT behavior doesn't influence other SDKs. If Firebase, AdMob, or Branch in the same app needs ATT, those SDKs still trigger the prompt according to their own logic.