expo-dev-client を利用して React Native + Expo を実機の iPhone で動かす方法

Mobile
MobileReact Native

ネイティブコードを含まない場合は、Expo Go ですぐ実機確認ができますが、expo-dev-client を利用する場合は Expo Go が使えず、Xcode からのビルドとインストールが必要になります。

expo-dev-client を利用して実機で動作確認するための手順をまとめました。

バージョン

主要なライブラリのバージョンは以下。

├── @realm/react@0.4.3
├── expo-dev-client@2.2.1
├── expo@48.0.11
├── react-native@0.71.6
├── realm@11.8.0

また、Xcode のバージョンは 14.3 です。

手順

[Mac] expo コマンドを利用してビルド

以下を実行します。

npx expo run:ios

[Mac, iPhone] Mac と実機の iPhone をケーブルでつなぐ

WiFi は不可(のはずです)

[iPhone] ディベロッパモードを有効にする

開発用にインストールするためには、端末側のディベロッパモードを有効にする必要があります。

設定アプリ → [プライバシーとセキュリティ] → [デベロッパモード] → デベロッパモードを有効にする(再起動が必要です)

[Mac] Xcode を開く

npx run:ios で生成されたプロジェクトを開きます。注意点として、xcodeproj ではなく、xcworkspace のファイルを開かないと Xcode のビルドがエラーになります。

xcworkspacexcodeproj の違いは以下

xcworkspacexcodeprojは、Xcodeプロジェクトの異なる種類を表すものです。

xcodeprojは、Xcodeプロジェクトのデフォルトの拡張子で、単一のアプリケーションの開発に使用されます。Xcodeプロジェクトは、アプリケーションのコンポーネントやファイル、コード、ビルド設定、およびビルドされたバイナリファイルを含む、アプリケーション開発に必要なすべての情報を含んでいます。

一方、xcworkspaceは、Xcodeのワークスペースの拡張子で、複数のxcodeprojファイルを結合するために使用されます。ワークスペースは、iOSアプリケーションの複数のターゲットやプロジェクト、およびフレームワークなどの外部のプロジェクトやライブラリを含む大規模な開発環境を扱う場合に特に有用です。

一般的に、単一のアプリケーションの開発にはxcodeprojが、複数のプロジェクトやフレームワークを含む開発環境にはxcworkspaceが使用されます。ただし、プロジェクトの規模や開発環境によっては、どちらを使用するかは開発者によって異なる場合があります。

ChatGPT より

[Mac] Xcode の Capabilities にある Push Notification の削除

expo コマンドで Xcode プロジェクトを作成すると Capability に Push Notification が追加されていると思いますが、Team が個人の場合、Capabilities にある Push Notification を削除します。
個人の場合は Profile が作れずエラーになるためです。

[Mac] Xcode のビルドを実行する

Xcode の画面の上部中央で対象に実機を選び、ビルド(▶)を実行します。
ビルドが成功すると、そのまま実機にインストールされます。

[iPhone] ディベロッパを信頼する設定

インストールされたアプリを起動とすると、信頼されていないデベロッパ と表示されアプリが起動出来ない場合があります。この場合は

設定アプリ → [一般] → [VPNとデバイス管理]

の画面で自分のアカウントが表示されているので選択して信頼する必要があります。

[Mac] expo dev client を実行する

expo start --dev-client

[iPhone] アプリの実行

expo start で QR コードが表示されるので、iPhone のカメラアプリから読み取ると実機でアプリが動作します。

なお、ここまで行くと実機とMacはケーブルを抜いててもよく、またありがたいことにこの状態でコードを修正すると即時に実機側に反映されます。便利ですね。