App Centerを使って自動ビルド
まずはCI/CDとまではいかずに,特定のブランチにpushしたときにビルドが自動で実行されるところまでやってみる.
初めてのApp Center
はじめてなので,アプリの追加から順にやっていく.以下を参考にした.
ログインしよう
とりあえず,「Start Free」する.
好みのアカウントでサインアップする.
アプリを登録しよう
ログインしたら「Add new app」というボタンがあるので押す.
次のアプリ新規追加画面ではアプリ名やアイコン,リリースタイプ,OS,プラットフォームなどを入力する.
どうやらAndroidやiOSなどプラットフォームごとに登録するようだ.
ソースコードのリポジトリを登録する
アプリを登録(といっても,アプリ用の場所を用意した程度)したら,今度はそこにソースコードのリポジトリを登録します.
左側のメニューからBuild
を選択すると,以下のようにリポジトリサービスが表示されるので,自分が使っているサービスを選択します.
自分はGitHubを使っているので,GitHubを選択します.
以下のように認可が求められるので,許可します.
問題がなければ以下のように,先程選択したリポジトリサービス内のリポジトリがズラッと表示されます.
今回App Centerを使いたいアプリはXFMyDecode2020
というde:code2020のセッション検索,閲覧をサポートする手製の「Xamarin.Forms」アプリです.
ブランチを選択
検索して選択します.
続いてブランチの選択です.master
でいいのでしょうか.
ビルドの設定を行う
「ビルドについて設定されていない」というようなページが表示されるので,「Configure build」ボタンを押します.
設定画面が開きます.
Project
AndroidアプリなのでXFMyDecode2020.Android.csproj
が選択されています.
Configuration
ビルド設定を選択します.このApp Centerでビルドするときにどの設定を使うのかを選択します.
ここではReleaseを選択しました.
SDK version
特に理由がなければLatest Stableのものを選択すればよいのかな.
Build scripts
これは後で.
Build frequency
「Pushされるたびにこのブランチをビルドする」を選択しました.
今回はmasterブランチを指定していますが,masterブランチにpush(mergeもpushということになるのかな)されるたびにビルドが行われるということかな,と思います.
Build Android App Bundle
Android App Bundleとは何なのか.
オンにしておくか.
Automatically increment version code
オンにして「Build ID」を選んでおいてみよう.
Environment variales
よくわからない...
ここには例えばDBの接続文字列や他のWebサービスのAPIキーなどのシークレット情報をキーバリューペアで登録しておき,ビルドスクリプトを使ってビルド前にソースコードにそれらを差し込むために使ったりする.ビルドスクリプトについてはこちら.
今回は「Off」で.
Sign builds
「デバイス上で実行するためにはサインが必要」って,必須ってことなんじゃないの?
で,keystoreファイルが必要とのことなのだけれど,どうやって入手するかはこちらを参考にする.
debug用とrelease用があって,それぞれ場所が異なるようだ.
今回はリリース用を使うことにする.
APKファイル生成の際にkeystore(署名キー)を作成するステップがあって,そこで作成できる.
一度作成したら,それを他のアプリの開発においても使うことができる.
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を入力する
Distribute builds
Group
とStore
の2つの選択肢があるが,Groupを選択すると,ビルド成功時に指定したグループにアプリが配信されるとのこと.(参考)
なのでそうした.
Collaborator
には誰が入っているんだろう.
少なくとも,このApp Centerのオーナーである自分が入っている.
Save & Build
ここまでで設定は終わりということで,Save & Build
ボタンを押す.
すると,こんな感じでビルドが始まる.
Runningという項目で時間が計測されているので,これが課金対象としてのビルド時間
というやつなんだろう.
ビルドが完了した.3分11秒消費した.
ビルドが完了すると,指定したグループに属するメンバーにメールが届く.
メールの中身はこんな感じ.
このInstall
ボタンを押すと,App Centerへのログインを求められる.
ログインすると,アプリケーションのダウンロード画面が表示される.
Download
ボタンを押す.
ダウンロードが始まり,以下のようなメッセージが表示されるので,Ok
を押す.
ダウンロードが完了したら,通知をタップする.
インストールするか確認されるので,Install
を押す.
もちろん警告がでるが,INSTALL ANYWAY
を押す.
インストールが完了すると更に「スキャンしてあげるけど送る?」と確認されるので,DON'T SEND
を押す.
これでインストール完了!...ってあれ?何も表示されない
この記事で加えた変更をpushしていなかった.
これをPushしてみる.
App Centerの方で「Pushすると自動的にビルドが走ってグループのメンバーにメールが送られる」はずだから,これも試すことができてちょうど良いな.
Push!
App Centerの方を見てみると,ビルドが始まっている!
改めてアプリを実行してみると,やっぱり画面は真っ白.
これはSyncfusionのUIパーツを使っていて,リリースビルドの場合はライセンスキーをコード内で指定する必要があるためです. デバッグビルドではアプリ起動時にダイアログボックスが出るだけで使えますが,リリースビルドではもちろん使えません.
ということで,次回はこのライセンスキーを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名が必要なので記録しておくこと.