[autolinking] Maintain hierarchical order when linking isolated modules (#24351)# Why My previous fix for isolated modules (https://github.com/expo/expo/pull/23867) is not fully correct. The ol
[autolinking] Maintain hierarchical order when linking isolated modules (#24351)# Why My previous fix for isolated modules (https://github.com/expo/expo/pull/23867) is not fully correct. The old fix basically discovers _every dependency_ within the pnpm store folder. - This works, but might also link modules that are unrelated to the Expo project (e.g. when using monorepos). - It also loses the hierarchical structure, e.g. nested dependencies from `expo` (like `expo-application`) are added as being on the same level as direct project dependencies. # How This new fix attempts to keep these nested dependencies hierarchy as much as possible. Instead of looking up the pnpm store, it tries to detect if isolated modules are used. If it's detected, it looks up every individual "group of isolated modules" by expanding the `searchPaths`. The detection is done by the following check: - If the current "realpath" of the package being linked has a parent `node_modules` folder ... - ... and that `node_modules` folder is not "searched" yet (not added to `searchPaths` yet) ... - add this parent `node_modules` folder to the `searchPaths` to also link dependencies in those folders > ⚠️ This _**should**_ work, without checking on `.pnpm` store name, since linked modules should never have a direct `node_modules` parent. That only happens when using isolated modules. # Test Plan ~~We probably need to add dedicated pnpm tests to autolinking, but for now, it's manually testable with the following steps:~~ Added the two test cases below, as unit tests (lots of mocking). Probably need to add e2e tests and use pnpm too. You can still test it manually with the following steps: - Create a basic Expo project anywhere - `yarn create expo -t tabs ./test-pnpm-autolinking` - `cd ./test-pnpm-autolinking` - Create a dump of autolinking data, to compare it with pnpm - `yarn expo-modules-autolinking resolve --platform android > autolinking-yarn.json` - Reinstall with pnpm - `rm -rf node_modules yarn.lock` - `pnpm install` - Create a new dump of autolinking data, to compare it with yarn - `node <expo/expo>/packages/expo-modules-autolinking/bin/expo-modules-autolinking resolve --platform android > autolinking-pnpm.json` - Check if both `autolinking-yarn.json` and `autolinking-pnpm.json` is identical Then also check what happens if a different version of `expo-application` is installed as project dependency. It should take priority over the `expo > expo-application` version in both pnpm and yarn autolinking. I've used vscode launch for this to also check what exactly is going on inside autolinking. For that, you'll need to add `.vscode/launch.json` to your expo/expo repo, and update the paths. See snippet below: <details><summary><code>.vscode/launch.json</code> file</summary> ```jsonc { "configurations": [ { "type": "node", "request": "launch", "name": "Expo Autolinking: resolve", "program": "${workspaceFolder}/packages/expo-modules-autolinking/bin/expo-modules-autolinking", "args": [ "resolve", "--platform", "android" ], "console": "integratedTerminal", // Update the path below to your Expo project installed with pnpm "cwd": "/Users/cedric/Desktop/test-sdk-50/expo-pnpm" } ] } ``` </details> # Checklist <!-- Please check the appropriate items below if they apply to your diff. This is required for changes to Expo modules. --> - [ ] Documentation is up to date to reflect these changes (eg: https://docs.expo.dev and README.md). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin).
show more ...
[ios][autolinking] Fix missed react import patches (#23923)Directives with leading or trailing whitespace on their line would not previously be patched # Why Noticed this in a project using a
[ios][autolinking] Fix missed react import patches (#23923)Directives with leading or trailing whitespace on their line would not previously be patched # Why Noticed this in a project using a native module with `#import` blocks like this: ```objective-c #if __has_include(<React/RCTBridgeModule.h>) #import <React/RCTBridgeModule.h> #elif __has_include("React/RCTBridgeModule.h") #import "React/RCTBridgeModule.h" #else #import "RCTBridgeModule.h" #endif ``` The very first clean build after `pod install` would work but all subsequent builds would fail with `Declaration of 'RCTBridgeModule' must be imported from module 'React.RCTBridge' before it is required`. Eventually surmised that it was because this code block was only being half-patched by `expo_patch_react_imports!`. I think it was because the first build had no modulemap yet so went into one of the patched directives. Subsequent builds have a modulemap from the first build so ended up in the unpatched else instead? # How Updates the regexps to account for whitespace before or after the directives that are being looked for. Did it as a positive lookbehind and lookahead so existing indentation/trailing whitespace is left as-is once the patch is in place (seemed safer).
[lint] Upgrade to Prettier v3, typescript-eslint to v6 (#23544)Why --- Prettier 3 is out. Add support for it with this linter config. **Note for reviewer:** the first commit is the one with th
[lint] Upgrade to Prettier v3, typescript-eslint to v6 (#23544)Why --- Prettier 3 is out. Add support for it with this linter config. **Note for reviewer:** the first commit is the one with the actual changes. The rest of this PR are changes to get the linter passing (mostly autofix). How --- Update eslint-config-prettier and eslint-plugin-prettier. To address deprecation warnings, also update typescript-eslint/parser and typescript-eslint/eslint-plugin. Because of an update to typescript-eslint/parser, we need to suppress deprecation warnings (documented in a comment). Regenerated test snapshots. Due to the upgraded dependencies, typecasts and optional chaining are now auto-fixable by lint. This converts warnings into autofixes. Test Plan --- `yarn test` in the linter config. Run `expotools check --all --fix-lint --no-build --no-test --no-uniformity-check` to try this config on the whole repo. --------- Co-authored-by: Expo Bot <[email protected]>
[autolinking] Add support for pnpm isolated modules (#23867)# Why This updates auto-linking to support discovering packages installed with `pnpm`, using the default "isolated module" behavior.
[autolinking] Add support for pnpm isolated modules (#23867)# Why This updates auto-linking to support discovering packages installed with `pnpm`, using the default "isolated module" behavior. # How - Updated pattern matching to include `node_modules/.pnpm/<pkg>@<version>/node_modules/<pkg>` paths We could also filter out some of the symlinks with [something similar to this](https://github.com/mrmlnc/fast-glob/issues/302#issuecomment-869200625). But the current duplication handling seems to be able to handle potential duplicates. # Test Plan This fix is extracted from my pnpm tests to try get pnpm working, without any workarounds. See this repo for more info: https://github.com/byCedric/expo-pnpm-tests/tree/main # Checklist <!-- Please check the appropriate items below if they apply to your diff. This is required for changes to Expo modules. --> - [ ] Documentation is up to date to reflect these changes (eg: https://docs.expo.dev and README.md). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). --------- Co-authored-by: Expo Bot <[email protected]>
[build-properties][autolinking] add extraPods and extraMavenRepos (#22785)# Why some third-party libraries require developers to add extra cocoapods or maven dependencies. this pr adds this cust
[build-properties][autolinking] add extraPods and extraMavenRepos (#22785)# Why some third-party libraries require developers to add extra cocoapods or maven dependencies. this pr adds this customization to expo-build-properties. unlike other properties which are processed by the config-plugins, the dependencies are added by expo-modules-autolinking. close ENG-8503 # How - [build-properties] add `android.extraMavenRepos` and `ios.extraPods` configs and validations. - [autolinking] read the expo-build-properties from config and add the dependencies through autolinking - [docs] `et generate-docs-api-data -p expo-build-properties` # Test Plan - ci passed - integration test on bare-expo 1. add the following properties to **apps/bare-expo/app.json** ```json "plugins": [ [ "expo-build-properties", { "android": { "extraMavenRepos": ["https://customers.pspdfkit.com/maven/"] }, "ios": { "extraPods": [ { "name": "Protobuf" } ] } } ] ] ``` 2. add `implementation 'com.pspdfkit:libraries-java:1.4.1'` to **apps/bare-expo/android/app/build.gradle** 2. Run `npx pod-install` and verify whether Protobuf is added to Podfile.lock 3. Run `./gradlew :app:assembleDebug` and see if the pspdfkit artifact is resolved --------- Co-authored-by: Tomasz Sapeta <[email protected]> Co-authored-by: Aman Mittal <[email protected]>
[autolinking] Introduce gradle plugin autolinking (#21377)# Why for #21327 because it introduces a gradle plugin inside expo-dev-launcher # How add android gradle plugin autolinking suppor
[autolinking] Introduce gradle plugin autolinking (#21377)# Why for #21327 because it introduces a gradle plugin inside expo-dev-launcher # How add android gradle plugin autolinking support. ~for security reasons, currently only support expo-dev-launcher.~ updates: we will have a highlighted log: # Test Plan ci passed
[autolinking] Support direct paths to modules (#17922)See PR description for details. - Made it possible to specify direct module paths in both `searchPaths` and `nativeModulesDir`. - Fixed the
[autolinking] Support direct paths to modules (#17922)See PR description for details. - Made it possible to specify direct module paths in both `searchPaths` and `nativeModulesDir`. - Fixed the `nativeModulesDir` to be always relative to the project root (`package.json`). Previously, it was resolved differently when called from `example/` and differently for `example/ios` dir, so e.g. `pod install` failed to link the custom module.
[autolinking] Fixed an infinite loop when the package.json is placed at the root path (#17440)
[autolinking] add some unit tests for findModules in workspace (#17425)# Why it's not clear how the transitive packages are linked in expo-modules-autolinking # How add some unit tests for
[autolinking] add some unit tests for findModules in workspace (#17425)# Why it's not clear how the transitive packages are linked in expo-modules-autolinking # How add some unit tests for `findModulesAsync`. hopefully to increase test coverage as well as write down use cases we supported. # Test Plan ``` PASS src/autolinking/__tests__/findModules-test.ts findModulesAsync ✓ should link hoisted package in workspace (1 ms) ✓ should not link hoisted package which are not in app project dependencies ✓ should link packages which are in app project transitive dependencies (1 ms) ✓ should not link packages which are not in app project transitive dependencies (1 ms) ✓ should link non-hoisted package first if there are multiple versions ```
[autolinking] Fix debug only modules weren't installed if the `DEBUG` flag wasn't present in `OTHER_SWIFT_FLAGS` (#17383)# Why Fixes https://github.com/expo/expo/issues/17373. Follow up https:/
[autolinking] Fix debug only modules weren't installed if the `DEBUG` flag wasn't present in `OTHER_SWIFT_FLAGS` (#17383)# Why Fixes https://github.com/expo/expo/issues/17373. Follow up https://github.com/expo/expo/pull/17378. # How Use the `EXPO_CONFIGURATION_DEBUG` flag instead of `DEBUG`. # Test Plan - bare-expo ✅ - a new project with SDK 45 ✅ (both projects were tested in debug and release configuration)
[autolinking][ios] Add support for debug only modules (#17331)# Why Needed to close https://github.com/expo/expo/issues/17246. # How Adds support for debug only modules. Those modules will
[autolinking][ios] Add support for debug only modules (#17331)# Why Needed to close https://github.com/expo/expo/issues/17246. # How Adds support for debug only modules. Those modules will only be added to the debug configuration. - Added a `debugOnly` field in the `iOS` section in the `expo-modules-config.json` - Ensured that debug modules are wrapped using the `#if DEBUG` directive inside of the ExpoModulesProvider # Test Plan - bare-expo ✅ ExpoModulesProvider without `debugOnly` modules: ```swift /** * Automatically generated by expo-modules-autolinking. * * This autogenerated class provides a list of classes of native Expo modules, * but only these that are written in Swift and use the new API for creating Expo modules. */ import ExpoModulesCore import ExpoCellular import ExpoClipboard import ExpoCrypto import EXDevLauncher import EXDevMenu import EASClient import ExpoHaptics import ExpoImageManipulator import ExpoImagePicker import ExpoKeepAwake import ExpoLinearGradient import ExpoLocalization import ExpoRandom import EXScreenOrientation import ExpoSystemUI import EXTrackingTransparency import ExpoWebBrowser @objc(ExpoModulesProvider) public class ExpoModulesProvider: ModulesProvider { public override func getModuleClasses() -> [AnyModule.Type] { return [ CellularModule.self, ClipboardModule.self, CryptoModule.self, EASClientModule.self, HapticsModule.self, ImageManipulatorModule.self, ImagePickerModule.self, KeepAwakeModule.self, LinearGradientModule.self, LocalizationModule.self, RandomModule.self, ExpoSystemUIModule.self, TrackingTransparencyModule.self, WebBrowserModule.self ] } public override func getAppDelegateSubscribers() -> [ExpoAppDelegateSubscriber.Type] { return [ ExpoDevLauncherAppDelegateSubscriber.self, ScreenOrientationAppDelegate.self ] } public override func getReactDelegateHandlers() -> [ExpoReactDelegateHandlerTupleType] { return [ (packageName: "expo-dev-launcher", handler: ExpoDevLauncherReactDelegateHandler.self), (packageName: "expo-dev-menu", handler: ExpoDevMenuReactDelegateHandler.self), (packageName: "expo-screen-orientation", handler: ScreenOrientationReactDelegateHandler.self) ] } } ``` ExpoModulesProvider with two `debugOnly` modules: ```swift /** * Automatically generated by expo-modules-autolinking. * * This autogenerated class provides a list of classes of native Expo modules, * but only these that are written in Swift and use the new API for creating Expo modules. */ import ExpoModulesCore import ExpoCellular import ExpoClipboard import ExpoCrypto import EASClient import ExpoHaptics import ExpoImageManipulator import ExpoImagePicker import ExpoKeepAwake import ExpoLinearGradient import ExpoLocalization import ExpoRandom import EXScreenOrientation import ExpoSystemUI import EXTrackingTransparency import ExpoWebBrowser #if DEBUG import EXDevLauncher import EXDevMenu #endif @objc(ExpoModulesProvider) public class ExpoModulesProvider: ModulesProvider { public override func getModuleClasses() -> [AnyModule.Type] { return [ CellularModule.self, ClipboardModule.self, CryptoModule.self, EASClientModule.self, HapticsModule.self, ImageManipulatorModule.self, ImagePickerModule.self, KeepAwakeModule.self, LinearGradientModule.self, LocalizationModule.self, RandomModule.self, ExpoSystemUIModule.self, TrackingTransparencyModule.self, WebBrowserModule.self ] } public override func getAppDelegateSubscribers() -> [ExpoAppDelegateSubscriber.Type] { #if DEBUG return [ ScreenOrientationAppDelegate.self, ExpoDevLauncherAppDelegateSubscriber.self ] #else return [ ScreenOrientationAppDelegate.self ] #endif } public override func getReactDelegateHandlers() -> [ExpoReactDelegateHandlerTupleType] { #if DEBUG return [ (packageName: "expo-screen-orientation", handler: ScreenOrientationReactDelegateHandler.self), (packageName: "expo-dev-launcher", handler: ExpoDevLauncherReactDelegateHandler.self), (packageName: "expo-dev-menu", handler: ExpoDevMenuReactDelegateHandler.self) ] #else return [ (packageName: "expo-screen-orientation", handler: ScreenOrientationReactDelegateHandler.self) ] #endif } } ```
[autolinking] Fix react_import_patcher doesn't work in a folder with spaces (#16794)# Why 1. https://github.com/expo/expo/issues/15622#issuecomment-1039001266 2. a partner reported an issue so
[autolinking] Fix react_import_patcher doesn't work in a folder with spaces (#16794)# Why 1. https://github.com/expo/expo/issues/15622#issuecomment-1039001266 2. a partner reported an issue some files be wiped out after `expo_patch_react_imports!` # How 1. i misunderstood ruby's [`system`](https://apidock.com/ruby/Kernel/system) method which passing an array would be no shell mode. so it's not necessary to escape the arguments. 2. don't write to files with changes. # Test Plan 1. bare-expo 2. `mkdir "$HOME/work space" ; cd "$HOME/work space" ; expo init project ; cd project ; expo run:ios`
[autolinking] Support multiple podspecs and gradle projects in a package (#16511)# Why - support the case where a package has multiple podspecs, e.g. [react-native-maps](https://github.com/reac
[autolinking] Support multiple podspecs and gradle projects in a package (#16511)# Why - support the case where a package has multiple podspecs, e.g. [react-native-maps](https://github.com/react-native-maps/react-native-maps/blob/master/docs/installation.md#enabling-google-maps) - being less intrusive to 3rd party libraries when we proposing expo integration. for example, current integration to [reanimated add one line to existing code](https://github.com/software-mansion/react-native-reanimated/blob/a870aa28092322b627695f8cf2ea0dce4db34a53/android-npm/build.gradle#L111) and [turn reanimated gradle project to a different form](https://github.com/software-mansion/react-native-reanimated/blob/a870aa28092322b627695f8cf2ea0dce4db34a53/android-npm/expo/linking.gradle#L15-L45). - expo reanimated integration had introduced some issues as following. based on this, i think we should have a dedicated gradle project. - https://github.com/software-mansion/react-native-reanimated/issues/2711 - https://github.com/software-mansion/react-native-reanimated/pull/2713#issuecomment-1024341773 # How - support multiple podspec linking - `*/*.podspec` - support multiple build.gradle linking - `*/build.gradle` - ~introduce special expo adapter integration where we can put all stuffs including `expo-module.config.json` in `expo/` folder in this case, rn-cli's autolinking will link `RNThirdParty.podspec` and `android/build.gradle`. expo autolinking will link `RNThirdPartyExpoAdapter.podspec` and `expo/android/build.gradle`~ - add expo-module.config.js `android.gradlePath` support to specify custom gradle file paths. # Test Plan ## Unit Tests ``` PASS src/platforms/__tests__/android-test.ts resolveModuleAsync ✓ should resolve android/build.gradle (2 ms) ✓ should resolve multiple gradle files (1 ms) convertPackageNameToProjectName ✓ should strip invalid characters (1 ms) ✓ should convert scoped package name to dash ✓ should have differentiated name for multiple projects ✓ should support expo adapter name PASS src/autolinking/__tests__/findModules-test.ts findModulesAsync ✓ should link top level package (2 ms) ✓ should link scoped level package (1 ms) PASS src/platforms/__tests__/ios-test.ts resolveModuleAsync ✓ should resolve podspec in ios/ folder ✓ should resolve multiple podspecs (1 ms) ``` ## Integration Tests - create extra `ios2/EXApplication2.podspec` in expo-application - create extra `android2/build.gradle` in expo-application - check rn-cli autolinking and expo autolinking co-existence compatibility - move `use_native_modules!` before `use_expo_modules!` in Podfile - create extra `ios2/RNReanimated2.podspec` in reanimated and check whether it's linked. Co-authored-by: Tomasz Sapeta <[email protected]>
[autolinking] Fix finding transitive modules (#16419)Co-authored-by: Expo Bot <[email protected]>
[expo-modules-autolinking] add ios.swiftModuleName to expo-module config (#16260)
[autolinking] Expose methods for use in expo/prebuild-config (#15950)
[autolinking] Rename "modulesClassNames" to "modules" (#15852)
[autolinking] Add react-native 0.66 support for ReactImportsPatcher (#15724)# Why in react-native 0.66, the `#if __has_include("RCTBridge.h")` also leads to build errors. feedback from https://g
[autolinking] Add react-native 0.66 support for ReactImportsPatcher (#15724)# Why in react-native 0.66, the `#if __has_include("RCTBridge.h")` also leads to build errors. feedback from https://github.com/expo/expo/issues/15622#issuecomment-999815962 # How transform `#if __has_include("RCTBridge.h")` to `#if __has_include(<React/RCTBridge.h>)` # Test Plan ```sh $ npx react-native init RN066 --version 0.66 $ cd RN066 $ npx install-expo-modules $ yarn add [email protected] $ npx pod-install $ yarn ios ```
[autolinking] Introduce patcher for double-quoted import issue (#15655)# Why systematic workaround for #15622 # How transform all double-quoted react imports from all cocoapods linked proj
[autolinking] Introduce patcher for double-quoted import issue (#15655)# Why systematic workaround for #15622 # How transform all double-quoted react imports from all cocoapods linked project # Test Plan ## Integration Test - bare-expo CI build passed - from a sdk 44 project ``` expo init sdk44 # select bare yarn add react-native-get-random-values yarn add file:/path/to/expo/packages/expo yarn add file:/path/to/expo/packages/expo-modules-autolinking # add the block to ios/Podfile post_integrate do |installer| expo_patch_react_imports!(installer) end expo run:ios ``` ## Unit Test ``` PASS src/__tests__/ReactImportsPatcher-test.ts patchFileAsync ✓ should transform double-quoted import (1 ms) ✓ should not transform React-Core headers (1 ms) ✓ should not write changes when `dryRun` is true ``` Co-authored-by: James Ide <[email protected]> Co-authored-by: Tomasz Sapeta <[email protected]>
[autolinking] Restructure package code (#15502)* [autolinking] Restructure code * Fix relative require paths * Apply suggestions from base PR
[ENG-2586][autolinking] Support for app's custom native modules (#15415)* Experimental PoC version * Rewrite package resolution logic * Implement modules path resolving * Update CHANGELOG
[ENG-2586][autolinking] Support for app's custom native modules (#15415)* Experimental PoC version * Rewrite package resolution logic * Implement modules path resolving * Update CHANGELOG * Apply suggestions
[autolinking] Add `podspecPath` option to config (#15578)# Why A better implementation of https://github.com/expo/expo/pull/15564. # How We don't want to link an RN module that has an `exp
[autolinking] Add `podspecPath` option to config (#15578)# Why A better implementation of https://github.com/expo/expo/pull/15564. # How We don't want to link an RN module that has an `expo-module.config.json` like `reanimated`. That's why we can't just extend a search region. So I've added a new option to the `expo-module config` that indicates where the podspec is located. # Test Plan - run `node --eval "require('expo-modules-autolinking')(process.argv.slice(1))" -- resolve --platform ios` and check if the podspec path changes.
[core] Introduce iOS ReactDelegate for React related instances creation (#15138)# Why original modularized AppDelegateWrapper isn't ideal for expo-updates. we had some bad side effect, e.g. doub
[core] Introduce iOS ReactDelegate for React related instances creation (#15138)# Why original modularized AppDelegateWrapper isn't ideal for expo-updates. we had some bad side effect, e.g. double bridge creation on startup. close ENG-2299 # How ## For module authors introduce `EXReactDelegate` dedicated for react related instances creation. so far we covered: - RCTBridge - RCTRootView - RootViewController (for expo-screen-orientation) if a module wants to handle these creation, there's 2 steps: 1. add `reactDelegateHandlers` in `expo-module.config.json`, e.g. ``` "ios": { "reactDelegateHandlers": ["ScreenOrientationReactDelegateHandler"] } ``` 2. create `EXReactDelegateHandler` derived swift class, e.g. ```swift // ScreenOrientationReactDelegateHandler.swift public class ScreenOrientationReactDelegateHandler: ExpoReactDelegateHandler { public override func createRootViewController(reactDelegate: ExpoReactDelegate) -> UIViewController? { return EXScreenOrientationViewController() } } ``` since the order of whom to create the instance did matter, we also introduce `ModulePriorities.swift` similar to what we did on android. ## For app developers the change to template is minimal, so codemod by `npx install-expo-modules` is also feasible. ```diff - RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; - RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"main" initialProperties:nil]; + RCTBridge *bridge = [self.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions]; + RCTRootView *rootView = [self.reactDelegate createRootViewWithBridge:bridge moduleName:@"main" initialProperties:nil]; self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - UIViewController *rootViewController = [UIViewController new]; + UIViewController *rootViewController = [self.reactDelegate createRootViewController]; ```
[core] Enhance RN wrapper for 3rd-party libraries integration (#14883)# Why Enhance `ReactNativeHostWrapper` and `ReactActivityDelegateWrapper` for expo-updates error recovery and 3rd-party libr
[core] Enhance RN wrapper for 3rd-party libraries integration (#14883)# Why Enhance `ReactNativeHostWrapper` and `ReactActivityDelegateWrapper` for expo-updates error recovery and 3rd-party libraries integration # How - introduce internal ModulePriorities to define modules listeners/handlers order like iOS did - autolinking android searches source code other than `src/**/*Package.{java,kt}` - add `onWillCreateReactInstanceManager` and `onDidCreateReactInstanceManager` - deprecate previous `createReactInstanceManager` loop to all packages (replace with `onBeforeCreateReactInstanceManager`) - support `createRootView` for react-native-gesture-handler
[ios] New ExpoAppDelegate independent of singleton modules (#14867)
12