Bitrise で iOS / Android を動かすまでのメモ&TIPS

Bitriseは便利で楽チンの意味

提供している機能にすべて乗っかればたしかに楽ちん。
その分すこし値段が高めな印象。CircleCIやTravisCIと並列数のコスト面で劣る部分だと思います。本格的にバリバリ使うなら、今ならCircleCIが正解な気がする。
特定のCI依存は避けたい。そのためには、ワークフローは独自のスクリプトなどで用意しておきたいところ
この業界、デファクトスタンダードがどんどん変わるので

Bitrise
https://www.bitrise.io

Bitrise CLI

https://app.bitrise.io/cli
Bitrise CLIは単体で動作する。
BitriseはBitrise CLIを実行できる環境を提供している。
ワークフローの一部としてfastlaneを使うことも可能(面白い)
Travis + Bitrise CLI 構成もできる。

$ brew install bitrise
$ bitrise init

Slack Command

Slack (OUTGOING WEBHOOK) —> Bitrise (INCOMING WEBHOOK)

BitriseでIncoming Webhook用URLをコピーしたものをSlackのOutgoing Webhookで利用すれば、すぐ利用可能。

Manual
https://github.com/bitrise-io/bitrise-webhooks#slack—setup–usage

Remote Access

何らかの理由で失敗したときに、リモートアクセスを有効にして再実行が行える。
リモートアクセス機能自体は ngrok というサービスを利用している。
https://ngrok.com
AndroidならSSHで、iOSならVNCによるリモートアクセスもできる。
リモートでMacのGUIが表示されるのは面白い。
ワークフローが期待通り動かない時のデバッグに使えます。

Android

生成したapkをfabric betaとAmazon S3 にアップロードするところまでのメモ。

配布用のkeystoreは予め、Workflow Editor の Code Signing にアップロードしておきます。
$BITRISEIO_ANDROID_KEYSTORE_URL が用意されるので、File Downloaderをワークフローに追加してbuild.gradleで読み込んでいるPathに配置

debug.keystoreはリポジトリに登録しておくと楽です。
パスワードは android

$ keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000 -dname "CN=Android Debug,O=Android,C=US"

Android SDK License は設定不要。
/opt/android-sdk-linux/licenses にすでにある

すでに独自のスクリプトがいくつか用意されているなら、それを使ったほうが良い。

ビルドしたアプリの採番には、Bitriseのビルド番号を利用することができる。
ビルドバージョンのオフセット方法

謎な部分

fabric betaへapkをアップロードするときに、apkが無いとエラーが出た。
もともと設定していたapkの出力先(/bitrise/src/app/build/outputs/apk/dev/release/app-dev-release.apk)には無く、Bitriseが用意したディレクトリ(/bitrise/deploy)に移動していることが判明。
ビルドとfabric betaへのアップロードを同一のフローで行わず、間に元の出力先に戻すmove処理をいれたら解決した。(ワークアラウンド)

iOS

基本的なビルド知識

$ xcodebuild -workspace xxx.xcworkspace -scheme dev -configuration AdHoc-Dev

Code Signing

Bitriseの仕組みに乗っかりました。
以下のコマンドで、対話形式で必要な証明書類をBitriseにアップロードしてくれます。
ビルド処理が入るため、まぁまぁ時間かかります。
途中アップロードするためにトークンが必要になります。
以下のURLで1時間限定トークンを発行して使いましょう。
ttps://app.bitrise.io/me/profile#/security

$ bash -l -c "$(curl -sfL https://raw.githubusercontent.com/bitrise-tools/codesigndoc/master/_scripts/install_wrap.sh)"

Encrypt

セキュアな情報は暗号化しましょう。
pwgenはパスワードを生成します。gpgは暗号化します。
暗号化したファイルをリポジトリにコミット、BitriseのWorkflow Editor からSecretsタブで生成したパスワードを登録。
Decrypt fileワークフローを使って、復号化しましょう。

$ brew install pwgen 
$ pwgen -s 22 1

$ brew install gpg
$ gpg -c xxxx.json

Libraries

nodeやnpmなど一部のソフトウェアはすでにインストールされています。
anyenvなどを使って動作保証されたバージョンを使うようにすると良いです。
その際.node-versionなどのファイルを.gitignoreで除外しないように注意。

env

複数のCIを使っている場合、CIサービス固有の環境変数は、サービスに依存しない抽象的な名前にしておくと後々引っ越しの時や併用の時に楽です。

$ envman add --key GIT_BRANCH --value "${BITRISE_GIT_BRANCH}"

xcodebuildのoptionからbuild phase scriptに独自引数を渡せるのか
渡せる。以下で確認可

$ xcodebuild GIT_BRANCH=$USER -showBuildSettings

for Simulator

AppiumでE2EテストをSimulatorに対して行う場合、Simulator用のアプリを用意する必要があります。実機であれば
でXcode Archive & Export for iOSを使いますが、Simulatorの場合はXcode build for simulatorを使います。
その後のワークフローでtar gz圧縮を行いAmazon S3にアップロードすると良いでしょう。(シェル後述)
https://discuss.bitrise.io/t/build-ios-app-for-simulator-and-deploy-to-appetize-io/5622

以下のシェルで、ビルドされたアプリをいい感じに圧縮してくれます。
tarってフォルダ構成も保持されるので、cdコマンドで調整してたりします。

#!/usr/bin/env bash
set -ex

cd $BITRISE_APP_DIR_PATH
cd ..
BUILD_DIR=`pwd`
tar czvf simulator.tar.gz brooklyn.app

envman add --key ZIPPED_APP_FILE --value "$BUILD_DIR/simulator.tar.gz"

Amazon S3へアップロード

バケットと読み書きできるアクセスキーとシークレットキーを用意し、
アプリのビルド番号と組み合わせたファイル名で、アップロードされるように設定。
ディレクトリを事前に作るといったことは不要(ObjectIDという概念)

アップロードしたファイルをダウンロードするのは以下のような感じ

require 'bundler'
Bundler.require
Aws.config.update({
                      region: 'ap-northeast-1',
                      credentials: Aws::Credentials.new('AAAAAA', 'BBBBBB')
                  })
s3 = Aws::S3::Resource.new(region: 'ap-northeast-1')
obj = s3.bucket('バケット名').object('android/123/develop.apk')
obj.download_file("android.apk")

Bitrise利用を通して

全ての機能を使いこなせたわけでは無いのとUIへの慣れは必要ですが、一通り動かせるようにする間にだいぶ慣れます。
bitrise.ymlがBitriseCIでも利用されるととても良いので今後に期待します。

ロードマップを公開するのってすごく良いですよね。
https://blog.bitrise.io/bitrise-in-2019-a-roadmap-preview

余談

CircleCI の Performance Pricing Plan なんてものを発見。
従量課金で並列数無制限らしい。
https://www.patreon.com/posts/circlecinoxin-ti-23842006

署名の付け替え、これはやっていきたい
https://qiita.com/beakmark/items/33c0b73603e491f08a33

Fabric betaはFirebase App Distributionとして生まれ変わるらしい。
はよ。

最後に

Bitrise Tシャツ欲しいので、まだの方は、ぜひここから登録してくださいね
https://app.bitrise.io/referral/f9dec5c40d5048ee