ExpoのSDK35がリリースされたので早速アップデート(SDK34→SDK35)
ExpoのSDK35がリリースされました。数日遅れですが早速アップデートしてみました。その時の引っ掛かりなど記録しておきます。
Expo SDK 35 is now available
SDK34で作っていたアプリは必要なら35にアップデートしていく必要があるので、その際の手順として記録しています。
概要
- SDK35の変更点
- SDK34からSDK35へのアップデート手順
- 発生したエラーとその対応
- おわりに
SDK35の変更点
Expo SDK 35 is now availableに記載の内容です。
- iOS13 への対応
これが大きいもののようです。 Dark ModeやApple Authenticationというものへの対応が行われており、必要なモジュールを利用すれば簡単に実装できそうです。 すぐには利用する予定はないですが、ゆくゆくは使ってみようと思います。 - Expo Webの改善
SSRの対応を行ったようです。すべてのExpoパッケージがサーバサイドレンダリングに対応するようになりました。 私はExpo Webを利用したことがないのですが、試しにやってみようかな。 -
端末や環境関連のモジュールの追加
使う機会はそれほど多くないと思いますが、機種の情報やネットワーク・バッテリーの情報を取得するモジュールが用意されました。-
Device
provides information about the physical device/manufacturer as well as the operating system.
-
Application
provides information about your application and its environment.
-
Battery
provides information about the power state of the device.
-
Network
provides information about the device’s current network connection.
-
Cellular
provides information about the device’s current cellular network and telephony state.
-
- Expo client のSDK31とSDK32のサポート終了
最新のExpo clientアプリではSDK31・32で作ったアプリは動作しません。 すでにビルドしてあるアプリについては特に問題ないですが、ずっと昔のアプリをExpo clientでテストする場合なんかに困ると思います。 頑張ってExpo SDKのバージョンを上げましょう。 - Android Branchのサポート
以下のモジュールのことらしいです。 Branch
私は利用したことがありません。機会あれば触ってみます。deep linkに関するモジュールのようです。
他にも細かい改善なんかもありますので、リリースを一度読んでおくと良いです。
Breaking Changesとして以下の記載がありましたので、Admob使う場合は修正が必要かもしれません。admobの管理画面からアプリの一意なIDを取得して、引数に加えてねということらしいです。あとで試してみて追記します。
Admob: all Admob ads now require a new configuration value in app.json, expo.[platform].config.googleMobileAdsAppId. The value can be found by following the guide in this Google Support answer. (Related PR.)
SDK34からSDK35へのアップデート手順
今回SDK34からSDK35へのアップデートの手順を以下に記載しています。
基本的には最初にも記載した以下のページに載っている内容です。
Expo SDK 35 is now available
1. app.jsonの sdkVersion を “35.0.0”に変更
2. package.jsonの以下の項目を変更
- react-native を ”https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz”
- expo を “^35.0.0”
- react を “16.8.3”
- react-navigation を “^4.0.6”
- jest-expo を “^35.0.0”
-
sentry-expo を “~2.0.0”
使っていないものは変更の必要無いです。jestとかsentryなんかは使ってない場合もあると思います。
3. react-navigation を利用する場合は 「expo install react-native-gesture-handler react-native-reanimated」を行う
expoの packageに含まれなくなったため、改めてinstallする必要があるそうです。
4. プロジェクトの /node_modules/ ディレクトリを削除して npm install を行う
5. expo start -c を実行
6. Expo clientアプリをストアで更新を確認
expo-cliも確認しておきましょう。
7. Expo SDK 35 is now availableの 「breaking changes」を確認
8. すでにビルドしている場合、SDKを更新するためには改めてビルドする必要がある
expo publish
ではアプリのSDKの更新はできないよ、という意味だと思います。
発生したエラーとその対応
上記の内容を参考にしながら進めていく中で、いくつかエラーに遭遇しました。 私が対処した内容をメモしておきます。環境の差によってうまくいかない場合もあると思いますが、参考になればと思います。
関連パッケージでエラー
以下のモジュールに対してバージョンが適していないというエラーが出ました。メッセージに対応内容が書かれていましたのでそのとおり対応したところ動作しました。
具体的にはpakage.jsonのバージョンを書き換えてnpm install
です。全部7.0.0に更新するように表示されていましたのでそうしました。
expo-asset
expo-constants
expo-font
expo-web-browser
expo-fontでエラー
font familyに関するエラーが発生します。
以下に現象が報告されていますので、その内容通りに対応すれば良いです。 Unrecognized font family on SDK35
具体的には以下の手順です
expo install expo-font
を実行/node_modules/
フォルダーを削除pakage-lock.json
を削除npm install
を実行
react-navigationでエラー
Expo SDK 35 is now availableの 「breaking changes」の内容に含まれている内容だと思います。react-navigationで大きめの変更があったためいくつか対応が必要です。 私の場合は、以下2点対応しました。他にも環境や利用しているモジュールによって対応が必要になると思います。基本エラーに対応方法が書いてあるので、それに従えば問題ないです。必要であればドキュメントを確認しましょう。
- react-navigation-stack を追加
createStackNavigator
をreact-navigation-stack
からimportするように変更しますnpm install react-navigation-stack
も実行します -
react-navigation-tabs を追加
createBottomTabNavigator
をreact-navigation-tabs
からimportするように変更しますnpm install react-navigation-tabs
も実行します上記は以前
react-navigation
に含まれていましたが、それぞれ分離されたようです。他のコンポーネントも分離されているのだと思います。都度対応しましょう。
おわりに
とりあえずSDK35で動作させることが出来ました。 以前作っていたアプリをアップデートする必要があります。がんばります。
SDK35で追加された新しい機能も使っていこうと思います。特にiOS13への対応は結構重要だと思いますので進めていきたいです。
上記それほど重要でなければしばらくはSDK34を使い続けるというのもありです。 ある程度バグとか少なくなってから利用するのも一つの手です。