You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一Target双Scheme下Universal Link staging环境无法跳转问题

排查预发布环境Universal Link失效的原因

看起来你已经把生产环境的Universal Link跑通了,但预发布环境掉链子了——我经手过不少这类问题,大概率是下面这些细节没处理到位,咱们一个个排查:

1. 预发布App ID的Associated Domains权限未开启

每个App ID都是独立的身份,你得登录苹果开发者后台,找到预发布环境对应的App ID,确认Associated Domains这个开关已经打开。如果这个权限没开,哪怕你在Xcode里加了关联域名,苹果也不会认可这个配置。

另外还要检查:这个App ID下有没有添加对应的applinks:your-staging-domain.com关联域名条目——有时候你在Xcode的Target层面全局加了,但开发者后台的App ID配置里漏加了,这也会直接导致不生效。

2. 预发布域名的apple-app-site-association文件配置错误

你提到每个域名的文件内容唯一,那一定要确认预发布环境的这个文件里,applinks字段下的apps数组,是不是正确填写了预发布App的Team ID + Bundle ID组合,格式是TEAM_ID.BUNDLE_ID(比如ABCDE12345.com.yourapp.staging)。

常见错误:把生产环境的Bundle ID写到预发布的文件里,或者Team ID写错了,这样苹果匹配不到预发布的App,自然不会触发跳转。

你可以用命令行直接拉取文件验证:

curl -v https://your-staging-domain.com/apple-app-site-association

看看返回的JSON里,apps数组的条目是不是和预发布App的身份完全一致。

3. Scheme与Build Configuration的关联配置有误

你的两个Scheme对应不同环境,要确认预发布Scheme关联的Build Configuration(比如Staging)里:

  • Bundle Identifier确实是预发布环境的ID,不是生产的;
  • Associated Domains设置里,确实包含了applinks:your-staging-domain.com——有时候全局Target配置加了,但某个Configuration被单独覆盖,没加上这个域名。

你可以在Xcode里选中预发布Scheme,点击Edit Scheme,查看Run和Archive阶段的Build Configuration是不是正确关联到了预发布的配置,再去对应的Build Settings里检查Associated Domains。

4. 苹果CDN或设备端缓存问题

苹果会缓存apple-app-site-association文件,时长可能长达24小时,如果你刚更新了预发布的文件,苹果的CDN可能还没同步。另外,测试设备(或模拟器)也会缓存旧的配置,导致新配置不生效。

解决方法:

  • 模拟器:用命令重置隐私缓存,然后删除App重新安装:
    xcrun simctl privacy booted reset all
    
  • 真机:删除App,重启设备,或者去「设置」→「通用」→「还原」→「还原网络设置」(注意这会清除Wi-Fi密码);
  • 可以用curl -H "Cache-Control: no-cache" https://your-staging-domain.com/apple-app-site-association强制拉取最新文件,确认内容正确。

5. 预发布域名的HTTPS配置不达标

苹果对Universal Link的域名有严格要求:

  • 必须使用有效的HTTPS证书(不能是自签名的,要受信任的CA颁发的);
  • 访问https://your-staging-domain.com/apple-app-site-association必须直接返回200状态码,不能有301/302重定向;
  • 文件的Content-Type必须是application/json,不能是text/plain或者其他类型。

你可以用curl命令检查这些:

curl -I https://your-staging-domain.com/apple-app-site-association

看返回的HTTP/2 200和Content-Type: application/json是不是都符合要求。

6. 测试方式不正确

别直接在Safari地址栏输入链接然后跳转——Safari会优先在浏览器打开,不会触发Universal Link。正确的测试方式是:

  • 把链接放到备忘录、短信里,点击打开;
  • 用命令行给模拟器/真机发测试链接:
    # 模拟器
    xcrun simctl openurl booted https://your-staging-domain.com/test-path
    # 真机(需要先连接电脑,知道UDID)
    xcrun simctl openurl <device-udid> https://your-staging-domain.com/test-path
    

另外,还要确认你的App已经实现了UIApplicationDelegate的application:continueUserActivity:restorationHandler:方法(或者UIWindowSceneDelegate的scene:continueUserActivity:),虽然这是处理跳转后的逻辑,但如果完全没实现,可能也会影响跳转触发。


内容的提问来源于stack exchange,提问作者R.Sap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:18:08