Expo SDK v32.0.0 is based once again on React Native 0.57 “September 2018”, the same major version as SDK 31.

This is the second release as part of our Expo for Professionals push, and many of the changes in this release are geared towards better supporting skilled professionals using Expo as part of a business. If you haven’t read about this new push and our other exciting upcoming changes, be sure to take a look, and while you’re at it, check out our upcoming plans for ExpoKit as well.

Background Location and Geofencing

We’re excited to announce that this release includes initial support for background location, a highly requested feature from many Expo users. You can now define simple JavaScript tasks in your app and register them to receive location updates in the background. Additionally, you can set up geofencing tasks that are triggered when the device enters or leaves specific geographic regions.

These background features make use of the new TaskManager module, which lets you define tasks to run periodically in the background. If your app isn’t running when one of these events is triggered, TaskManager will boot up your app in the background and execute whichever tasks you’ve defined. 😎

We’ve been working hard on building and testing these modules, but background location is the kind of feature that needs to be tested in the wild before it can be fully mature. Please expect this module’s API and underlying behavior to change in future releases; we recommend treating it as if it were part of DangerZone .

Read more in the Location and TaskManager documentation, and look out for an upcoming blog post that will introduce these features in more detail!

Interactive Notifications

With SDK 32, we’ve also added support for notification categories and actions. This means that you can now create actionable notifications that users can interact with, without opening your app! Actions you define show up as buttons to the user, and you can also prompt for text. All user input is passed back into your app.

Interacting with a notification on iOS

Check out the Notifications documentation.

READ_SMS permission is gone

The SMS module no longer requires the native Android READ_SMS permission in order to comply with Google’s new policy regarding SMS and Call Log permissions. READ_SMS is not required in order to send an SMS message, and previously it was only used to determine whether the user sent a message or canceled sending.

Starting with SDK 32, Permissions.SMS is gone, and SMS.sendSMSAsync will return a promise that resolves to { result: 'unknown' } on Android, since without the permission there is no way to know whether the user sent the message. If your app uses the SMS module, we recommend you update to SDK 32 as soon as possible in order to comply with Google’s policy.

Dropping SDK 25, will drop SDK 26 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 25. As usual, your standalone apps built with SDK 25 will continue to work; however, SDK 25 projects will no longer work within the latest version of Expo Client. If you want to re-run expo build , then you’ll need to upgrade from SDK 25, preferably to SDK 32 so you won’t need to update again for a while (and also because each Expo version is better than the last!).

Snack improvements and additions

History

Authenticated users can view and recover the state of their snacks after every save.

TypeScript support

TypeScript projects are now supported in Snack!

Custom ESLint rules

If you’d prefer to use different ESLint rules than the default, just create an .eslintrc file, and Snack will use it.

API improvements and additions

Background Fetch on iOS

In addition to background geolocation and geofencing, we’ve also implemented a more general background fetch module on iOS only. This module allows you to schedule periodic network requests in the background and makes use of the TaskManager module. Read more in the documentation.

Add and remove contacts on Android

Previously, all Contacts methods that involved writing data were only available on iOS. These methods are now available on your standalone Android app as well by explicitly adding WRITE_CONTACTS to the android.permissions field in app.json. (These methods are still not available in the Expo Client for Android.)

Bundle download progress fixed in ExpoKit apps

A long overdue quality-of-life improvement — you can see your bundle download progress in development mode in SDK 32 ExpoKit apps!

Other fixes & improvements

Here are a few other notable changes and bugfixes we’ve made in this release. For a more detailed list, see our changelog.

Library updates

Updated react-native-gesture-handler from 1.0.9 to 1.0.12

from 1.0.9 to 1.0.12 Updated react-native-reanimated from 1.0.0-alpha.10 to 1.0.0-alpha.11

from 1.0.0-alpha.10 to 1.0.0-alpha.11 Updated react-native-screens from 1.0.0-alpha.15 to 1.0.0-alpha.19

from 1.0.0-alpha.15 to 1.0.0-alpha.19 Updated react-native-maps to 0.22.1 (this was also included in expo@31.0.5 )

to 0.22.1 (this was also included in ) Updated react-native-svg from 8.0.8 to 8.0.10

Breaking Changes

We’ve removed the deprecated default exports from the expo package as well as certain individual modules. You’ll need to replace any usage of import Expo from 'expo'; with destructured imports ( import { ... } from 'expo'; ) and import only the modules you need. If you’d like to import all modules, use import * as Expo from 'expo'; .

package as well as certain individual modules. You’ll need to replace any usage of with destructured imports ( ) and import only the modules you need. If you’d like to import all modules, use . Similarly, in the expo-font module we’ve deprecated the import { Font } from 'expo-font'; syntax in favor of individually named exports ( import * as Font from 'expo-font'; ). Upgrade @expo/vector-icons if you get a warning about this.

module we’ve deprecated the syntax in favor of individually named exports ( ). Upgrade if you get a warning about this. We’ve removed the deprecated Expo.Fingerprint API, which was renamed to Expo.LocalAuthentication in SDK 30 to reflect other forms of authentication.

API, which was renamed to in SDK 30 to reflect other forms of authentication. We’ve also removed deprecated support for passing an array into Font.loadAsync . This feature displayed a deprecation warning for several SDK versions so if you didn't see it, this change shouldn't affect you.

. This feature displayed a deprecation warning for several SDK versions so if you didn't see it, this change shouldn't affect you. The enableHighAccuracy option in the Location module is now deprecated in favor of accuracy , which gives more options.

option in the module is now deprecated in favor of , which gives more options. The onBarCodeRead prop in Camera has been renamed to onBarCodeScanned .

prop in has been renamed to . Calling Haptic methods on Android will now raise an error instead of a warning.

Upgrading Your App

Here’s how to upgrade your app to Expo SDK 32.0.0 from 31.0.0:

Close your Expo CLI server

In app.json , change sdkVersion to "32.0.0"

, change to In package.json , change these dependencies:

- react-native to "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz"

- expo to "^32.0.0"

- react to "16.5.0" — (this exact version)

- react-navigation to "^3.0.9" (if you use it — this is also optional, you don’t have to update it to use the newest SDK. If you choose to, make sure you read the changelog for breaking changes, and see this upgrade guide for upgrading from v2 to v3.)

- jest-expo to "^32.0.0" (if you use it)

- sentry-expo to "~1.11.2" (if you use it)

, change these dependencies: - to - to - to — (this exact version) - to (if you use it — this is also optional, you don’t have to update it to use the newest SDK. If you choose to, make sure you read the changelog for breaking changes, and see this upgrade guide for upgrading from v2 to v3.) - to (if you use it) - to (if you use it) Delete your project’s node_modules directory and run npm install again (or use Yarn, we love Yarn)

directory and run 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.

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/or expo build:android when you are ready to do a new build for submission to stores.

and/or when you are ready to do a new build for submission to stores. If you are planning to submit your iOS app to the App Store, you must upgrade to Xcode 10 in order to do so.

Did you initialize your project with create-react-native-app?

If so, you’ll need to change your package.json to use Expo’s main file and commands like so:

“main”: “node_modules/expo/AppEntry.js”,

“scripts”: {

“start”: “expo start”,

“android”: “expo start --android”,

“ios”: “expo start --ios”,

“eject”: “expo eject”

}

Updating ExpoKit to SDK 32