构建阶段
+
符号,在新的运行脚本阶段
中添加脚本/usr/local/bin/carthage copy-frameworks
输入文件
中为每个Carthage框架您的应用程序使用添加一行:$(SRCROOT)/Carthage/Build/iOS/FrameworkName.framework
输出文件
下添加此内容:$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/FrameworkName.framework
这个过程对我起了作用。它可以在Carthage文档中找到。您可以在这里的项目4、5、6中看到这个过程。
在我的情况下,是因为框架的问题,而不是Carthage的问题,但是作为Workspace中的目标依赖项之一。
在修复之前,产品捆绑标识符类似于“FrameworkName”,然后Xcode会自动附加一些自动生成的ID,签名标识符会变为“FrameworkName-5555494493d11a8e5f473d1cb2a5d781973d171e”。
当我将产品捆绑标识符设置为带点的内容,例如“com.organization.frameworkName”时,Xcode停止自动附加任何内容,因为ID匹配,所以一切正常。
看起来这在Xcode 11和Catalina之前不是问题。这个调试真是疯狂。
您是否正在使用自定义的.xcconfig
文件?
有时,自定义的.xcconfigs可能会覆盖默认的代码签名设置。
1)检查项目是否有自定义配置:
--- 1)在Xcode中单击project
(通常位于顶部),无论项目名称是什么
2) 在右侧您将看到项目设置。在这里,您可以设置标识符... 如果没有,则说明您所在的视图不正确。这是您应该看到的:
3) 将“bundle Identifier”更改为类似于“com.yourcompany.yourAppName”的内容。 --- com.yourcompany是您的网站域名反转。苹果建议这样做。 --- 在com.yourcompany之后是应用程序名称或“昵称”,例如com.yourcompany.myCoolApp将是完整标识符。
4) 完成此操作后,请确保在“构建设置”下如下所示:
--- 确保你的“代码签名身份”设置为你想要的身份。对于在iOS或OSX上进行调试,你可以使用“iPhone开发者:你的名字xxx”或“Mac开发者:你的名字xxx”。
这个问题只与代码签名有关。
但是,需要注意的关键点是,如果您正在使用XCode 11.x版本。 不仅要检查项目中的代码签名,还应该检查我们添加到项目中的第三方SDK或依赖项的代码签名。
验证第三方SDK代码签名的步骤:
进入Targets -> Signing & Capabilities -> Select all tab -> Bundle Identifier 如果标识符中存在不对称性,例如带有4个分隔符的标识符(例如:com.company.mac.app)
将其更改为com.*并输入。
确保您的XCODE命令行工具已设置为XCode 11.x
现在,使用以下命令重新构建SDK,并进行上述第3步所做的更改
carthage build --no-skip-current --cache-builds --platform iOS
现在从源代码的carthage文件夹中复制生成的框架,并替换项目中现有的SDK。
对于您的项目中的所有第三方SDK,重复相同的过程。
注意:确保您将所有第三方SDK标记为嵌入并签名。
Targets => General => Frameworks, Libraries, and Embedded Content
你的应用程序由一个Provisioning Profile签名,而这个Profile又与一个证书相关联(可以是开发或分发证书)。
现在证书有一个Bundle ID,可以是:
无论哪种方式,你的应用程序的Bundle标识符必须与与你的Provisioning Profile相关联的证书的Bundle ID匹配。不匹配会触发你遇到的错误。