『入る学科間違えた高専生』の日記

プログラミングのコードを書いたりする予定です。あとは日記等。あといつまで高専生やねん

CIサービスBitriseを使ったAdHoc配信のサンプル

はじめに

タイトルが最近、ちゃんと決められません、心の病気が侵攻しているようです。
BitriseというモバイルアプリのCIサービス。ご存じの方も多いかと思います。

www.bitrise.io

Qiitaとかにもたくさん記事が上がっていたりしますね。今更なんだよ?って感じですが、自分が公開してるアプリの設定とかをちょっと見せつつBitriseを使ったAdHoc配信するところまでのサンプルの手順書?みたいなのを作っていければと思います。
書こうと思った理由は、ヘイシャでもCIサービスを選定するときにシャッチョさんと結構話しました。そうしてる時にたまたまBitriseというサービスを見つけました。
しかし、Bitriseの設定自体はいつも私がやっていたので、設定できる人がいません。。(この間インターン生(今年度新卒入社)にやってもらいましたが結局最終的に私が片付けてしまいました。)
こういうものって結構機能がコロコロ変わったり(増えたり)するので、このブログ記事もいつ古い情報になるかわからないです。適宜対応してもらえればいいかなとかなんとか、

長くなるものあれなので、そろそろ内容に入ります。

環境

  • iOSアプリ
  • Xcode 9.2
  • Swift 4.0.3
  • macOS High Sierra (ゲストユーザの権限をさらなる高みへ!!)
  • GitHub Private repository
  • Bitrise (Free plan)
  • DeployGate

やっていき

リポジトリの登録

Bitriseでユーザ登録もしくはログインできたら、dashboard+ Add new app なるボタンがあると思うのでそれで追加ですね。
アカウント選択とリポジトリ選択は、省略します。

Private repositoryにはもちろんアクセス権がいるのでSSH Keyの受けた渡しが必要になります。基本的には、 No, auto-add SSH key を押してしまって大丈夫かと。
リポジトリSettings -> Deploy keys にBitriseが生成した公開鍵が追加されます。メールでも来るかと思います。

f:id:nanashinodonbee:20180426000719p:plain

そうすると勝手に、リポジトリがどのスタイル(iOSなのかAndroidなのかXamarinなのかとか)を確認してくれます。
しばらく待つと検知した結果が表示されるかと思います。もしここで適切な物が選ばれていないなどがあれば、マニュアルで変更可能です。

f:id:nanashinodonbee:20180426001222p:plain

新規でCocoaPodsなどを使っていない場合、こんな感じに検知されました。もし Scheme name が検知されないなどのエラーがでた場合は、Xcode側でSchemeのSharedにチェックを入れてもう一度同じ動作をしてください

f:id:nanashinodonbee:20180426001422p:plain

Select ipa export method は今回はAdHocにしました。

WebHookはやっておくに越したことはないのでやっておきます。次に大きな緑色のKick offなんてらっていうボタンがあるのでこれを押すと自動的に初回ビルドが始まります。

多分、失敗しますが別にいいです。

私の場合は、CocoaPodsのインストールでコケました。まぁ当たり前ですね。

ビルドの設定

Open Workflow Editor が下の方にあるのでここからが本番です

画面が変わったら、タブの下に WORKFLOW なるメニューがあるので deploy にしました。いつも私は primary は削除します。

f:id:nanashinodonbee:20180426002306p:plain

今回はまだCocoaPods使っていないですし、XCTestもやってないのでここは消しておきます。それぞれ選択して右ペインの下の方で消せます。
もしCocoaPodsのバージョンを固定するためにGemfileを作ってる場合は、 Do anything with Script のように新しくでもそこでもいいのでインストールさせてあげれば大丈夫です。

$ gem install bundler
$ bundle install --path vendor/bundle
$ bundle exec pod repo update
$ bundle exec pod install

こんな感じ。

Certificate and profile installerXcode Archive & Export for iOS は常に最新版にするべきという表記がBitriseのリファレンスにあった気がするので古いようであれば最新版に上げておくといいかもです。
Xcode Archive & Export for iOSSelect method for export は今回はAdHocなので基本的には変える必要はないですが、もし目的のメソッドで書き出せないかもしれないっていうのがあるので変えておくといいかもです。

