Universal link generators, and what they leave out
Generating the file takes a minute. Everything that goes wrong afterwards happens in the parts a generator does not touch.
6 August 2026 by PAD team
What gets generated
A universal link generator produces the JSON that grants your app permission to open URLs on your domain:
{
"applinks": {
"details": [
{
"appIDs": ["ABCDE12345.com.example.app"],
"components": [ { "/": "/app/*" } ]
}
]
}
}
That is the whole file. Writing it by hand takes about as long as finding a generator, and the fields you need are the team identifier, the bundle identifier and the path patterns you want to claim.
What breaks after generation
In practice the file is rarely the problem. The failures cluster elsewhere:
- Served with a redirect, including www to apex or HTTP to HTTPS, which counts as a failure
- Served with a
.jsonextension, which iOS rejects even though the content is JSON - Wrong content type, since it must be
application/jsonand nottext/html - Missing the Associated Domains entitlement in the build that is actually installed
- Cached failure on the test device, which needs an app reinstall to clear
Verify with a request rather than a generator:
curl -sI https://yourdomain.com/.well-known/apple-app-site-association
HTTP/2 200 ← not 301, not 302
content-type: application/json ← not text/html
Apple's own validator
Apple runs a tool that fetches the file and reports whether it parses and is served correctly, which covers most of the list above. It does not check the entitlement inside your build, so a green result there still leaves one thing to verify on a device.
The part no generator covers
A universal link only helps people who already have the app. For everyone else the link is a web page, and if your web page is a store link opened inside Instagram, you are back to the in-app browser problem. Generators solve the first case and say nothing about the second, which is where most marketing traffic lives.
For visitors who do not have the app yet, our link gets them from an in-app browser to the store without a blank page.