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

使用Codemagic发布IPA至TestFlight时出现PEM私钥验证错误

解决Codemagic中App Store Connect发布时的PEM私钥无效问题

问题描述

在使用Codemagic发布iOS IPA到App Store Connect时,执行以下命令出现错误:

命令:app-store-connect publish --path /Users/builder/clone/build/ios/ipa/zimexahse.ipa --key-id '$APP_STORE_CONNECT_KEY_IDENTIFIER' --issuer-id '$APP_STORE_CONNECT_ISSUER_ID' --private-key @env:APP_STORE_CONNECT_PUBLISHER_PRIVATE_KEY
错误信息:argument --private-key: 环境变量"APP_STORE_CONNECT_PUBLISHER_PRIVATE_KEY"中的值无效,不是有效的PEM编码私钥。

我的codemagic.yaml配置如下:

workflows:
  ios-workflow-id:
    name: iOS Workflow
    max_build_duration: 120
    instance_type: mac_mini_m1
    environment:
      node: 14.17.6
      npm: latest
      ios_signing:
        distribution_type: development # or: ad_hoc | development | enterprise
        bundle_identifier: ...
      groups:
        - appstore_credentials
      vars:
        APP_ID: ...
        BUNDLE_ID: "..."
        XCODE_WORKSPACE: "....xcworkspace"
        XCODE_SCHEME: "..."
    scripts:
      - name: install node dependencies
        script: |
          yarn install
      #    npm install --legacy-peer-deps
      - name: Set Info.plist values
        script: |
          PLIST=$CM_BUILD_DIR/$XCODE_SCHEME/Info.plist
          PLIST_BUDDY=/usr/libexec/PlistBuddy
          $PLIST_BUDDY -c "Add :ITSAppUsesNonExemptEncryption bool false" $PLIST
      - name: Install CocoaPods dependencies
        script: |
          cd ios && pod install
      - name: Set up provisioning profiles settings on Xcode project
        script: xcode-project use-profiles
      - name: Increment build number
        script: |
          cd $CM_BUILD_DIR/ios
          LATEST_BUILD_NUMBER=$(app-store-connect get-latest-app-store-build-number "$APP_ID")
          agvtool new-version -all $(($LATEST_BUILD_NUMBER + 1))
      - name: Build ipa for distribution
        script: |
          xcode-project build-ipa \
            --workspace "$CM_BUILD_DIR/ios/$XCODE_WORKSPACE" \
            --scheme "$XCODE_SCHEME" \
            --archive-flags="-destination 'generic/platform=iOS'"
    artifacts:
      - build/ios/ipa/*.ipa
      - /tmp/xcodebuild_logs/*.log
      - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.app
      - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.dSYM
    publishing:
      app_store_connect:
        api_key: $APP_STORE_CONNECT_PRIVATE_KEY
        key_id: $APP_STORE_CONNECT_KEY_IDENTIFIER
        issuer_id: $APP_STORE_CONNECT_ISSUER_ID
        submit_to_testflight: true
        beta_groups:
          - ...
        submit_to_app_store: false

已在Codemagic中配置API密钥,但问题依然存在。

排查与解决步骤

1. 检查私钥格式完整性

确保Codemagic环境变量中的私钥包含完整的PEM结构:

  • 必须以-----BEGIN PRIVATE KEY-----开头
  • 必须以-----END PRIVATE KEY-----结尾
  • 中间的密钥内容保留原始换行,不能压缩为单行

复制私钥时若丢失开头/结尾标记或换行符,会直接导致格式无效。

2. 对齐环境变量名称

错误信息中引用的变量是APP_STORE_CONNECT_PUBLISHER_PRIVATE_KEY,但yaml配置里用的是APP_STORE_CONNECT_PRIVATE_KEY,需二选一保持一致:

  • 要么修改Codemagic环境变量名称为APP_STORE_CONNECT_PUBLISHER_PRIVATE_KEY
  • 要么调整发布命令中的变量名,与yaml里的APP_STORE_CONNECT_PRIVATE_KEY匹配

如果使用Codemagic内置的App Store Connect发布模块,确认api_key对应的变量值格式正确、名称完全匹配。

3. 避免额外转义或引号

在Codemagic中配置私钥时,直接粘贴完整PEM内容,不要手动添加引号、转义字符或额外空格,Codemagic会自动处理格式。

4. 验证私钥本身有效性

在本地终端测试私钥是否合法:

  1. 将私钥保存为private_key.pem文件
  2. 执行验证命令:
    openssl rsa -in private_key.pem -check
    

若返回RSA key ok,说明私钥本身有效,问题出在Codemagic的配置传递环节。

5. 检查环境变量组权限

确认工作流引用的appstore_credentials环境变量组中,确实包含目标私钥变量,且该变量对当前工作流有读取权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:15:39