这个应用程序的捆绑标识符与其代码签名标识符不匹配。

15
当我尝试在设备上构建和运行应用程序时,我会收到以下错误:应用程序安装失败:此应用程序的捆绑标识符与其代码签名标识符不匹配。 我检查了签名证书、捆绑ID、预配配置文件、权益和所有内容都是正确的。

Error message

任何想法?
7个回答

13
  1. 进入构建阶段
  2. 点击+符号,在新的运行脚本阶段中添加脚本
  3. 在脚本框中添加/usr/local/bin/carthage copy-frameworks
  4. 输入文件中为每个Carthage框架您的应用程序使用添加一行:$(SRCROOT)/Carthage/Build/iOS/FrameworkName.framework
  5. 如果您仍然遇到问题,请为每个框架在输出文件下添加此内容:$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/FrameworkName.framework

这个过程对我起了作用。它可以在Carthage文档中找到。您可以在这里的项目4、5、6中看到这个过程。


2
这必须是所选答案! - Reza_Rg
没想到这个方法会解决我的问题,但它确实有效! - Zach

7
最终的错误是由Carthage引起的。
删除并重新构建所有框架后,问题得到了解决。

2
同时删除所有派生数据。 - StackUnderflow
1
具体来说,您应该遵循 https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos 的第4-6步骤。 - Greg

2
为了解决这个问题,我需要将框架的产品捆绑标识符设置为带有点的任何内容

在我的情况下,是因为框架的问题,而不是Carthage的问题,但是作为Workspace中的目标依赖项之一。

在修复之前,产品捆绑标识符类似于“FrameworkName”,然后Xcode会自动附加一些自动生成的ID,签名标识符会变为“FrameworkName-5555494493d11a8e5f473d1cb2a5d781973d171e”。

当我将产品捆绑标识符设置为带点的内容,例如“com.organization.frameworkName”时,Xcode停止自动附加任何内容,因为ID匹配,所以一切正常。

看起来这在Xcode 11和Catalina之前不是问题。这个调试真是疯狂。


嘿,你能告诉我你在哪里做了修改吗?谢谢。 - Archit Dhupar
有问题的框架目标 -> 构建设置 -> 产品包标识符,就像这样 ibb.co/zm3vr2c。如何找到“有问题的框架目标”取决于您使用什么来获取第三方依赖项,例如Cocoapods,Carthage... - Oleksii Nezhyborets

0
在iTunes中,他们为每个角色添加了一个标志,以确定他是否具有访问证书、标识符和配置文件的权限。默认情况下是false。
我所需要做的就是:
进入iTunesConnect -> 用户和访问 -> 通过勾选“访问证书、标识符和配置文件”的框来编辑我的角色。

enter image description here


0

您是否正在使用自定义的.xcconfig文件?

有时,自定义的.xcconfigs可能会覆盖默认的代码签名设置。

1)检查项目是否有自定义配置: --- 1)在Xcode中单击project(通常位于顶部),无论项目名称是什么

enter image description here

2) 在右侧您将看到项目设置。在这里,您可以设置标识符... 如果没有,则说明您所在的视图不正确。这是您应该看到的:

enter image description here

3) 将“bundle Identifier”更改为类似于“com.yourcompany.yourAppName”的内容。 --- com.yourcompany是您的网站域名反转。苹果建议这样做。 --- 在com.yourcompany之后是应用程序名称或“昵称”,例如com.yourcompany.myCoolApp将是完整标识符。

4) 完成此操作后,请确保在“构建设置”下如下所示:

enter image description here

--- 确保你的“代码签名身份”设置为你想要的身份。对于在iOS或OSX上进行调试,你可以使用“iPhone开发者:你的名字xxx”或“Mac开发者:你的名字xxx”。

  • 代码签名资源路径:这是为高级/命令行工具保留的
  • 其他代码签名标志:我不确定,从未使用过这个
  • 配置文件:最好将其设置为“自动”,让Xcode处理设置。否则,如果你在会员中心设置了一个配置文件,那么在这里指定它(确保你已经安装了它)。

0

这个问题只与代码签名有关。

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

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

  1. 下载所需框架的源代码
  2. 使用XCode 11.x打开源代码中的.xcproj文件
  3. 进入Targets -> Signing & Capabilities -> Select all tab -> Bundle Identifier 如果标识符中存在不对称性,例如带有4个分隔符的标识符(例如:com.company.mac.app)

    将其更改为com.*并输入。

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

  5. 现在,使用以下命令重新构建SDK,并进行上述第3步所做的更改

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

对于您的项目中的所有第三方SDK,重复相同的过程。

注意:确保您将所有第三方SDK标记为嵌入并签名

Targets => General => Frameworks, Libraries, and Embedded Content

在我的情况下,它是一个包含“Muon”作为捆绑标识符的软件包。更改为“com.cocoapods.Muon”或任何带有点的内容都可以解决它。 - aehlke

-2

你的应用程序由一个Provisioning Profile签名,而这个Profile又与一个证书相关联(可以是开发或分发证书)。

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

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

无论哪种方式,你的应用程序的Bundle标识符必须与与你的Provisioning Profile相关联的证书的Bundle ID匹配。不匹配会触发你遇到的错误。


1
证书没有绑定ID。 - mixel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接