shuhelohelo’s blog

Xamarin.Forms多めです.

App Centerを使って自動ビルド

まずはCI/CDとまではいかずに,特定のブランチにpushしたときにビルドが自動で実行されるところまでやってみる.

初めてのApp Center

はじめてなので,アプリの追加から順にやっていく.以下を参考にした.

www.c-sharpcorner.com

ログインしよう

Visual Studio App Centerへ移動.

とりあえず,「Start Free」する.

f:id:shuhelohelo:20200703113609p:plain

好みのアカウントでサインアップする.

アプリを登録しよう

ログインしたら「Add new app」というボタンがあるので押す.

f:id:shuhelohelo:20200703113858p:plain

次のアプリ新規追加画面ではアプリ名やアイコン,リリースタイプ,OS,プラットフォームなどを入力する.

f:id:shuhelohelo:20200703132320p:plain

どうやらAndroidiOSなどプラットフォームごとに登録するようだ.

ソースコードリポジトリを登録する

アプリを登録(といっても,アプリ用の場所を用意した程度)したら,今度はそこにソースコードリポジトリを登録します.

左側のメニューからBuildを選択すると,以下のようにリポジトリサービスが表示されるので,自分が使っているサービスを選択します.

f:id:shuhelohelo:20200703125948p:plain

自分はGitHubを使っているので,GitHubを選択します.

以下のように認可が求められるので,許可します.

f:id:shuhelohelo:20200703130259p:plain

問題がなければ以下のように,先程選択したリポジトリサービス内のリポジトリがズラッと表示されます.

f:id:shuhelohelo:20200703130519p:plain

今回App Centerを使いたいアプリはXFMyDecode2020というde:code2020のセッション検索,閲覧をサポートする手製の「Xamarin.Forms」アプリです.

ブランチを選択

検索して選択します. f:id:shuhelohelo:20200703130721p:plain

続いてブランチの選択です.masterでいいのでしょうか.

f:id:shuhelohelo:20200703131307p:plain

ビルドの設定を行う

「ビルドについて設定されていない」というようなページが表示されるので,「Configure build」ボタンを押します.

f:id:shuhelohelo:20200703131600p:plain

設定画面が開きます.

f:id:shuhelohelo:20200703134030p:plain

Project

AndroidアプリなのでXFMyDecode2020.Android.csprojが選択されています.

Configuration

ビルド設定を選択します.このApp Centerでビルドするときにどの設定を使うのかを選択します.

ここではReleaseを選択しました.

f:id:shuhelohelo:20200703135855p:plain

SDK version

特に理由がなければLatest Stableのものを選択すればよいのかな.

f:id:shuhelohelo:20200703140044p:plain

Build scripts

これは後で.

Build frequency

「Pushされるたびにこのブランチをビルドする」を選択しました.

f:id:shuhelohelo:20200703140141p:plain

今回はmasterブランチを指定していますが,masterブランチにpush(mergeもpushということになるのかな)されるたびにビルドが行われるということかな,と思います.

Build Android App Bundle

Android App Bundleとは何なのか.

developer.android.com

オンにしておくか.

Automatically increment version code

f:id:shuhelohelo:20200703141050p:plain

オンにして「Build ID」を選んでおいてみよう.

Environment variales

よくわからない...

ここには例えばDBの接続文字列や他のWebサービスAPIキーなどのシークレット情報をキーバリューペアで登録しておき,ビルドスクリプトを使ってビルド前にソースコードにそれらを差し込むために使ったりする.ビルドスクリプトについてはこちら.

docs.microsoft.com

今回は「Off」で.

Sign builds

「デバイス上で実行するためにはサインが必要」って,必須ってことなんじゃないの?

f:id:shuhelohelo:20200703142813p:plain

で,keystoreファイルが必要とのことなのだけれど,どうやって入手するかはこちらを参考にする.

docs.microsoft.com

debug用とrelease用があって,それぞれ場所が異なるようだ.

今回はリリース用を使うことにする.

APKファイル生成の際にkeystore(署名キー)を作成するステップがあって,そこで作成できる.

shuhelohelo.hatenablog.com

一度作成したら,それを他のアプリの開発においても使うことができる.

Upload keystore fileを押して,上の記事で作成した.keystoreファイルをアップロードする.

場所はC:\Users\hoge\AppData\Local\Xamarin\Mono for Android\Keystore\harusoft\harusoft.keystore

