背景
我正在构建一个Github Actions作业,用于构建、签名和公证一个PKG文件。
我使用了一个Apple Id账户(工作流需要用户名和密码),以及一个带私钥的开发者ID安装器证书(加密)。这两个都保存为secrets(base64),并将在工作流中转换为.p12文件,然后添加到钥匙串中。
这个作业是私有存储库中更大工作流的一部分,该工作流首先从软件中生成文件(使用Pyinstaller),然后在AWS S3 Bucket上导出PKG。
实施
jobs:
[...]
pkg:
needs: [...]
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Download macos bin file
uses: actions/download-artifact@v2
with:
name: macos-bin-files
path: dist/
- name:
run: |
----- Create certificate files from secrets base64 -----
echo ${{ secrets.DEVELOPER_ID_INSTALLER_CER }} | base64 --decode > certificate_installer.cer
echo ${{ secrets.DEVELOPER_ID_INSTALLER_KEY }} | base64 --decode > certificate_installer.key
----- Create p12 file -----
openssl pkcs12 -export -name zup -in certificate_installer.cer -inkey certificate_installer.key -passin pass:${{ secrets.KEY_PASSWORD }} -out certificate_installer.p12 -passout pass:${{ secrets.P12_PASSWORD }}
----- Configure Keychain -----
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
security create-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" $KEYCHAIN_PATH
----- Import certificates on Keychain -----
security import certificate_installer.p12 -P "${{ secrets.P12_PASSWORD }}" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
----- Generate PKG from files -----
use a macos installer script (ref: https://github.com/KosalaHerath/macos-installer-builder/tree/master/macOS-x64)
----- Sign PKG file -----
productsign --sign "${{ secrets.DEVELOPER_ID_INSTALLER_NAME }}" $INPUT_FILE_PATH $OUTPUT_FILE_PATH
- name: "Notarize Release Build PKG"
uses: devbotsxyz/xcode-notarize@v1
with:
product-path: $PATH_TO_PKG
appstore-connect-username: ${{ secrets.APPLE_ACCOUNT_USERNAME }}
appstore-connect-password: ${{ secrets.APPLE_ACCOUNT_PASSWORD }}
primary-bundle-id: 'BUNDLE_ID'
- name: "Staple Release Build"
uses: devbotsxyz/xcode-staple@v1
with:
product-path: $PATH_TO_PKG
[...]
问题
我按照Github Action官方文档中的在macOS runner上安装苹果证书的步骤操作,部分功能按预期工作。我可以将证书添加到钥匙串并使用productsign
命令对PKG文件进行签名。
但是,当我向Apple发送要求对PKG文件进行公证时,返回以下错误:
Error: Notarization status <invalid> - Package Invalid
Error: Notarization failed
我所尝试的
当分发时,PKG可以按预期工作(只需以管理员身份打开,因为它没有经过签名),因此问题似乎与包实现无关。
我尝试使用命令行执行标记操作,并跟随来自不同来源的链接:
但是,即使使用这些命令行(而不使用标记操作),我也无法将PKG文件进行标记。
问题
我的工作流程有什么问题,在尝试标记包之前,我是否漏掉了什么?
附注:我找不到任何在Github Actions macOS runner上执行此操作的参考...
devbotsxyz/xcode-notarize
动作已被移除。现在的替代方案似乎是 https://github.com/lando/notarize-action。 - Anton Kochkov