Skip to content

Latest commit

 

History

History
2227 lines (2101 loc) · 327 KB

CHANGELOG.md

File metadata and controls

2227 lines (2101 loc) · 327 KB

Changelog

This is the log of notable changes to the Expo client that are developer-facing. Package-specific changes not released in any SDK will be added here just before the release. Until then, you can find them in changelogs of the individual packages (see packages directory).

Unpublished

📚 3rd party library updates

🛠 Breaking changes

🎉 New features

🐛 Bug fixes

42.0.0 — 2021-06-16

📚 3rd party library updates

  • Updated lottie-react-native from 3.5.0 to 4.0.2. (#13151 by @tsapeta)
  • Updated @react-native-picker/picker from 1.9.11 to 1.16.1. (#13152 by @ajsmth)
  • Updated @react-native-community/datetimepicker from 3.2.0 to 3.5.2. (#13162 by @cruzach)
  • Updated react-native-screens from 3.0.0 to 3.3.0. (#13159 by @tsapeta)
  • Updated react-native-reanimated from 2.1.0 to 2.2.0. (#13161 by @lukmccall)
  • Updated react-native-svg from 12.1.0 to 12.1.1. (#13154 by @brentvatne)
  • Updated react-native-webview from 11.2.3 to 11.6.2. (#13188 by @kudo)
  • Updated @react-native-community/masked-view to @react-native-masked-view/masked-view 0.2.4 (note: old package is compatible with underlying native code still) (#13212 by @brentvatne)

🛠 Breaking changes

  • expo-battery
    • Removed following types: BatteryLevelUpdateListener , BatteryStateUpdateListener and PowerModeUpdateListener as they were only wrapping one-argument events responses. Use event types explicitly instead: BatteryLevelEvent , BatteryStateEvent and PowerModeEvent. (#12592 by @Simek) (#12592 by @simek)
  • expo-constants
  • expo-payments-stripe
    • Downgraded underlying native library on Android from v16 to v8.
    • Deprecated expo-payments-stripe in favor of @stripe/stripe-react-native. (#13259 by @cruzach) (#13259 by @cruzach)

🎉 New features

🐛 Bug fixes

💡 Others

  • expo-ads-admob
  • expo-ads-facebook
  • @unimodules/react-native-adapter
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • @unimodules/core
    • Replaced clang's typeof with __typeof that works with both C++ and GNU++. (by @tsapeta) (by @tsapeta)
  • expo-analytics-segment
  • expo-app-auth
  • expo-analytics-amplitude
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-application
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-av
    • Migrated from unimodules-file-system-interface and unimodules-permissions-interface to expo-modules-core. (#12961 by @tsapeta) (#12961 by @tsapeta)
  • expo-background-fetch
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-battery
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-barcode-scanner
  • expo-branch
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-brightness
  • expo-camera
  • expo-cellular
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-calendar
  • expo-constants
  • expo-contacts
  • expo-crypto
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-document-picker
    • Migrated from unimodules-file-system-interface to expo-modules-core.
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
    • Refactored uuid imports to v7 style. (#13037 by @giautm) (#13037 by @giautm)
  • expo-device
  • expo-file-system
    • Migrated from unimodules-file-system-interface to expo-modules-core.
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
    • Refactored uuid imports to v7 style. (#13037 by @giautm) (#13037 by @giautm)
  • expo-error-recovery
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-firebase-core
  • expo-firebase-analytics
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-facebook
  • expo-font
  • expo-google-sign-in
  • expo-gl
    • Migrated from unimodules-camera-interface, unimodules-file-system-interface to expo-modules-core.
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-haptics
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-image-manipulator
    • Migrated from unimodules-file-system-interface to expo-modules-core.
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
    • Converted Android code to Kotlin. (#13231 by @dsokal) (#13231 by @dsokal)
  • expo-image-picker
    • Migrated from unimodules-file-system-interface and unimodules-permissions-interface to expo-modules-core. (#12961 by @tsapeta) (#12961 by @tsapeta)
  • expo-face-detector
    • Migrated from unimodules-face-detector-interface and unimodules-file-system-interface to expo-modules-core. (#12936 by @tsapeta) (#12936 by @tsapeta)
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-intent-launcher
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-localization
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-linear-gradient
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-local-authentication
  • expo-mail-composer
    • Migrated from unimodules-file-system-interface to expo-modules-core.
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-network
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-location
  • expo-media-library
    • Migrated from unimodules-file-system-interface and unimodules-permissions-interface to expo-modules-core. (#12961 by @tsapeta) (#12961 by @tsapeta)
  • expo-payments-stripe
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-permissions
  • expo-notifications
  • expo-print
    • Migrated from unimodules-file-system-interface to expo-modules-core.
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-random
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-screen-capture
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-secure-store
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-screen-orientation
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-sharing
    • Migrated from unimodules-file-system-interface to expo-modules-core.
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-sensors
  • expo-sms
  • expo-speech
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-sqlite
    • Migrated from unimodules-file-system-interface to expo-modules-core.
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • expo-task-manager
  • expo-video-thumbnails
    • Migrated from unimodules-file-system-interface to expo-modules-core.
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
    • Change VideoThumbnailsOptions type definition of headers field to Record. (#13193 by @Simek) (#13193 by @Simek)
  • unimodules-app-loader
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)
  • unimodules-task-manager-interface
    • Build Android code using Java 8 to fix Android instrumented test build error. (#12939 by @kudo) (#12939 by @kudo)

41.0.0 — 2021-03-10

📚 3rd party library updates

🛠 Breaking changes

🎉 New features

🐛 Bug fixes

⚠️ Notices

📚 native library updates

40.0.0 — 2020-11-17

📚 3rd party library updates

🛠 Breaking changes

  • Removed @react-native-community/picker, replaced with @react-native-picker/picker. (#11029 by @brentvatne)
  • Removed “info”, “save” and “pin” functionalities from persistent notification shown in notification tray while developing an experience via Expo client on Android. (#10333, #10334 by @sjchmiela)
  • Removed support for androidShowExponentNotificationInShellApp property in app manifest (it was responsible for enabling persistent development notification in standalone apps). (#10335 by @sjchmiela)
  • AppLoading is extracted to the separate expo-app-loading module. (#10929 by @bbartec)
  • @unimodules/core
    • Removed org.unimodules.core.InvalidArgumentException. Please use its coded version, org.unimodules.core.errors.InvalidArgumentException, instead. (#9961 by @sjchmiela)
  • expo-analytics-amplitude
    • Upgraded native Amplitude iOS library from 4.7.1 to 6.0.0. This removes the IDFA code that was previously included with the Amplitude library. disableIDFA option for Amplitude.setTrackingOptions is removed. If you would like to collect the IDFA, you must be in the bare workflow. (#9880 by @bbarthec)
    • Renamed all methods to include the 'Async' suffix:
    • All methods now return a Promise. (#9212 by @cruzach)
  • expo-auth-session
    • expo-random is now a peer dependency rather than a dependency. (#11280 by @brentvatne)
  • expo-blur
    • Explicitly pass down only the expected props on iOS. (#10648 by @cruzach)
  • expo-branch
    • On iOS enabled use_frameworks! usage by replacing React dependency with React-Core. (#11057 by @bbarthec)
  • expo-mail-composer
  • expo-media-library
    • On iOS enabled use_frameworks! usage by replacing React dependency with React-Core. (#11057 by @bbarthec)
    • Renamed MediaLibrary.MediaLibraryAssetChangeEvent type to MediaLibrary.MediaLibraryAssetsChangeEvent.
  • expo-location
    • Make background location an opt-in permission on Android. (#10989 by @bycedric)
  • expo-notifications
    • Changed the way PermissionResponse.status is calculated on iOS. Previously, it returns the numeric value of UMPermissionStatus which does not match the TypeScript enum declaration. (#10513 by @cHaLkdusT)
    • Changed the way NotificationContent.data is calculated on iOS. Previously it was the contents of remote notification payload with all entries from under "body" moved from under "body" to root level. Now it's the sole unchanged contents of payload["body"]. Other fields of the payload can now be accessed on iOS through PushNotificationTrigger.payload (similarly to how other fields of native remote message can be accessed on Android under PushNotificationTrigger.remoteMessage). (#10453 by @sjchmiela)
    • Changed class responsible for handling Firebase events from FirebaseMessagingService to .service.NotificationsService on Android. (#10558 by @sjchmiela)
    • Changed how you can override ways in which a notification is reinterpreted from a StatusBarNotification and in which a Notification is built from defining an expo.modules.notifications#NotificationsScoper meta-data value in AndroidManifest.xml to implementing a BroadcastReceiver subclassing NotificationsService delegating those responsibilities to your custom PresentationDelegate instance. (#10558 by @sjchmiela)
    • Removed removeAllNotificationListeners method. You can (and should) still remove listeners using remove method on Subscription objects returned by addNotification…Listener. (#10883 by @sjchmiela)
  • expo-random
    • On iOS enabled use_frameworks! usage by replacing React dependency with React-Core. (#11057 by @bbarthec)
  • expo-screen-capture
  • expo-permissions
  • @expo/vector-icons

🎉 New features

  • expo-auth-session
    • Create built-in providers/google for easy Google auth. (#9361 by @EvanBacon)
    • Create built-in providers/facebook for easy Facebook auth. (#9361 by @EvanBacon)
  • expo-camera
    • Added support for video poster to show while the camera is loading on web. (#9930 by @liorJuice)
    • Added videoBitrate option for camera on Android. (#4878 by @xHeinrich)
  • expo-clipboard
    • Publish initial release to provide a migration path off of React Native Clipboard API. (#11227) by @cruzach.?
  • expo-constants
    • Added Constants.executionEnvironment to distinguish between apps running in a bare, managed standalone, or App/Play Store development client environment. (#10986 by @esamelson)
    • Added script to embed app configuration into a bare app and export this object as Constants.manifest. (#10948 and #10949 by @esamelson)
    • If manifest is defined on expo-updates then use it instead of ExponentConstants.manifest (#10668 by @esamelson)
    • Warn when developer attempts to access empty Constants.manifest in bare. Throw error when it is empty in managed. (#11028 by @esamelson)
  • expo-branch
  • expo-gl
  • expo-media-library
    • Added the MediaLibrary.presentPermissionsPickerAsync method that displays the system prompt allowing the user to change the selected permitted assets` on iOS.
  • expo-notifications
    • Added useLastNotificationResponse React hook that always returns the notification response that has been emitted most recently. (#10883 by @sjchmiela)
    • Added WeeklyTriggerInput that allows scheduling a weekly recurring notification for a specific day of week, hour and minute. It is supported on both iOS and Android. (#9973 by @RikTheunis)
    • Added getNextTriggerDateAsync method allowing you to verify manually when would the next trigger date for a particular notification trigger be. (#10455 by @sjchmiela)
    • Added support for restoring scheduled notifications alarms on Android after an app is updated. (#10708 by @sjchmiela)
  • expo-store-review
  • expo-task-manager

🐛 Bug fixes

  • Fix NotificationsHandler & ExpoNotificationCategoriesModule reading from the wrong SharedPreferences files, resulting in categories not being applied in Android standalone apps. (#10624 by @cruzach)
  • Set mIntentUri from intent in DetachActivity.onCreate to fix Linking.getInitialURL in Android standalone apps (#10535 by @esamelson)
  • Only update the splash screen when it receives update configuration values on iOS (#10512 by @brentvatne)
  • Only update the splash screen when it receives update configuration values on Android (#10522 by @esamelson)
  • Show helpful error message when expo-cli responds with an incompatible project on iOS (#10508 by @esamelson)
  • Show helpful error message when expo-cli responds with an incompatible project on Android (#10511 by @esamelson)
  • Pass experience properties correctly to turbo modules (#10504 by @esamelson)
  • Fix splash screen in standalone app builds for Android (#10519 by @bbartec)
  • Fix splash screen hideAsync warnings in client (#10294 by @bbartec)
  • Fix EXDisabledRedBox not overriding RCTRedBox, this caused a redbox to appear above the Expo client specific UI when failing to load a published app (#10498 by @sjchmiela)
  • Fix reading splash image from the android.splash config (#10494 by @bbartec)
  • Remove the large notification icon from managed apps, because there is no mechanism to set it yet (#10492 by @lukmccall)
  • Fix the app icon is always added as a notification icon (#10471 by @lukmccall)
  • expo-updates
  • @unimodules/core
    • Fixed the DoNotStrip annotation not working with classes. (#10421 by @lukmccall)
  • @unimodules/react-native-adapter
    • Fixed invalid numbers of listeners being considered unregistered on iOS, resulting in Attempted to remove more '{ModuleName}' listeners than added. errors. (#10771 by @sjchmiela)
  • expo-ads-facebook
    • Upgraded the underlying Android SDK to 5.11.0 (was 5.1.1, which has been deprecated and would result in an error). No user-facing changes involved. (#10430 by @cruzach)
    • Upgraded the underlying iOS SDK to 5.9.0. No user-facing changes involved. (#10430 by @cruzach)
    • Removed extra padding above banner ads on iOS. (#10433 by @cruzach)
  • expo-auth-session
    • Improved mechanism used to determine whether in bare or managed workflow. (#10993 by @esamelson)
  • expo-barcode-scanner
  • expo-brightness
    • Removed use of org.unimodules.core.InvalidArgumentException in favor of its coded version, org.unimodules.core.errors.InvalidArgumentException. (#9961 by @sjchmiela)
  • expo-av
    • Fix orientation being returned incorrectly for videos in portrait mode in onReadyForDisplay on iOS. (#10449 by @lachenmayer)
    • Fix looping stops after 3 times on iOS. (#10602 by @IjzerenHein)
    • Fix Audio.stopAndUnloadAsync not handling no-data on Android. (#9877 by @IjzerenHein)
  • expo-contacts
    • getContactsAsync no longer requires an exact match when providing the name query on Android. (#10127 by @cruzach)
  • expo-document-picker
    • Fixed UIDocumentPickerViewController being nil on iOS 14 and thus causing the hard-crash of the application. (#10327 by @bbarthec)
    • Fixed Promise not being fulfilled if the document picker view controller was being dismissed by gesture on iOS. (#10325 by @sjchmiela)
    • Added SSR guard. (#12420 by @EvanBacon) (#12420 by @EvanBacon)
  • expo-firebase-analytics
  • expo-gl
    • Fixed a bug causing an application crash when enabling remote debugging on Android. (#10381 by @sjchmiela)
    • Fixed support for offset in TypedArray. (#10692 by @wkozyra95)
  • expo-image-picker
  • expo-local-authentication
    • Fixed cancelAuthenticate not working in Android as expected. (#10482 by @huisf)
    • Guard against crash on Android when FragmentActivity is null creating the Biometric Prompt. (#10679 by @vascofg)
    • Guard against Null Pointer Exception on Android when calling authenticate on the Biometric Prompt after resuming the app on some devices. (#10965 by @vascofg)
    • Avoid LAContext#biometryType bug on iOS 11.0.0. (#12413 by @mickamy) (#12413 by)
  • expo-linking
    • Prevent crash in bare workflow if Constants.manifest isn't defined.
    • Improved mechanism used to determine whether in bare or managed workflow. (#10993 by @esamelson)
    • Replace useUrl with useURL and update documentation. (#12310 by @brentvatne) (#12310 by @brentvatne)
  • expo-linear-gradient
  • expo-media-library
    • Fixed RuntimeException: setDataSource failed: status = 0x80000000 caused by MediaMetadataRetriever. (#9855 by @lukmccall)
    • Fixed media-library methods failing when not all permissions were granted on iOS 14. (#10026 by @lukmccall)
  • expo-location
    • Redeliver intent when restarting task service. (#10410 by @byCedric)
    • Add missing unimodules-permissions-interface dependency
    • Lock the unimodules-permissions-interface dependency to the same version in react-native-unimodules
    • Add support for user-initiated background tracking without background permission (#12456 by @bycedric) (#12456 by @bycedric)
  • expo-notifications
    • Fixed TypeScript definition: setNotificationCategoryAsync should expect options.allowAnnouncement, not options.allowAnnouncment. (#11025 by @cruzach)
    • Fixed issue where custom notification icon and color weren't being properly applied in Android managed workflow apps. (#10828 by @cruzach)
    • Fixed case where Android managed workflow apps could crash when receiving an interactive notification. (#10608 by @cruzach)
    • Fixed case where Android apps could crash if you set a new category with a text input action without providing any options. (#10141 by @cruzach)
    • Android apps no longer rely on the submitButtonTitle property as the action button title (they rely on buttonTitle, which matches iOS behavior). (#10141 by @cruzach)
    • Fixed Notifications.requestPermissions() returning undetermined instead of a known status in some browsers. (#10296 by @sjchmiela)
    • Fixed crashing when Proguard is enabled. (#10421 by @lukmccall)
    • Fixed the application icon being always added as a notification icon. (#10471 by @lukmccall)
    • Fixed faulty trigger detection mechanism which caused some triggers with channelId specified get recognized as triggers of other types. (#10454 by @sjchmiela)
    • Fixed fatal exception sometimes being thrown when notification was received or tapped on Android due to observer being cleared before it's added. (#10640 by @sjchmiela)
    • Removed the large icon from managed workflow. (#10492 by @lukmccall)
    • Fixed crash happening due to non-existent ExpoNotificationsService being declared in AndroidManifest.xml. (#10638 by @sjchmiela)
    • Fixed notifications not playing any sound when shouldShowAlert: false but shouldPlaySound: true in setNotificationHandler. (#10699 by @cruzach)
    • Add guard against badgin usage in SSR environments. (#10741 by @bycedric)
    • Moved notification events handling from main thread to a background thread which makes users' devices more responsive. (#10762 by @sjchmiela)
    • Fixed having to define CATEGORY_DEFAULT on an Activity that is expected to receive expo.modules.notifications.OPEN_APP_ACTION intent when handling notification response. (#10755 by @sjchmiela)
    • Fixed notifications not being returned at all from getAllPresentedNotificationsAsync() if the library fails to reconstruct notification request based on marshaled copy in notification data. From now on they'll be naively reconstructed from the Android notification. (#10801 by @sjchmiela)
    • May have helped fix an issue where "initial notification response" (the one that opened the app) was not being delivered to Android apps. (#10773 by @sjchmiela)
    • Prevent scoped category IDs from being returned from setNotificationCategoryAsync. ([#12212](expo#12212 by @cruzach) (by @cruzach)
    • Fixed an issue on Android where dismissing notifications by ID inside of Expo Go did nothing. ([#12306](expo#12306 by @cruzach) (by @cruzach)
  • expo-random
    • Clarify that react-native-unimodules is a dependency in README
    • Add a placeholder .xcodeproj file so that React Native CLI autolinking will detect the EXRandom podspec
  • expo-sharing
    • Removed use of org.unimodules.core.InvalidArgumentException in favor of its coded version, org.unimodules.core.errors.InvalidArgumentException. (#9961 by @sjchmiela)
  • expo-store-review
    • [expo-store-review] Fix Android crash in failure path (#10265 by @danmaas)
  • unimodules-font-interface
  • unimodules-task-manager-interface

39.0.0 — 2020-08-18

📚 3rd party library updates

🛠 Breaking changes

  • Removed GCM entirely from the Android client and standalone apps since the server APIs have been shut down. (#6071, #9735 by @esamelson)
  • expo
    • The SplashScreen and Updates module exports have been removed in favor of the expo-splash-screen and expo-updates packages. You'll need to install and import from the individual packages if you use either module.
  • @unimodules/react-native-adapter
    • Deprecate RCTDeviceEventEmitter in favor of the renamed DeviceEventEmitter. (#8826 by @EvanBacon)
  • expo-analytics-amplitude
    • Upgraded native Amplitude iOS library from 4.7.1 to 6.0.0. This removes the IDFA code that was previously included with the Amplitude library. disableIDFA option for Amplitude.setTrackingOptions is removed. If you would like to collect the IDFA, you must be in the bare workflow. (#9880 by @bbarthec)
  • expo-analytics-segment
    • Upgraded Segment Analytics iOS to 4.0.4. This removes the IDFA code that was previously included with the Segment library. If you would like to collect the IDFA, you must be in the bare workflow or use SDK < 39. (#9606 by @cruzach).
    • The options argument for Segment.alias now accepts context configuration as well as integration configuration. Previously, this expected just the integrations configuration. (#9606 by @cruzach). The expected format now is:
  • expo-barcode-scanner
    • Added camera permissions declarations to AndroidManifest.xml on Android. (#9227 by @bycedric)
  • expo-battery
  • expo-camera
    • Fix bug where barCodeTypes needed to be defined on web. (#9630 by @EvanBacon)
    • Fix bug where camera would sometimes not start on web desktop. (#9630 by @EvanBacon)
    • Deleted CaptureOptions in favor of CameraPictureOptions (#9558 by @EvanBacon)
    • Added camera permissions declarations to AndroidManifest.xml on Android. (#9224 by @bycedric)
  • expo-facebook
    • All methods and platforms now return times in JS Date objects instead of seconds. (#7101 by @evanbacon)
    • Error code E_CONF_ERROR has been replaced with ERR_FACEBOOK_MISCONFIGURED. (#7101 by @evanbacon)
    • Some instances of the error code E_NO_INIT in the client have been replaced with ERR_FACEBOOK_UNINITIALIZED. (#7101 by @evanbacon)
    • Some instances of the error code E_FBLOGIN_ERROR in the client have been replaced with ERR_FACEBOOK_LOGIN. (#7101 by @evanbacon)
    • initializeAsync now accepts a single argument of type FacebookInitializationOptions, previously this method accepted two arguments: appId: string & appName: string. (#7101 by @evanbacon)
  • expo-gl
    • This version requires at least version 0.63.0 of React Native. It may crash when used with older versions. (#7948 by @wkozyra95)
  • expo-image-picker
    • Added camera and external storage permissions declarations to AndroidManifest.xml on Android. (#9230 by @bycedric)
  • expo-localization
    • Localization.region changed from undefined | string to null | string on web to match iOS. (#8824 by @EvanBacon)
  • expo-location
    • Add scope field in returned value to indicate whether background permissions are granted. Add android.accuracy field to determine whether coarse or fine location permission is granted. (#9446 by @mczernek)
    • getLastKnownPositionAsync no longer rejects when the last known location is not available – now it returns null. (#9251 by @tsapeta)
    • Removed the deprecated enableHighAccuracy option of getCurrentPositionAsync. (#9251 by @tsapeta)
    • Removed maximumAge and timeout options from getCurrentPositionAsync – it's been Android only and the same behavior can be achieved on all platforms on the JavaScript side. (#9251 by @tsapeta)
    • Made type and enum names more consistent and in line with our standards — they all are now prefixed by Location. The most common ones are still accessible without the prefix, but it's not the recommended way. (#9251 by @tsapeta)
    • geocodeAsync and reverseGeocodeAsync no longer falls back to Google Maps API on Android. (#9444 by @tsapeta)
  • expo-media-library
    • Added external storage permissions declarations to AndroidManifest.xml on Android. (#9231 by @bycedric)
  • expo-screen-orientation
    • Now the module will keep the lock active when the app backgrounds. (#8727 by @lukmccall)
  • expo-permissions

🎉 New features

  • Added support for experiments.turboModules flag in app.json/app.config.js allowing developers to enable Turbo Modules on iOS. (#9908 by @sjchmiela)
  • expo-ads-facebook
    • Add onError property to components created with withNativeAd that lets you get notified of errors that might occur when the native SDK tries to fetch ads. (#8662 by @sjchmiela)
  • expo-ads-admob
  • @unimodules/react-native-adapter
  • expo-app-auth
    • Change unimodulePeerDependencies to peerDependencies
    • Remove fbjs dependency
  • @unimodules/core
    • Expo modules applying unimodules-core.gradle now automatically depend on unimodule-test-core project in Android test flavors if the src/test directory exists in the module project. (In packages published to NPM the directory should not be present, so there's no need to change anything in users' projects.) (#8881 by @mczernek)
    • App delegates can now handle background URL session events via application:handleEventsForBackgroundURLSession:completionHandler: method on iOS. (#8599 by @lukmccall)
  • expo-auth-session
  • expo-asset
    • Add useAssets hook to simplify assets handling. (#8928 by @bycedric)
  • expo-av
    • [av] Delete prop-types in favor of TypeScript. (#8679 by @EvanBacon)
    • [av] Directly import createElement from react-native-web for RNW v12 support. (#8773 by @EvanBacon)
  • expo-barcode-scanner
  • expo-battery
  • expo-branch
  • expo-blur
  • expo-brightness
  • expo-calendar
    • createCalendarAsync now uses default calendar for given entityType if sourceId parameter (iOS only) is not provided. (#8570 by @tsapeta)
    • Create isAvailableAsync method. (#9641 by @EvanBacon)
    • Add permissions for web. (#9671 by @EvanBacon)
  • expo-camera
    • Added support for QR scanning on web. (#4166 by @EvanBacon)
    • Remove fbjs dependency
    • Delete prop-types in favor of TypeScript. (#8680 by @EvanBacon)
    • [camera] Directly import createElement from react-native-web for RNW v12 support. (#8773 by @EvanBacon)
  • expo-contacts
  • expo-facebook
  • expo-gl
    • Full rewrite of expo-gl-cpp, migration to JSI. (#7948 by @wkozyra95)
    • Introduced compatibility with Hermes, however you should treat this feature as unstable so use it with Hermes at your own risk. (#7948 by @wkozyra95)
    • Enable stencil buffer on Android (#9928 by @wkozyra95)
  • expo-image-picker
    • Added support for the limited CAMERA_ROLL permission on iOS 14. (#9423 by @lukmccall)
    • Added videoMaxDuration option to launchCameraAsync() to configure video recording duration limit. (#9486 by @barthap)
    • Added a way to handle results when activity was killed by the android. (#9697 by @lukmccall)
  • expo-linear-gradient
  • expo-localization
  • expo-location
    • Added missing altitudeAccuracy to the location object on Android (requires at least Android 8.0). (#9251 by @tsapeta)
    • Improved support for Web — added missing methods for requesting permissions and getting last known position. (#9251 by @tsapeta)
    • Added maxAge and requiredAccuracy options to getLastKnownPositionAsync. (#9251 by @tsapeta)
    • Google Maps Geocoding API can now be used on all platforms with the new useGoogleMaps option. (#9444 by @tsapeta)
    • Added district, subregion and timezone values to reverse-geocoded address object. (#9444 by @tsapeta)
  • expo-media-library
    • Added options to getAssetInfoAsync(), which allows specifying whether to download the asset from network in iOS. (#9405 by @jarvisluong)
    • Added support for the limited CAMERA_ROLL permission on iOS 14. (#9423 by @lukmccall)
    • Add permissions for web. (#9671 by @EvanBacon)
  • expo-screen-capture
    • Added addScreenshotListener and removeScreenshotListener methods so you can take action in your app whenever a user takes a screenshot. (#9747 by @cruzach)
  • expo-notifications
    • Added support for including foreign (non-expo-notifications-created) notifications in getPresentedNotificationsAsync on Android. (#8614 by @sjchmiela)
    • Added IosAuthorizationStatus.EPHEMERAL, an option that maps to UNAuthorizationStatusEphemeral for compatibility with iOS 14. (#8938 by @ide)
    • Added support for custom large icon on the Android. (#9116 by @lukmccall)
    • Added sticky property, which defines if notification can be dismissed by swipe. (#9351 by @barthap)
    • Added Notification categories functionality to allow for interactive push notifications on Android and iOS! (#9015 by @cruzach)
    • Added support for channels to local notifications. (#9385 by @lukmccall)
    • Added permissions support for web. (#9576 by @EvanBacon)
  • expo-random
    • Add a synchronous version of getRandomBytesAsync called getRandomBytes. (#9750 by @brentvatne)
  • expo-secure-store
  • expo-speech
    • Added constant Speech.maxSpeechInputLength - returns maximum input text length for Speech.speak(). (#9243 by @barthap)
  • expo-permissions
    • Add usePermissions hook to simplify permission handling. (#8788 by @bycedric)
    • Added support for the limited CAMERA_ROLL permission on iOS 14. (#9423 by @lukmccall)
  • expo-web-browser

🐛 Bug fixes

  • When debugging JS remotely console logs are now displayed only in the browser console (instead of both in the browser and CLI console). (#8807 by @sjchmiela)
  • expo-auth-session
    • Added custom Platform.isDOMAvailable pending @unimodules/react-native-adapter update. (#8934 by @EvanBacon)
  • expo-asset
    • Fixed Asset.loadAsync() TypeScript signature to match Asset.fromModule() types. (#9246 by @barthap)
  • expo-background-fetch
  • expo-av
  • expo-barcode-scanner
    • Fixed scanner throwing NullPointerException when barcode type isn't recognized on Android. (#9006 by @lukmccall)
  • expo-calendar
    • Fix Calendar.getEventsAsync crashing when recurrenceRules are incorrect. (#8760 by @lukmccall)
    • Fixed Calendar.createEventAsync crashing when alarms were set or endTimeZone was null. (#9269 by @barthap)
  • expo-camera
    • Fix QR scanning on Android and iOS. (#9741 by @EvanBacon)
    • [web] Fix bug where swapping cameras caused screen to flicker (#9558 by @EvanBacon)
    • [web] Fix bug where swapping cameras doesn't persist camera settings (#9558 by @EvanBacon)
  • expo-contacts
    • Fixed getContactById not resolving promise when contact with provided id doesn't exist on Android. (#8976 by @lukmccall)
    • Fixed addContactAsync returning incorrect id on Android. (#8980 by @lukmccall)
    • Fixed updateContactAsync creating a new contact on Android. (#9031 by @lukmccall)
    • Fixed updateContactAsync not returning a contact id on iOS. (#9031 by @lukmccall)
    • Fixed bug, where sorting contacts by firstName or lastName could cause crash on Android. (#9582 by @barthap)
  • expo-device
    • Remove "request install packages" permission to make it opt-in. (#8969 by @bycedric)
  • expo-document-picker
    • Fixed getDocumentAsync crashing when picking a folder on iOS. (#8930 by @lukmccall)
    • Fixed iOS bug, where it could be impossible to select only videos. (#9720 by @barthap)
  • expo-error-recovery
  • expo-file-system
    • Fix background URL session completion handler not being called. (#8599 by @lukmccall)
    • Fix compilation error on macOS Catalyst (#9055 by @andymatuschak)
    • Fixed uploadAsync native signature on Android. (#9076 by @lukmccall)
    • Fixed uploadAsync throwing Double cannot be cast to Integer on Android. (#9076 by @lukmccall)
    • Fixed getInfo returning incorrect size when provided path points to a folder. (#9063 by @lukmccall)
    • Fixed uploadAsync() returning empty response on iOS. (#9166 by @barthap)
    • Added docs about Android permissions and removed old storage permission. (#9447 by @bycedric)
  • expo-gl
    • Delete prop-types in favor of TypeScript. (#8675 by @EvanBacon)
    • Fix crashes on iOS14 caused by different integer representation in the new JSC. (#9226 by @wkozyra95)
    • Fix bug preventing GLView from rendering in SSR environments. (#9691 by @EvanBacon)
  • expo-google-app-auth
    • Fix bug where user cancel on iOS threw an error instead of returning dismissed event. (#8685 by @EvanBacon)
  • expo-font
    • Fixed fonts not being loaded in Internet Explorer. (#8652 by @d4rky-pl)
  • expo-image-picker
    • Fixed downsizing cropped image, when allowsEditing was true. (#9316 by @barthap)
    • Return array of ImagePickerResult when allowsMultipleSelection is set to true on Web. (#9402 by @isthaison)
  • expo-linear-gradient
    • Renamed type export LinearGradienPoint to LinearGradientPoint. (#8673 by @EvanBacon)
  • expo-localization
    • Localization.region now returns null when a partial locale is defined by the browser on web. (#8824 by @EvanBacon)
  • expo-local-authentication
    • Fix crash when NSFaceIDUsageDescription is not provided and device fallback is disabled. (#8595 by @tsapeta)
    • Added missing biometric permission to Android. (#8692 by @byCedric)
    • Use hardcoded system feature strings to support Android SDK 28. (#9034 by @bycedric)
  • expo-mail-composer
    • Fixed a bug on Android where calling composeAsync in the bare workflow with an attachment would result in an error. (#8524 by @cruzach)
    • Fixed attachment mimeType for unknown file extensions. (#9279 by @barthap)
  • expo-location
    • Added some safety checks to prevent NullPointerExceptions in background location on Android. (#8864 by @mczernek)
    • Add isoCountryCode to Address type and reverse lookup. (#8913 by @bycedric)
    • Fix geocoding requests not resolving/rejecting on iOS when the app is in the background or inactive state. It makes it possible to use geocoding in such app states, however it's still discouraged. (#9178 by @tsapeta)
    • Fixed different types being used on Web platform. (#9251 by @tsapeta)
    • getLastKnownPositionAsync no longer requests for the current location on iOS and just returns the last known one as it should be. (#9251 by @tsapeta)
    • Fixed getCurrentPositionAsync not resolving on Android when the lowest accuracy is used. (#9251 by @tsapeta)
    • Fixed LocationGeocodedAddress type to reflect the possibility of receiving null values. (#9444 by @tsapeta)
  • expo-media-library
    • Handled the crash when calling getAssetInfoAsync on a slow motion video on iOS. (#8802 by @jarvisluong)
    • Fixed getAssetsAsync() and getAssetInfoAsync() location issues on Android Q. (#9315 by @barthap)
    • Fixed getAssetsAsync crashes when given invalid after value on Android. (#9466 by @barthap)
    • Fixed validation for input arguments of getAssetsAsync. (#9538 by @barthap)
    • Fixed bug, where getAssetsAsync did not reject on error on Android. (#9538 by @barthap)
    • Fixed getAlbumsAsync(), getAlbum() and media change listener crashing on Android 10. (#9666 by @barthap)
    • Fixed handling albums without name on Android. (#9787 by @barthap)
  • expo-payments-stripe
    • Upgraded Stripe pod on iOS to fix compatibility with Xcode 11.4. Now you can also customize the version of Stripe pod installed by setting $StripeVersion variable in your Podfile. (#8594 by @sjchmiela)
    • Fixed misuse of the native module that caused an unhandled Promise being rejected when cancelApplePayRequestAsync was called. (#8864 by @sjchmiela)
  • expo-notifications
    • Fixed getExpoPushTokenAsync rejecting when getDevicePushTokenAsync's Promise hasn't fulfilled yet (and vice versa). Probably also added support for calling these methods reliably with Fast Refresh enabled. (#8608 by @sjchmiela)
    • Fixed compatibility with expo-permissions below 9.0.0 (the duplicate symbols problem). (#8753 by @sjchmiela)
    • Fixed total incompatibility with the web platform – calling unsupported methods will now throw a readable UnavailabilityError. (#8853 by @sjchmiela)
    • Fix notifications not being displayed after five minutes of phone inactivity on Android. (#9287 by @mczernek)
    • Include content-type: application/json when requesting an Expo push token (#9332 by @ide)
    • Export NotificationPermissions.types to make Notifications.IosAuthorizationStatus available. (#8747 by @brentvatne)
    • Fixed remote notifications ignoring the channelId parameter. (#9080 by @lukmccall)
    • Fixed malformed data object on iOS. (#9164 by @lukmccall)
    • Fixed case where iOS notification category would not be set on the very first call to setNotificationCategoryAsync. (#9515 by @cruzach)
    • Fixed notification response listener not triggering in the managed workflow on iOS when app was completely killed (#9478 by @cruzach)
    • Fixed notifications being displayed when shouldShowAlert was false on Android. (#9563 by @barthap)
    • Fixed Application Not Responding occurring in the Google Play Console. (#9792 by @lukmccall)
  • expo-screen-orientation
    • Fix ScreenOrientation.getOrientationAsync returning a wrong value when the application is starting. (#8727 by @lukmccall)
  • expo-secure-store
    • Fix incorrect security attribute applied when using the flag WHEN_UNLOCKED_THIS_DEVICE_ONLY on iOS (#9264 by @cjthompson)
  • expo-sensors
    • Ensure browser globals DeviceMotionEvent and DeviceOrientationEvent exist before attempting to read from them. (#9236 by @evanbacon)
    • Fixed bug with low Barometer resolution on iOS. (#9441 by @barthap)
  • expo-sharing
  • expo-speech
    • Fixed issue where Speech failed on Android when input text was too long. (#9243 by @barthap)
  • expo-permissions
    • Ensure browser globals DeviceMotionEvent and DeviceOrientationEvent exist before attempting to read from them. (#9236 by @evanbacon)
    • Fixed askAsync rejecting with permission cannot be null or empty in the bare workflow. (#8910 by @lukmccall)
    • Fixed getPermissionsAsync returning incorrect status in the Expo Client app on iOS. (#9060 by @lukmccall)
    • Remove require cycle for usePermissions hook. (#9219 by @EvanBacon)
  • expo-sqlite
    • Fix incorrect rowsAffected value in result of executeSql method on iOS when deleting/updating cascadely. (@9137 by @mczernek)
  • expo-sms
    • Fixed rare crashes on iOS caused by MFMessageComposeViewController being initialized not from the main thread. (#8575 by @tsapeta)
  • expo-store-review
  • expo-task-manager
    • Added some safety checks to prevent NullPointerExceptions on Android. (#8864 by @mczernek)
    • Fix tasks not being removed from memory when unregistering them. (#8612 by @mczernek)
  • expo-web-browser
    • Fix native Android dependencies used in tests - Kotlin and testing libraries. (#8881 by @mczernek)
    • Removed unncecessary Android dependencies. (#9538 by @barthap)
    • Fixed openAuthSessionAsync crashing when cancelled on iOS. (#9722 by @barthap)
    • Improve error message when something goes very wrong while loading an app in Expo client (#10239 by @brentvatne)

38.0.0

📚 3rd party library updates

🛠 Breaking changes

  • react-native-view-shot is no longer installed by default, install it with expo install react-native-view-shot. (#7950 by @evanbacon)
  • The AR module has been removed from the expo package. See https://expo.fyi/deprecating-ar for more information. (#8442 by @sjchmiela)
  • Importing Linking from expo package is now deprecated. Use expo-linking module instead. (#8659 by @tsapeta)
  • expo-battery
  • expo-camera
    • The base64 output will no longer contain newline and special character (\n, \r) on Android. (#7841 by @jarvisluong)
  • expo-file-system
    • FileSystem.downloadAsync and FileSystem.DownloadResumable work by default when the app is in background too — they won't reject when the application is backgrounded. (#7380 by @lukmccall)
    • FileSystem.downloadAsync and FileSystem.DownloadResumable will reject when invalid headers dictionary is provided. These methods accept only Record<string, string>. (#7380 by @lukmccall)
    • FileSystem.getContentUriAsync now returns a string. (#7192 by @lukmccall)
  • expo-image-manipulator
    • The base64 output will no longer contain newline and special character (\n, \r) on Android. (#7841 by @jarvisluong)
  • expo-image-picker
    • The base64 output will no longer contain newline and special character (\n, \r) on Android. (#7841 by @jarvisluong)
  • expo-print
    • The base64 output will no longer contain newline and special character (\n, \r) on Android. (#7841 by @jarvisluong)
  • expo-secure-store
    • The base64 output will no longer contain newline and special character (\n, \r) on Android. (#7841 by @jarvisluong)
  • expo-sensors
    • DeviceMotion.addListener emits events with rotationRate in degrees instead of radians on all platforms. (#7876 by @evanbacon)
    • DeviceMotion.addListener emits events with rotationRate in the form of alpha = x, beta = y, gamma = z on all platforms. (#7876 by @evanbacon)
  • expo-permissions
    • Removed support for fetching notifications-related permissions (they have been moved to expo-notifications package). You no longer will be able to call getAsync or askAsync with .NOTIFICATIONS or .USER_FACING_NOTIFICATIONS without having expo-notifications package installed. (#8486 by @sjchmiela)

🎉 New features

  • Initial release of expo-screen-capture 🥳
  • Initial release of expo-notifications 🥳
  • Added @react-native-community/segmented-control in version 1.6.1. (#8038 by @marchenk0va and #8441 by @tsapeta)
  • Added @react-native-community/slider version 3.0.0. (#8451 by @brentvatne)
  • Added @react-native-community/picker version 1.6.0. (#8451 by @brentvatne)
  • Added @react-native-community/async-storage support for version 1.11.0. (@react-native-community/async-storage#368)
  • expo-apple-authentication
    • Add 'Sign up with Apple' option (available as of iOS 13.2). (#7471 by @IjzerenHein)
  • expo-file-system
    • Add FileSystem.uploadAsync method. (#7380 by @lukmccall)
    • Add ability to read Android raw and drawable resources in FileSystem.getInfoAsync, FileSystem.readAsStringAsync, and FileSystem.copyAsync. (#8104 by @esamelson)
  • expo-face-detector
    • Added support for overriding the iOS Firebase SDK version in the bare workflow. (#7141 by @IjzerenHein)
  • expo-firebase-analytics
    • Add setDebugModeEnabled for enabling DebugView on the Expo client. (#7796 by @IjzerenHein)
  • expo-gl
    • Improved logging and added some more logging options. (#7550 by @tsapeta)
    • Add WebP format as an option when taking GL snapshots (Android only). (#7490 by @pacoelayudante)
  • expo-local-authentication
    • Added support for promptMessage, cancelLabel and disableDeviceFallback on Android. (#8219 by @diegolmello)
    • Added iris local authentication type for Android. (#8431 by @bycedric)
  • expo-sms
    • Add attachments as an optional parameter to sendSMSAsync. It can be used to provide an attachment along with the recipients and message arguments. (#7967 by @thorbenprimke)
  • expo-sensors
    • DeviceMotion.addListener emits events with interval property. (#7876 by @evanbacon)
  • expo-web-browser
    • Add readerMode and dismissButtonStyle (iOS) and enableDefaultShare (Android) flags for WebBrowser (#7221 by @LinusU) & @mczernek)
  • expo-camera
    • Added exports for TypeScript definitions: CameraType, ImageType, ImageParameters, ImageSize, CaptureOptions, CapturedPicture (#8457 by @jarvisluong)
  • expo-permissions
    • If permission is not recognized, show the correct expo package to link. ([#8546])(expo#8046) by @jarvisluong

🐛 Bug fixes

  • Fixed androidNavigationBar.hidden configuration not remaining applied after backgrounding & foregrounding the app. (#7770 by @cruzach)
  • @unimodules/core
    • Fixed error when serializing a Map containing a null (#8153 by @sjchmiela)
    • Fixed a rare undetermined behavior that may have been a result of misuse of dispatch_once_t on iOS (#7576 by @sjchmiela)
    • Fixed error when serializing a Map containing a Bundle (#8068 by @sjchmiela)
    • Fixed unused variable warnings in UMAppDelegateWrapper (#8467 by @sjchmiela)
    • Fixed a bug in UMAppDelegateWrapper when it's used with Swift. (#8526 by @EvanBacon)
  • expo-av
  • expo-auth-session
    • Fix AuthSession.getDefaultReturnUrl() returning wrong URL while using release channels. (#7687 by @lukmccall)
  • expo-brightness
    • Fixed Brightness.requestPermissionsAsync throwing permission cannot be null or empty error on Android. (#7276 by @lukmccall)
  • expo-calendar
    • Fixed Calendar.getCalendarsAsync requiring not needed permissions on iOS. (#7928 by @lukmccall)
    • Fix recurrence rule and event parsing. (#7527 by @lukmccall)
  • expo-constants
  • expo-contacts
  • expo-firebase-analytics
    • Fix no events recorded on the Expo client when running on certain Android devices. (#7679 by @IjzerenHein)
    • Fix setAnalyticsCollectionEnabled throwing an error.
    • Fixes & improvements to the pure JS analytics client. (#7796 by @IjzerenHein)
    • Fixed logEvent in expo-firebase-analytics for Android. logEvent's optional properties parameter was causing a NPE on Android when not provided. (#7897 by @thorbenprimke)
    • Fixes parseEvent and parseUserProperty to allow numeric characters in the name parameter. (#8516 by @thorbenprimke)
  • expo-font
    • Fixed timeout on Firefox #7420
  • expo-gl
    • Fix crash in React Native 0.62 when creating a context. (#8352 by @wkozyra95)
    • Allow createElement & unstable_createElement usage for web. (#7995 by @wood1986)
    • Fix depth/stencil buffers not working correctly with three.js. (#7543 by @tsapeta)
  • expo-keep-awake
    • Fixed KeepAwake.activateKeepAwake not working with multiple tags on Android. (#7197 by @lukmccall)
  • expo-image-picker
    • Fixed exception when calling ImagePicker.getCameraPermissionsAsync on Web. (#7498 by @IjzerenHein)
    • Skip asking for camera permissions on web with ImagePicker.getCameraPermissionsAsync. (#8475 by @EvanBacon)
  • expo-localization
    • Fixed Localization.locale throwing an exception on the iOS simulator. (#8193 by @lukmccall)
  • expo-media-library
    • Added missing image loader for MediaLibrary in bare workflow. (#8304 by @tsapeta)
    • Fixed MediaLibrary not compiling with the use_frameworks! option in the bare React Native application. (#7861 by @Ashoat)
    • Flip dimensions based on media rotation data on Android to match <Image> and <Video> as well as iOS behavior. (#7980 by @Ashoat)
  • expo-permissions
    • Fix permissions in the headless mode. (#7962 by @lukmccall)
    • Fixed permission cannot be null or empty error when asking for WRITE_SETTINGS permission on Android. (#7276 by @lukmccall)
    • Fixed a rare undetermined behavior that may have been a result of misuse of dispatch_once_t on iOS (#7576 by @sjchmiela)
    • Fixed Permissions.NOTIFICATIONS was granted even if notifications were disabled. (#8539 by @lukmccall)
  • expo-screen-orientation
    • Fixed ScreenOrientation.addOrientationChangeListener payload to match docs. (#7774 by @awinograd)
    • Fixed ScreenOrientation.lockAsync to properly convert to web platform equivalent of chosen lock. (#7774 by @awinograd)
  • expo-sensors
    • All sensors use more precise gravity 9.80665 instead of 9.8. (#7876 by @evanbacon)
  • expo-web-browser
  • unimodules-app-loader
    • Fixed appLoaderRegisteredForName to not only check if a loader class name is in the cache for the provided name but also verifies that the cached and current class name match. When migrating from managed to bare, the class name cache needs to be updated. (#8292 by @thorbenprimke)
  • expo-local-authentication
    • Added estimate of supported authentication types for Android. (#8431 by @bycedric)
  • @unimodules/react-native-adapter
    • Made it possible for SSR (node) environments that don't bundle using platform extensions to work without resolving native code. (#8502 by @EvanBacon)
  • expo-background-fetch
    • Upgrading an application does not cause BackgroundFetch tasks to unregister. (#8348 by @mczernek)
  • expo-sqlite
  • expo-task-manager
    • Upgrading an application does not cause BackgroundFetch tasks to unregister. (#8348 by @mczernek)

37.0.0

📚 3rd party library updates

  • Updated react-native-shared-element from 0.5.1 to 0.5.6. (#7033 by @IjzerenHein)
  • Updated @react-native-community/netinfo from 4.6.0 to 5.5.0. Some deprecated methods have been removed in this version, make sure to check out NetInfo docs for available API. (#7095 by @tsapeta)
  • Updated @react-native-community/datetimepicker from 2.1.0 to 2.2.2. (#7119 by @tsapeta)
  • Updated react-native-gesture-handler from 1.5.1 to 1.6.0. (#7121 by @tsapeta)
  • Updated @react-native-community/masked-view from 0.1.5 to 0.1.6.
  • Updated @react-native-community/viewpager from 2.0.2 to 3.3.0.
  • Updated react-native-reanimated from 1.4.0 to 1.7.0.
  • Updated react-native-svg from 9.13.3 to 11.0.1.
  • Updated react-native-view-shot from 3.0.2 to 3.1.2.
  • Updated react-native-webview from 7.4.3 to 8.1.1.
  • Updated react-native-appearance from 0.2.1 to 0.3.3. (#7250 by @tsapeta)
  • Updated react-native-safe-area-context from 0.6.0 to 0.7.3.
  • Updated react-native-screens from 2.0.0-alpha.12 to 2.2.0 🎉. (#7183 by @tsapeta, (#7201 @bbarthec), (#7215 @LinusU)

🛠 Breaking changes

  • Android push notifications: your Google API key specified in google-services.json must allow access to the Cloud Messaging API if you have restricted your API key to access only specific APIs. In the Google Cloud console, browse to APIs & Services -> Credentials. Find the API key that is associated with your app and click the pencil icon to edit it. Under "API restrictions", if the key is restricted, add "Firebase Installations API" and "Cloud Messaging" to the set of allowed APIs and save the changes. (Technical note: Google changed the underlying Firebase Cloud Messaging library in com.google.firebase:firebase-messaging:20.1.2 to depend on the Firebase Installations API, which applies API key restrictions. See Google's notes here and here.)
  • expo-app-auth Remove SSL features from unsafe connection builder. (#7187 by @evanbacon)
  • expo-constants Constants.deviceName now only returns the possible Browser name and doesn't fallback to engine or OS name. (#6809 @evanbacon)
  • expo-constants Constants.platform.web now only returns the ua (user agent string). (#6809 @evanbacon)
  • expo-crypto Removed support for the MD2 and MD4 hashing algorithms in the Expo client and standalone apps. (#6464 @sjchmiela)
  • Enriched androidStatusBar configuration in app.json. (#6506 @bbarthec)
  • Extended androidNavigationBar.visible configuration in app.json. To keep the same behavior as before, change your androidNavigationBar.visible field from false to leanback. (#7049 @cruzach)
  • expo: Removed AuthSession from the expo package and extracted into expo-auth-session unimodule. (#6989 by @lukmccall)
  • expo: Removed ScreenOrientation from the expo package and extracted into expo-screen-orientation unimodule. (#6760 by @lukmccall)
  • expo: Updated Linking.makeUrl to create URLs that follow the URI specification. Making a hostless URL will result in the format myapp:///path/into/app (#6781 by @cruzach)
  • Removed Orientation.PORTRAIT and Orientation.LANDSCAPE from ScreenOrientation in favor of their more specific versions. (#6760 by @lukmccall)
  • LocalAuthentication.authenticateAsync will now display Android's UI component to prompt the user to authenticate. (#6846 by @LinusU)
  • StatusBar on Android has dark-content by default to match iOS. (#7317 @bbarthec)
  • All native Facebook API calls made in the Expo Client app on iOS are made with the Expo Client's own Facebook App ID. (#7931 by @cruzach)

🎉 New features

  • Fixed loading images for manipulation in expo-image-loader. (#7417 by @mczernek)
  • Added support for video mirroring with expo-camera. (#7016 by @scandinaro)
  • Added support for badge numbers. (#4562 by @jaulz)
  • expo-task-manager supports bare workflow. (#6828 by @mczernek)
  • Add support for expo-firebase-core. (#7013 by @IjzerenHein)
  • Add support for expo-firebase-analytics. (#7017 by @evanbacon and @IjzerenHein)
  • Add MailComposer.isAvailableAsync method. (#6552 by @evanbacon)
  • Add showInRecents option to the AuthSessions.startAsync determining whether a browsed website should be shown as a separate entry in Android recent/multitasking view. (#6701 by @esamelson)
  • Replaced FingerprintManager with BiometricPrompt from AndroidX in LocalAuthentication. (#6846 by @LinusU)

🐛 Bug fixes

  • Fixed parsing booleans in SQLite (#7225 by @mczernek)
  • Fixed value reported by FileSystem.getFreeDiskStorageAsync (was 2^53 - 1, now is bytes available) (#6465 by @sjchmiela)
  • Added setOnPlaybackStatusUpdate to Video.refs (#6213 by @mczernek)
  • Updated underlying Facebook SDK on Android to v5.12.1 (#6462 by @sjchmiela)
  • Removed SpongyCastle (BouncyCastle repackaging) from among Android dependencies. (#6464 by @sjchmiela)
  • Fixed fullscreen events on iOS for native controls. (#6504 by @mczernek)
  • Fixed Camera.takePictureAsync() not saving metadata on iOS. (#6428 by @lukmccall)
  • Fixed KeyboardAvoidingView in standalone Android builds. (#6506 @bbarthec)
  • Fixed a bug where safariViewControllerDidFinish is not called if you close the webview with the "Swipe to dismiss" gesture. (#6581 by @axeldelafosse)
  • Fixed FileSystem.downloadAsync() throwing NullPointerException in rare failures on Android. (#6819 by @jsamr)
  • MediaLibrary.saveToLibraryAsync and MediaLibrary.createAssetAsync will throw an error when provided path does not contain an extension. (#7030 by @lukmccall)
  • Fixed FileSystem.getTotalDiskCapacityAsync() incorrectly returning 2^53 - 1 instead of the actual total disk capacity. (#6978 by @cruzach)
  • Fixed VideoThumbnails.getThumbnailAsync crashing when the provided file is corrupted. (#6877 by @lukmccall)
  • Fixed Linking.openSettings is undefined. (#7128 by @lukmccall)
  • Fixed Linking.sendIntent is undefined. (#7386 by @brentvatne)
  • Fixed Camera.takePictureAsync not resolving promise when native camera isn't ready on iOS. (#7144 by @bbarthec)
  • Fixed NPE crash in GeofencingTaskConsumer when mTask is made null mid-execution. (#7147 by @briefjudofox)
  • Fixed ImagePicker.launchCameraAsync reloading the application on the OnePlus 7. (#7162 by @lukmccall)
  • Fixed the bare React Native application not compiling with the use_frameworks! option. (#6503 by @lukmccall)
  • Fixed AppRegistry.setWrapperComponentProvider in managed Expo apps. (#6530 by @serhiipalash)
  • Fixed Facebook SDK not being fully initialized. (#6527 by @sjchmiela)
  • Fixed Battery import breaking on Web. (#6545 by @evanbacon)
  • Fixed the RedBox being covered by the notch on Android. (#6644 by @cruzach)
  • Fixed SSR support in ErrorRecovery. (#6672 by @evanbacon)
  • Fixed Linking.makeUrl and Linking.parse not matching. (#6688 by @cruzach)
  • Fixed StoreReview.requestReview throwing NullPointerException in the bare workflow. (#6713 by @cruzach)
  • Fixed NDK not installing when running yarn setup:native. (#6685 by @IjzerenHein)
  • Fixed Linking not decoding query parameters. (#6774 by @cruzach)
  • Fixed Contacts not saving the year correctly. (#6744 by @tasn)
  • Fixed Audio.setAudioModeAsync parameter type. (#6833 by @mxhold)
  • Fixed LocalAuthentication.authenticateAsync resulting in the user_cancel error immediately on Android. (#6962 by @LinusU)
  • Fixed Permissions.askAsync crashing on devices with Android 21 and 22 in the bare workflow. (#6736 by @lukmccall)
  • Fixed HeadlessAppLoader crashing after the activity is killed. (#6879 by @tasn)
  • Fixed fields parameter type in Contacts.getContactByIdAsync method. (#6910 by AryanJ-NYC)
  • Fixed DocumentPicker.DocumentResult type. (#7064 by @SimenB)
  • Fixed Constants.installationId being null in the bare workflow after ejecting. (#6906 by @cruzach)
  • Fixed Facebook.logInWithReadPermissionsAsync method throwing error (undefined is not an object (evaluating '_ref.type')). by (#6527 by @sjchmiela)
  • Fixed some TypeScript types not being exported. (#7120 by @lukmccall)
  • Fixed TaskManager.defineTask logging too many warnings and not working well with Fast Refresh. (#7202 by @tsapeta)
  • Added doc comments to TaskManager and exported more types. (#7202 by @tsapeta)
  • Fixed Facebook.logInWithReadPermissionsAsync redirecting to a blank white screen in the Expo Client app on iOS. (#7931 by @cruzach)
  • Fixed Facebook.logInWithReadPermissionsAsync resulting in the WebBrowser login modal remaining open after redirecting back to the app if selected "Sign in with Facebook app." (#7931 by @cruzach)

36.0.0

📚 3rd party library updates

🛠 Breaking changes

  • CameraRoll: Removed CameraRoll from react-native core, developers are encouraged to use expo-media-library instead
  • ART: Removed ART from react-native core, developers are encouraged to use react-native-svg instead
  • jest-expo: Removed mockPlatformIOS(), mockPlatformAndroid(), mockPlatformWeb(), describeCrossPlatform() in favor of platform specific presets like jest-expo/universal. (#5645 by @EvanBacon)
  • expo: Removed Branch export from expo/Branch. (#6190 by @sjchmiela)
  • expo: Removed ErrorRecovery from the expo package and extracted into expo-error-recovery unimodule. (#5357 by @lukmccall)
  • expo: Updated Linking.parse to better handle non-expo URLs. URLs like myapp://hello/world are now parsed so that hello is the hostname and world is the path, according to the URI specification; more info here. (#5179 by @koenpunt)
  • expo-analytics-segment: Fixed enabled behavior inverted on iOS. (#6242 by @sjchmiela)
  • expo-facebook: Disabled autoinitialization of the Facebook SDK and added an initializeAsync method and autoinit app.json setting. ([#5924] by @sjchmiela)
  • expo-keep-awake: Removed deprecated methods and components. (#6006 by @EvanBacon)
  • expo-location: Location.requestPermissionsAsync() is no longer being rejected when permissions were not granted. Instead it returns PermissionsResponse object, which is similar to the result of Permissions.askAsync(Permissions.Location). (#5061 by @lukmccall)
  • expo-store-review: Replace StoreReview.isSupported method with StoreReview.isAvailableAsync returning promise instead of boolean. (#6195 by @danibonilha)
  • expo-calendar: Methods creating or updating calendar events now reject when passed timeZone is invalid. (#6326 by @lukmccall)
  • expo-screen-orientation: Removed deprecated methods allow, allowAsync, and doesSupportAsync. (#6007 by @EvanBacon)

🎉 New features

  • Added MediaLibrary.saveToAssetsAsync function that can work without CAMERA_ROLL permission. (#5678 by @lukmccall)
  • Added setTrackingOptions to expo-analytics-amplitude to fine-tune what Amplitude can track. (#5877 by @amaurymartiny)
  • Added support for Speech.getAvailableVoicesAsync() on Android. (#5887 by @Mitch528)
  • Added @react-native-community/masked-view in version 0.1.5. (#6193 by @brentvatne)
  • Added @react-native-community/viewpager in version 2.0.2. (#6198 by @brentvatne)
  • Added @react-native-community/datetimepicker in version 2.1.0. (#6087 by @tsapeta)
  • Added canAskAgain and granted fields to PermissionsResponse. (#5061 by @lukmccall)
  • Added support for react-native-appearance on Android and Web. (#6162 by @bbarthec)
  • Added Location.getLastKnownPositionAsync to get the last known position of the device. (#6246 by @lukmccall)
  • Added support for complex recurrence rules for events and reminders on iOS. (#6300 by @tasn)
  • Added exif and base64 properties into the TypeScript definitions for ImagePickerResult in expo-image-picker. (#6311 by @kyletsang)
  • Added a videoExportPreset field to ImagePickerOptions, which sets dimensions and compression algorithm for exported video on iOS. (#6046 by @lukmccall)
  • Added nonce option to expo-apple-authentication. (#6404 by @brentvatne)
  • Added support for more permissions on web. (#6115 by @EvanBacon)
  • Added better Camera support across web browsers. (#6207 by @EvanBacon)

🐛 Bug fixes

  • Fixed MediaPlayer not working on some Android devices (#6320 by @mczernek)
  • Fixed Audio.setAudioModeAsync to auto-fill with previously set values (falls back to default values) if not all fields are provided. (#5593 by @cruzach)
  • Fixed crash when BarCodeScanner was mounted more than 128 times. (#5719 by @geovannimp)
  • Fixed URI parsing in expo-video-thumbnails. (#5711 by @lukmccall)
  • Fixed MediaLibrary methods crashing on Android 10. (#5905 by @lukmccall)
  • Fixed MediaLibrary.getMomentsAsync crashing if locationNames array is null. (#5937 by @lukmccall)
  • Fixed MediaLibrary.getAlbumsAsync() not getting albums in folders on iOS. (#5857 by @lukmccall)
  • Fixed unclosed http connections in FileSystem.downloadAsync method. (#5840 by @bbarthec)
  • Fixed ImagePicker ignoring orientation of the application. (#5946 by @lukmccall)
  • Fixed Calendar.getCalendarsAsync rejecting on iOS 13, when source.name is null. (#5994 by @lukmccall)
  • Fixed handling URI with no scheme in ExpoFileSystem. (#5904 by @bbarthec)
  • Fixed FileSystem#deleteAsync in older Android SDKs. (#5923 by @bbarthec)
  • Fixed image cropping on Android in expo-image-manipulator. (#5828 by @matiasmelendi)
  • Fixed type problem with EXiOSOperatingSystemVersion struct in expo-gl-cpp. (#6063 by @crubier)
  • Fixed blinking Camera.Constants.FlashMode.torch on iOS in Camera. (#6128 by @bbarthec)
  • Fixed race condition in GoogleSignIn on iOS. (#5872 by @vonovak])
  • Fixed Contacts.presentFormAsync pre-filling, when bool value was provided. (#5522 by @lukmccall)
  • Fixed crashes when the user tries to download a file through react-native-webview without granted storage permission on Android. (#5061 by @lukmccall)
  • Fixed Permissions.getAsync result, which was inconsistent with iOS settings. (#5061 by @lukmccall)
  • Fixed scanning PDF417 and Code39 in BarCodeScanner on iOS. (#5976 by @bbarthec)
  • Add missing mute property in Camera.recordAsync in the TypeScript definition. (#6192 by @wcandillon)
  • Warn when Linking.makeUrl is called in Expo client and no scheme is present in app.json in order to prevent standalone builds from crashing due to missing scheme. (#6277 by @brentvatne)
  • Fixed keychainAccessible option not having any effect on iOS (SecureStore module) (#6291) by @sjchmiela
  • Fixed presentation style of WebBrowser modal on iOS 13+ (it is now presented fullscreen instead of a modal). (#6345) by @roothybrid7
  • Fixed expo-gl crashing an app when context initialization happens on remote JS context. (#6381 by @tsapeta)
  • Fixed memory leaks caused by ImagePicker module. (#6303 by @lukmccall)
  • Fixed Android scoped FileSystem migration. (#6367)
  • Fixed ScreenOrientation crashing on Edge. (#5913 by @EvanBacon)
  • Fixed LinearGradient colors on web. (#5843 by @EvanBacon)
  • Fixed MediaLibrary.getAssetInfoAsync() not returning localUri for videos. (#5806 by @lukmccall)
  • Fixed Localization constants export in iOS simulator. (#5740 by @lukmccall)
  • Removed unnecessary CameraRoll permissions check in ImagePicker on iOS 11+. (#5822 by @lukmccall)
  • Fixed default value for fallbackLabel in LocalAuthentication.authenticateAsync. (#5844 by @cruzach)
  • Fixed getting Contacts containers without specifying a predicate. (#6016 by @tasn)
  • Fixed vector icons in MS Edge by disabling font face observer. (#5961 by @EvanBacon)
  • Fixed typings for Calendar.getRemindersAsync(). (#6055 by @tasn)
  • Fixed Camera continuing to run after being unmounted on web. (#6117 by @EvanBacon)
  • Fixed exceptions logged in the AV module on Android. (#6099 by @danmaas)
  • Fixed crash when calling Amplitude.setUserProperties() on Android. (#6174 by @sjchmiela)
  • Fixed methods for scheduling Notifications. (#5470 by @Szymon20000)
  • Fixed unloading sounds in the AV module on web. (#6214 by @rickiesmooth)
  • Add parital onFullscreenUpdate support to AV module on web. (#6610 by @awinograd)

35.0.0

📚 3rd party library updates

  • react-native-maps updated from 0.24.0 to 0.25.0
  • react-native-reanimated updated from 1.1.0 to 1.2.0
  • react-native-screens updated from 1.0.0-alpha.22 to 1.0.0-alpha.23
  • react-native-svg updated from 9.5.1 to 9.9.2
  • react-native-webview updated from 5.12.0 to 7.0.5

🛠 Breaking changes

  • FileSystem.documentDirectory is under a new directory. If upgrading from SDK 32 or below, you must upgrade your app to SDK 33 or 34 first, before upgrading to SDK 35 and above in order to migrate app files. (#5381 by @Szymon20000)
  • Google.logInAsync() now accepts a redirectUrl value for apps running in the Expo Client. Previously, it would ignore this, so if you are passing a value, make sure to follow the guidelines. (#4904 by @cruzach)
  • Google Mobile Ads now require expo.[platform].config.googleMobileAdsAppId configuration value present in app.json. The value can be found by following the guide in this Google Support answer. (#5447 by @sjchmiela)
  • Replace Localization.country constants with Localization.region and make it only available on iOS and Web (#4921 by @lukmccall)
  • Upgraded FBSDK*Kit to v5.4.1. This upgrade removed support for all login behaviors other than browser. Possible motivations behind this change may be found here, here and here. behavior parameter has been removed from TS type declaration and will not have any effect anymore (#5499 by @sjchmiela)
  • Removed contact's note field from being requested if requested fields are not provided. (#5601 by @tsapeta)

🎉 New features

🐛 Bug fixes

  • Fixed MediaLibrary assets' width and height were sometimes equal to 0. (#4935 by @lukmccall)
  • Fixed location background mode was required to use geofencing. (#5198 by @tsapeta)
  • Fixed Calendar.createEventAsync crashing with relativeOffSet due to invalid type conversion from double to integer. (#5134 by @vivianzzhu91)
  • Fixed AppAuthModule.createOAuthServiceConfiguration typo resulting in crashes when registrationEndpoint is not specified in config.
  • Fixed occasional "ViewManagerAdapter_*" was not found in the UIManager bugs. (#5066 by @sjchmiela)
  • Fixed crashes when adding attachments with MailComposer. (#5449 by @sjchmiela)
  • Fixed ImagePicker.launchImageLibraryAsync not working on iOS 13. (#5434 by @tsapeta)
  • Fixed ImageManipulator.manipulateAsync not working with local paths. (#5531 by @bbarthec)
  • Fixed Camera#onBarCodeScanned not firing when added at first rendering (#5606 by @bbarthec)
  • Fixed background fetch calls throwing exceptions about mutating an array while being enumerated. (#5612 by @tsapeta)

34.0.0

📚 3rd party library updates

  • react-native-gesture-handler updated from 1.2.1 to 1.3.0
  • react-native-branch updated from 2.2.5 to 3.1.1
  • react-native-reanimated updated from 1.0.1 to 1.1.0
  • react-native-svg updated from 9.4.0 to 9.5.1
  • react-native-webview updated from 5.8.0 to 5.12.0
  • @react-native-community/netinfo updated from 2.0.10 to 3.2.1

🛠 Breaking changes

  • Removed promptMessageIOS string argument from LocalAuthentication.authenticateAsync in favor of options object. (#4631 by @tsapeta)
  • Removed Calendar.DEFAULT and replaced it with null. (#4836 by @lukmccall)

🎉 New features

  • Added fallbackLabel option to LocalAuthentication.authenticateAsync on iOS which allows to customize a title of the fallback button when the system doesn't recognize the user and asks to authenticate via device passcode. (#4612 by @changLiuUNSW)
  • added native mode for Android SplashScreen on standalone apps by @bbarthec (#4567)
  • added support for video recording in ImagePicker.launchCameraAsync. (#4903 by @lukmccall)
  • added support for ph:// URLs to expo-file-system (#5195 by @sjchmiela)

🐛 Bug fixes

  • fixed BarCodeScanner blocking UI when defining custom barCodeTypes on iOS by @sjchmiela
  • fixed picking images over 2000px on Android by @bbarthec (#4731)
  • fixed Calendar.getEventsAsync crashing if calendarId is SQL keyword by @lukmccall (#4836)
  • fixed BOOL interpretation on 32-bit iOS devices by @lukmccall (#4862)
  • fixed AV rejecting to further load an asset once any loading error occured (#5105) by @sjchmiela)
  • fixed AV resetting player whenever props changed (#5106) by @sjchmiela)
  • fixed bar code scanning crash if the result couldn't be converted to string (#5183) by @sjchmiela)
  • fixed camera crash in standalone apps (#5194) by @sjchmiela)

33.0.0

🛠 Breaking changes

  • updated react-native-gesture-handler to 1.2.1 by @mczernek (#4159)
  • updated react-native-svg to 9.4.0 by @Szymon20000 and @mczernek (#3860, #4159)
  • updated @react-native-community/netinfo to 2.0.10 by @sjchmiela (#4153)
  • updated react-native-reanimated to 1.0.1 by @dsokal (#4023)
  • removed deprecated MediaView and TriggerView from expo-ads-facebook by @EvanBacon (#3539). You should use AdMediaView & AdTriggerView instead.
  • deprecated Expo.Util by @EvanBacon (#3539). You should use Expo.Updates & Expo.Localization instead.
  • removed use of expolib_v1.okhttp in favor of regular okhttp dependency by @Szymon20000 (#3539) (an update to MainApplication.getOkHttpBuilder may be required when upgrading)
  • corrected behavior of splash screen image based on resizeMode in Android standalone apps (contain and cover were handled contrary to what docs state) by @bbarthec (#3029)
  • Speech.speak changed option name from voiceIOS to voice. @Szymon20000 (#3423)
  • renamed Haptic to Haptics and deprecated Haptics.{notification, impact, selection} in favour of Haptics.{notificationAsync, impactAsync, selectionAsync} @bbarthec (#3330)
  • ImageManipulator.manipulateAsync is now accepting ImageManipulator.FlipType.{Vertical, Horizontal} as flipping action parameter and ImageManipulator.SaveFormat.{JPEG, PNG} as saving option @bbarthec (#3245)
  • removed devKernel and prodKernel build flavors from Android ExpoKit projects (all Gradle commands become simply [verb](Debug|Release), e.g. installDebug or assembleRelease) by @esamelson (#3386)
  • renamed IntentLauncherAndroid to IntentLauncher and changed signature of startActivityAsync method by @tsapeta (#3427)
  • fixed crash in WebBrowser.openBrowserAsync when there is no browser supporting customtabs on Android by @mczernek (#3691)
  • WebBrowser.openBrowserAsync on Android resolves promise on opening Custom Tabs instead of on closing by @mczernek (#3691)
  • WebBrowser.dismissBrowser throws UnavailabilityError @mczernek (#3691)
  • added staysActiveInBackground audio mode option that selects whether audio playback or recording should continue when the app is in background by @sjchmiela and @redpandatronicsuk (#3498)
  • renamed the EncodingTypes attribute to EncodingType in the FileSystem module docs to match changes in the source code by @sergeichestakov (#3997)
  • added a warning printed when attempting to store a value longer than 2048 bytes in the SecureStore. (Since SDK35 it will throw an error.) @dsokal (#4084)
  • added UMAppDelegateWrapper which allows easy integration between unimodules and AppDelegate callbacks by @Szymon20000 (#3917)
  • changed Constants.platform.ios.buildNumber and Constants.platform.android.versionCode to null when running an app in Expo Client by @dsokal (#4203)
  • upgraded react-native-maps to 0.24.2 by @sjchmiela (#3389, #4158, ejected projects will need to add HAVE_GOOGLE_MAPS=1 preprocessor definition to Podfile)
  • removed option sortBy.id in expo-media-library by @jkhales (#4221)

🎉 New features

  • updated react-native-view-shot to 2.6.0 by @sjchmiela (#4175)
  • added VideoThumbnails API allowing you to thumbnail videos by @graszka22 (#3980)
  • upgraded react-native-lottie to 2.6.1 by @sjchmiela (#4147)
  • BarCodeScanner is now returning barcode's bounding box @Szymon20000 (#2904)
  • added method Speech.getAvailableVoicesAsync() @Szymon20000 (#3423)
  • added BackgroundFetch support for Android by @tsapeta (#3281)
  • incorporated [email protected] into Expo SDK by @sjchmiela (#3748)
  • added support for overriding MIME type in IntentLauncherAndroid.startActivityAsync for Android by @rhunt4675 (#3300)
  • added Location.enableNetworkProviderAsync method to ask the user to turn on high accuracy location services by @tsapeta (#3273)
  • upgraded Facebook Audience Network SDK dependency to 5.1.1 (iOS) by @sjchmiela (#3394)
  • upgraded Facebook Core- and LoginKit dependency to 4.40.0 by @sjchmiela (#3394)
  • upgraded Facebook SDK dependency to 5.0.1 (Android) by @sjchmiela
  • upgraded react-native-webview to 5.8.1 by @sjchmiela (#4146)
  • added Firebase integration to expo-analytics-segment by @sjchmiela (#3615)
  • added support for new arguments in WebBrowser.openBrowserAsync as described in the documentation by @mczernek (#3691)
  • added tags support in KeepAwake.activate and KeepAwake.deactivate by @mczernek #3747
  • added deferredUpdatesInterval and deferredUpdatesDistance options that defer background location updates by @tsapeta (#3548)
  • added foregroundService option to background location (Android Oreo and newer) by @tsapeta (#3837)
  • added support for picking animated GIFs with ImagePicker by @sjchmiela (#3844)
  • added support for headers in downloadAsync method in FileSystem by @mczernek (#3911)
  • added support for custom poster styles in Video by @sjchmiela (#4165)
  • added pausesUpdatesAutomatically option to automatically pause background location updates based on the activityType by @tsapeta (#4167)
  • added ability to load fonts by remote URI by @seekshiva (#2745)
  • added support for 64 bit platforms by @wkozyra95 (#4565)

🐛 Bug fixes

  • fixed several windows compatibility issues with expo-yarn-workspaces by @nattyrice
  • fixed several issues related to expo-av by @Szymon20000 (#3539)
  • Location.getCurrentPositionAsync and Location.watchPositionAsync are now automatically asking for high accuracy location services by @tsapeta (#3273)
  • fix Location.getCurrentPositionAsync hanging on simultaneous calls by @tsapeta (#3273)
  • fix ImagePicker.launchImageLibraryAsync and ImageManipulator.manipulateAsync in SDKs lower than 32 @bbarthec (#3159)
  • fix app crash when attempting to console.log(Object.create(null)) by @juangl (#3143)
  • GoogleSignInOptions.offlineAccess is now corrected GoogleSignInOptions.isOfflineEnabled
  • fix SMS.sendSMSAsync crash on android for empty addresses list. Promise won't be rejected when there is no TELEPHONY feature on Android device, only when there is no SMS app by @mczernek (#3656)
  • fix MediaPlayer not working on Android. by @mczernek (#3768)
  • fix big OkHttpClient memory usage on Android (reuse instances) by @sjchmiela (#4264)
  • fixed Localization.isRTL always being true on iOS by @sjchmiela (#3792)
  • fixed adding/removing react children to Camera preview on Android by @bbarthec (#3904)
  • changed FileSystem requests timeout for downloading resumables from 10 seconds to 60 seconds on Android (now the timeout is 60s on both platforms) by @Szymon20000 (#3872)
  • removed unwanted downsampling of big images when using ImageManipulator on Android by @bbarthec (#3928)
  • fixed tablet splash always being shown in Expo Client if specified by @GfxKai (#3538)
  • the properties parameter of Segment.screenWithProperties is now a { [key: string]: any }, instead of a string by @juampi92 (#4053)
  • allow manipulating http:// and https:// files using ImageManipulator on iOS by @bbarthec (#3982)
  • providing onPlaybackStatusUpdate property to Video doesn't show a warning anymore by @sjchmiela (#4130)
  • calling FileSystem.downloadAsync will now raise an error when a target local directory doesn't exist by @dsokal (#4142)
  • flush UI blocks when needed, which fixes eg. Camera.takePicture not resolving on iOS by @sjchmiela (#4125)
  • fixed MediaLibrary.createAssetAsync crashing when supplying local asset URIs without file:// protocol by @tsapeta (#4189)
  • fixed EXC_BAD_ACCESS crashes on startup on iOS below 12.0 by @tsapeta (#4227)
  • fix jest-expo Jest executable not starting Node on Windows by @Artorp (#3477)
  • fixed crashes in TaskManager due to jobs queue being full by @tsapeta (#4247)
  • allow console.log() function to log truncated large files instead of reporting a PayloadTooLargeError. @vivianzzhu91 (#4419)
  • fixed sorting in MediaLibrary.getAssetsAsync by @ninjaachibi (#4420)

32.0.0

🛠 Breaking changes

  • deprecated import { Font } from 'expo-font' in favor of individually named exports (import * as Font from expo-font) for better dead-export elimination potential. Upgrade @expo/vector-icons if you get a warning about this. By @ide (264c17cd)
  • removed deprecated internal Expo modules (Crypto, Fabric, and ImageCropper), which were never part of the Expo API by @ide (#2880)
  • removed deprecated Expo.Fingerprint API, which has been renamed to Expo.LocalAuthentication to reflect other forms of authentication (ex: FaceID) by @ide (24e94d5)
  • removed deprecated default export from the expo package. Instead of import Expo from 'expo', write import { A, B, C } from 'expo' or import * as Expo from 'expo'. By @ide (#2865)
  • 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.
  • deprecated enableHighAccuracy option in Location module in favor of accuracy which gives much more options by @tsapeta (#2338)
  • removed support for deprecated onBarCodeRead prop on Camera component by @Szymon20000 (#2820) (use onBarCodeScanned property)
  • updated underlying Stripe dependency to 8.1.0 on Android and 13.2.0 on iOS and updated expo-payments-stripe with latest updates to tipsi-stripe (up to 6.1.2) by @sjchmiela (#2766). This change dropped support for Bitcoin payments in SDK31.
  • removed READ_SMS use of permission on Android, SMS.sendSMSAsync will now always resolve with { result: 'unknown' } by @esamelson (#2982)
  • upgraded Android build tools — Gradle to 4.10.2, Gradle plugin to 3.2.1 by @sjchmiela (7292c27, d0c8b8d)
  • removed run.sh script from android directory in favor of fastlane android start command by @nicknovitski (9301e95)
  • removed minSdk application flavor from Android project (all Gradle commands in format [verb][minSdkFlavor]minSdk[remoteKernelFlavor]Kernel[buildType], eg. assembleDevMinSdkDevKernelDebug become [verb][remoteKernelFlavor]Kernel[buildType], eg. assembleDevKernelDebug) by @sjchmiela (3b5e158)
  • calling Haptic methods on Android will now raise an error instead of a warning by @EvanBacon (#2787)

🎉 New features

  • added locales on Android ([ar, cs, de, es-rGT, fr, he, jt, ja, ko, nb, nl, pl, pt-rBR, ru-rRU, vi, zh, zh-rCN, zh-rTW]) in ImagePicker.{launchImageLibraryAsync, launchCameraAsync} when using { allowsEditing: true } option by @bbarthec (#2955)
  • added support for passing refs created by React.createRef to takeSnapshotAsync by @sjchmiela (#2771)
  • upgraded Gradle plugin (to 3.2.1) and its wrapper (to 4.10.2) by @sjchmiela (#2716)
  • added new TaskManager module that paves the way to background code execution by @tsapeta (#2338)
  • added API for background location updates by @tsapeta (#2338)
  • added geofencing to Location module by @tsapeta (#2338)
  • added new BackgroundFetch module (iOS only) by @tsapeta (#2338)
  • allowed Expo Jest preset to use TypeScript files by @dalcib (#2810)
  • allowed selecting voice used by Speech on iOS by @pyankoff (#2833)
  • removed obsolete assets from standalone apps by @sjchmiela (#2850)
  • added support for notifications categories by @Szymon20000 and @sjchmiela (#2316, #2557)
  • upgraded libraries: react-native-gesture-handler to 1.0.12, react-native-screens to 1.0.0-alpha.22, react-native-reanimated to 1.0.0-alpha.11 by @tsapeta and @sjchmiela (#2977, #3078, #3172, #3232)

🐛 Bug fixes

  • fixed problem with rerendering SVG (updated react-native-svg to 8.0.10) by @Szymon20000 (#3019)
  • fixed wrong type casting in SQLite result @Szymon20000 (#3005)
  • fixed sending multiple consecutive SMS messages on iOS @bbarthec (#2939)
  • fixed GLView initialization with texture of size 0 on Android by @bbarthec (#2907)
  • fixed app cache size blowing up when using ImagePicker by @sjchmiela (#2750)
  • fixed compression in ImagePicker by @Szymon20000 (#2746)
  • fixed FileSystem forbidding access to external directories by @Szymon20000 (#2748, #2808)
  • upgraded Facebook SDK dependency to 4.39 by @Szymon20000 and @sjchmiela (#2710, #3243)
  • fixed object not beign decycled when sending logs to remote console by @sjchmiela (#2598)
  • unified linear gradient behavior across platforms by @sjchmiela (#2624)
  • fixed device orientation not being used when recording videos by @flippinjoe (expo-camera#2)
  • fixed handling quality option passed to Camera.takePictureAsync on Android properly by @Szymon20000 (#2692)
  • fixed resumable downloads on iOS by base64-encoding resumeData by @Szymon20000 (#2698)
  • fixed Permissions.LOCATION issue that wouldn't allow asking for it in a multi-permission call by @sjchmiela (304fe560)
  • fixed onActivityResult not being called on listeners registered to ReactContext by @sjchmiela (#2768)
  • fixed fatal exception being thrown sometimes on Android when detecting barcodes by @sjchmiela (#2772)
  • fixed GLView.takeSnapshotAsync crashing on Android if framebuffer option is specified by @tsapeta (#2888)
  • fixed onPlaybackStatusUpdate not being called with didJustFinish: true when playing with looping enabled on Android by @sjchmiela (#2923)
  • fixed bundle building/downloading progress indicator not showing in ejected apps by @sjchmiela (#2951, #2954)
  • fixed subscription.remove() not calling native stopObserving() for universal modules by @ide (#2897)
  • fixed calendar ID being returned as integer instead of a string on Android (when calling eg. Calendar.createCalendarAsync) by @Szymon20000 (#3004)
  • fixed wrong fling direction for inverted ScrollViews on Android by @mandrigin (pulled in from React Native facebook/react-native@b971c5b)
  • fixed snapping Android ScrollViews with pagingEnabled by @olegbl (pulled in from React Native facebook/react-native@0869e54)
  • fixed Contacts failing to add and remove contacts on Android by @tsapeta (#3017)
  • fixed Permissions.CONTACTS not asking for Android's WRITE_CONTACTS permission by @tsapeta (#3017)

31.0.6

  • fixed expo-cli wrapper failing on Windows by @fson (#2853)

31.0.5

31.0.4

31.0.3

31.0.2

  • pass undefined through for startPoint and endPoint rather than null in LinearGradient by @brentvatne (643969)
  • remove require cycle in AV by @ide (18d54da)

31.0.1

  • filter out warnings about require cycles in node_modules by @ide (68d130d)

31.0.0 (Partial Changelog)

🛠 Breaking changes

  • The default export from the expo package is deprecated in favor of named exports to pave the way for static analysis tools by @ide (#2387)
  • remove default user_friends permission when authenticating with Facebook module by @EvanBacon (2ad86fad)
  • dropped iOS 9 support by @Szymon20000 (#2324)
  • upgrade react-native-svg to 8.0.8 by @sjchmiela and @esamelson (#2492)
  • upgrade React Native to v0.57.1 by @ide (series of commits, eg. 250589)
  • change translation field to adTranslation in an ad object returned by FacebookAds.NativeAdView by @ide (ece59aa)
  • refreshed, bug-free Localization API by @EvanBacon (#2327)
  • drop Android 4.4 support by @bbarthec (#2367)
  • upgrade underyling Facebook SDK native dependencies to 4.37.0 by @sjchmiela (#2508)
  • upgrade react-native-view-shot to 2.5.0 by @sjchmiela (#2518)
  • upgrade react-native-maps to 0.22.1 by @tsapeta and @sjchmiela (#2496, #2680)
  • FacebookAds.TriggerableView is now FacebookAds.AdTriggerView
  • FacebookAds.MediaView is now FacebookAds.AdMediaView
  • The Speech API’s "onError" function is passed an Error instead of a string
  • Flow types have been removed as we begin to migrate to TypeScript over the next few SDK releases
  • Several Haptic enum types have been renamed: NotificationTypes → NotificationFeedbackType, ImpactStyles → ImpactFeedbackStyle
  • Several AR enum types have been renamed: BlendShapes → BlendShape, FaceAnchorProps → FaceAnchorProp, PlaneDetectionTypes → PlaneDetection, WorldAlignmentTypes → WorldAlignment, EventTypes → EventType, AnchorTypes → AnchorType, AnchorEventTypes → AnchorEventType, FrameAttributes → FrameAttribute, TrackingStates → TrackingState, TrackingStateReasons → TrackingStateReason, TrackingConfigurations → TrackingConfiguration
  • Audio.Sound.create has been renamed to createAsync
  • Upgrade Babel to 7.0.0 by @ide (#2373)

🎉 New features

  • return permitted/declined permissions arrays when authenticating with Facebook module by @EvanBacon (2ad86fad)
  • Base64 encoding support for FileSystem by @EvanBacon (#2328)
  • video stabilization support in Camera by @n8 (#2241)
  • add support for asking for an authorization to always access location data by @sjchmiela (#2343)
  • upgrade react-native-gesture-handler to 1.0.8, react-native-reanimated to 1.0.0-alpha.10, react-native-screens to 1.0.0-alpha.15 by @brentvatne (eb2a463, 9bf1754)
  • add Segment.{get,set}EnabledAsync feature by @sjchmiela (#2412)
  • add an Android-only timeout option to Location.getCurrentPositionAsync by @bbarthec (#2369)
  • add support for providing custom headers to send when requesting media source by @sjchmiela (#2431)
  • add Segment.alias support by @sjchmiela (#2440)
  • upgrade Android JSC to r224109 by @esamelson and @Kmakinator (#2437)
  • add LocalAuthentication.supportedAuthenticationTypes method by @bbarthec (#2450)
  • add support for new Apple devices to Constants by @tsapeta (#2410)

🐛 Bug fixes

  • fix react-native-svg toDataURL() method throwing error (undefined is not an object (evaluating 'RNSVGSvgViewManager.toDataURL')) on Android by @sjchmiela (#2492)
  • fix nested traits and properties being stringified on Android in the Segment module, instead of being reported as objects by @sjchmiela (expo-analytics-segment#2, #2517)
  • handle specified behavior on Android when authenticating with Facebook by @EvanBacon (2ad86fad)
  • fix MediaLibrary returning stale assets from getAssetsAsync by @Aasfga (#2106, 09cba8d)
  • fix Pedometer.watchStepCount erroring on Android by @Szymon20000 (#2147, dea2967)
  • fix Branch links not working when first opened on iOS by @AdamPD (#2158)
  • asking for Permissions.BRIGHTNESS no longer throws AbstractMethodError exception on some Android devices by @bbarthec (#2342)
  • properly handle some screen orientation configurations (on iPhone X PortraitUpsideDown is not supported) by changing sync ScreenOrientation.allow method to async ScreenOrientation.allowAsync throwing an error when trying to set an unsupported screen orientation configuration by @bbarthec (af2d7e3)
  • fix Linking.getInitialURL returning a customschemed:// URL instead of the one that really redirected to the application by @schneidmaster (#2352)
  • fix FaceDetector settings not being applied on the first run by @sjchmiela (#2308)
  • update cameraview AAR for it to contain getCameraId() method by @sjchmiela (expo-camera#4, #2323)
  • fix rerendering of ads provided by FacebookAds module by @ide (85f2014)
  • fix a fatal exception being thrown when pausing a resumable download on iOS 12 by @sjchmiela (#2404)
  • fix universal modules being initialized twice by @sjchmiela (#2417)
  • fix media players refusing to redirect from a HTTPS URL to another HTTPS URL on Android by @sjchmiela (#2403)
  • fix SMS.sendSMSAsync not returning correct result on Android by @bbarthec (#2452)
  • fix barcode scanner not working on Pixel 2 by @alexshikov (#2081)
  • fix “Font doesn't support automatic scaling” errors on iOS < 12 by @sjchmiela (#2480)
  • fix missing “Orientation” tag in ImagePicker EXIF data by @bbarthec (#2432)
  • fix react-native-screens compatibility with Expo by @tsapeta (#2509)