此应用程序的包标识符与其代码签名标识符不匹配

This application's bundle identifier does not match its code signing identifier

当我尝试在设备上构建和 运行 应用程序时,出现以下错误 App installation failed: This application's bundle identifier does not match its code signing identifier.

我检查了签名证书、捆绑 ID、配置文件、权利,一切都是正确的。

有什么想法吗?

您的应用程序由配置文件签名,该配置文件又链接到证书(可以用于开发或分发)。

现在证书有一个 Bundle ID,可以是:

  1. 通配符,例如"com.mydomain.*" 或者
  2. 明确的 ID,例如 "com.mydomain.myapp"

无论哪种方式,您的应用程序的捆绑标识符必须与绑定到您的配置文件的证书的捆绑 ID 相匹配。 不匹配会触发您遇到的错误。

您使用的是自定义 .xcconfig 文件吗?

有时自定义 .xccofigs 可以覆盖默认 code-sign 设置。

1) 通过以下方式查看项目是否具有自定义配置: --- 1) 单击 project 无论项目名称在 Xcode 中调用(通常在顶部)

2) 在右边你会看到你的项目设置。在这里,您可以设置标识符。如果没有,那么您的观点是错误的。这是你应该看到的:

3) 将 "bundle Identifier" 更改为 "com.yourcompany.yourAppName" 的效果。 --- com.yourcompany 是你的网站域名反了..苹果推荐这个。 --- 在 com.yourcompany 之后是应用程序名称或“昵称”,你给它。com.yourcompany.myCoolApp 将是完整的标识符。

4) 完成此操作后,请确保在 "Build Settings" 下如下所示:

--- 您的 "Code Signing Identity" 设置为您想要的任何身份。对于 iOS 或 OSX 上的调试,您使用 "iPhone Developer: Your Name xxx" 或 "Mac Developer: Your Name xxx".

  • 代码签名资源路径:为高级/命令行工具保留
  • 其他代码签名标志:不确定,从来没有用过这个
  • 配置文件:最好将此设置为 "Automatic",以便 Xcode 处理设置。否则,当您在会员中心设置配置文件时,请在此处指定(不过请确保您已先安装)。

最终错误是Carthage造成的。

删除并重建所有框架后,它解决了问题。

  1. 进入Building Phases
  2. New Run Script Phase
  3. 中点击+唱加脚本
  4. /usr/local/bin/carthage copy-frameworks 添加到脚本框。
  5. Input Files 中,为您在应用中使用的每个 Carthage 框架添加一行:$(SRCROOT)/Carthage/Build/iOS/FrameworkName.framework
  6. 如果您仍有问题,请在每个框架的 Output Files 下添加:$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/FrameworkName.framework

这个过程帮我修好了。它可以在 Carthage 文档下找到。您可以在此处的第 4、5、6 项中看到此过程。 https://github.com/Carthage/Carthage#adding-frameworks-to-an-application

在 iTunes 中,他们将其更改为每个角色都有一个标志,如果他有的话 访问证书、标识符和配置文件。 默认情况下为 false。

我所要做的就是:

转到 iTunesConnect -> 用户和访问 -> 通过选中 "Access to Certificates, Identifiers & Profiles"

框来编辑我的角色

要解决此问题,我必须将 框架的产品包标识符 设置为 带点 的任何内容。

在我的例子中,这是因为框架,而不是 Carthage 的,而是 Workspace 中作为目标依赖项的框架。

在修复产品包标识符之前类似于 "FrameworkName",Xcode 会自动附加一些自动生成的 ID,签名标识符会变成 "FrameworkName-5555494493d11a8e5f473d1cb2a5d781973d171e"。

当我将 Product Bundle Identifier 设置为带点的内容时,例如 "com.organization.frameworkName",Xcode 停止自动附加任何内容,并且一切正常,因为 ID 匹配。

在 Xcode 11 和 Catalina 之前似乎不是问题。这个调试太疯狂了。

此问题仅与 CODE SIGNING

有关

但是,这里要注意的重点是,如果您使用的是XCode 11.x 版本。 不仅是你项目中的代码签名,我们还应该检查第三方 SDK 或我们添加到项目中的依赖项中的代码签名。

验证第三方 SDK 代码签名的步骤:

  1. 下载你需要的框架源码
  2. 使用 XCode 11.x
  3. 从源代码打开 .xcproj 文件
  4. 转到目标 -> 签名和功能 -> Select 所有选项卡 -> 捆绑包标识符 如果您发现标识符中有任何不均匀性,例如带有 4 个分隔符的标识符(例如:com.company.mac.app)

    改成com.*然后输入.

  5. 确保您的 XCODE 命令行工具设置为 XCode 11.x

  6. 现在,使用下面的命令重建 SDK,并在上面的第 3 步中完成更改

      carthage build --no-skip-current --cache-builds --platform iOS
    
  7. 现在复制从carthage源代码文件夹生成的框架,并替换项目中现有的SDK。

在您的项目中对所有第 3 方 SDK 重复相同的过程。

注意: 确保在

中将所有第 3 方 SDK 标记为 Embed & Sign
Targets => General => Frameworks, Libraries, and Embedded Content