🚧 Coming Soon

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 Beta

Automatic detection of linked frameworks and dynamically loaded SDKs. Native SwiftUI and UIKit consent sheet.

Swift Package Manager
CocoaPods
Objective-C compatible
Min: iOS 14+
🤖

Android

Coming Soon

Bytecode analysis and runtime detection of loaded SDKs. Jetpack Compose and View-based consent dialog.

Gradle (Maven Central)
Kotlin & Java support
Min: Android 7+ (API 24)

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)

swift
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)

kotlin
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 Access

Limited spots available. iOS beta is open; Android beta starts Q2 2025.