Honmushi blog
2019/09/24

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
具体的には以下の手順です

  1. expo install expo-fontを実行
  2. /node_modules/フォルダーを削除
  3. pakage-lock.jsonを削除
  4. npm installを実行

react-navigationでエラー

Expo SDK 35 is now availableの 「breaking changes」の内容に含まれている内容だと思います。react-navigationで大きめの変更があったためいくつか対応が必要です。 私の場合は、以下2点対応しました。他にも環境や利用しているモジュールによって対応が必要になると思います。基本エラーに対応方法が書いてあるので、それに従えば問題ないです。必要であればドキュメントを確認しましょう。

  1. react-navigation-stack を追加
    createStackNavigatorreact-navigation-stackからimportするように変更します npm install react-navigation-stackも実行します
  2. react-navigation-tabs を追加
    createBottomTabNavigatorreact-navigation-tabsからimportするように変更します npm install react-navigation-tabsも実行します

    上記は以前react-navigationに含まれていましたが、それぞれ分離されたようです。他のコンポーネントも分離されているのだと思います。都度対応しましょう。

おわりに

とりあえずSDK35で動作させることが出来ました。 以前作っていたアプリをアップデートする必要があります。がんばります。

SDK35で追加された新しい機能も使っていこうと思います。特にiOS13への対応は結構重要だと思いますので進めていきたいです。

上記それほど重要でなければしばらくはSDK34を使い続けるというのもありです。 ある程度バグとか少なくなってから利用するのも一つの手です。

  • このエントリーをはてなブックマークに追加