The flow looks different on device than in the editor preview
The editor preview is an approximation
The editor preview is an approximation
Custom components render as placeholders in the editor
Custom components render as placeholders in the editor
registerCustomComponent with a matching key and version. See Custom components.Fonts are not registered on device
Fonts are not registered on device
Persistent zone transitions behave differently
Persistent zone transitions behave differently
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 flow version is out of scope
The flow version is out of scope
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.The app_id does not match the URL
The app_id does not match the URL
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.Analytics is asynchronous
Analytics is asynchronous
You expected a resolve_no_flow event from the SDK
You expected a resolve_no_flow event from the SDK
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
Attribute names must match the filter property names
Attribute names must match the filter property names
country but the SDK sends region, it never matches. Send the attributes your filter expects. See Audience targeting.Dotted property names (app.version) need care
Dotted property names (app.version) need care
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.The platform is not in the placement
The platform is not in the placement
ios, android, web). If the placement does not list ios, an iOS resolve returns no flow regardless of the audience filter. See Placements.Match mode is all vs any
Match mode is all vs any
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
The placement was not repointed
The placement was not repointed
The cached flow is still fresh
The cached flow is still fresh
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.You edited the draft but did not publish
You edited the draft but did not publish
Nothing shows for a placement
No flow matched (resolve returned null)
No flow matched (resolve returned null)
resolve_no_flow event. Check the placement’s platforms, filter, status, and default flow version. See Placements.The SDK could not present
The SDK could not present