<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: jess (she/her)</title>
    <description>The latest articles on Forem by jess (she/her) (@expjess).</description>
    <link>https://forem.com/expjess</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F358175%2F13de8484-a9a5-4152-b3e7-f6aff0c7ee8e.png</url>
      <title>Forem: jess (she/her)</title>
      <link>https://forem.com/expjess</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/expjess"/>
    <language>en</language>
    <item>
      <title>Expo SDK 39 is now available</title>
      <dc:creator>jess (she/her)</dc:creator>
      <pubDate>Mon, 21 Sep 2020 23:07:01 +0000</pubDate>
      <link>https://forem.com/expo/expo-sdk-39-is-now-available-1lm8</link>
      <guid>https://forem.com/expo/expo-sdk-39-is-now-available-1lm8</guid>
      <description>&lt;p&gt;Today we're announcing our third release of 2020, &lt;strong&gt;Expo SDK 39&lt;/strong&gt;. SDK 39 brings tons of quality-of-life improvements across our entire suite of tools: the &lt;a href="https://expo.io/tools#client" rel="noopener noreferrer"&gt;Expo development clients&lt;/a&gt;, Expo &lt;a href="https://docs.expo.io/workflow/expo-cli/" rel="noopener noreferrer"&gt;CLI&lt;/a&gt;, &lt;a href="https://docs.expo.io/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, and of course our &lt;a href="https://docs.expo.io/versions/latest/" rel="noopener noreferrer"&gt;SDK&lt;/a&gt;. Read on for more details!&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 Known Regressions (Updated 03 Oct 2020)
&lt;/h3&gt;

&lt;p&gt;Significant known regressions that have been brought to our attention have been resolved. &lt;a href="https://github.com/expo/expo/issues/10464#issuecomment-703178030" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;, and thank you for bearing with us! &lt;/p&gt;

&lt;h1&gt;
  
  
  ⚡️ New SDK features
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Support for iOS 14, React Native 0.63 and React Native for Web 0.13!
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SDK 39 is fully compatible with the newly released iOS 14&lt;/strong&gt;. Past apps built with SDK 38 also should work well on iOS 14 but we recommend staying up-to-date when you can.&lt;/li&gt;
&lt;li&gt;It also includes &lt;strong&gt;support for React Native 0.63&lt;/strong&gt;, letting you take advantage of features like the newly designed LogBox, Pressable component, and support for Native Colors. &lt;a href="https://reactnative.dev/blog/2020/07/06/version-0.63" rel="noopener noreferrer"&gt;Read more about React Native 0.63 here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Finally, &lt;strong&gt;SDK 39 jumps from v11 to v13 of web!&lt;/strong&gt; RNW 13 uses React 16.13.1, which will get rid of a bunch of warnings that developers were seeing on web related to lifecycle methods.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Interactive notifications in &lt;code&gt;expo-notifications&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;We’ve added support for notification categories (otherwise known as interactive notifications) to the new &lt;code&gt;expo-notifications&lt;/code&gt; library! Categories allow you to send notifications that your user can interact with without even opening your app, as well as take action based on &lt;em&gt;how&lt;/em&gt; they interacted with this notification. Here's an example of this in action on Android and iOS:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F960%2F1%2Aw1IfLkcN5kgHdCHwsFDt4g.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F960%2F1%2Aw1IfLkcN5kgHdCHwsFDt4g.gif" alt="Demonstration of interactive notification on an Android phone and iPhone, side by side"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With this latest feature, &lt;code&gt;expo-notifications&lt;/code&gt; now has all the functionality (&lt;em&gt;and more!&lt;/em&gt;) of the legacy Notifications module, so we highly recommend transitioning. (That legacy module is still available in SDK 39, but will be removed in the near future.) To learn more, read through &lt;a href="https://docs.expo.io/versions/latest/sdk/notifications/" rel="noopener noreferrer"&gt;the documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  QR code scanning on web
&lt;/h3&gt;

&lt;p&gt;You can now scan QR codes from your web apps using &lt;code&gt;expo-camera&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1200%2F1%2AxlOA_DpLmZekHGQrqE71RA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1200%2F1%2AxlOA_DpLmZekHGQrqE71RA.gif" alt="Demonstration of someone using a phone to scan a QR code from the web app on a laptop"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Google AuthSession
&lt;/h3&gt;

&lt;p&gt;Our universal authentication module, &lt;code&gt;expo-auth-session&lt;/code&gt;, now has built-in support for Google sign-in. Setup is much faster with far less code. &lt;a href="https://docs.expo.io/guides/authentication/#google" rel="noopener noreferrer"&gt;Learn more here.&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useAuthRequest&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expo-auth-session/providers/google&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;promptAsync&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useAuthRequest&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;expoClientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;iosClientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;androidClientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;webClientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Screen capture listener in &lt;code&gt;expo-screen-capture&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;In SDK 38, we added the &lt;code&gt;expo-screen-capture&lt;/code&gt; module, which allows you to prevent screenshots and screen recordings of your app. &lt;/p&gt;

