Expo SDK のアップデートのメモ(SDK 37 → 42 / RN 0.61.5 → 0.63.4)

📆July 26, 2021

戦いの記録です。bare workflow を使っていてアップデートする方の参考までに。たぶん6時間くらいかかった気がします。


Expo SDK のアップデート(Expo SDK 37 → 38 / RN 0.61.5)

  • yarn global add expo-cli expo-cli の最新バージョンをダウンロード
  • expo upgrade コマンドでアップデート、1こずつバージョンを上げていく方針に(37→38)
  • ビルドしてみる → エラー
  • pod install する
  • → エラー CocoaPods could not find compatible versions for pod "ReactCommon/jscallinvoker":
  • https://stackoverflow.com/questions/60880105/cocoapods-could-not-find-compatible-versions-for-pod-reactcommon-jscallinvoker
  • pod 'ReactCommon/jscallinvoker', :path => "#{rnPrefix}/ReactCommon" この行をコメントアウトすれば pod install 通るので、この行が原因っぽい
  • pod 'ReactCommon/callinvoker', :path => "#{rnPrefix}/ReactCommon" に修正 → 通った
  • 再度ビルドしてみる → エラー(変わった)
  • https://github.com/expo/expo/issues/10245 この Issue っぽい?
  • expo upgrade によって、いつのまにか関連パッケージがダウングレードしてた "expo-in-app-purchases": "~8.2.1", もろもろ上げ直してみる(もとに戻す)
  • 再度ビルドしてみる → エラーが変わった
**Showing All Errors Only**

In /Users/u/Git/fast-notion/ios/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement(APMEExperiment_a602476692a36808596183699ef8c22b.o), building for iOS Simulator, but linking in object file built for iOS, file '/Users/u/Git/fast-notion/ios/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement' for architecture arm64
  • Xcode の設定をいじる
  • → 結局、ライブラリのバージョンがいつの間にか下がってたのが原因だったっぽい、上げ直したら普通にビルド通った
  • ビルド通った
  • error: Error: Unable to resolve module expo from /Users/u/Git/fast-notion/index.js: expo could not be found within the project. 起動した後にエラー
  • expo パッケージを差分更新のときに誤って package.json から消してしまっていた(操作ミス)

Expo SDK のアップデート(Expo SDK 38 → 39 / RN 0.63.3)

  • DOC https://dev.to/expo/expo-sdk-39-is-now-available-1lm8 (2020年9月22日 ・更新日2020年10月5日)
  • 例によって expo upgrade コマンドを実行 SDK 38 → 39 へ上げる
  • pod install 時に CocoaPods could not find compatible versions for pod "ReactCommon/callinvoker": のエラー
  • https://stackoverflow.com/questions/60880105/cocoapods-could-not-find-compatible-versions-for-pod-reactcommon-jscallinvoker
  • pod 'React-callinvoker', :path => "../node_modules/react-native/ReactCommon/callinvoker" に書き換え
  • → 通った
  • ビルド通った
  • com.facebook.react.JavaScript (18): "Cannot load configuration from Expo.plist. Please ensure you've followed the setup and installation instructions for expo-updates to create Expo.plist and add it to your Xcode project." 的なエラーが出た(Xcode 内)
  • → expo-updates のバージョンを以前のものに落としたら通った(0.3 → 0.2.8)ので、このパッケージ周りの更新が必要っぽい
  • というよりそもそもこのパッケージ使ってないので、package.json から削除して再度ビルド
  • → 通った
  • 普通に動作はするが、 Error: EISDIR: illegal operation on a directory, read 的な Warning が出ている
  • いろいろ調べると reanimated モジュール周りが原因説?そもそもこのモジュールは使っていないので、削除
  • yarn remove react-native-reanimated
  • → 特に変わらず、、、
  • https://github.com/itinance/react-native-fs/issues/991#issuecomment-841816673 metro のバグがあるらしい
  • 上方修正(metro 0.65 にアップデート)すると直るっぽい雰囲気
  • metro のバージョンが 0.59 なので、このままアップデートを続けていって、該当バージョンまでアップデートが終わってもまだ出るようだったらパッチを当てる感じの方針にする

Expo SDK のアップデート(Expo SDK 39 → 40 / RN 0.63.3 → 0.63.4)

Expo SDK のアップデート(Expo SDK 40 → 41 / RN 0.63.3 → 0.63.4)

  • https://blog.expo.dev/expo-sdk-41-12cc5232f2ef Apr 15 · 9 min read
  • なんかドキュメントが Medium に変わった(いままで dev.to だった)
  • In App Purchase のバージョンが 9.1 → 10.1 に上がってるので上げて良いのかドキュメントを読む
  • https://github.com/expo/expo/blob/master/packages/expo-in-app-purchases/CHANGELOG.md
  • チェンジログ見つけづらかった
  • 古い iOS のサポートが切れただけだったのでアップデートして大丈夫そう
  • ビルドは通ったが、ランタイムで com.facebook.react.JavaScript (18): "Cannot load configuration from Expo.plist. Please ensure you've followed the setup and installation instructions for expo-updates to create Expo.plist and add it to your Xcode project." 的なエラーが出た(Xcode 内)
  • さっき出たやつと同じエラーが。削除したはずの expo-update が原因?
  • sentry-expo の依存に expo-update が紛れ込んでいた
  • → sentry-expo のバージョンを上げる バージョン上げたら expo-update の依存が消えた
  • → 再度ビルド → ダメ
  • ドキュメント読むと、結局 expo-updates が必要とのこと
  • モジュール入れるとまた同じエラー、、、
  • sentry はいったん削除し、expo に依存していないやつをあとから入れ直すことにする → タスク化
  • とりあえずビルド通った

Expo SDK のアップデート(Expo SDK 41 → 42 / RN 0.63.3 → 0.63.4)

バージョンアップ後の Android ビルド

  • エラー出た


🔖 ExpoReact Native