みずぴー日記

月に行こうという目標があったから、アポロは月に行けた。飛行機を改良した結果、月に行けたわけではない。

🚀bitrise.io for macOS app

macOSアプリのCIとしてbitrise.ioを使いはじめた。

❌ 署名エラー

初期状態でテストを実行すると、アプリケーションに署名するための証明書がbitrise.ioに登録されていないため、エラーとなる。

❌  error: No signing certificate "Mac Development" found: No "Mac Development" signing certificate matching team ID "XXXX" with a private key was found. (in target 'Tests')

✨証明書の設定

デバッグビルドで利用する Mac Developer証明書は、開発用のデバイスで動かすための証明書なので、CI上で利用できない。 そこで、Mac App Store以外でアプリケーションを配布するための Developer ID Application証明書を利用する。 (参考: Managing Your Developer Account Team)

具体的にやったことはhttps://github.com/mzp/EmojiIM/pull/5にまとめてある。

手順1: "Developer ID Application"で署名する。

automatic signingを無効にし、"Developer ID Application"証明書で署名するよう設定する。同じ設定をテスト用のターゲットに対しても行なう。

f:id:mzp:20171009114602p:plain

手順2: 秘密鍵をbitriseにアップロードする。

XcodeのAccountsタブから、"Developer ID Application"証明書をエクスポートする。

f:id:mzp:20171009122128p:plain

パスワードを設定する。

f:id:mzp:20171009114753p:plain

エクスポートされたp12ファイルをワークフローエディタからアップロードする。エクスポート時に指定したパスワードもここで指定する。

f:id:mzp:20171009114835p:plain

手順3: リリースビルドでテストする

リリースビルドに対してテストを行なうようScanfileで設定する。

workspace 'EmojiIM.xcworkspace'
scheme 'EmojiIM'
configuration 'Release'

手順4: Bitriseでfastlaneを使う

fastlane tools integration - Bitrise DevCenterにあるようfastlane stepをworkflowに追加する。

🏷 その他

"code object is not signed at all" errorエラーの回避

2回に1回くらい codesign コマンドが"code object is not signed at all"というエラーで失敗する。 詳細は分からないがStack Overflowにあるように--deepフラグを渡したら解決した。

f:id:mzp:20171009115258p:plain

デバッグ時にautomatic signingを使う

Build settingsの Code signing style から指定すれば、デバッグ時にのみautomatic signingを使える。

f:id:mzp:20171009115239p:plain

💥様子

30回くらい失敗を連続させた。

f:id:mzp:20171009120556p:plain