Module 2 — Prerequisites
Deep links require two pieces of OS-level configuration. These are platform requirements (not SDK calls) and cannot be done from code. Get them right first — most "the link does nothing" problems live here (Layer 1 in the overview).
Decide your scheme, domain, and path vocabulary first. See Decide three things before you start. The examples below use
yourappandlink.paylisher.com— replace them with your own.
1. Register a custom URL scheme
In your target's Info.plist, declare the scheme your links use (replace yourapp):
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>com.yourcompany.yourapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>yourapp</string>
</array>
</dict>
</array>
Without this, yourapp://... links never open your app.
2. Enable Universal Links (recommended)
Universal Links open your app directly from an https:// URL — no "Open in app?" prompt. They have an app side and a server side.
a. App side — Associated Domains
In Xcode → Target → Signing & Capabilities → Associated Domains, add:
applinks:link.paylisher.com
This writes the entitlement:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:link.paylisher.com</string>
</array>
b. Server side — the association file
Apple fetches an apple-app-site-association (AASA) file from https://link.paylisher.com/.well-known/apple-app-site-association. It must list your app's appID (TEAMID.com.yourcompany.yourapp) and the allowed paths:
{
"applinks": {
"details": [
{
"appID": "ABCDE12345.com.yourcompany.yourapp",
"paths": ["/home*", "/products*", "/wallet*", "/profile*"]
}
]
}
}
link.paylisher.comis the production link domain for all Paylisher short/Universal links — send your Team ID and Bundle ID to Paylisher so yourappIDis added to the hosted file (it's a merge, not an overwrite).- Using a custom branded domain? Add it to both the Associated Domains entitlement and the dashboard; Paylisher hosts the association file for it. If you host it yourself, serve it with
Content-Type: application/jsonand no redirects.
iOS fetches the AASA file at install time. After it changes (or your
appIDis added), delete and reinstall the app to refresh it.
Skipping Universal Links for now?
You can. Start with the custom scheme (step 1) only, get routing working, then add Universal Links later. Everything from SDK setup onward is identical either way.
Next: Module 3 — SDK setup →