みんな大好き恒例のアップグレードをしたので、その時にハマった事のメモ
今回は v0.52.2 から v0.56.0 にアップグレードした
前回のアップグレードよりは楽だったけど、本体のバグらしき罠にだいぶはめられた
ちなみに前回と同じく $ react-native-git-upgrade は使わずに
$ react-native init myApp で新たに作成したフォルダに自力で差分をみてマージをしてる
なんだかんだこの方法が一番キレイに出来る
差分の確認
念の為、今回のアップデートの差分を目視確認しておく
自分の環境に合わせて差分が見れるので、それを適用すればOK
Comparing rn-0.52.2...rn-0.56.0 · ncuillery/rn-diff · GitHub
Androidの compileSdkVersion などが上がった対応
おそらくこれが今回の一番大きな変更
- compileSdkVersion
23->26 - buildToolsVersion
23.0.1->26.0.3 - targetSdkVersion
22->26
これにより、依存してるサードパーティが大体 23 のため、警告が出たりビルドが落ちたりする
正しい対策じゃないかもしれないけど
android/build.gradle に以下のコードを追加して対応した
subprojects {
afterEvaluate {project ->
if (project.hasProperty("android")) {
android {
compileSdkVersion 26
buildToolsVersion '26.0.3'
}
}
}
}
警告出されたけどビルドは通るようになった
※ 正しい方法があったら教えて下さい!
リリースビルドのアプリを起動すると直後にクラッシュする
こんなエラーが出てた
undefined is not an object (evaluating 'r.default')
結果的にいうと、原因は react-navigaiton だった
PRは却下されてるけど、とりあえずこの修正を適用すると動くようになる
import が正しく出来ないバグっぽいので、根本的な理由は多分 babel7 に移行したことで何か問題が起きてるのかな??
flowのエラー
型が強化されたみたいで、エラーがたくさん出た
気合で直す
CocoaPodsの修正
BatchedBridge がなくなって、代わりに CxxBridge を追加した
pod 'React', :subspecs => [
// ...
+ 'CxxBridge',
- 'BatchedBridge'
], :path => '../node_modules/react-native'
正直このへんよくわからないし触りたくない
Jestが実行できない
Jestを実行すると、そもそも動かなくていろんなエラーがでて落ちる
Issueはこれ
package.json に以下のコードを追加したら動くようになった
"jest": {
"preset": "react-native",
"transform": {
"^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
}
}
これはとりあえずの回避策で
PRはちゃんと出てるみたい: Fix jest-preset to use internal preprocessor (fix testing with 0.56) by vovkasm · Pull Request #20068 · facebook/react-native · GitHub
動くようになった
自分がハマったのはこれくらいです