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

Xcode14升级后Azure DevOps流水线SPM含资源组件签名报错求助

解决方案

1. 针对性配置Xcode Build任务的签名参数

Xcode 14新增了SPM专属的签名控制参数,可在Azure DevOps的Xcode Build任务中添加以下参数,让主App保持手动签名(满足TestFlight上传要求),同时让SPM组件自动签名:

  • 在Arguments字段添加:
    -UseModernBuildSystem=YES
    CODE_SIGN_STYLE=Automatic
    PROVISIONING_PROFILE_SPECIFIER="你的主App分发描述文件名称"
    CODE_SIGN_IDENTITY="Apple Distribution: 你的开发者团队ID"
    SWIFT_PACKAGE_SIGNING_MODE=Automatic
    OTHER_CODE_SIGN_FLAGS="--keychain $(APPLE_KEYCHAIN_NAME)"
    
    其中SWIFT_PACKAGE_SIGNING_MODE=Automatic是核心,它会强制SPM组件使用自动签名,不受主目标的手动签名设置干扰,同时主App通过PROVISIONING_PROFILE_SPECIFIER指定描述文件,保证TestFlight上传的签名有效性。

2. 修正SPM组件的资源配置

如果报错和Design System的资源打包有关,检查其Package.swift中的资源声明,确保资源处理规则正确,避免触发额外签名检查:

// 示例Package.swift资源配置
targets: [
    .target(
        name: "DesignSystem",
        resources: [
            .process("Resources"), // 自动处理编译资源
            .copy("StaticAssets")  // 直接拷贝无需编译的资源
        ]
    ),
]

避免使用模糊的资源匹配规则(比如.all()),减少Xcode签名时的歧义。

3. 优化流水线的描述文件安装逻辑

不要在流水线中全局安装所有描述文件,仅安装主App所需的分发描述文件:

  • 在Azure DevOps的Install Apple Provisioning Profile任务中,只指定主App的描述文件UUID,不要勾选Install all provisioning profiles选项
  • 这样Xcode会自动为SPM组件匹配对应的团队签名,不会因为多余的描述文件出现冲突提示

4. 临时规避方案:转为本地框架

如果以上配置仍无法解决问题,可以临时将有问题的SPM组件(如Design System)下载到本地,作为本地框架加入项目:

  • 移除项目中对应的SPM依赖,将组件源码拖入项目作为本地target
  • 为本地target设置和主App一致的签名参数,确保签名统一,绕过SPM的签名自动处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:17:06