如题,Grok 救我狗命,我得重新苹果 Grok 搜索能力的优势了。
**问题归根到底应该就是 Info.plist 没有在修改 appLink 之后自动更新,导致匹配不上。**解决方案是清理掉原来的自动生成内容,重新运行 ios init。估计不止这种问题,tauri + iOS 本来能正常跑,改了配置突然运行不了的情况,都可以尝试一下重新 init。这里还有点感悟,一旦出了舒适区,即使有 AI 也要花费不少时间解决这些问题,如果是熟练的 iOS 开发者应该一早就感应到这种问题了吧。
1. “appLink”: false 的正确含义和用法
- appLink: false(或省略) = 自定义 URI Scheme(如
myapp://xxx),不需要服务器、不需要 .well-known 文件。 - 插件会在构建时自动往 Info.plist 里写入
CFBundleURLTypes。 - appLink: true(默认) = Universal Link / App Link(https + host),需要苹果验证文件。
正确配置(tauri.conf.json):
{
"plugins": {
"deep-link": {
"mobile": [
{
"scheme": ["myapp"], // ← 必须有这个,数组形式,方案名建议全小写
"appLink": false // 自定义 scheme 必须显式 false 或省略
}
// 如果你还想同时支持 Universal Link,可以再加一个对象
// {
// "host": "yourdomain.com",
// "pathPrefix": ["/open"]
// // appLink 默认 true,可不写
// }
]
}
}
}
常见写错导致闪退的几种情况:
- 把
appLink: false直接写在有host的对象里(混合使用)。 - 只写
appLink: false却没写scheme(插件生成空/无效的 CFBundleURLTypes)。 - 用错字段名:老版本可能是
"schemes",新版是"scheme"(注意单数)。 - 把
appLink写在deep-link顶层而不是mobile数组里的对象里。
2. 为什么会闪退?
- Info.plist 生成出错(空 array、重复 key、XML 格式坏掉)。
- iOS 系统在启动时解析 plist 失败,直接 kill 进程。
- 之前用 Universal Link(appLink true)时 Xcode 已经加了
com.apple.developer.associated-domainsentitlement,切换到 false 后 entitlement 和 provisioning profile 不匹配,也会导致启动失败。
3. 立即修复步骤(必做)
- 修正配置 为上面正确的格式(只保留 scheme + appLink: false)。
- 彻底清理构建缓存:
tauri ios clean # 如果有这个命令 # 或者手动 rm -rf target/ src-tauri/target src-tauri/gen/apple - 删除 Xcode DerivedData(最重要):
rm -rf ~/Library/Developer/Xcode/DerivedData - 重新生成/运行:
tauri ios dev # 或 tauri ios build - 如果还是闪退,打开 Xcode 项目(target/ios 里生成的 .xcodeproj),找到 Info.plist,搜索
CFBundleURLTypes,确认里面有你的 scheme,且没有空数组。
4. 验证是否成功
- 构建成功后,用模拟器测试:
xcrun simctl openurl booted myapp://test - App 应该正常启动并收到 deep-link 事件。
总结:99% 是配置写错了(少了 scheme 或混用了 host),导致 Info.plist 坏掉。改对配置 + 清理缓存基本就能解决。如果清理后还闪退,把你的 plugins.deep-link 那段完整配置贴出来,我再帮你看。