AASA File Validator
Validate your apple-app-site-association file before broken universal links reach users.
Universal links fail silently: if your apple-app-site-association (AASA) file has a malformed appID, a stray trailing comma, or the wrong structure, iOS simply opens Safari instead of your app — with no error anywhere. This validator parses your AASA JSON and checks it structurally: appIDs must follow the TEAMID.bundleId format, and the applinks, webcredentials, and appclips sections each have their own required shape.
Paste the contents of your AASA file above to get a section-by-section report. The checks run entirely in your browser, so nothing about your associated domains configuration is sent to a server.
How to validate an apple-app-site-association file
- 1
Fetch your live file from https://yourdomain.com/.well-known/apple-app-site-association, or copy it from your project.
- 2
Paste the raw JSON into the validator above.
- 3
Review the report: JSON syntax errors are flagged first, then each section (applinks, webcredentials, appclips) is checked against Apple’s expected structure.
- 4
Confirm every appID matches the TEAMID.bundleId pattern — a bundle ID without the 10-character Team ID prefix is the single most common mistake.
- 5
Fix the issues, redeploy the file, and re-test on a device (Apple’s CDN caches AASA files, so allow time or reinstall the app to force a refresh).
AASA hosting rules that break universal links
The file must be served from /.well-known/apple-app-site-association (Apple also accepts the domain root as a fallback), over HTTPS with a valid certificate, and without any redirects. Crucially, the filename has no .json extension — a surprising number of setups fail because a web server or CDN only serves the file as apple-app-site-association.json. The response should carry a Content-Type of application/json, and the file must stay under 128 KB.
Since iOS 14, devices no longer fetch your AASA file directly: Apple’s CDN retrieves it and delivers a cached copy when the app is installed. That means a fix you deploy today may not reach test devices immediately, and a server that blocks Apple’s CDN user agent will break universal links even though the file looks perfect in your own browser.
What goes inside applinks, webcredentials, and appclips
The applinks section declares which URLs open your app. The modern format (iOS 13+) uses a details array where each entry lists appIDs plus a components array of path, query, and fragment patterns — including exclusion rules with "exclude": true. The legacy format with a top-level apps array and paths strings still works, but components gives far finer control, such as matching only /product/* URLs while excluding /product/legacy/*.
The webcredentials section powers password autofill and passkeys: it simply lists the appIDs allowed to share credentials with the domain. The appclips section lists App Clip identifiers (note the .Clip suffix on the bundle ID). Each section is independent — a valid applinks block does not make password autofill or App Clips work if the other sections are missing or malformed.
Frequently asked questions
Where must the apple-app-site-association file be hosted?
At https://yourdomain.com/.well-known/apple-app-site-association — served over HTTPS, without redirects, and without a .json file extension. Apple also checks the domain root as a fallback, but the .well-known path is the recommended location.
What is the correct appID format in an AASA file?
TEAMID.bundleId — your 10-character Apple Developer Team ID, a dot, then the app’s bundle identifier, e.g. ABCDE12345.com.example.app. Omitting the Team ID prefix is the most common reason universal links silently fail.
Does the AASA file need a Content-Type header?
Yes — serve it as application/json. Some older Apple documentation referenced application/pkcs7-mime for signed files, but for the standard unsigned file application/json is correct. Many CDNs default unknown extensionless files to application/octet-stream, which can cause validation problems.
Why do my universal links still open Safari after I fixed the file?
Apple’s CDN caches AASA files, and devices only refresh the association when the app is installed or updated. Reinstall the app on your test device, or check the current CDN copy at https://app-site-association.cdn-apple.com/a/v1/yourdomain.com to see what Apple is actually serving.
Can one AASA file cover multiple apps?
Yes. The details array in applinks can contain multiple entries, and each entry’s appIDs array can list several TEAMID.bundleId values — useful when a production app, a beta app, and an App Clip all share the same domain.
Is my AASA JSON uploaded anywhere when I validate it?
No. Validation runs entirely in your browser with client-side JavaScript. The JSON you paste never leaves your device, so it is safe to check files that reference internal or unreleased bundle IDs.
Ship releases without configuration surprises
Appalize connects directly to App Store Connect so you can manage versions, metadata, and releases from one dashboard — and automate the whole pipeline through the Appalize MCP and API.
Related free tools
Deep Link Tester
Break any universal link or URL scheme into its parts and catch the mistakes that stop it from opening your app.
Smart App Banner Generator
Generate the apple-itunes-app meta tag that shows a native App Store banner on your website in Safari.
App ID Finder
Find any app’s numeric App Store ID from its name or URL in seconds.
App Store Connect JWT Decoder
Decode App Store Connect API tokens in your browser to debug 401 errors — the token never leaves your device.