同一项目构建同目标名不同Bundle ID应用,Face ID报错-1004求解释
关于同名称不同Bundle ID应用生物认证失败(错误码-1004)的问题解答
这个问题我在开发多target应用时也碰到过,本质是苹果生物认证系统的识别逻辑导致的,下面给你详细拆解:
核心原因
苹果的LocalAuthentication框架处理Face ID/Touch ID请求时,会结合应用显示名称(即产品名称/CFBundleDisplayName)和Bundle ID做身份校验与授权管理。当两个应用名称完全一致但Bundle ID不同时,系统会出现识别混淆:
- 用户在授权弹窗里看到的是同一个应用名称,无法区分两个独立App;
- 系统内部的生物认证授权记录会因为名称匹配但Bundle ID不匹配,导致权限验证失败,最终返回错误码-1004。
苹果官方文档虽然没有针对这个场景单独说明,但在LocalAuthentication的最佳实践中明确提到:应用显示名称应具备辨识度,避免与其他应用重名,防止用户和系统产生混淆。另外在钥匙串访问的规范里,也隐含了“独立应用应保持唯一标识(名称+Bundle ID)”的要求。
解决方案
1. 修改应用显示名称(最可靠)
直接修改其中一个应用的产品名称(在Xcode的target设置里修改Product Name,对应Info.plist的CFBundleDisplayName),让两个应用的显示名称存在差异。这样系统就能正确区分两个App的生物认证请求,各自的授权状态也会独立存储,问题就能直接解决。
2. 配置独立钥匙串访问组(可选,仅适用于需保留同名的场景)
如果业务上必须保持显示名称相同,可以尝试为两个应用配置不同的钥匙串访问组:
- 在Xcode的target设置中,找到
Signing & Capabilities,添加Keychain Sharing能力; - 为两个应用分别设置不同的访问组标识;
- 在使用
LAContext进行生物认证并访问钥匙串时,明确指定对应的访问组。
不过这个方法的稳定性不如修改显示名称,因为系统对显示名称的识别优先级较高,还是推荐优先采用第一种方案。
内容的提问来源于stack exchange,提问作者Chú Phú
相关产品推荐
相关产品推荐

