You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions+Fastlane手动签名iOS应用时SPM框架签名报错

解决手动签名下SPM依赖(Firebase)的归档签名冲突

问题根源

SPM引入的Firebase等第三方框架(比如GoogleUtilities-Reachability、Firebase_FirebaseCoreInternal)多为预编译二进制包,本身默认适配自动签名逻辑。当为App主Target手动指定描述文件时,会强制覆盖所有依赖Target的签名配置,导致与它们的默认签名规则冲突,触发报错。

具体解决方案

1. 拆分主App与依赖Target的签名配置

在Xcode中分别配置签名规则:

  • 主App Target:保持手动签名,指定对应的描述文件和签名身份。
  • 所有SPM依赖Target:在Build Settings的Signing板块,将Provisioning Profile设为Automatic,Code Signing Identity设为对应环境的身份(Debug用iOS Developer,Release用iOS Distribution),不要手动指定描述文件。

2. 优化Fastlane/xcodebuild命令参数

不要给所有Target全局指定签名参数,仅针对主App Target配置,同时为SPM依赖Target显式设置自动签名:

xcodebuild archive -scheme BuildTarget \
  -archivePath ./Build/Archive.xcarchive \
  # 主App手动签名配置
  CODE_SIGN_STYLE=Manual \
  PROVISIONING_PROFILE_SPECIFIER="你的App描述文件名称" \
  CODE_SIGN_IDENTITY="iPhone Distribution: 你的团队ID" \
  OTHER_CODE_SIGN_FLAGS="--keychain login.keychain" \
  # 为SPM依赖设置自动签名,覆盖全局配置
  GoogleUtilities-Reachability_CODE_SIGN_STYLE=Automatic \
  Firebase_FirebaseCoreInternal_CODE_SIGN_STYLE=Automatic

若有多个SPM依赖,需逐个添加对应的[TargetName]_CODE_SIGN_STYLE=Automatic参数。

3. 本地测试冲突修复

  • 清理Derived Data:执行Xcode > Preferences > Locations > Derived Data > Delete,然后重新构建归档。
  • 检查Build System:若项目较旧,可临时切换到Legacy Build System(File > Project Settings > Build System)尝试解决配置缓存问题。

4. GitHub Actions CI环境补充配置

  • 确保签名证书和描述文件已正确导入CI环境的钥匙串,可使用Fastlane的import_certificate和import_provisioning_profile动作手动导入对应客户的文件。
  • 执行xcodebuild前解锁钥匙串:
security unlock-keychain -p "$KEYCHAIN_PASSWORD" login.keychain

复用脚本优化建议

由于需为多客户复用脚本,建议将主App的签名参数(描述文件名称、签名身份)设为Fastlane lane的可配置选项,避免硬编码;同时把SPM依赖的自动签名参数固定到脚本中,确保不同客户构建时都能适配签名规则。

内容的提问来源于stack exchange,提问作者Sunkas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 09:40:23