ReactNative アップグレード対応 v0.52 -> v0.56
みんな大好き恒例のアップグレードをしたので、その時にハマった事のメモ
今回は 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
動くようになった
自分がハマったのはこれくらいです
--
※ 2018/07/25 追記
TextInputの日本語入力が出来ない件
すっかり忘れてたけど、直ってないじゃん!!
今の所、これが最善っぽい?