Expo SDK 30.0.0 is now available
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:
- expo-print
- expo-media-library
- expo-analytics-segment
- expo-payments-stripe
- expo-contacts
- expo-local-authentication
- expo-location
- expo-ads-admob
- expo-font
- expo-barcode-scanner
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.
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
: AddedreadFromUrl
method to read a barcode from an image.Camera
: AddedskipProcessing
flag on Android. (Related issue.)Contacts
: FixedgetContactsAsync
not getting phone numbers on Android. (Related issue.)Contacts
: FixedgetContactsAsync
paging. (Related issue.)FacebookAds
: Fixed issue withMediaView
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 NativeWebView
. (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
to1.0.0-alpha.6
- Added
react-native-reanimated
andreact-native-screens
toDangerZone
export.
Breaking Changes
Fingerprint
has been renamed toLocalAuthentication
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
, changesdkVersion
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 runnpm 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:ios
and/orexpo build:android
when you are ready to do a new build for submission to stores.
Updating ExpoKit to SDK 30
- Follow the usual instructions given in the docs.
- On iOS, add the lines in this gist to your Podfile.