Keystore password,Key alias Key passwordと3つの入力欄があるので,keystoreファイル生成時に設定したパスワードとaliasを入力する

f:id:shuhelohelo:20200704003050p:plain

Distribute builds

GroupStoreの2つの選択肢があるが,Groupを選択すると,ビルド成功時に指定したグループにアプリが配信されるとのこと.(参考)

なのでそうした.

f:id:shuhelohelo:20200704002523p:plain

Collaboratorには誰が入っているんだろう. 少なくとも,このApp Centerのオーナーである自分が入っている.

Save & Build

ここまでで設定は終わりということで,Save & Buildボタンを押す.

すると,こんな感じでビルドが始まる.

f:id:shuhelohelo:20200704003237p:plain

Runningという項目で時間が計測されているので,これが課金対象としてのビルド時間というやつなんだろう.

ビルドが完了した.3分11秒消費した.

f:id:shuhelohelo:20200704003535p:plain

ビルドが完了すると,指定したグループに属するメンバーにメールが届く.

f:id:shuhelohelo:20200704004334p:plain

メールの中身はこんな感じ.

f:id:shuhelohelo:20200704004424p:plain

このInstallボタンを押すと,App Centerへのログインを求められる.

f:id:shuhelohelo:20200704004526p:plain

ログインすると,アプリケーションのダウンロード画面が表示される.

f:id:shuhelohelo:20200704004651p:plain

Downloadボタンを押す.

ダウンロードが始まり,以下のようなメッセージが表示されるので,Okを押す.

f:id:shuhelohelo:20200704004749p:plain

ダウンロードが完了したら,通知をタップする.

インストールするか確認されるので,Installを押す.

もちろん警告がでるが,INSTALL ANYWAYを押す.

f:id:shuhelohelo:20200704005013p:plain

インストールが完了すると更に「スキャンしてあげるけど送る?」と確認されるので,DON'T SENDを押す.

f:id:shuhelohelo:20200704005212p:plain

これでインストール完了!...ってあれ?何も表示されない

f:id:shuhelohelo:20200704005345p:plain

この記事で加えた変更をpushしていなかった.

これをPushしてみる.

f:id:shuhelohelo:20200704010240p:plain

App Centerの方で「Pushすると自動的にビルドが走ってグループのメンバーにメールが送られる」はずだから,これも試すことができてちょうど良いな.

Push!

App Centerの方を見てみると,ビルドが始まっている!

f:id:shuhelohelo:20200704010625p:plain

改めてアプリを実行してみると,やっぱり画面は真っ白.

これはSyncfusionのUIパーツを使っていて,リリースビルドの場合はライセンスキーをコード内で指定する必要があるためです. デバッグビルドではアプリ起動時にダイアログボックスが出るだけで使えますが,リリースビルドではもちろん使えません.

shuhelohelo.hatenablog.com

ということで,次回はこのライセンスキーをApp Center側でビルド時にコード内に差し込むようにしたいと思います.

こうすることで,ライセンスキーという公開してはいけない情報をソースコード内に記述することなくリリースするときだけ利用できます.

機密情報をGitHubへプッシュ!といったリスクをなくすことができます.

20200715追記

とても参考になった.

omanuke-ekunamo.hatenablog.com

コマンドラインからキーストアを作成できる.以下のコマンドではファイルはカレントディレクトリに作成される.

> keytool -genkey -v -keystore harusoft_sample.keystore -alias publishingdoc -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  haru
What is the name of your organizational unit?
  [Unknown]:  harusoft
What is the name of your organization?
  [Unknown]:  harusoft
What is the name of your City or Locality?
  [Unknown]:  Saitama
What is the name of your State or Province?
  [Unknown]:  Saitama
What is the two-letter country code for this unit?
  [Unknown]:  JP
Is CN=haru, OU=harusoft, O=harusoft, L=Saitama, ST=Saitama, C=JP correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,000 days
        for: CN=haru, OU=harusoft, O=harusoft, L=Saitama, ST=Saitama, C=JP
Enter key password for <publishingdoc>
        (RETURN if same as keystore password):
[Storing harusoft_sample.keystore]

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore harusoft_sample.keystore -destkeystore harusoft_sample.keystore -deststoretype pkcs12".

この中でパスワードはkeystore passwordとkey passwordの2つを決める.key passwordの方は何も入力せずにEnterを押した場合はkeystore passwordと同じ値が設定される.

App CenterのSign Buildでこの2つのパスワードとalias名が必要なので記録しておくこと.