Mobile SDK
Native iOS and Android SDKs for automatic SDK detection and consent management, with offline-first architecture.
Under construction
The mobile SDKs are currently in private beta. The iOS SDK is available for early testers; the Android SDK is in active development. Join the beta below to get early access and shape the API.
iOS
Private BetaAutomatic detection of linked frameworks and dynamically loaded SDKs. Native SwiftUI and UIKit consent sheet.
Android
Coming SoonBytecode analysis and runtime detection of loaded SDKs. Jetpack Compose and View-based consent dialog.
Architecture overview
The mobile SDKs are designed around three principles: offline-first, minimal footprint, and zero UI lock-in.
Offline-first consent storage
Consent decisions are persisted locally using platform-native secure storage (Keychain on iOS, EncryptedSharedPreferences on Android). The SDK works without a network connection — consent syncs to the server when connectivity is available.
Automatic SDK detection
At app launch, the SDK scans the app's linked frameworks (iOS) or loaded classes (Android) and compares against SDKWatch's database. No build-time configuration needed — it adapts as you add or remove dependencies.
Consent-gated SDK initialization
Wrap SDK initialization in consent callbacks. The SDKWatch SDK will call your handlers when the user grants or revokes specific consent categories, so you never accidentally initialize a tracking SDK before consent.
Privacy manifest compliance
The iOS SDK is compatible with Apple's Privacy Manifest requirements. It includes a pre-filled PrivacyInfo.xcprivacy and provides helpers to generate required NSPrivacyAccessedAPITypes entries for detected SDKs.
API preview (iOS)
import SDKWatch
// In AppDelegate / @main
SDKWatch.configure(snippetId: "YOUR_SNIPPET_ID")
// Show consent sheet (first launch or on demand)
SDKWatch.requestConsent(from: self) { consent in
if consent.isGranted(for: .analytics) {
Analytics.initialize()
}
if consent.isGranted(for: .advertising) {
AdSDK.initialize()
}
}
// Check consent at any time
let hasConsent = SDKWatch.consent.isGranted(for: .analytics)
// Listen for consent changes
SDKWatch.onConsentUpdated { consent in
// Update your SDKs accordingly
}API preview (Android)
import com.sdkwatch.android.SDKWatch
import com.sdkwatch.android.ConsentCategory
// In Application.onCreate()
SDKWatch.configure(this, snippetId = "YOUR_SNIPPET_ID")
// Show consent dialog
SDKWatch.requestConsent(activity) { consent ->
if (consent.isGranted(ConsentCategory.ANALYTICS)) {
FirebaseAnalytics.getInstance(this).setAnalyticsCollectionEnabled(true)
}
}
// Check consent
val hasConsent = SDKWatch.consent.isGranted(ConsentCategory.ADVERTISING)
// Observe consent state (Kotlin Flow)
lifecycleScope.launch {
SDKWatch.consentFlow.collect { consent ->
// React to changes
}
}Join the Mobile Beta
Get early access to the iOS SDK, influence the Android API design, and receive direct support from the SDKWatch team.
📱Request Beta AccessLimited spots available. iOS beta is open; Android beta starts Q2 2025.