Expo SDK 30.0.0 is now available

Eric Samelson
Exposition
Published in
6 min readSep 12, 2018

--

Expo SDK v30.0.0 is once again based on React Native 0.55.4, the same version as SDKs 29 and 28.

With SDK 29, we made the decision not to update to React Native 0.56.0. This was due to the babel update to 7.0.0-beta.47 from ^6.24.1, and because 0.56.0 introduced some bugs and didn’t include enough useful features and fixes over 0.55.4 to justify the tradeoff of updating babel. Much of the development effort on React Native at Facebook is currently focused on re-building the core architecture in a project named Fabric (read more about it here), and few commits in 0.56.0 would directly benefit Expo users.

For this release, we are keeping version 0.55.4 since at the time of writing, React Native 0.57 is not yet stable. However, we have cherry-picked this commit which fixes a critical bug on iOS when inputting Chinese and Japanese text into controlled TextInput. Our next SDK release will likely include a minor version bump of React Native.

Dropping SDK 23; will drop SDK 24 next release

We routinely drop SDK versions that have low usage in order to reduce the number of versions that we need to support. This release sees the end of life for SDK 23. As usual, your standalone apps built with SDK 23 will continue to work; however, SDK 23 projects will no longer work within the latest version of Expo Client. If you want to re-run exp build, then you’ll need to upgrade from SDK 23, preferably to SDK 30 so you won’t need to update again for a while (and also because each Expo version is better than the last!).

Upcoming release will drop support for iOS 9 and Android 4.4

In order to keep up with the fast-moving world of mobile development, we periodically drop support for older operating systems nearing their end of life. iOS 12 is here, and most users are on iOS 10+ according to Apple. Dropping Android 4.4 will let us upgrade to a modern version of JSC, which comes with a host of benefits and bugfixes. Additionally, it paves the way for 64-bit support, which will be required for all apps in the Google Play Store by August 2019. Expect that in an upcoming release we will fully drop support for these operating systems.

Host your app anywhere

Previous SDK versions could only load over-the-air updates to app bundles and assets from Expo’s own server and CDN. However, in countries that have blocked Expo’s CDN providers on AWS and Google Cloud, OTA updates are slow or unusable. With SDK 30, you now have the option of hosting over-the-air updates from your own server, or even static hosting services like GitHub Pages. The documentation is currently available here. Look for a blog post coming soon that will discuss this in more detail!

More ExpoKit modules available

We’re continuing to split our SDK into individual modules that can be omitted from ExpoKit projects, or included in any vanilla React Native project without ExpoKit. The following modules now live in their own repositories and can be installed or omitted individually:

More information about this can be found in our universal modules guide.

Expo CLI 2.0 replaces exp and XDE

Expo CLI, our new tool for building React Native apps with Expo is now out of beta. It includes both the expo command-line tool and Expo Dev Tools, a web based UI for setting up devices, viewing logs and more.

Expo CLI replaces our previous tools exp (a CLI) and XDE (a desktop app). It also powers the latest version of Create React Native App. Read more in this blog post.

expo-cli includes keyboard shortcuts from the terminal, for example you can press “i” to run the app on the iOS simulator or “a” to run it on Android.
It also provides a web UI which will automatically open when you run `expo start` on your project. You can disable it by pressing “shift+d” in the CLI, and manually open it by pressing “d”.

Snack improvements

Snack is open source

We’ve open-sourced the code for the Snack web app! If you’re curious about exactly how it works, or you’d like to make a contribution, be sure to check it out on GitHub.

Vim users rejoice

The speed and quality of life improvements of the new Monaco editor in Snack are now available to vim users. Thanks to Brijesh Bittu for his monaco-vim library. Show him some love!

API improvements and additions

Added react-native-screens

react-native-screens is a new library by Krzysztof Magiera that exposes native navigation components to JS. It is an important primitive that can be used by navigation libraries and will be used in future versions of react-navigation. You can learn more about it here.

Android ExpoKit apps can now disable Expo Analytics

By default, Expo apps track some minimal metrics, such as how often the app is launched or when the user encounters an error. These data help us respond to issues quickly and understand how Expo is being used; more detailed information about the data collected can be found here. However, if you would like to opt out of these analytics in your Android ExpoKit app, you can now do so. (This functionality was already available on iOS.)

Other fixes & improvements

  • AV: Added ability to play audio through the earpiece on Android. (Related issue.)
  • AV: Updated Android ExoPlayer to 2.6.1 to fix playback rate issue. (Related issue.)
  • BarCodeScanner: Added readFromUrl method to read a barcode from an image.
  • Camera: Added skipProcessing flag on Android. (Related issue.)
  • Contacts: Fixed getContactsAsync not getting phone numbers on Android. (Related issue.)
  • Contacts: Fixed getContactsAsync paging. (Related issue.)
  • FacebookAds: Fixed issue with MediaView on Android. (Related forum post.)
  • ImagePicker: Fixed issue when selecting an image where it would be re-compressed even if no modifications were applied. (Related issue.)
  • LocalAuthentication: Fixed crashes when using FaceID in Expo client, now falls back to device passcode. (Related issue.)
  • MediaLibrary: Added ability to delete an album.
  • Permissions: Added ability to request an array of permissions, which creates a single OS-level dialog on Android.
  • takeSnapshotAsync: Fixed error swallowing. (Related issues: 1, 2.)
  • Added ProGuard configuration for universal modules to ExpoKit projects and docs. (Related issue.)
  • Added android.intentFilters configuration to app.json to allow your app to handle arbitrary intent filters. (Related PR.) Thanks @mbillard!
  • Fixed Branch export. (Related commit.)
  • Fixed crash when ImagePickerViewController was invoked from inside a React Native WebView. (Related issue.)
  • Fixed an issue with OTA updates when the same bundle was published twice in a row. (Related forum post.)
  • Removed GPUImage dependency on iOS, so your ExpoKit builds should be a touch slimmer and faster 🎉

Library updates

  • Updated react-native-reanimated to 1.0.0-alpha.6
  • Added react-native-reanimated and react-native-screens to DangerZone export.

Breaking Changes

  • Fingerprint has been renamed to LocalAuthentication to better convey its generic nature, since some devices (like the iPhone X) use alternate methods of biometric authentication.

Upgrading Your App

Here’s how to upgrade your app to Expo SDK 30.0.0 from 29.0.0:

  • Close your Expo CLI server
  • In app.json, change sdkVersion to "30.0.0"
  • In package.json, change these dependencies:
    - react-native to "https://github.com/expo/react-native/archive/sdk-30.0.0.tar.gz"
    - expo to "^30.0.0"
    - react to ("16.3.1" — this exact version, it didn’t change from SDK 29)
    - react-navigation to "^2.13.0" (if you use it — this is also optional, you don’t have to update it to use the newest SDK. If you choose to, before you make this change make sure you read the release notes to update for breaking changes)
    - jest-expo to "^30.0.0" (if you use it)
    - sentry-expo to "~1.9.0" (if you use it)
  • Delete your project’s node_modules directory and run npm install again (or use Yarn, we love Yarn)
  • Run expo start -c
  • Update the Expo app on your phones from the App Store / Google Play. expo-cli will automatically update your apps in simulators.
  • Make sure to check the breaking changes section of this post!
  • If you built a standalone app previously, remember that you will need to create a new build in order to update the SDK version. Run expo build:iosand/or expo build:android when you are ready to do a new build for submission to stores.

Updating ExpoKit to SDK 30

--

--