CatHand Blog

アプリ開発やMac弄り

BitriseでmacOSアプリをビルドする (Developer ID編)

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 は以下のようになります。

f:id:cathandnya:20200512192034p:plain
Workflow