Skip to main content
This page covers problems that span the dashboard and the SDK together. For issues that live entirely inside the iOS SDK (crashes, configuration, error codes), see iOS SDK troubleshooting.

The flow looks different on device than in the editor preview

The editor preview renders an approximation of the flow, not the iOS runtime. Some animations, transitions, and layout edge cases differ on device. Use Live mirror to stream the editor to a real device for accurate QA.
A custom component shows a placeholder shell in the editor and only renders your real native view on device, once registered. If it is blank on device, confirm you called registerCustomComponent with a matching key and version. See Custom components.
Custom fonts must be available to the SDK. If text falls back to the system font on device, check the font is uploaded in the dashboard and that the resolve response lists it. See Custom fonts.
The iOS SDK collapses zone transition modes: crossfade and reflow animate, while persistent and participate stay fixed. A transition that looks distinct in the editor may map to the same behavior on device. See Persistent UI zones.

Events are not showing up in analytics

The events endpoint drops events whose flow_version_id does not reference a real flow version in the same app. Hand-crafted or stale payloads are rejected and counted in rejected. Let the SDK send events; it always uses a real version ID. See SDK REST API.
On the events endpoint the app_id from the URL is authoritative. An event whose body carries a different app_id is rejected. Confirm the SDK is configured with the correct API key and app.
Events are buffered and written in batches, so they do not appear instantly. Allow a short delay before checking the dashboard.
resolve_no_flow is recorded server-side by the backend, not emitted by the iOS SDK. You will not see it in the SDK analytics callback. See Event taxonomy.

Audience targeting never matches

A condition matches an attribute by exact property name. If your filter targets country but the SDK sends region, it never matches. Send the attributes your filter expects. See Audience targeting.
The SDK sends some attributes as flat dotted keys (for example app.version, app.build). Filter property names must line up with how the value is actually sent. If a version filter never matches, verify the exact key the SDK provides against the filter property. See Variables and context.
A placement gates on platform (ios, android, web). If the placement does not list ios, an iOS resolve returns no flow regardless of the audience filter. See Placements.
A filter with match: all requires every condition to pass; match: any requires one. A single failing condition under all blocks the whole filter.

Published changes are not appearing on device

Publishing creates a new immutable flow version but does not change which version a placement serves. After publishing, attach the new version to the placement (set it as the default). See Publishing.
The SDK caches a resolved flow for cache_ttl_seconds (300 seconds by default). A repointed placement can take until the cache expires to appear on a device that already resolved. See Caching.
Drafts are never served. Only published versions are. Save and publish, then attach. See Publishing.

Nothing shows for a placement

A resolve can match no flow: the platform is excluded, the audience filter excludes the user, the placement is paused, or no published flow is attached. The backend records a resolve_no_flow event. Check the placement’s platforms, filter, status, and default flow version. See Placements.
If a resolve fails (network, timeout, or no flow) the SDK falls back per its presentation path and may surface an error rather than UI. See iOS SDK troubleshooting.