Expoのプロジェクトをローカルでビルドして実機端末で動作確認する方法(iOS向け)

React Native + Expo のプロジェクトで、自分のPCでビルドして、実機にインストールするまでの手順を紹介します。
Expo のビルドには回数制限があります。 無料の場合は iOS が月に15回まで、Android との合計で 30回までのようです。
https://expo.dev/pricing

有料プランは99ドルです。 iOS の場合は1回のビルドにつき2ドルかかります。1ドル150円とすると、300円もかかります。
99ドル分までは課金されませんが、99ドル分のビルド回数を超えると、容赦なく課金されていきます。
そのため、「サクッとビルドして Testflight で毎日動作確認」という使い方をすると、あっという間に課金地獄に陥ってしまいます。

手順

Expo のプロジェクトをローカルでビルドして、実機で動作確認するまでの手順を紹介します。

eas.json を修正する

eas.jsonpreview を追加します。 preview は任意の名前でOKです。 内部配布用のビルドの種類に名前をつけているだけです。

eas.json
{
  "cli": {
    "version": ">= 3.10.2",
    "promptToConfigurePushNotifications": false
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {}
  },
  "submit": {
    "production": {}
  }
}

ad hoc の provisioning profile でアプリをビルドする

以下のコマンドを実行します。

shell
eas device:create

コマンドを実行すると QRコードが表示されます。 QRを開くと、 Provisioning Profile を設定するページに飛びます。開いたページのDownload Profile をタップ → 設定 → ダウンロードされたプロファイル → インストール の順にタップしていけばOKです。

Provisioning Profile とは、アプリの開発元についての情報が含まれているファイルのことです。開発用(Development)と配布用(Distribution)の2種類があります。
Ad Hoc 配布とは、 App Store を通さずに、テスト用や企業内利用のために、登録済デバイスのみにアプリを配布する方法です。

iOS アプリ – Ad Hoc 配布の方法

内部向けのビルド

以下のコマンドを実行します。

shell
eas build --profile preview --platform ios --local

Internal distribution

Apple Configurator をインストール

以下の URL で Mac App Store を開き、 Apple Configurator をインストールします。

https://apps.apple.com/jp/app/apple-configurator/id1037126344?mt=12

Apple Configurator を立ち上げたあとは、ケーブルで手元の MacBook と iPhone 実機を接続します。

eas build --profile preview --platform ios --local コマンドを実行すると、プロジェクトのルートディレクトリに build-xxxxx.ipa のようなファイルができあがるので、この ipa ファイルを Apple Configurator 上に表示されている端末にドラッグ・アンド・ドロップすれば、実機にインストールができます。

ipa ファイルは単なる zip ファイルです。アプリに必要なファイルを1つのフォルダに集めてzip化し、拡張子を .ipa にしただけです。 iOS Package Archive の略です。

ipaファイルとは何か

この記事を書いているときに作っていたアプリ

タブで管理できる TODOリストを作りました。「TODOリスト」と聞くと、初心者御用達なイメージがあるかもしれませんが、「使い心地の良いTODOリスト」を作るのは難しいと感じていました。

具体的には、ユーザーの使用感を阻害しないようにリストの追加・削除を行うこと。入力内容は自動保存されること。
リストの並び替えができること。タブの並べかえができること、などを考慮すると、単なるTODOリストのはずなのに、実装はけっこう複雑になりました。

以下のアプリは個人的にも十分普段遣いできるレベルのアプリにできたかと思います。「お、どんな感じよ?」と思った方はぜひ、App Store で「タブリスト」などと検索してみてください。

副業のお誘いなどもお待ちしています。