Skip to content
DL2App

AASA validator for iOS Universal Links

Enter the domain your Universal Links use, or a full link to also test its path. We fetch the file the way Apple does, check it against Apple's rules, and show what Apple's CDN is handing to phones right now.

Free. No account, no email.

Check for a specific app (optional)

Team ID, a dot, then the bundle ID.

The applicationId in your Gradle file.

The report covers both the Apple and Android files, and the link itself if you enter a full URL. Reports stay shareable for seven days.

What the validator checks

  • Where the file is. iOS fetches https://your-domain/.well-known/apple-app-site-association, with no file extension, for each domain listed in your app's Associated Domains.
  • Status and redirects. The file must answer 200 directly over HTTPS with a valid certificate. Apple does not follow redirects for it, so a bare domain that redirects to www fails.
  • Content. Valid JSON, not an HTML page from a single-page app's catch-all route or a bot check, and no larger than 128 KB uncompressed.
  • App IDs. Each entry in appIDs (or appID in the older format) is your 10-character Team ID, a dot, and the bundle ID. JSON keys are case-sensitive, so appId is ignored.
  • Paths. components (or the older paths) are read top to bottom and the first match wins, so an exclude rule has to come before the broader rule it carves out of. Enter a full link to see which rule your path hits.
  • Apple's copy. Phones don't fetch your file directly; they get it from Apple's CDN at app-site-association.cdn-apple.com/a/v1/your-domain. We compare that copy with yours, because a stale CDN copy explains links that work for you and not for anyone else.

A valid file

apple-app-site-association
{
  "applinks": {
    "details": [
      {
        "appIDs": ["ABCDE12345.com.example.app"],
        "components": [
          { "/": "/account/*", "exclude": true },
          { "/": "/*" }
        ]
      }
    ]
  }
}

This opens the app for every path on the domain except /account/…. Writing one by hand? The AASA generator builds it from your Team ID, bundle ID and paths.

Common errors and fixes

  • The file returns HTML. Your framework's catch-all route or a CDN challenge answers first. Serve /.well-known/* as static files before any rewrite, and exclude it from bot protection.
  • It redirects. Serve the file on the exact host your links use. Each subdomain needs its own copy.
  • Works for you, not for others. Apple's CDN still has an older file. It refreshes on its own schedule, often within a day, and can't be purged. During development, add ?mode=developer to the domain in your entitlements so a development build fetches from your server directly.
  • The file is fine but the app doesn't open. Check how the link was opened: links typed into Safari's address bar, links to the same domain as the current page, and links inside Instagram or Facebook don't open apps. The Universal Links checklist goes through every cause in order.

Questions people ask

What is an AASA file?

The apple-app-site-association (AASA) file is a JSON file on your website that lists which apps may open which paths on that domain. iOS reads it, through Apple's CDN, when your app is installed or updated, and uses it to decide whether a tapped link opens the app or Safari.

Where do I put the apple-app-site-association file?

At https://your-domain/.well-known/apple-app-site-association, with no .json extension, served over HTTPS with status 200 and no redirect. Every domain and subdomain in your Associated Domains needs its own copy.

What content type should the AASA file have?

application/json is the safe choice. What matters most is that the body is valid JSON and not an HTML page, and that the response is a direct 200 without redirects.

How long does Apple take to pick up a changed AASA file?

Apple's CDN refreshes the file on its own schedule, often within a day, and there is no way to force it. Development builds can skip the CDN by adding ?mode=developer to the associated domain.

Does this check Android too?

This page focuses on the Apple file. The assetlinks.json validator checks the Android file, and the full link checker runs both plus how a link behaves in in-app browsers.

Android next: the assetlinks.json validator.

DL2App hosts a correct apple-app-site-association file on every link domain, including custom domains, and re-checks it on a schedule so you hear about a broken file before your users do.

Try DL2App free

What people use next

All 17 tools →
AASA validator: check your apple-app-site-association file · DL2App