Skip to main content
Supported on: iOS SDK 1.0.61+
This is the complete reference for all public methods, properties, types, and delegate protocols in the AppDNA iOS SDK.

Core Methods

Session Data Methods

Config Methods

Map Methods

Experiment Methods

Push Methods

AppDNA.pushModule forwarding

For hosts that disable the notification proxy (AppDNADisableNotificationProxy = YES) and forward from their own delegate. All three are no-ops returning false unless the payload carries the AppDNA marker (appdna: "1"); calls are deduplicated per push. Delivered / tapped tracking needs an AppDNA server from this release or later (older servers send no appdna marker, push_id or delivery_id, so their pushes are not recognised as AppDNA pushes: no tracking, no callbacks, no tap routing).

Presentation Methods

Web Entitlements


Module Namespaces

Access module-specific functionality through these properties on the AppDNA singleton:

Delegate Protocols

AppDNALifecycleDelegate

Set it with AppDNA.lifecycleDelegate = self. Every method has a default no-op, so a host implements only what it cares about.
onEventTracked fires for every tracked event, immediately after it is durable in the upload queue — so forwarding from it cannot lose an event, and nothing you do in it can stop one being sent. It fires on whatever thread tracked the event, which is deliberately not always the main thread: track is called from renderers, timers and background queues. Do not block it, and dispatch to the main thread yourself if your handler touches UI.It is an observer, not a filter — returning does not affect delivery. The SDK’s own _sdk_events_dropped meta-event is not reported through it, so a loss counter can never be mistaken for one of your events.
Onboarding events carry location answers unreduced. onboarding_step_completed’s selection_data and onboarding_flow_completed’s responses reach onEventTracked as the device stored them: a picked location answer arrives whole, with the address, coordinates and time zone of the place the user picked (and a Google answer’s place ID). AppDNA reduces an answer to what the geocoding providers’ terms allow only on its own server, after the event leaves the device. What you store or forward from these properties is under your terms with the provider, and for a Google answer (one carrying place_id) under your terms with Google. A Google answer you show yourself must carry Google’s attribution wherever it is shown without a Google map.
The SDK also tracks a sdk_decode_dropped event carrying the same values, so the fleet view does not depend on a host implementing this. The delegate exists so YOUR crash reporter can see your own content being dropped.

AppDNAPushDelegate

AppDNABillingDelegate

Register with AppDNA.billing.setDelegate(_ delegate: AppDNABillingDelegate?, deliversPurchases: Bool = true) (or AppDNA.billingDelegate = …, which is deliversPurchases: true). Any billing delegate drains the late-purchase delivery queue — implement onPurchaseCompleted, or pass deliversPurchases: false for a delegate that must not receive queued purchases. onPurchaseCompleted fires for every purchase the SDK completes — paywall-driven or direct AppDNA.billing.purchase(...). On .storeKit2 it also fires for purchases that complete later (interrupted, Ask-to-Buy or offer code), possibly at launch, on setDelegate or after identify; a purchase made on another device of the same Apple ID may also be reported here, and a late purchase made while another user was signed in is delivered when that user signs in — grant idempotently by transaction.transactionId. A refused paywall tap (providerNotAvailable) and a re-buy of an owned item fire no onPurchaseCompleted.

AppDNAOnboardingDelegate

AppDNAPaywallDelegate

AppDNAInAppMessageDelegate

AppDNASurveyDelegate

AppDNADeepLinkDelegate


Key Types

AppDNAOptions

Environment

LogLevel

BillingProvider

.storeKit2 (and omitted) — the SDK owns purchases and finishes transactions. .revenueCat / .adapty — the provider owns purchases; the SDK never finishes transactions and SDK paywall taps report providerNotAvailable — under .revenueCat unless RevenueCat is linked into AppDNA (source / vendored builds only), under .adapty always (with Adapty linked, restore and entitlements go through Adapty, but the SDK never buys). .none — billing disabled; purchase and restore throw BillingError.providerNotAvailable (“No billing provider configured”). See Billing.

Info.plist keys (not runtime options)

PaywallContext

OnboardingContext

PushPayload

PushAction

TransactionInfo

ProductInfo

Entitlement

WebEntitlement

PaywallAction

DismissReason

StepAdvanceResult

minimumBridgeTimeout(stepData:) is the floor the Flutter and React Native bridges apply to onBeforeStepAdvance: they wait max(vetoTimeout, minimumBridgeTimeout(stepData:) ?? 0). A native iOS host is not timed out.

StepConfigOverride

FormFieldType


Server-Driven Screens


AppDNAScreenDelegate

ScreenError

ScreenResult

FlowResult

SectionAction

An action a section dispatches through its context. SectionAction is an enum, not a struct — each case carries its own associated values.

Properties