Skip to main content

Module 10 — Testing

With the app running on a simulator, trigger links from the terminal and watch the console.


# Custom scheme
xcrun simctl openurl booted "yourapp://products/42"

# Nested screen
xcrun simctl openurl booted "yourapp://products/42/reviews"

# Campaign key (resolves campaign data from the backend)
xcrun simctl openurl booted "yourapp://products?keyName=YOUR_CAMPAIGN_KEY&source=instagram"

# Universal Link (opens the app once the association file lists your appID)
xcrun simctl openurl booted "https://link.paylisher.com/c/YOUR_CAMPAIGN_KEY"

The simulator may show an "Open in App?" confirmation for custom schemes — that prompt does not appear on a real cross-app tap.


Watch the logs

Set deepLinkConfig.debugLogging = true and look for this line in the Xcode console for every incoming link:

[PaylisherDeepLink] Handling URL: <incoming-url>
SymptomLikely cause
The line never appearsiOS isn't delivering the link → Module 2 (scheme / entitlements / AASA).
The line appears but you land on HomePath ↔ parseTarget mismatch → Module 9 / Module 5.
Universal Link opens Safari insteadAASA missing or appID wrong → fix it and reinstall the app.

The four scenarios to cover

  1. Warm start — app open, tap a link → correct screen.
  2. Cold start — kill the app, tap a link → app launches and lands on the target screen.
  3. Auth-gate — log out, open a protected link (wallet) → login screen → after login, the target opens (Module 6).
  4. Deferred — delete the app, tap a link, install from the App Store, open → target screen (Module 7).

Verify attribution

Open a campaign link, then fire any of your own events and confirm they carry campaign_key / deeplink_key / jid for that session (Module 8).

Next: Module 11 — Reference