今回は、AdHoc配信に DeployGate を使用します。
Xcode Archive & Export for iOS の下にある + ボタンを押して Script を追加して、以下のようにするとDeployGateのAPIを叩けます。

#!/bin/bash

$ curl \
    -F "token=<API_TOKEN>" \
    -F "file=@/Users/vagrant/deploy/<SCHEME_NAME>.ipa" \
    -F "message=$GIT_CLONE_COMMIT_MESSAGE_BODY" \
    https://deploygate.com/api/users/<USERNAME>/apps

API_TOKEN はDeployGateの ユーザ設定 のページの1番下にあるものです。
SCHEME_NAMEXcodeでsharedにチェックしたschemeの名前が入ります。
USERNAME は言わずもがな、DeployGateのユーザ名

ということで、私のWorkflowsの基本形ができました。

f:id:nanashinodonbee:20180426003554p:plain

証明書のアップロード

このままだと、ビルドしてもアーカイブエクスポートしてくれませんので、アップロードが必要です。

f:id:nanashinodonbee:20180426003745p:plain

Code Signing からやっていきます。

Bitriseさんはとっても優しいので、自動化コードを用意してくれています。
いくつかの質問に答えるだけで証明書とProvisioning Profileを書き出してくれます。私たちはそれをアップロードするだけで完了です。

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

これを実行します。

Hoge.xcodeprojHoge.xcworkspace 等をドラッグアンドドロップした方がいいところなので open /path/to/project しておくことをオススメ!

f:id:nanashinodonbee:20180426004158p:plain

ここで、対象のものをドラッグアンドドロップでPATHを入力されますね。

次は、先ほどにもあった書き出しメソッドの選択です。今回は、AdHocなので3番を選びました。

f:id:nanashinodonbee:20180426004329p:plain

一度もAdHocでのアーカイブ経験がなかったので、一度Xcode側でアーカイブしてエクスポートまでやり直しました。ごめんなさい。

ちゃんといけると以下みたいな感じです。

f:id:nanashinodonbee:20180426004706p:plain

Do you want to collect another ipa export code sign files と聞かれるので今回は他のメソッド使わないので NO と答えましょう。

f:id:nanashinodonbee:20180426004809p:plain

まぁこんな感じで聞かれるのでパスワード入力しましょう。

次に、アップロードするか?と聞かれるのでやってみましょう。

https://www.bitrise.io/me/profile#/security

ログインした状態でこのページにアクセスして、 Generate new して取得しましょう

生成された、AccessTokenを貼り付けて続ける。そしたらBitriseのアプリ一覧が表示されるので今回追加されたものの番号を選びます。
上手く行けば特にエラー無しでいけるはずです。失敗した場合は、多分自動的Finderが開いているのでそれをBitrise側の Code SigningProvisioning Profile 及び Code signing Identity をアップロードしましょう!

はい!終わり!簡単

ビルドしよう

Workflow Editor の右上のバツボタンを押して、 Start/Schedule a Build を押して、開始しましょう!!

f:id:nanashinodonbee:20180426010128p:plain

やったね!!

ちょっと応用

Bitriseはvagrantでビルド用のマシンを作ってて結局はmacOSなので、もちろんいろんなことができますね。もちろん環境変数を設定できる!!やったね

環境変数

Workflow EditorSecrets で好きな用にAPIキー等の隠したい情報を入れることもできます。

f:id:nanashinodonbee:20180426010535p:plain

隠したいファイル

例えば、私はFirebaseを使う時に GoogleService-Info.plist をGit管理せずにDLするようにしたりします。
Code Signing の下の方に追加できます。

f:id:nanashinodonbee:20180426010911p:plain

DL自体はこんな風で設定してます。実際の GoogleSerivce-Info.plist のある場所になるようにDLしました。

f:id:nanashinodonbee:20180426011048p:plain

トリガーの設定

これはまぁ当たり前ですが、やっておくべきかな。と。
あるブランチにPushされた時にビルドを配信するなど。
ココらへんは基本中の基本だと思うのでパスします。

最後に

ということで、Bitriseの簡単な設定方法を書き出しました。
Free Planだと600秒(10分)の制限があるのであんまりめちゃくちゃデカイプロジェクトをビルドすることはできませんが、Carthageにするとか色んな方法でビルド時間を短縮する手立てをしておきましょう!!

developers.cyberagent.co.jp

ちょっと疲れたのでおやすみなさい!!