&lt;p&gt;Sometimes you don't want to &lt;em&gt;prevent&lt;/em&gt; screenshots, but you &lt;em&gt;would&lt;/em&gt; like to perform some action when a user screenshots a particular screen (ahem, @Snapchat) — so in SDK 39 we’ve added &lt;code&gt;ScreenCapture.addScreenshotListener&lt;/code&gt; to allow developers to do just that.cal&lt;/p&gt;

&lt;p&gt;(Thanks to everyone who participates in our &lt;a href="https://expo.canny.io/feature-requests/p/detect-user-screenshots" rel="noopener noreferrer"&gt;feature requests&lt;/a&gt; to help us identify desired features like this one! 🙏 )&lt;/p&gt;

&lt;h3&gt;
  
  
  New Updates &amp;amp; SplashScreen modules in Managed workflow
&lt;/h3&gt;

&lt;p&gt;We've integrated the new &lt;code&gt;expo-updates&lt;/code&gt; and &lt;code&gt;expo-splash-screen&lt;/code&gt; unimodules into the Managed workflow. If you still import either the &lt;code&gt;Updates&lt;/code&gt; or the &lt;code&gt;SplashScreen&lt;/code&gt; module from the &lt;code&gt;expo&lt;/code&gt; package, you'll need to install the individual unimodules packages when you upgrade to SDK 39. &lt;/p&gt;

&lt;p&gt;One change this brings is that your &lt;code&gt;updates&lt;/code&gt; app.json configuration is &lt;strong&gt;now applied at build-time&lt;/strong&gt; rather than at runtime. We think this is more intuitive than trying to update configuration for over-the-air updates...over the air. Check out the &lt;a href="https://docs.expo.io/versions/latest/sdk/updates/" rel="noopener noreferrer"&gt;&lt;code&gt;Updates&lt;/code&gt; module documentation&lt;/a&gt; for a few other small API changes.&lt;/p&gt;

