Sitemap
Exposition

Old articles by the Expo team and community. Visit us at https://expo.dev/blog to stay up to date with Expo news and product announcements. Subscribe to our newsletter at https://expo.dev/mailing-list/signup for more updates.

Follow publication

Expo SDK 45

--

Press enter or click to view image in full size

Today we’re announcing the release of Expo SDK 45. SDK 45 includes React Native 0.68.2. Thank you to everyone who helped with beta testing.

Highlights

  • Updated UI for Expo Go. The new Expo Go UI includes a more modern design language, streamlined access to your organization’s projects, and deeper EAS Update integration with the ability to open specific updates from a branch.
Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size
Expo Go features a new UI
  • Revamped Clipboard and WebBrowser modules in rewrite to the new Sweet API.
  • Moved expo-crypto, expo-random, expo-haptics and expo-localization to JSI. We also added support for sampling audio frames to expo-av, powered by JSI. Here’s a great example of what you can do with it, via @barthap10 (who also built most of this feature).
  • Easier control over excluding permissions included by Android libraries. You can now easily add blocked permissions for Android using android.blockedPermissions in your app.json or app.config.js. This will use the tools:node="remove" XML attribute on a permission node to remove permissions in a merged manifest.
  • More runtime version validation. Runtime versions may not be decimal numbers ending in “0”, like “1.10”. This ensures that Android’s weakly typed configuration files won’t silently truncate the trailing “0” if it interprets your app’s runtime version as a floating-point number.
  • Bumped Android compileSdkVersion to 31 and Java 11.
  • React Native 0.68. This React Native release is the first with support for the New Architecture, but like nearly all libraries in the ecosystem, we don’t yet support it for Expo modules with view managers. We plan to roll out support this summer. At Expo we are very excited for what the New Architecture can do to raise the ceiling for what is possible with React Native.
  • Deprecated many third-party service wrapper libraries in favor of official alternatives with config plugins. The following libraries are now deprecated: expo-ads-admob, expo-analytics-amplitude, expo-ads-facebook, expo-facebook, expo-google-sign-in, expo-segment. Please refer to the respective documentation pages for suggestions on how to migrate to the recommended alternative libraries. The reason that these libraries are deprecated is that there is no longer any utility in maintaining the Expo versions of these packages, given that the existing libraries maintained by the vendors themselves or the canonical community versions will work perfectly in apps built with EAS Build.

💡 Arriving shortly after the release

  • ̶S̶n̶a̶c̶k̶ ̶s̶u̶p̶p̶o̶r̶t̶ ̶f̶o̶r̶ ̶S̶D̶K̶ ̶4̶5̶ ̶w̶i̶l̶l̶ ̶b̶e̶ ̶a̶v̶a̶i̶l̶a̶b̶l̶e̶ ̶s̶o̶o̶n̶. Update May 19, 2022: Support for SDK 45 is now available on Snack. It is not yet set as the default version due to an outstanding issue when using react-native-gesture-handler and react-native-reanimated together on Snack.
  • ̶S̶u̶p̶p̶o̶r̶t̶ ̶f̶o̶r̶ ̶S̶D̶K̶ ̶4̶5̶ ̶o̶n̶ ̶t̶h̶e̶ ̶c̶l̶a̶s̶s̶i̶c̶ ̶b̶u̶i̶l̶d̶ ̶s̶e̶r̶v̶i̶c̶e̶ ̶(̶e̶x̶p̶o̶ ̶b̶u̶i̶l̶d̶:̶[̶i̶o̶s̶|̶a̶n̶d̶r̶o̶i̶d̶]̶ ̶a̶n̶d̶ ̶t̶u̶r̶t̶l̶e̶-̶c̶l̶i̶)̶ ̶w̶i̶l̶l̶ ̶b̶e̶ ̶r̶e̶a̶d̶y̶ ̶w̶i̶t̶h̶i̶n̶ ̶a̶ ̶w̶e̶e̶k̶ ̶o̶r̶ ̶t̶w̶o̶ ̶o̶f̶ ̶t̶h̶i̶s̶ ̶r̶e̶l̶e̶a̶s̶e̶.̶ ̶I̶n̶ ̶c̶a̶s̶e̶ ̶y̶o̶u̶ ̶m̶i̶s̶s̶e̶d̶ ̶i̶t̶,̶ ̶S̶D̶K̶ ̶4̶6̶ ̶w̶i̶l̶l̶ ̶b̶e̶ ̶t̶h̶e̶ ̶f̶i̶n̶a̶l̶ ̶r̶e̶l̶e̶a̶s̶e̶ ̶t̶o̶ ̶s̶u̶p̶p̶o̶r̶t̶ ̶t̶h̶e̶ ̶c̶l̶a̶s̶s̶i̶c̶ ̶b̶u̶i̶l̶d̶ ̶s̶e̶r̶v̶i̶c̶e̶. Update May 24, 2022: Support for classic builds for SDK 45 is now live.

