使用共享框架的 Fastlane 代码设计失败

Posted

技术标签:

【中文标题】使用共享框架的 Fastlane 代码设计失败【英文标题】:Fastlane Codesign Failing w/ Shared Framework 【发布时间】:2022-01-14 20:39:56 【问题描述】:

我正在处理一个多目标项目,其中包含一个额外的共享框架目标,该目标本身包含一些 SPM 依赖项。每个应用目标都有自己的包标识符,框架也有自己的标识符。

我正在使用 Fastlane 为项目运行 CI,除此之外,我同时运行 match 和 gym 来提取我的代码签名配置文件并构建应用程序。

我遇到的问题是无论我做什么,唯一框架的协同设计步骤都会失败,并出现错误errSecInternalComponent。我已将签名调整为自动,甚至为我的临时构建匹配生成开发证书,以尝试让框架的签名过程获取它们。

以上是框架标记为Embed & Sign的情况。将其更改为Embed Without Signing 时,我收到一条错误消息,指出No signing certificate "ios Development" found

据我所知,框架不应该要求在开发者控制台中创建配置文件或应用标识符,但我看到的错误似乎表明它们确实如此。

有人遇到过类似情况吗?在 CI 上下文中运行时,如何让应用程序正确编译,或者至少对框架进行正确的代码签名?

提前感谢所有帮助。

【问题讨论】:

【参考方案1】:

对于将来遇到类似问题的任何人,我可以通过关闭框架目标上的自动代码签名并将签名从 iOS Developer 设置为 iOS Distribution 来解决此问题。

由于我使用的是 Fastlane 和 Match,我无法使用自动代码签名。这对于应用程序目标本身来说很好,但它会导致框架目标出现问题。即使框架不需要签名,仍然需要将其设置为自动代码签名或选择代码签名配置文件。

在 CI/CD 管道中,我只是使用分发证书和 ad-hoc 配置文件为 ad-hoc 分发构建应用程序,因此 Fastlane 不会拉入开发人员配置文件以在框架上进行手动签名以查找。

一旦我更新了框架以使用 iOS Distribution 配置文件,目标就能够找到 Match 提取的临时证书和配置文件,并使用它们来满足它的要求。

【讨论】:

以上是关于使用共享框架的 Fastlane 代码设计失败的主要内容,如果未能解决你的问题,请参考以下文章

Fastlane Scan 的构建过程错过了 Jenkins CI 上的 CocoaPod 框架

即使使用 API 密钥,Fastlane 上传到 App Store 也会在非交互模式下失败

使用 fastlane 为 iOS 构建 Unity 游戏失败,缺少 USYM_UPLOAD_AUTH_TOKEN

添加 cocoapods 依赖项后,Fastlane 健身房失败

Fastlane 代码签名需要错误

自动化打包之fastlane-- 代码签名和项目配置