&lt;p&gt;Note that we do not yet support dark mode splash screens in the managed workflow (we're working on it!); for now, you'll need to stick with the bare workflow if you need this feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  New synchronous method in &lt;code&gt;expo-random&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;We've added a synchronous method, &lt;code&gt;Random.getRandomBytes()&lt;/code&gt;, to &lt;code&gt;expo-random&lt;/code&gt;. This enables polyfills for &lt;code&gt;crypto.getRandomValues()&lt;/code&gt;, such as &lt;a href="https://github.com/linusU/react-native-get-random-values/" rel="noopener noreferrer"&gt;react-native-get-random-values&lt;/a&gt;, to enable usage of packages like &lt;code&gt;uuid&lt;/code&gt; in managed apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Experimental: &lt;code&gt;react-native-reanimated&lt;/code&gt; v2 alpha support
&lt;/h3&gt;

&lt;p&gt;The second major version of this library offers a much easier API, along with significantly improved performance characteristics. It requires some extra configuration that you must opt into in order to use; read more in our &lt;a href="https://docs.expo.io/versions/latest/sdk/reanimated/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Alternatively, you can skip the manual configuration steps if you want to just create a new app with this configured already:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;npx&lt;/span&gt; &lt;span class="nx"&gt;crna&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;reanimated2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 We're still working on support for react-native-reanimated v2 alpha in Snack; this may be available in the coming weeks after this release.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  📱 Expo development client apps
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Synchronous app loads
&lt;/h3&gt;

&lt;p&gt;All projects now load synchronously in the iOS and Android Expo development clients! Previously, the loading behavior of published projects was based on their &lt;code&gt;updates&lt;/code&gt; configuration in app.json; this configuration now applies only to standalone apps. This means that when you're developing or testing your project or showing it to stakeholders, you'll always have the latest version.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2ATEZDEWw2bGhupzmtR3IcJw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2ATEZDEWw2bGhupzmtR3IcJw.png" alt="Screenshot of Expo Go app showing a checking for updates status"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, we've added an indicator to the loading screen to give you more information about what's happening. (Don't worry, this won't show up in your standalone app!) And if you want to remove it in the Expo client, simply publish your project with &lt;code&gt;"developmentClient": { "silentLaunch": true }&lt;/code&gt; in your app.json.&lt;/p&gt;

&lt;h3&gt;
  
  
  New project details screen
&lt;/h3&gt;

&lt;p&gt;Long-press on projects to see more info about them. Pressing on a project that requires an unsupported SDK version will now open the details screen, rather than attempting to open the project and showing an error.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F960%2F1%2ApqQtpgjaB7y8B4WVU0TiVw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F960%2F1%2ApqQtpgjaB7y8B4WVU0TiVw.gif" alt="Demonstration of interaction for project details screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Password autofill
&lt;/h3&gt;

&lt;p&gt;Sign in faster with autofill for passwords and usernames on iOS and Android.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AwiOI7Gl4XcpnHucXkx9RKA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AwiOI7Gl4XcpnHucXkx9RKA.png" alt="Screenshot of sign-in screen prompting password auto-fill on a phone"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  SDK versions
&lt;/h3&gt;

&lt;p&gt;See what SDK version your projects are using and whether they need an update.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2A5dmCJ4wfqRtr_0dBVKDxqw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2A5dmCJ4wfqRtr_0dBVKDxqw.png" alt="Screenshot of project list with SDK version info on each"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  📝 Docs improvements
&lt;/h1&gt;

&lt;p&gt;Our docs recently got a makeover! Most of the changes are subtle but we hope they will make your reading experience easier and more pleasant. They'll also feel more like part of the &lt;a href="http://expo.io" rel="noopener noreferrer"&gt;expo.io&lt;/a&gt; website. Be sure to &lt;a href="https://docs.expo.io" rel="noopener noreferrer"&gt;check them out&lt;/a&gt; as you're upgrading to SDK 39.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2Adj45mrboHaZgF9PEzfxELA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2Adj45mrboHaZgF9PEzfxELA.png" alt="Screenshot of an API page with right sidebar table-of-contents"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’ve also added a right sidebar to &lt;a href="https://docs.expo.io/guides/" rel="noopener noreferrer"&gt;Guides&lt;/a&gt; and &lt;a href="https://docs.expo.io/versions/latest/" rel="noopener noreferrer"&gt;API Reference&lt;/a&gt; to show the table-of-contents for those pages. If, like us, you find yourself jamming on ⌘/Ctrl+F to dig through reference docs, this’ll help you get a quick sense of the page as a whole, and jump straight to what you need. &lt;/p&gt;

&lt;h1&gt;
  
  
  🍩 Snack improvements
&lt;/h1&gt;

&lt;p&gt;Snack now checks all TypeScript and JavaScript files for lint errors.  You can easily see files that need your attention in the file explorer, or even jump directly to the error from the &lt;em&gt;Problems&lt;/em&gt; tab:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmlhqjr45dbk2t4dmmnqv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmlhqjr45dbk2t4dmmnqv.png" alt="Demonstration of jumping to errors in a Snack project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🐛 Bug bash
&lt;/h1&gt;

&lt;p&gt;We celebrated SDK 38 by organizing an internal "bug bash" to take an extra-deep dive through the GitHub issues in both the Expo and Expo CLI repositories. Throughout the month of July, we addressed over 420 issues noticed and opened by all of you, and shaved more than 20% off the day-to-day issue counts. We want to thank everyone who opens high-quality issues to help make Expo better for us all. &lt;/p&gt;

&lt;p&gt;Some of the most notable changes surfacing from our bug bash come from &lt;code&gt;expo-av&lt;/code&gt;. Background audio on iOS is much more reliable, we improved stability and memory usage on both platforms, and addressed plenty of other bugs and edge cases. But there were many fixes across our entire SDK: almost every package was touched at least once! You can see the full list of changes in the &lt;a href="https://github.com/expo/expo/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Android permissions
&lt;/h3&gt;

&lt;p&gt;We also did a full audit of how we handle native Android permissions as part of our bug bash. With the help of your feedback, we updated our &lt;a href="https://docs.expo.io/versions/latest/sdk/permissions/" rel="noopener noreferrer"&gt;permissions documentation&lt;/a&gt; to better communicate each module's required and optional permissions. We also added more context around the behavior of permissions on different platforms. If you still have questions, or are unsure about the permissions in your standalone app, don't hesitate to ask in our &lt;a href="https://forums.expo.io/" rel="noopener noreferrer"&gt;forums&lt;/a&gt;!&lt;/p&gt;

&lt;h1&gt;
  
  
  🌐 Expo CLI
&lt;/h1&gt;

&lt;p&gt;This version brings TONS of features and quality-of-life improvements across our entire CLI. Here are a few of the fun ones!&lt;/p&gt;

&lt;h3&gt;
  
  
  Programmatic access
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.expo.io/accounts/personal/#personal-access-tokens" rel="noopener noreferrer"&gt;Personal Access Tokens&lt;/a&gt; let you run any &lt;code&gt;expo&lt;/code&gt; action (other than signing in and out) in CI or scripts without sharing your personal credentials. You can generate distinct tokens for each service, monitor usage, and disable individual tokens in the unfortunate event that your credentials are compromised.&lt;/p&gt;

&lt;h3&gt;
  
  
  Selecting devices
&lt;/h3&gt;

&lt;p&gt;You can now pick which device or simulator to run your app on.&lt;/p&gt;

&lt;p&gt;After running &lt;code&gt;expo start&lt;/code&gt;, press:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;shift+i&lt;/strong&gt; to select an iOS simulator&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;shift+a&lt;/strong&gt; to select a connected Android device or emulator. You can also run your project on multiple Android devices at the same time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1fi43cq5pd0j1pqwlkqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1fi43cq5pd0j1pqwlkqm.png" alt="Demonstration of selecting simulator or emulator devices through Expo CLI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Apple Keychain support
&lt;/h3&gt;

&lt;p&gt;Now you can skip typing your Apple ID email every time you want to build or upload iOS apps! The Apple ID is suggested from the last email you entered—just press enter to use it again. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AKmjbwrZZEq4RdZFq9kTInw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AKmjbwrZZEq4RdZFq9kTInw.png" alt="Screenshot of CLI with Apple ID suggestion"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MacOS users&lt;/strong&gt; can also use the native Keychain to autofill the password automatically when building, and uploading iOS apps. This can be disabled with &lt;code&gt;EXPO_NO_KEYCHAIN=true&lt;/code&gt;. &lt;a href="https://docs.expo.io/distribution/security/#keychain" rel="noopener noreferrer"&gt;Learn more here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AnMSoGHW7vag7lCNqFgQtsA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AnMSoGHW7vag7lCNqFgQtsA.png" alt="Screenshot of password autofill prompt in Expo CLI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Publish stats
&lt;/h3&gt;

&lt;p&gt;When publishing to Expo's hosting service (via &lt;code&gt;expo publish&lt;/code&gt;), you can now see the JavaScript bundle sizes for each platform. Smaller bundles means &lt;a href="https://expo.fyi/javascript-bundle-sizes" rel="noopener noreferrer"&gt;faster startup time&lt;/a&gt;. For a full size breakdown, use our &lt;a href="https://github.com/IjzerenHein/react-native-bundle-visualizer" rel="noopener noreferrer"&gt;bundle visualizer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2Ap2ZCahun1sufNlNGcyrMXw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2Ap2ZCahun1sufNlNGcyrMXw.png" alt="Screenshot of bundle sizes displaying during publish"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  New help menu
&lt;/h3&gt;

&lt;p&gt;Running &lt;code&gt;expo --help&lt;/code&gt; shows a newly redesigned menu:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AVANWk9b3g3zUUEtMa6p-pQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AVANWk9b3g3zUUEtMa6p-pQ.png" alt="Screenshot of new help menu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Export public-url prompt
&lt;/h3&gt;

&lt;p&gt;Running &lt;code&gt;expo export&lt;/code&gt; will now prompt you for a &lt;code&gt;public-url&lt;/code&gt; if you didn't already provide one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2Acr3lHhbTk1_YtG6RCxHSGw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2Acr3lHhbTk1_YtG6RCxHSGw.png" alt="Screenshot of Expo CLI prompting for a public URL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Eject improvements
&lt;/h3&gt;

&lt;p&gt;We've been gradually rolling out improvements to &lt;code&gt;eject&lt;/code&gt;, and with SDK 39 nearly all of your config in app.json / app.config.js will be applied to the generated native projects when you run eject. Some of the recent improvements include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iOS and Android app icons and splash screens support.&lt;/li&gt;
&lt;li&gt;iOS locales and iPad support.&lt;/li&gt;
&lt;li&gt;Android backups.&lt;/li&gt;
&lt;li&gt;iOS and Android now have their bundle ID or package name added to the list of URI schemes. This mirrors how &lt;code&gt;expo build&lt;/code&gt; works, and makes authentication APIs easier to setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only property that is not yet applied automatically is iCloud entitlements, and you can enable this in Xcode.&lt;/p&gt;

&lt;h1&gt;
  
  
  ⚠️ Service workers on web are now opt-in
&lt;/h1&gt;

&lt;p&gt;Starting in SDK 39, offline support is no longer enabled by default in Expo's Webpack config. You can opt-in to offline support and service workers by customizing the Webpack config; &lt;a href="https://github.com/expo/fyi/blob/master/enabling-web-service-workers.md" rel="noopener noreferrer"&gt;more info here&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  🧹 Dropping SDK 35, will drop SDK 36 next release
&lt;/h1&gt;

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

&lt;p&gt;Our next release is planned for December and, at that time, we’ll be dropping support for SDK 36. If your project is running on SDK 36, consider upgrading to a newer version in the coming months.&lt;/p&gt;

&lt;h1&gt;
  
  
  Upgrading your app
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Managed workflow
&lt;/h3&gt;

&lt;p&gt;Here’s how to upgrade your app to Expo SDK 39.0.0 from 38.0.0:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;expo upgrade&lt;/code&gt; in your project directory (requires the latest version of &lt;code&gt;expo-cli&lt;/code&gt;, you can update with &lt;code&gt;npm i -g expo-cli&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;If you import the &lt;code&gt;SplashScreen&lt;/code&gt; or &lt;code&gt;Updates&lt;/code&gt; modules from the &lt;code&gt;expo&lt;/code&gt; package, install and import from the &lt;code&gt;expo-splash-screen&lt;/code&gt; / &lt;code&gt;expo-updates&lt;/code&gt; packages instead. (See the &lt;a href="https://docs.expo.io/versions/latest/sdk/updates/" rel="noopener noreferrer"&gt;Updates documentation&lt;/a&gt; for additional small API changes.)&lt;/li&gt;
&lt;li&gt;Make sure to check the &lt;a href="https://github.com/expo/expo/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt;changelog&lt;/a&gt; for other breaking changes!&lt;/li&gt;
&lt;li&gt;Note that there are two known issues with the iOS and Android development clients for SDK 39; one related to a &lt;a href="https://github.com/expo/expo/issues/10263" rel="noopener noreferrer"&gt;SplashScreen warning&lt;/a&gt; and one related to &lt;a href="https://github.com/expo/expo/issues/10264" rel="noopener noreferrer"&gt;reloading projects by pressing 'r' twice&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Update the Expo app on your phones from the App Store / Google Play. &lt;code&gt;expo-cli&lt;/code&gt; will automatically update your apps in simulators if you delete the existing apps, or you can run &lt;code&gt;expo client:install:ios&lt;/code&gt; and &lt;code&gt;expo client:install:android&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If you built a standalone app previously, &lt;a href="https://docs.expo.io/versions/latest/workflow/publishing/#limitations" rel="noopener noreferrer"&gt;remember&lt;/a&gt; that you'll need to create a new build in order to update the SDK version. Run &lt;code&gt;expo build:ios&lt;/code&gt; and/or &lt;code&gt;expo build:android&lt;/code&gt; when you are ready to do a new build for submission to stores.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bare workflow
&lt;/h3&gt;

&lt;p&gt;The Bare workflow lets you operate independently of the Expo SDK cycle, updating RN versions and versions of individual Expo packages however and whenever you want. However, if you’re excited to go ahead and update everything right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;expo upgrade&lt;/code&gt; in your project directory (requires the latest version of &lt;code&gt;expo-cli&lt;/code&gt;; you can update with &lt;code&gt;npm i -g expo-cli&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Before running your app again, you’ll also need to manually apply changes to your native projects in order to upgrade to RN 0.63.2. (See the &lt;a href="https://react-native-community.github.io/upgrade-helper/?from=0.62.2&amp;amp;to=0.63.2" rel="noopener noreferrer"&gt;React Native upgrade helper&lt;/a&gt; for more detail.) Once that’s done, run &lt;code&gt;npx pod-install&lt;/code&gt;, then rebuild your native projects with &lt;code&gt;yarn ios&lt;/code&gt; and &lt;code&gt;yarn android&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Make sure to check the &lt;a href="https://github.com/expo/expo/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt;changelog&lt;/a&gt; for other breaking changes!&lt;/li&gt;
&lt;li&gt;Warning: if you use any custom Babel configuration (e.g. &lt;code&gt;babel-plugin-module-resolver&lt;/code&gt;), you may encounter &lt;a href="https://github.com/facebook/react-native/pull/29477" rel="noopener noreferrer"&gt;this bug with React Native 0.62.2&lt;/a&gt;. The React Native team is aware of the issue and working on a 0.63.3 release that includes the fix. The workaround we recommend for now is to pull the diff from this pull request into your project using &lt;a href="https://www.npmjs.com/package/patch-package" rel="noopener noreferrer"&gt;patch-package&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;🗣  If you have general questions or comments, please share them in our &lt;a href="http://forums.expo.io" rel="noopener noreferrer"&gt;community forums&lt;/a&gt;! We also welcome &lt;a href="http://github.com/expo/expo/issues" rel="noopener noreferrer"&gt;issue reports&lt;/a&gt; (and, of course, &lt;a href="http://github.com/expo/expo/pulls" rel="noopener noreferrer"&gt;PRs&lt;/a&gt;) on Github.&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Expo SDK 37 is now available</title>
      <dc:creator>jess (she/her)</dc:creator>
      <pubDate>Tue, 31 Mar 2020 22:21:13 +0000</pubDate>
      <link>https://forem.com/expo/expo-sdk-37-is-now-available-69g</link>
      <guid>https://forem.com/expo/expo-sdk-37-is-now-available-69g</guid>
      <description>&lt;p&gt;Today, we're announcing  our first release of the decade! &lt;strong&gt;💐🌸Expo SDK v37.0.0🌸🌷&lt;/strong&gt; (which uses React Native 0.61 internally) is our Spring release, but also inaugurates a new, bolder approach to empowering developers. &lt;/p&gt;

&lt;p&gt;Even as we double down on making our Expo SDK more robust and reliable, we're making a bigger, broader investment in developer flexibility: in the future you'll no longer have to choose between Expo features like OTA updates and customizing your app the way you want.&lt;/p&gt;

&lt;p&gt;Read on for more details. And, last but not least, we wish you health and wellness from our desks at home in Palo Alto, San Francisco, Vancouver, NYC, Boca Raton, Helsinki, Amsterdam, Nijmegen and Krakow.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🗓 Quarterly SDK Releases&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;First, a quick note about our schedule for 2020. In the past, we've scheduled SDK releases sporadically, based on a number of factors (new features, new versions of React Native, external constraints such as new versions of iOS, etc.).&lt;/p&gt;

&lt;p&gt;This year, we're aiming for more predictable time-based releases. We're planning to put out &lt;strong&gt;a new SDK version at the end of each quarter&lt;/strong&gt;. SDK 37 is the first of these and, barring unforeseen circumstances, we expect to release three more SDK versions this year in June, September, and December. We hope this in turn will let teams plan their own development/upgrade cycles and release cadences with more predictability.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🌟 ExpoKit → Bare Workflow&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In December, we shared our plans to spend 2020 making major investments to increasing your flexibility in customizing your apps with native code whenever and however you want. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Bare workflow now fully replaces ExpoKit.&lt;/strong&gt; With the introduction of Updates, SplashScreen, and Notifications modules to the Bare workflow, we've reached or exceeded feature parity between the Bare and ExpoKit workflows, and so we are deprecating ExpoKit with SDK37. Don't use ExpoKit in new projects going forward; use the Bare workflow instead. When you can, migrate your existing projects that use ExpoKit to the Bare workflow.&lt;/p&gt;

&lt;p&gt;To ease the transition for ExpoKit users, we'll still release ExpoKit for SDK37–38, but &lt;strong&gt;SDK 38 will be the last new ExpoKit update&lt;/strong&gt;. After SDK 38, your ExpoKit apps in the App Store and Play Store will continue to run indefinitely, and to get bugfixes and new features in Expo modules, you'll need to move to either the Bare or Managed workflow.&lt;/p&gt;

&lt;p&gt;Read more details, including a guide for migrating ExpoKit projects to the Bare workflow, in &lt;a href="https://dev.to/expo/time-to-start-using-expo-s-bare-workflow-expokit-is-now-deprecated-51ih"&gt;this blog post&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;📱 New Dev Menu in Expo Client&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Both the iOS and Android Expo clients have a spiffy new dev menu that is friendlier, more informative, and nicer looking! You can activate it in development mode by shaking your device, as always.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x1rLCZqI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AvdANJd_iJw8vxsrscB7B8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x1rLCZqI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AvdANJd_iJw8vxsrscB7B8g.png" alt="Screenshots of new Expo Client dev menu in dark mode on Android."&gt;&lt;/a&gt;&lt;/p&gt;
New dev menu in dark mode on Android. Hello there! 👋



&lt;h2&gt;
  
  
  &lt;strong&gt;🔥 Firebase Analytics 📈 and Phone Auth ☎️&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Firebase Analytics is now available in the Managed workflow! This highly requested feature allows you to record events into Google Analytics. It uses the native Firebase SDK in your production app and a fast JavaScript implementation in the Expo client. Read more about it in this &lt;a href="https://dev.to/expo/using-firebase-analytics-with-expo-2ihp"&gt;blog post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Another popular request is support for Firebase Phone Authentication. We've created a helper package called expo-firebase-recaptcha that now makes phone authentication possible by providing the building blocks needed to create the reCAPTCHA verifier required by Firebase Phone Auth. (If you're looking for a ready-to-bake option, our friends at &lt;a href="https://www.doorman.cool/"&gt;doorman.cool&lt;/a&gt; give you your back-end and UI both!) expo-firebase-recaptcha is currently undergoing final testing and should be available shortly after the SDK release.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🚀 Expo Web Updates&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;As Expo Web gets closer to V1, we’ve been refining the dev tools and feature set! You can follow the progress &lt;a href="https://github.com/expo/expo/issues/6782"&gt;here&lt;/a&gt; and decide if it meets your needs for building a website. We are currently working on web support for React Navigation v5, but until then you should use any other web solution for navigation, such as &lt;a href="https://docs.expo.io/versions/latest/guides/using-nextjs/"&gt;Expo + Next.js&lt;/a&gt;. Check out &lt;a href="https://reactnative.directory/"&gt;React Native Directory&lt;/a&gt; (&lt;a href="https://github.com/react-native-community/directory"&gt;source&lt;/a&gt;) for an example of an Expo + Next.js app live in production!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;New Features&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We’ve improved web support for &lt;code&gt;react-native-gesture-handler&lt;/code&gt;, &lt;code&gt;react-native-reanimated&lt;/code&gt;, and various other modules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improved Tooling&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;expo start:web --https&lt;/code&gt; Now automatically signs SSL certificates to skip the browser warnings on desktop. This makes testing secure features like Crypto, and Permissions much easier!&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;expo start:web --android&lt;/code&gt; Now attempts to open your website in Chrome on an Android emulator.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;expo build:web --clear&lt;/code&gt; Clears the Webpack and PWA caches.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Smaller, faster web build&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;35%&lt;/strong&gt; smaller: Service Worker cache&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;23%&lt;/strong&gt; smaller: PWA Manifest&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;31%&lt;/strong&gt; smaller: Asset Manifests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quality-of-life improvements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Improved loading speeds and progress indicator.&lt;/li&gt;
&lt;li&gt;  Better source maps and debugging.&lt;/li&gt;
&lt;li&gt;  Web support for beta &lt;code&gt;app.config.js&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Favicons&lt;/strong&gt; are now automatically generated in &lt;code&gt;expo start:web&lt;/code&gt; and &lt;code&gt;expo build:web&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  To set the favicon template image, define it in your &lt;code&gt;app.json&lt;/code&gt;'s &lt;code&gt;expo.web.favicon&lt;/code&gt; or &lt;code&gt;expo.icon&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  You can use remote URLs, or local images of type png, jpg, gif (use PNG for best results).&lt;/li&gt;
&lt;li&gt;  If you link a custom favicon in the &lt;code&gt;&amp;lt;head /&amp;gt;&lt;/code&gt; your &lt;code&gt;web/index.html&lt;/code&gt; then generation will be skipped entirely.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Robust PWA Generation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Splash screen and icon generation is now much faster.&lt;/li&gt;
&lt;li&gt;  For even better generation speed, ensure you have sharp installed globally with &lt;code&gt;npm i -g sharp-cli&lt;/code&gt;, otherwise Jimp will be used.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;web/index.html&lt;/code&gt; — &lt;code&gt;&amp;lt;head /&amp;gt;&lt;/code&gt; is organized better and adds less opinionated values.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can now generate PWA assets with much finer control by using the &lt;a href="https://github.com/expo/expo-cli/tree/master/packages/pwa#usage-in-expo"&gt;&lt;code&gt;expo-pwa&lt;/code&gt;&lt;/a&gt; &lt;a href="https://github.com/expo/expo-cli/tree/master/packages/pwa#usage-in-expo"&gt;CLI&lt;/a&gt;. This can even be used for Expo + Next.js projects!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Deprecated experimental web features&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We’ve refined a bunch of experimental features to improve developer experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Removed &lt;code&gt;expo.web.dangerous.viewport&lt;/code&gt;: Use the &lt;code&gt;&amp;lt;meta name="viewport" /&amp;gt;&lt;/code&gt; in your &lt;code&gt;web/index.html&lt;/code&gt;, if your template is missing this value then you'll be notified that one is added for legacy support.&lt;/li&gt;
&lt;li&gt;  Removed &lt;code&gt;expo.web.dangerous.noJavaScriptMessage&lt;/code&gt;: Use the new &lt;code&gt;&amp;lt; noscript /&amp;gt;&lt;/code&gt; in your &lt;code&gt;web/index.html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Removed &lt;code&gt;expo.web.build.rootId&lt;/code&gt;: We've settled on using &lt;code&gt;root&lt;/code&gt; as the ID for the root element of the SPA. "root" is the default value of create-react-app and widely used in the React community.&lt;/li&gt;
&lt;li&gt;  Removed &lt;code&gt;expo.web.meta.googleSiteVerification&lt;/code&gt;, &lt;code&gt;expo.web.meta.twitter&lt;/code&gt;, &lt;code&gt;expo.web.meta.openGraph&lt;/code&gt;, &lt;code&gt;expo.web.meta.microsoft&lt;/code&gt; in favor of meta tags in the &lt;code&gt;&amp;lt;head/&amp;gt;&lt;/code&gt; of your template &lt;code&gt;web/index.html&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Removed &lt;code&gt;WebpackBundleAnalyzer&lt;/code&gt;: See how to use &lt;a href="https://github.com/expo/expo/blob/master/docs/pages/versions/v36.0.0/guides/web-performance.md#using-bundle-analyzer"&gt;WebpackBundlerAnalyzer with Expo web&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  Removed Gzip &amp;amp; Brotli compression in favor of hosting providers and CI builds.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Upgrading Web&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Most web projects won’t require any modifications — just install the latest version of Expo CLI.&lt;/p&gt;

&lt;p&gt;If you have &lt;code&gt;@expo/webpack-config&lt;/code&gt; installed locally, be sure to upgrade it to the latest (currently &lt;code&gt;0.11.11&lt;/code&gt;). Check out our &lt;a href="https://github.com/expo/expo-cli/tree/master/packages/webpack-config"&gt;Expo Webpack docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have copied the &lt;code&gt;web/index.html&lt;/code&gt; to your project, be sure to review the latest template here: &lt;a href="https://github.com/expo/expo-cli/blob/master/packages/webpack-config/web-default/index.html"&gt;&lt;code&gt;web/index.html&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the &lt;a href="https://github.com/expo/expo-cli/blob/89cb4e6146be6ac04a65e414d847393c35694c30/packages/webpack-config/web-default/index.html#L6-L13"&gt;viewport&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Copy the &lt;a href="https://github.com/expo/expo-cli/blob/89cb4e6146be6ac04a65e414d847393c35694c30/packages/webpack-config/web-default/index.html#L15-L62"&gt;styles&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Copy the &lt;a href="https://github.com/expo/expo-cli/blob/89cb4e6146be6ac04a65e414d847393c35694c30/packages/webpack-config/web-default/index.html#L66-L89"&gt;&lt;code&gt;&amp;lt; noscript/&amp;gt;&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Change the &lt;a href="https://github.com/expo/expo-cli/blob/89cb4e6146be6ac04a65e414d847393c35694c30/packages/webpack-config/web-default/index.html#L91"&gt;root id&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  If you don’t have a custom favicon, remove the favicon link: &lt;code&gt;&amp;lt;link rel="shortcut icon" href="%WEB_PUBLIC_URL%favicon.ico" /&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also remove &lt;code&gt;web-report&lt;/code&gt; from your &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🌐 UIWebView Removed&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you’ve submitted an iOS build to the App Store recently, you may have received a warning from Apple regarding UIWebView. Apple will soon begin rejecting App Store submissions that use this deprecated API.&lt;/p&gt;

&lt;p&gt;For SDK 37, we’ve updated all of our native dependencies so they no longer rely on UIWebView, meaning SDK 37 builds are UIWebView-free ✨. Additionally, we’ve backported this change to our SDK 36 builders so you can continue to submit new builds of SDK 36 apps.&lt;/p&gt;

&lt;p&gt;This means that, in order to submit a new build to the App Store, you’ll need to be on SDK 36 or 37. Older apps already in the App Store will stay available and continue to work just fine.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🥽 Deprecating AR&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The AR module, which exposes the iOS ARKit library, has been experimental its entire lifetime. Rather than continue to maintain this library, we’ve decided to focus our limited resources elsewhere. SDK 37 will be the last SDK release that includes this module.&lt;/p&gt;

&lt;p&gt;If you use the AR module and would be interested in maintaining a community fork of the package, let us know by email at &lt;a href="//mailto:community@expo.io"&gt;community@expo.io&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🧹 Dropping SDK 33 from the Expo client&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  &lt;strong&gt;🛠 API improvements and additions&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;New Updates module API&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;As part of the ExpoKit → Bare workflow migration, we’re releasing &lt;code&gt;expo-updates&lt;/code&gt;, a new module that allows loading over-the-air updates in bare React Native apps. You can use this module with any server of your choice that implements the Expo protocol. We also provide an updates service as part of our Developer Services that you can optionally use. &lt;/p&gt;

&lt;p&gt;This new library can be used in both Managed and Bare workflow projects. The JS module has a similar but slightly different API than the &lt;code&gt;Updates&lt;/code&gt; module included with the &lt;code&gt;expo&lt;/code&gt; package. You can still &lt;code&gt;import { Updates } from 'expo';&lt;/code&gt; in SDK 37, but we’ll remove this module in SDK 38, so you should switch to the new &lt;code&gt;expo-updates&lt;/code&gt; module soon.&lt;/p&gt;

&lt;p&gt;To use the new Updates API in a Managed or Bare workflow project, &lt;a href="https://docs.expo.io/versions/latest/sdk/updates/"&gt;follow the setup instructions in the docs&lt;/a&gt;. The changes to the API are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;Updates.fetchUpdateAsync&lt;/code&gt; no longer accepts any arguments. (It still resolves when an update is finished downloading.)&lt;/li&gt;
&lt;li&gt;  The listener in &lt;code&gt;Updates.addListener&lt;/code&gt; will only receive events about automatically downloaded updates, not downloads triggered manually by &lt;code&gt;Updates.fetchUpdateAsync&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Event names have changed.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;Updates.reloadFromCache&lt;/code&gt; has been renamed to &lt;code&gt;Updates.reloadAsync&lt;/code&gt;, and &lt;code&gt;Updates.reload&lt;/code&gt; has been removed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Snack improvements&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Replaced network traffic with iframe messages for faster and more reliable updates to the web runtime&lt;/li&gt;
&lt;li&gt;  Removed most modules bundled with the Expo client from the snack runtime for faster loads of the web runtime and the ability to select specific versions&lt;/li&gt;
&lt;li&gt;  Fixed issue where web runtime would sometimes error with message &lt;code&gt;RegeneratorRuntime is not defined&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Fixed issue where some packages with TypeScript definitions would be incorrectly bundled&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Other fixes and improvements&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There are lots of other changes included in this release! Check out the full list on our &lt;a href="https://github.com/expo/expo/blob/master/CHANGELOG.md#3700"&gt;changelog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Library updates &amp;amp; breaking changes&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Historically, we’ve listed these in the release notes; now you can check them out on our &lt;a href="https://github.com/expo/expo/blob/master/CHANGELOG.md#3700"&gt;changelog&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;⬆️ Upgrading Your App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s how to upgrade your app to Expo SDK 37.0.0 from 36.0.0:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Run &lt;code&gt;expo upgrade&lt;/code&gt; in your project directory (requires the latest version of &lt;code&gt;expo-cli&lt;/code&gt;, you can update with &lt;code&gt;npm i -g expo-cli&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;  Make sure to check the &lt;a href="https://github.com/expo/expo/blob/master/CHANGELOG.md#3600"&gt;changelog&lt;/a&gt; for other breaking changes!&lt;/li&gt;
&lt;li&gt;  Update the Expo app on your phones from the App Store / Google Play. &lt;code&gt;expo-cli&lt;/code&gt; will automatically update your apps in simulators if you delete the existing apps, or you can run &lt;code&gt;expo client:install:ios&lt;/code&gt; and &lt;code&gt;expo client:install:android&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  If you built a standalone app previously, &lt;a href="https://docs.expo.io/versions/latest/workflow/publishing/#limitations"&gt;remember&lt;/a&gt; that you will need to create a new build in order to update the SDK version. Run &lt;code&gt;expo build:ios&lt;/code&gt; and/or &lt;code&gt;expo build:android&lt;/code&gt; when you are ready to do a new build for submission to stores.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Updating ExpoKit to SDK 37
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  Follow the &lt;a href="https://docs.expo.io/versions/latest/expokit/expokit?source=post_page---------------------------#upgrading-expokit"&gt;instructions&lt;/a&gt; given in the docs.&lt;/li&gt;
&lt;li&gt;  Please remember that SDK 38 will be the final update to ExpoKit. To read more, including our recommendations for migrating, see &lt;a href="https://dev.to/expo/time-to-start-using-expo-s-bare-workflow-expokit-is-now-deprecated-51ih"&gt;this blog post&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;🗣 If you have general questions or comments, please share them in our &lt;a href="https://forums.expo.io"&gt;community forums&lt;/a&gt;! We also welcome issue reports (and, of course, PRs) on &lt;a href="https://github.com/expo/expo/issues"&gt;Github&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>news</category>
    </item>
  </channel>
</rss>
