【问题标题】:Trying to Set Certificate and Provisioning Profile in Github Actions For xcodebuild archive尝试在 Github 操作中为 xcodebuild 存档设置证书和配置文件
【发布时间】:2023-02-03 01:09:44
【问题描述】:

我有一个简单的 GH 操作工作流程 yaml,其中包含以下内容:

name: CI

on:
  push:

jobs:
  ci:
    runs-on: macos-latest
    defaults:
      run: 
        shell: bash
        working-directory: working_directory_here

    steps:

      - name: Checkout
        uses: actions/checkout@v3

      - name: Install the Apple certificate and provisioning profile for Xcode
        env:
          BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
          P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
          BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
          KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
        run: |
          # create variables
          CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
          PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
          KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db

          # import certificate and provisioning profile from secrets
          echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH
          echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode --output $PP_PATH

          # create temporary keychain
          security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
          security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
          security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH

          # import certificate to keychain
          security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
          security list-keychain -d user -s $KEYCHAIN_PATH

          # apply provisioning profile
          mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
          cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles

      - name: Install 
        run: pod install

      - name: Build
        run: xcodebuild -workspace something.xcworkspace -sdk iphonesimulator -scheme Development build

     - name: Deploy
        run: |
          xcodebuild clean -workspace something.xcworkspace -scheme Development
          xcodebuild archive -workspace something.xcworkspace -scheme Development -archivePath something.xcarchive -destination generic/platform=iOS

Apple 证书和配置文件取自this article in Githubpod installxcodebuild buildxcodebuild clean 命令即使没有 Apple 证书步骤也能正常工作。

我的xcodebuild archive 步骤失败并出现此错误:

error: No profiles for 'something.something.development' were found: Xcode couldn't find any iOS App Development provisioning profiles matching 'something.something.development'. Automatic signing is disabled and unable to generate a profile.

这里缺少一些基本的东西吗?添加 -allowProvisioningUpdates 没有什么区别——它仍然会失败,但在 Github Actions 输出中根本不会返回任何错误,包括启用调试模式。

【问题讨论】:

    标签: xcode github-actions


    【解决方案1】:

    您可能缺少命令行中的参数,在这里我特别要说 provisioningProfiles 参数。

    为确保您可以正确运行命令,您可以:

    1. 在您的开发机器上打开 Xcode 并禁用自动签名(如果尚未取消选中)
    2. 仍在 Xcode 中,选择您的方案,然后从菜单中运行 Product > Archive。在新窗口中点击Distribute app并完成这些步骤。请确保您在此步骤中选择了有效的配置文件和证书。转到最后并导出(不要转到 AppStore),Xcode 将为您生成一个导出文件夹。您应该会在此文件夹中看到一个名为 ExportOptions.plist 的文件,类似于以下内容:
      <?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>destination</key>
              <string>export</string>
              <key>method</key>
              <string>app-store</string>
              <key>provisioningProfiles</key>
              <dict>
                  <key>your.bundle.id</key>
                  <string>Provisioning Profile name</string>
              </dict>
              <key>signingCertificate</key>
              <string>Apple Distribution</string>
              <key>signingStyle</key>
              <string>manual</string>
              <key>teamID</key>
              <string>123ABC12</string>
          </dict>
      </plist>
      
    3. 打开导出的文件夹并查找名为ExportOptions.plist 的文件。该文件基本上包含您应该传递给 CI 命令行以模拟 Xcode 在本地执行的操作的参数
    4. 将此文件编码为 base64 并将其存储为 Github Actions 秘密,例如IOS_EXPORT_OPTIONS_PLIST
    5. 在你的 Github Action 步骤中解析文件并从 base64 解码它,将它存储在某个地方,比如 $EXPORT_OPTIONS_PATH
    6. 使用此添加选项运行命令行:xcodebuild archive -yourparams -exportOptionsPlist $EXPORT_OPTIONS_PATH

      注意:您可以运行xcodebuild -h 来查看可以添加到 ExportOptions.plist 文件的所有可用选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 2020-03-15
      • 2013-10-04
      • 1970-01-01
      • 2021-04-09
      • 2013-05-23
      • 1970-01-01
      相关资源
      最近更新 更多