Bitrise で macOS アプリを Develop ID で署名して公証サーバーに送って Bitrise.io にデプロイします。
Developer IDで署名する
証明書のアップロード
Xcode の Preferences -> Accounts -> Manage Certificates... から該当の Developer ID Application Certificates を右クリックして Export します。
Export 時にパスワードを設定する必要があるので、パスワードを覚えておきます。
できた .p12 ファイルを Bitrise の Workflow Editor -> Code Signing -> CODE SIGNING CERTIFICATES にアップロードします。
アップロードできたら、先ほど Export するときに設定したパスワードを PASSWORD に入力します。すると証明書が有効になります。
Xcode Archive for Mac の設定
Xcode Archive for Mac (xcode-archive-mac) でできそうなんですが、Developer ID で署名しようとすると以下のようなエラーになる場合があります。
Failed to find code signing groups for specified export method (developer-id) Groups: ... Failed to find code sign groups for the project, error: Can not create macos codesiging groups for the project
以下のようにカスタムオプションを指定すると通るようです。
Custom export options plist content に以下の plist を指定します。 {TeamID}
にはチームIDを入れてください。
<?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>developer-id</string> <key>signingCertificate</key> <string>Developer ID Application</string> <key>signingStyle</key> <string>manual</string> <key>teamID</key> <string>{TeamID}</string> </dict> </plist>
その他の設定はデフォルトで大丈夫そうです。
公証サーバーへ送信する
Provider Short Name の取得
Apple ID に複数の Team が紐づいている場合は、Team の provider short name を指定する必要があります。 Team の名前や Team ID ではなく short name
が必要なのですが、これが Apple Developer のサイト等を探してもどこにも記載されていません。
↓のコマンドで確認するしかなさそうです。
xcrun iTMSTransporter -m provider -u "{APPLE_ID}" -p "{APPLE_ID_PASSWORD}"
これを実行すると、Apple ID に紐づいている Team 名と Short Name のリストが表示されます。
Script ステップの追加
Xcode Archive for Mac ステップの後に Apple の公証サーバーへ送信する Script ステップを追加します。
#!/usr/bin/env bash # fail if any commands fails set -e # debug log set -x result=`xcrun altool --notarize-app -t osx --primary-bundle-id ${BUNDLE_ID} --asc-provider ${PROVIDER_SHORT_NAME} --username ${APPLE_ID} --password ${APPLE_ID_PASSWORD} --file ${BITRISE_EXPORTED_FILE_PATH}` echo $result uuid=`echo $result | grep RequestUUID | sed -e 's/^RequestUUID = \([0-9A-F-]*\)/\1/'` envman add --key NOTARIZE_REQUEST_UUID --value $uuid
全体の Workflow は以下のようになります。