尝试在 Github Actions 中为 xcodebuild 存档设置证书和配置文件

nra*_*ray 5 xcode github-actions

我有一个简单的 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

Run Code Online (Sandbox Code Playgroud)

Apple 证书和配置文件取自Github 中的这篇文章。、pod 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.
Run Code Online (Sandbox Code Playgroud)

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

Pom*_*m12 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>
    
    Run Code Online (Sandbox Code Playgroud)
  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 文件中的所有可用选项。