
ReactNativeのアプリ開発では、プロジェクトの作成方法が2つあります。
1. ReactNative CLI (標準)
2. expo CLI
ReactNative CLIで開発をするメリット
・ネイティブコードで作成されたライブラリを使うことができる
・アプリ内課金を実装することができる
など
expo CLIで開発をするメリット
・ビルドせずにシミュレータや実機で動作確認できる
・一つのソースコードでiOS, Androidアプリを作れる
・Xcode, Android Studioを使用せず、ストア申請までできる
・ビルド一回するだけで、iTunes StoreとGoogle Playストアに必要なファイル(iOSなら.ipaファイル, Androidなら.apkファイル)を生成してくれる。
など
それぞれの特徴があり、アプリ開発を進めることができます。
本記事では、expo環境で開発を始めたけど 「ネイティブコードで作成されたライブラリを使いたい」、「アプリ内課金を実装したい」、「Xcodeを使いたい」とexpo環境からReactNative CLI環境に変換したいと思う方にexpo環境を「eject」する方法について解説していきます。
1. eject
Expo環境で
npm run eject
というコマンドを実行することで、expo環境をReactNative CLIのプロジェクト構成に変換することができ、ネイティブコードやアプリ内課金の機能が使えるようになります。
ただし、ejectすることによって、expo自体の機能が使えなくなり、ReactNative CLIと同様な開発方法で進めることになります。
2. コマンド実行
npm run eject コマンドを実行すると以下のように、いくつか質問に答えていきます。(一部省略して書いてます。)(省略)
(※1)
Now we need to know your Android package (https://expo.fyi/android-package). You can change this in the future if you need to.
? What would you like your Android package to be named?
(※2)
Now we need to know your iOS bundle identifier (https://expo.fyi/bundle-identifier). You can change this in the future if you need to.
? What would you like your iOS bundle identifier to be?
(省略)
(※3)
⚠️ iOS configuration applied with warnings that should be fixed:
– supportsTablet: You will need to configure this in the “General” tab for your project target in Xcode.
– icon: This is the image that your app uses on your home screen, you will need to configure it manually.
– splash: This is the image that your app uses on the loading screen, we recommend installing and using expo-splash-screen. Details. (https://github.com/expo/expo/blob/master/packages/expo-splash-screen/README.md)
(省略)
(※1)
? Androidパッケージにどのような名前を付けますか?
(※2)
? iOSバンドルIDをどのようにしますか?
と質問されますが、Enterを押せば自動的に設定することができます。
後から再設定できるので、後から設定するという方は、Enterを押せば良いと思います。
(※3)⚠️の警告文みたいなもの
要約すると、
expoプロジェクトでは、app.jsonファイルにアプリ申請に必要な情報(アイコン、スプラッシュ画像、バンドルIDなど)を記載すればよかったのですが、
ReactNative CLIの環境にejectしたので、「Xcodeでアイコンやスプラッシュ画像などの設定をしてください。」という警告文が表示されます(Androidも同様な警告文が表示されます)。
人によって質問や警告文の表示は異なると思いますが、このコマンド(npm run eject)を実行することで標準ReactNative環境へのejectは完了です。
3. eject完了後
プロジェクトフォルダに新しくiosフォルダとandroidフォルダが生成されます。
また、package.jsonファイルの中身も変更されており、プロジェクト実行コマンドが変わっています。
プロジェクトを実行する際は、以下のコマンドを実行します。
$ react-native run-ios | iOSで起動します |
$ react-native run-android | Androidで起動します |
ビルドをする場合は、Xcodeまたは、Android Studioで実行します。
4. 体験談(iOSアプリ開発)
実際に私がexpo環境をejectしたことによって、表示されたエラーについて紹介します。
プロジェクト起動時
eject後にプロジェクトを起動したら、以下のエラーが表示されました。
(翻訳)インバリアント違反:requireNativeComponent: “RNCSafeAreaProvider”がUIManagerに見つかりませんでした。
このエラーについて調べたところ、
expo環境を eject した場合や、Podfileを編集してポッドを追加、更新、または削除した時にpod install を実行
するみたいです。
pod installコマンドを実行しないと出るエラー表示みたいでした。
なので、プロジェクトを停止させた状態で以下のコマンドを実行します。
(または、iosフォルダ直下でpod installコマンドを実行)
1 |
cd ios && pod install |
コマンド実行後、プロジェクトを起動したら、無事にエラーが消えていました。
ビルド時
Xcodeでビルドをした時に、以下のエラーが表示されました。
Linker command failed with exit code 1 (use -v to see invocation)
(要約)ライブラリが見つかりませんのエラーが表示されビルドすることができません。
こちらについても調べたところ、管理ツールとして「CocoaPods」を導入している場合は、
Xcodeを開く際に、iOSフォルダ内にある「プロジェクト名.xcworkspace」の方で開かないとビルドできないみたいです。
「プロジェクト名.xcworkspace」でXcodeを開き直し、ビルドを試してみると、無事にビルドすることができました。
5. まとめ
今回は、Expo環境をejectする方法について紹介しました。 npm run ejectコマンドを実行するだけで、簡単に標準のReactNative環境に変換できるのは、ありがたいですね。