Skip to main content
Find your symptom below. Each one links to the full fix.

Pill never appears

There are five independent gates the SDK has to pass before the pill shows up. Check each one: If your AppDelegate/SceneDelegate doesn’t implement application(_:open:options:), scene(_:openURLContexts:), or scene(_:willConnectTo:options:) at all, the SDK’s automatic swizzle has nothing to attach to and silently does nothing. This is the single most common cause of “pairing just doesn’t work.” Fix: call Tappify.handle(url:) manually from your own URL handling. It’s safe to call unconditionally. If opening an activation link shows a “couldn’t connect to Tappify” toast, the link is no longer valid. By design, the toast is deliberately non-specific about why — the SDK shows exactly one neutral message and never distinguishes the cause. The fix is always the same, regardless of what actually happened to the link. Fix: mint a fresh link from the dashboard’s Review on this device dialog and try again immediately. Activation links are short-lived and single-use by design — see Activating devices for why.

Comments not syncing

If comments or replies don’t appear without a manual force-quit and relaunch, this is usually expected behavior rather than a bug:
  • On internal builds while offline: the SDK holds a 24-hour cached-grace window and keeps showing the last-known state rather than going blank.
  • On live (App Store) builds: there’s no offline grace window — the overlay only shows what it can currently confirm with a live check.
  • In both cases: there’s no push channel. A change made from the dashboard, or by another reviewer, only shows up the next time the app checks in — cold launch or foreground. Background and re-foreground the app (or pull-to-refresh the thread list) to force a refresh.
See Gating modes for the underlying mechanics.

SwiftUI screen names look wrong

The automatic screen-name capture names screens after their hosting view controller class, which is often unhelpful for composed SwiftUI views — you’ll see something generic instead of a name that matches what the screen actually is. Fix: add .tappifyScreen("YourScreenName") to the view, or call Tappify.tagScreen("...") directly. See Screen names.

Swizzling conflicts with another SDK

If activation links stop working after adding another SDK that also swizzles URL-handling methods, the two swizzles are conflicting — this kind of ordering conflict is hard to debug by design, and not worth trying to. Fix: sidestep it entirely. Call Tappify.handle(url:) manually from your own URL handling, rather than relying on both SDKs’ swizzles to cooperate.