Expoでリリースビルドを行う流れ
Expo CLIを使うと、手元のマシンにAndroid SDKやiOS SDKをセットアップしていなくても、リリースビルドを実施できます。これは、Expoのクラウドサービス(expo.io)が、リリースビルドのためのサーバーを提供することで実現されています(図1)。
Expo CLIでリリースビルドのコマンドを実行すると、設定ファイルであるapp.json
や、JavaScriptファイル、画像リソースや音声リソースなど、開発者側で設定できるものをすべてクラウドサービスにアップロードします。しばらく待つと、ダウンロードリンクが発行され、apkファイルやipaファイルなどのアプリファイルがダウンロードできるようになります。
ビルドの制御についてはクラウドサービス側にお任せになってしまうので、あまり細かい設定はできません。唯一細かい制御ができるのは、app.json
です。app.config.js
という名前でJavaScriptに設定を記述することもできるようになりましたが、設定できる項目については同じです。
設定できる項目の全体像は、公式ドキュメントの次のページにまとめられています。
特に、リリースビルドと関係が強いのは、次の4つです。
- アプリ名
- アプリID
- アプリバージョン
- アプリアイコン
- スプラッシュ画面
本記事では、この5つを設定して、リリースビルドを実行することを目標とします。
アプリ名を設定する
まずは簡単なところで、アプリ名を「サンプルアプリ」に設定してみます(リスト1)。
{ "expo": { "name": "サンプルアプリ", // (1) // (略) } }
(1)のように、app.json
のexpo.name
の階層に文字列を記述すると、これがアプリ名になります。
アプリIDを設定する
次に、アプリIDを設定します。アプリIDは、同名のアプリが複数あった場合にもストア内でアプリを識別するためのものです。
慣例として、「開発者が所有しているドメインの逆順+アプリ名」で命名します。例えば、筆者はnkzn.info
というドメインを持っていますが、タイマーアプリを作った場合はinfo.nkzn.timer
というアプリIDをつけることになるでしょう。
ドメインを持っていない場合は、サブドメインに自分の名前が入るタイプのWebサービスからドメイン名を借りてくるという荒技で乗り切る場合もあります。例えば、github.com
でnkzn
というユーザーを持っている場合、タイマーアプリのIDはcom.github.nkzn.timer
という名前をつけることになるでしょう。他の人とかぶらないことが大事なので、工夫しながらIDを命名してみてください。
さて、アプリIDをapp.json
に記載する場合は、リスト2のようにします。
{ "expo": { // (略) "ios": { "bundleIdentifier": "info.nkzn.my-awesome-timer", // (1) // (略) }, "android": { "package": "info.nkzn.my_awesome_timer", // (2) // (略) }, // (略) } }
iOS向けのアプリIDは(1)のとおりexpo.ios.bundleIdentifier
の階層に記載します。また、Android向けのアプリIDは(2)のとおりexpo.android.package
の階層に記載します。
アプリIDの命名は、大枠ではAndroidとiOSで同じ方針で決めて構いません。ただ、ハイフン(-)やアンダースコア(_)を使う場合は注意してください。AndroidのアプリID(package
)では、アンダースコアは使えてハイフンが使えません。逆に、iOSのアプリID(bundleIdentifier
)では、ハイフンは使えてアンダースコアは使えません。ドメイン名にハイフンが入っている場合には注意するとよいでしょう。
アプリのバージョンを設定する
app.json
にはアプリのバージョンを記載することもできます。アプリのバージョンには、ストアに表記するためのバージョンと、ストアの内部で機械的に管理する際に使われるバージョンの2種類があります。app.json
に記載する箇所はリスト3のとおりです。
{ "expo": { // (略) "version": "1.3.0", // (1) // (略) "ios": { // (略) "buildNumber": "1030023", // (2) // (略) }, "android": { // (略) "versionCode": 1030023, // (3) // (略) }, // (略) } }
(1)のexpo.version
の階層に記載するのが、世間一般で「アプリのバージョン」と呼ばれているものです。特に書式の制限はなく、文字列ならばなんでも構いません。
気をつけなければいけないのは、Play ConsoleやApp Store Connectが管理のために利用する、「内部バージョン」とでも呼ぶべきものです。iOSでは(2)のとおりexpo.ios.buildNumber
の階層に文字列で記載し、Androidでは(3)のとおりexpo.android.versionCode
の階層に数値で記載します。buildNumber
は文字列ですが、使っていいのは数値もしくはドット(.
)だけなので、事実上AndroidもiOSも数値を記載することになります。この数値はPlay ConsoleやApp Store Connectにアプリファイルをアップロードするたびに、大きい数値にしなければいけません。内部バージョンは「必ず増える数値」として管理されていることに注意してください。