expo buildがdeprecatedになり、将来的にはなくなるということでeas buildに移行する必要が出る。
自分の場合は、expo managed workflowのため、managed workflowからejectせずにそのままeas buildに移行する必要があった。
自分のアプリが使っている問題、(特にadmob)があり、公式のドキュメント通りやっても動かなかったので、自分が対処した方法をいかにまとめる。
eas buildを動かすまで
まずは必要なライブラリをインストールする必要があるが、これは公式に従うのみ。
https://docs.expo.dev/build-reference/migrating/
あとは、この辺を参考にした。
https://njkhanh.com/expo-sdk-45-p5f3138383230
Managed workflowの部分。
これが終われば、eas buildコマンド自体はできるようになる。
結果自分が実行したコマンドはこちら
- npm install -g eas-cli
- npm i -g expo-cli
- Yarn upgrade
- expo upgrade
- npx expo install expo-dev-client
- eas update:configure
- eas build:configure
- Yarn remove expo-ads-admob
- Yarn add react-native-google-mobile-ads
- Edit app.json
eas buildがエラーになる。。。
私の場合は、admobのライブラリが問題だった。eas buildになってからは、
expo-ads-admobが非推奨になる。将来的にはなくなる。そのため、
https://github.com/invertase/react-native-google-mobile-ads
にマイグレする必要がある。
マイグレ自体は簡単だが、expo-ads-admobが入ったまま、つまり、react-native-google-mobile-adsと一緒にインストールされていると、eas buildが通らない。。
yarn remove expo-ads-admob
これをしないとbuildが通らなかったし、またエラーメッセージもそういう表示がないので、かなり苦戦した。
また、app.jsonから必要な箇所も削除しておかないとbuildが通らない。ここだけで数日つかった。本当buildのエラーメッセージはもう少しわかりやすくしてくれよっという感じだった。
以下のgoogleMobileAdsAppIDの部分を消さないとbuildが通らない。
"android": { // ... "config": { // ... "googleMobileAdsAppId": "ca-app-pub-3940256099942544~3347511713" // sample id, replace with your own } }, "ios": { // ... "config": { // ... "googleMobileAdsAppId": "ca-app-pub-3940256099942544~1458002511" // sample id, replace with your own } }
あとは、buildしたバイナリをSimulatorにinstallしたり、
実機で見るときは、プロファイルを実機にインストールしたりと、expo よりも使い勝手は悪い部分はあるが、リアルタイムでソースコードの変更がsimulatorに反映されたり、といういい部分は残っている。
マイグレ自体は面倒であるが、マイグレしてよかったこと
まず、deprecatedになっているので、マイグレは絶対しないといけないので、選択はできない。
そのため、デメリットのほうが多いなって思っても結局やらないといけない。
ただし、マイグレを後押しする情報として、
- build後のバイナリが半分以下のサイズになったこと
- hermesが使えること(ただし、androidに問題があるので、ちょっと様子見はしたほうが良さそう)
- dev-clientを入れることになるので、nativeのライブラリも今後利用可能になること.(ただ今回のbuildエラーを踏まえると、エラーが親切ではないので、問題があったときの特定が大変そう。)
- eas submitすることで今までipaやapkパッケージを手動でアップロードする必要があったが、eas submitでアップロードまで完結できるようになったこと。
これらは大きなメリットである。
Leave a Reply