{"id":2060,"date":"2026-08-17T17:00:00","date_gmt":"2026-08-17T22:00:00","guid":{"rendered":"https:\/\/tolinku.com\/blog\/?p=2060"},"modified":"2026-03-07T03:38:10","modified_gmt":"2026-03-07T08:38:10","slug":"team-id-bundle-id-universal-links","status":"publish","type":"post","link":"https:\/\/tolinku.com\/blog\/team-id-bundle-id-universal-links\/","title":{"rendered":"Team ID and Bundle ID Configuration for Universal Links"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Every Universal Link configuration depends on two identifiers: your Team ID and your Bundle ID. Together they form the App ID that appears in your AASA file, your entitlements, and your Apple Developer account settings. Getting either one wrong causes Universal Links to silently fail, with no error messages, just links that open in Safari instead of your app.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This article explains what each identifier is, where to find them, how they connect, and the common mistakes that break Universal Links.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For Universal Links fundamentals, see <a href=\"https:\/\/tolinku.com\/blog\/universal-links-everything-you-need-to-know\/\">universal links: everything you need to know<\/a>. For the Associated Domains entitlement, see <a href=\"https:\/\/tolinku.com\/blog\/associated-domains-entitlement\/\">Associated Domains entitlement<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What Is the Team ID?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Team ID is a 10-character alphanumeric string assigned to your Apple Developer account. It is unique to your organization (or individual account) and does not change.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can find your Team ID in two places:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><p><strong>Apple Developer Portal.<\/strong> Sign in to <a href=\"https:\/\/developer.apple.com\/account\" rel=\"nofollow noopener\" target=\"_blank\">developer.apple.com<\/a>, go to Membership Details. Your Team ID is listed there.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Xcode.<\/strong> Open your project, go to Signing &amp; Capabilities, and look at the Team dropdown. The Team ID appears next to your team name.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example Team ID: <code>A1B2C3D4E5<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your organization has multiple Apple Developer accounts (common for companies with separate accounts for different products), each account has a different Team ID. Make sure you use the Team ID that matches the account under which your app is published.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Apple&#39;s reference: <a href=\"https:\/\/developer.apple.com\/help\/account\/manage-your-team\/locate-your-team-id\/\" rel=\"nofollow noopener\" target=\"_blank\">Locate your Team ID<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What Is the Bundle ID?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Bundle ID (also called Bundle Identifier) is a reverse-DNS string that uniquely identifies your app within Apple&#39;s ecosystem. You set it when you create your Xcode project, and it must match the App ID registered in the Apple Developer Portal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example Bundle ID: <code>com.example.myapp<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Bundle ID is defined in:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Xcode project settings.<\/strong> Target &gt; General &gt; Bundle Identifier.<\/li>\n<li><strong>Info.plist.<\/strong> The <code>CFBundleIdentifier<\/code> key.<\/li>\n<li><strong>Apple Developer Portal.<\/strong> Certificates, Identifiers &amp; Profiles &gt; Identifiers.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Bundle ID Rules<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Must be unique across all apps in the App Store.<\/li>\n<li>Must use reverse-DNS notation (e.g., <code>com.yourcompany.yourapp<\/code>).<\/li>\n<li>Can contain only alphanumeric characters, hyphens, and periods.<\/li>\n<li>Case-sensitive in the AASA file (use lowercase consistently).<\/li>\n<li>Cannot be changed after the app is published to the App Store.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The App ID: Team ID + Bundle ID<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The App ID is the combination of your Team ID and Bundle ID, separated by a period:<\/p>\n\n\n\n<pre><code>TEAMID.com.example.myapp\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example: <code>A1B2C3D4E5.com.example.myapp<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is the identifier that appears in your AASA file:<\/p>\n\n\n\n<pre><code class=\"language-json\">{\n  &quot;applinks&quot;: {\n    &quot;details&quot;: [\n      {\n        &quot;appIDs&quot;: [&quot;A1B2C3D4E5.com.example.myapp&quot;],\n        &quot;components&quot;: [\n          { &quot;\/&quot;: &quot;\/product\/*&quot; }\n        ]\n      }\n    ]\n  }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The App ID must match exactly. A mismatch between what is in the AASA file and what is in your app&#39;s entitlements will cause Universal Links to fail.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where Each Identifier Appears<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Location<\/th>\n<th>What Goes There<\/th>\n<th>Example<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>AASA file <code>appIDs<\/code><\/td>\n<td>Team ID + Bundle ID<\/td>\n<td><code>A1B2C3D4E5.com.example.myapp<\/code><\/td>\n<\/tr>\n<tr>\n<td>Associated Domains entitlement<\/td>\n<td>Domain only (no IDs)<\/td>\n<td><code>applinks:yourdomain.com<\/code><\/td>\n<\/tr>\n<tr>\n<td>Xcode Signing &amp; Capabilities<\/td>\n<td>Team (selected from dropdown)<\/td>\n<td>Your Team Name (A1B2C3D4E5)<\/td>\n<\/tr>\n<tr>\n<td>Xcode Bundle Identifier<\/td>\n<td>Bundle ID only<\/td>\n<td><code>com.example.myapp<\/code><\/td>\n<\/tr>\n<tr>\n<td>Apple Developer Portal App ID<\/td>\n<td>Team ID is implicit, Bundle ID entered<\/td>\n<td><code>com.example.myapp<\/code><\/td>\n<\/tr>\n<tr>\n<td>Provisioning Profile<\/td>\n<td>References the App ID<\/td>\n<td>Generated automatically<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><img decoding=\"async\" src=\"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/platform-settings-ios.png\" alt=\"Tolinku iOS configuration showing Team ID, Bundle ID, and App Store URL fields\">\n<em>The Tolinku dashboard iOS configuration section where you enter your Team ID, Bundle ID, and App Store URL.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Setting Up the Associated Domains Capability<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In Xcode:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select your app target.<\/li>\n<li>Go to Signing &amp; Capabilities.<\/li>\n<li>Click &quot;+ Capability&quot; and add &quot;Associated Domains.&quot;<\/li>\n<li>Add your domain: <code>applinks:yourdomain.com<\/code><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Xcode automatically creates (or updates) your <code>.entitlements<\/code> file:<\/p>\n\n\n\n<pre><code class=\"language-xml\">&lt;key&gt;com.apple.developer.associated-domains&lt;\/key&gt;\n&lt;array&gt;\n    &lt;string&gt;applinks:yourdomain.com&lt;\/string&gt;\n&lt;\/array&gt;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The entitlement itself does not contain the Team ID or Bundle ID. Those are inferred from your code signing identity and provisioning profile. But they must match what is in the AASA file on the server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the full entitlement setup, see <a href=\"https:\/\/tolinku.com\/blog\/associated-domains-entitlement\/\">Associated Domains entitlement<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common Mistakes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Wrong Team ID in the AASA File<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Symptom:<\/strong> Universal Links do not open the app. The AASA file looks correct otherwise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause:<\/strong> The Team ID in the AASA file does not match the Team ID of the Apple Developer account that signed the app.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fix:<\/strong> Verify your Team ID in the Apple Developer Portal (Membership Details) and update the AASA file. This is the most common AASA-related error.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bundle ID Case Mismatch<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Symptom:<\/strong> Universal Links work inconsistently or not at all.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause:<\/strong> The Bundle ID in the AASA file uses different casing than the Bundle ID in Xcode. For example, <code>com.Example.MyApp<\/code> in the AASA file but <code>com.example.myapp<\/code> in Xcode.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fix:<\/strong> Use the exact same casing everywhere. Lowercase is conventional and recommended.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Using a Wildcard App ID<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Symptom:<\/strong> Universal Links do not work despite the AASA file being valid.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause:<\/strong> Wildcard App IDs (e.g., <code>A1B2C3D4E5.*<\/code>) cannot be used for Universal Links. The AASA file requires an explicit Bundle ID.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fix:<\/strong> Register an explicit App ID in the Apple Developer Portal with your full Bundle ID.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Multiple Teams, Wrong One Selected<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Symptom:<\/strong> Universal Links work in development but fail in production (or the reverse).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause:<\/strong> Xcode is signing the app with a different team than the one whose Team ID is in the AASA file. This is common in organizations with multiple Apple Developer accounts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fix:<\/strong> Verify that the team selected in Xcode&#39;s Signing &amp; Capabilities matches the Team ID in the AASA file.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">App Extension Bundle IDs<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Symptom:<\/strong> Universal Links open the wrong target or do not work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause:<\/strong> App extensions (widgets, share extensions, etc.) have their own Bundle IDs (e.g., <code>com.example.myapp.widget<\/code>). If you accidentally use an extension&#39;s Bundle ID in the AASA file, Universal Links will fail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fix:<\/strong> Use the main app target&#39;s Bundle ID in the AASA file, not an extension&#39;s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Multiple Apps on the Same Domain<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you have multiple apps that should handle Universal Links on the same domain, list them all in the AASA file:<\/p>\n\n\n\n<pre><code class=\"language-json\">{\n  &quot;applinks&quot;: {\n    &quot;details&quot;: [\n      {\n        &quot;appIDs&quot;: [&quot;A1B2C3D4E5.com.example.consumer&quot;],\n        &quot;components&quot;: [\n          { &quot;\/&quot;: &quot;\/shop\/*&quot; }\n        ]\n      },\n      {\n        &quot;appIDs&quot;: [&quot;A1B2C3D4E5.com.example.merchant&quot;],\n        &quot;components&quot;: [\n          { &quot;\/&quot;: &quot;\/merchant\/*&quot; }\n        ]\n      }\n    ]\n  }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Each app must have its own Associated Domains entitlement pointing to the same domain. iOS checks the AASA file and opens the first app whose path pattern matches.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the apps belong to different teams (different Team IDs), both Team IDs appear in the AASA file. This requires both teams to coordinate on the AASA file content.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For AASA path matching details, see <a href=\"https:\/\/tolinku.com\/blog\/aasa-wildcards-and-paths\/\">AASA wildcards and path matching<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verifying Your Configuration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Check the AASA File<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Fetch your AASA file and verify the App ID:<\/p>\n\n\n\n<pre><code class=\"language-bash\">curl -s &quot;https:\/\/yourdomain.com\/.well-known\/apple-app-site-association&quot; | jq &#39;.applinks.details[].appIDs&#39;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Check Apple&#39;s CDN<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Verify what Apple&#39;s CDN has cached:<\/p>\n\n\n\n<pre><code class=\"language-bash\">curl -s &quot;https:\/\/app-site-association.cdn-apple.com\/a\/v1\/yourdomain.com&quot; | jq &#39;.applinks.details[].appIDs&#39;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Check Xcode<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In Xcode, verify:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Target &gt; General &gt; Bundle Identifier matches the Bundle ID in the AASA file.<\/li>\n<li>Signing &amp; Capabilities &gt; Team matches the Team ID in the AASA file.<\/li>\n<li>Signing &amp; Capabilities &gt; Associated Domains includes <code>applinks:yourdomain.com<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For complete debugging steps, see <a href=\"https:\/\/tolinku.com\/blog\/debugging-aasa-file\/\">debugging AASA files<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tolinku and App ID Configuration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/tolinku.com\/features\/deep-linking\">Tolinku<\/a> requires your Team ID and Bundle ID during <a href=\"https:\/\/tolinku.com\/docs\/user-guide\/configuring-ios\/\">iOS configuration<\/a> in the Appspace settings. Tolinku uses these to generate the correct AASA file for your domain. If you change your Team ID or Bundle ID, update the values in the Tolinku dashboard, and the AASA file will be regenerated automatically. See the <a href=\"https:\/\/tolinku.com\/docs\/developer\/universal-links\/\">Universal Links developer guide<\/a> for setup details.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the complete Universal Links guide, see <a href=\"https:\/\/tolinku.com\/blog\/universal-links-everything-you-need-to-know\/\">universal links: everything you need to know<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Configure Team ID and Bundle ID correctly for Universal Links. Avoid common mistakes with Apple Developer account settings and entitlements.<\/p>\n","protected":false},"author":2,"featured_media":2059,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Team ID and Bundle ID Configuration for Universal Links","rank_math_description":"Configure Team ID and Bundle ID correctly for Universal Links. Avoid common mistakes with Apple Developer account settings and entitlements.","rank_math_focus_keyword":"team ID bundle ID universal links","rank_math_canonical_url":"","rank_math_facebook_title":"","rank_math_facebook_description":"","rank_math_facebook_image":"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/og-team-id-bundle-id-universal-links.png","rank_math_facebook_image_id":"","rank_math_twitter_title":"","rank_math_twitter_description":"","rank_math_twitter_image":"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/og-team-id-bundle-id-universal-links.png","footnotes":""},"categories":[12],"tags":[648,122,657,101,20,658,24,656,22,81],"class_list":["post-2060","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ios","tag-app-development","tag-apple","tag-bundle-id","tag-configuration","tag-deep-linking","tag-entitlements","tag-ios","tag-team-id","tag-universal-links","tag-xcode"],"_links":{"self":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/2060","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/comments?post=2060"}],"version-history":[{"count":1,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/2060\/revisions"}],"predecessor-version":[{"id":2061,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/2060\/revisions\/2061"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media\/2059"}],"wp:attachment":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media?parent=2060"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/categories?post=2060"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/tags?post=2060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}