⌨️ Expo CLI

SDK 45 includes a beta release of a new, “versioned” local Expo CLI. This revamped CLI is smaller, faster, and aims to bring more longevity, stability, and reliability to your projects by moving the related CLI tooling into the project’s dependencies and improving the underlying implementation details based on the years of experience we have accumulated working on Expo CLI. Learn all about this change and how to test it out in “New: Versioned Expo CLI”. The global Expo CLI will remain the default for this SDK release, but we plan to switch over to the local versioned Expo CLI in an upcoming SDK release.

👩‍💻 Development Builds

You can now view and test EAS Updates directly from development build with the new Extensions tab. Upgrade expo-dev-client to 0.9.3 and make a new development build to test the latest enhancements.

Press enter or click to view image in full size
Preview your changes before shipping to your users

Quality of life improvements:

  • You no longer need to remember to pass --dev-client to expo start to develop with a development build.
  • Development servers can be selected from builds without signing in after you have connected to the the first time. (Make sure to upgrade to a recent version of expo-cli to take advantage of this functionality.)
  • A race condition would cause prior versions of expo-dev-client to crash the first time they were used on an iOS device has been resolved.

📲 EAS Update

EAS Update is the next generation of Expo’s update service. It is faster, easier to use, and more flexible. Starting today, it’s available to accounts with our legacy Priority subscription. To migrate from our Classic Updates service to EAS Update, follow our guide. To get the most out of EAS Update and all of its features, check out our docs.

Later this year, we’ll release EAS Update to all accounts, allow secure end-to-end code signing, and much more. Stay tuned!

👷‍♀️ EAS Build and Submit

  • Added Xcode 13.3 with the macos-monterey-12.3-xcode-13.3 image. This is the default image used for SDK 45 and React Native 0.68 projects.
  • You can now see your progress in the build queue along with an estimate for how long you’ll have to wait directly in EAS CLI and on your build job page. If you want to have priority access to build workers and skip the regular queue, you can sign up for a Production or Enterprise plan.
  • In order to better support automatic setup of libraries that add new app extension targets and target-specific entitlements, we’ve added experimental support for an experimental new field in your app.json / app.config.js: extra.eas.build.experimental.ios.appExtensions. This is already used by onesignal-expo-plugin (added in this PR) to drastically simplify the process of getting OneSignal configured in your app. The plugin can create the app extension target for you and EAS Build can manage the credentials side automatically.
  • The new expo-build-properties config plugin enables you to more easily customize common native project properties, such as the compileSdkVersion on Android and deploymentTarget on iOS.

🌍 Website and documentation

  • You can now transfer projects between Expo accounts. You can find the button to initiate the transfer process under your project settings. This has been a common request from agencies and from developers who started an app on an individual account and later want to transfer it to their company account.
  • We’ve added a new documentation home page and dark mode support for the website.
Press enter or click to view image in full size
The documentation has a beautiful (and much more useful) home page!
Press enter or click to view image in full size
The website now supports dark mode 🌞🌚

🏗 Deprecations, renamings, and removals

🧹 Dropped SDK 41 and 42; will drop SDK 43 next release

We routinely drop SDK versions that have low usage in order to reduce the number of versions we need to support. This release sees the end of life for SDK 41 and 42. As usual, your standalone apps built with SDK 41 and 42 will continue to work; however, SDK 41 and 42 projects will no longer work within the latest version of Expo Go. They will continue to work with EAS Build and expo-dev-client.

Our next release will drop support for SDK 43. If your project is running on this release, consider upgrading to a newer version soon.

🍎 iOS 12 support will be dropped in SDK 47

SDK 47 will be released in the fall with support for iOS 16. We will drop support for iOS 12 in the Expo SDK when we add support for iOS 16.

🕰 Eight months left to migrate from Classic Builds (expo build:android, expo build:ios)

Last November we announced that 2022 is the final year the Classic Build service will be available. If you use expo build:android or expo build:ios, you will need to use eas build or build on your own hardware by the end of this year.

