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

Codemagic构建iOS项目时配置文件匹配失败与exportOptionsPlist解码异常的解决方案咨询

解决Codemagic iOS Ad-Hoc构建的代码签名与exportOptionsPlist错误

你碰到的是两个关联的问题:一是手动签名模式下必填的签名信息缺失,二是exportOptionsPlist里的provisioningProfiles格式不符合Xcode要求(数组类型被当成字典解析)。下面是针对codemagic.yaml配置的具体修复步骤:


1. 先确认Codemagic的签名资产配置正确

首先得确保你的签名证书和Ad-Hoc配置文件已经正确上传到Codemagic并关联到项目:

  • 进入Codemagic项目的Code Signing面板,检查有没有上传iPhone Distribution类型的分发证书,以及对应的Ad-Hoc配置文件(配置文件的Bundle ID必须和你项目的完全匹配,包括大小写)
  • 确认配置文件的状态是"Active",没有过期

2. 修正codemagic.yaml中的构建与导出配置

核心是要让provisioningProfiles变成字典类型(键为Bundle ID,值为配置文件名称/UUID),同时补全手动签名所需的所有必填项。

示例配置(直接在命令中传递导出选项,避免plist格式错误)

这是最不容易出错的方式,不需要手动维护exportOptions.plist:

workflows:
  ios-ad-hoc-build:
    name: iOS Ad-Hoc Build
    environment:
      vars:
        # 替换成你自己的信息
        BUNDLE_ID: "com.yourcompany.yourapp"
        TEAM_ID: "ABC123XYZ"
        PROVISIONING_PROFILE_NAME: "My App Ad-Hoc Profile"
        SIGNING_CERT_NAME: "iPhone Distribution: Your Company (ABC123XYZ)"
    scripts:
      - name: Clean & Archive
        script: |
          xcodebuild clean archive \
            -workspace YourApp.xcworkspace \ # 如果你用的是project,换成-project YourApp.xcodeproj
            -scheme YourAppScheme \
            -archivePath build/YourApp.xcarchive \
            -destination 'generic/platform=iOS' \
            CODE_SIGN_STYLE=Manual \
            PROVISIONING_PROFILE="${PROVISIONING_PROFILE_NAME}" \
            CODE_SIGN_IDENTITY="${SIGNING_CERT_NAME}" \
            DEVELOPMENT_TEAM="${TEAM_ID}" \
            -quiet
      - name: Export IPA
        script: |
          xcodebuild -exportArchive \
            -archivePath build/YourApp.xcarchive \
            -exportPath build/export \
            -exportFormat ipa \
            -exportProvisioningProfile "${PROVISIONING_PROFILE_NAME}" \
            -exportSigningIdentity "${SIGNING_CERT_NAME}"
    artifacts:
      - build/export/*.ipa

如果一定要用exportOptionsPlist

确保plist里的provisioningProfiles是字典而不是数组,同时补全所有手动签名字段:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>ad-hoc</string>
    <key>provisioningProfiles</key>
    <dict>
        <key>com.yourcompany.yourapp</key>
        <string>My App Ad-Hoc Profile</string>
    </dict>
    <key>signingCertificate</key>
    <string>iPhone Distribution: Your Company (ABC123XYZ)</string>
    <key>signingStyle</key>
    <string>manual</string>
    <key>teamID</key>
    <string>ABC123XYZ</string>
</dict>
</plist>

然后在codemagic.yaml的导出脚本里引用这个plist即可。


3. 额外检查事项

  • 所有环境变量里的名称(配置文件、证书)必须和Codemagic上传的资产名称完全一致,大小写敏感
  • 如果你用的是通配符Bundle ID,确保配置文件的Bundle ID也是对应的通配符格式
  • 尝试清理Codemagic的构建缓存,避免旧的配置文件残留导致冲突

按上面的步骤调整后,应该就能解决"未找到匹配的代码签名配置文件"和provisioningProfiles格式错误的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:33:12