SDK 46 will be the last SDK version supported by Classic Builds. You’ll be able to use expo build to build apps that use SDK 46 and earlier, but not apps that use SDK 47 and beyond. SDK 47 will also be the first release that targets iOS 16 this fall and depending on App Store requirements, may be required for new iOS app submissions, so be sure to plan ahead.

➡️ Upgrading your app

Managed workflow

Here’s how to upgrade your app to Expo SDK 45 from 44:

  • Update to the latest version of Expo CLI: npm i -g expo-cli. expo-cli@5.4.3 or greater is required.
  • Update to the latest version of EAS CLI if you use it: npm i -g eas-cli.
  • Run expo upgrade in your project directory.
  • Refer to the “Deprecations, renamings, and removals” section above for breaking changes that are most likely to impact your app.
  • Make sure to check the changelog for all other breaking changes!
  • If you use Expo Go: Update the Expo Go app on your phones from the App Store / Google Play. Expo CLI will automatically update your apps in simulators if you delete the existing apps, or you can run expo client:install:ios and expo client:install:android. You can also download the iOS simulator build or the APK from expo.dev/tools.
  • If you use expo-dev-client: Create a new build of your development app after upgrading. Look in your App.js or App.tsx and make sure you import ‘expo-dev-client’ for the best debugging experience.
  • You may need to update custom config plugins in your project. If you run into errors during the prebuild phase, investigate your config plugins. You are likely to encounter this if any config plugins depend on a version of@expo/config-plugins which is lower than 4.1. In some cases this may require following up with a third party library.
  • If you built a standalone app previously, remember that you’ll need to create a new build in order to update the SDK version. Run eas build -p ios and/or eas build -p android when you are ready to do a new build for submission to stores.
  • Questions? We’ll be hosting some office hours focused on upgrading to SDK45. Keep an eye out on Discord for more info / sign-ups.

Bare workflow

The bare workflow lets you operate independently of the Expo SDK cycle, updating React Native versions and versions of individual Expo packages whenever you want. However, if you do stick roughly to Expo SDK versions, these steps will help you to upgrade to Expo SDK 45 from 44:

  • Update to Xcode 13.3 if you support iOS.
  • Update to the latest version of Expo CLI: npm i -g expo-cli. expo-cli@5.4.3 or greater is required.
  • Update to the latest version of EAS CLI if you use it: npm i -g eas-cli.
  • Run expo upgrade in your project directory.
  • Apply any relevant changes from the React Native Upgrade Helper.
  • Update your AppDelegate.mm (you should have moved from .m to .mm in the previous step) update your Expo module configuration as done in this diff.
  • Refer to the “Deprecations, renamings, and removals” section above for breaking changes that are most likely to impact your app.
  • Make sure to check the changelog for other breaking changes!
  • Rebuild your native projects with npm run ios and npm run android and/or eas build if you use it (it works great with both bare and managed apps!)

Thanks to everyone who contributed to the release!

The team: Tomasz Sapeta, Kudo Chien, Evan Bacon, Kim Brandwijk, Bartłomiej Bukowski, Quinlan Jung, Bartosz Kaszubowski, Bartłomiej (Brick) Klocek, Łukasz Kosmaty, Wojciech Kozyra, Cedric van Putten, Eric Samelson, Jon Samp, Dominik Sokal, Will Schurman, Andrew Smith, and Juwan Wheatley.

External contributors: Giau. Tran Minh, Daniel Merrill, Urata Daiki, Darkce, rissois, Frank Calise, Florian Guitton, Luke Brandon Farrell, Simen Bekkhus, Luiz Gustavo Schiller, Michael Nightingale, Hirbod, Imran Shitta-Bey, Wenhao Ding, David Axelrod, Johan Poirier, HBiede, Allan Chain, Kamil Owczarz, Dillon Hafer, Vincent Polidoro, Numan, Morgan VandenBerg, Noitidart, Rakesh Arunachalam, Charlie Cruzan, and Paul Sore.

Beta testers: Charles de Dreuille, Fernando Rojo, Axel Delafosse, Michael Wood, Timothy Shamilov, Chee Kit, Aniol Pagès, imagio,
Amr Gad, and many of the same folks listed above.

Thank you for reading —we hope you enjoy this release!

--

--

Exposition
Exposition

Published in Exposition

Old articles by the Expo team and community. Visit us at https://expo.dev/blog to stay up to date with Expo news and product announcements. Subscribe to our newsletter at https://expo.dev/mailing-list/signup for more updates.

Responses (6)