Add EX_UPDATES_NATIVE_DEBUG support to Xcode env generator (#24366)
[autolinking] Resolve cli for isolated modules before running node scripts (#23926)# Why This is the last fix to make `expo-modules-autolinking` work with isolated modules (e.g. pnpm). > ~~⚠
[autolinking] Resolve cli for isolated modules before running node scripts (#23926)# Why This is the last fix to make `expo-modules-autolinking` work with isolated modules (e.g. pnpm). > ~~⚠️ Note: this only fixes the iOS part, since we can use `__dir__`. I haven't found a proper alternative for Android's gradle unfortunately.~~ Android is now also fixed, see comments for more info. With isolated modules, we can only require direct project or package dependencies. Meaning that for `expo-modules-autolinking`, we have two options: 1. Resolve `expo-modules-autolinking` from the actual `.../expo-modules-autolinking/scripts` folder (parent folder is the module) 2. Resolve the full dependency chain from the root of the project: `expo > expo-modules-autolinking` # How - Resolve `expo-modules-autolinking` from script's directory before executing Node command from iOS cocoapods script (option 1) - Resolve `expo` > `expo-modules-autolinking` from the project root before executing Node command in gradle (option 2 - no viable option 1 alternative in gradle) # Test Plan - `$ pnpm create expo ./test-isolated-modules -t tabs` - `$ cd ./test-isolated-modules` - Patch autolinking - `$ pnpm expo install expo-dev-client` _(or any other module, containing other modules)_ - `$ pnpm expo run:ios` _(should work and include all nested dependencies of `expo-dev-client`)_ Or see this repo: https://github.com/byCedric/expo-pnpm-tests/blob/main/patches/expo-modules-autolinking%401.5.0.patch # Checklist <!-- Please check the appropriate items below if they apply to your diff. This is required for changes to Expo modules. --> - [x] 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 ...
[core][Android] Made `generateExpoModulesPackageList` task cacheable (#23847)# Why Made the `generateExpoModulesPackageList` task cache friendly to save a little time during compilation. It's
[core][Android] Made `generateExpoModulesPackageList` task cacheable (#23847)# Why Made the `generateExpoModulesPackageList` task cache friendly to save a little time during compilation. It's not much - on my M1, it saves around 1.7 seconds. # How Added task `inputs` and `outputs`. # Test Plan - bare-expo ✅
[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]>
Upgrade react-native 0.72.0-rc.5 (#22588)# Why upgrade react-native 0.72 for sdk 49 close ENG-8011 # How - bump package versions - `react-native 0.71.3 -> 0.72.0-rc.5` - `metro-reac
Upgrade react-native 0.72.0-rc.5 (#22588)# Why upgrade react-native 0.72 for sdk 49 close ENG-8011 # How - bump package versions - `react-native 0.71.3 -> 0.72.0-rc.5` - `metro-react-native-babel-preset 0.73.9 -> 0.76.5` - [bare-expo][templates][fabric-tester] migrate template base on [upgrade-helper](https://react-native-community.github.io/upgrade-helper/?from=0.71.7&to=0.72.0-rc.5) - [expo-template-tabs] remove the metro version overrides for expo-router. - [core][dev-laucher][dev-menu][media-library][screen-orientation][splash-screen][updates-interface][updates] add the `install_modules_dependencies` to support new architecture + use_frameworks! - [core][autolinking] fix some new architecture error on ios - [react-native-lab] update our fork to 0.72.0-rc.5 based - [go][tools] fix **react-native-lab/react-native/packages/react-native** path move because of react-native's repo monorepo changes - [go][android] fix gradle 8 errors - [go][ios] add `RCT_REMOTE_PROFILE=0` to fix the `RCT_ENABLE_INSPECTOR needs to be set to fulfill RCT_REMOTE_PROFILE` build error - [ncl] remove `ProgressViewIOS` / `ProgressBarAndroid` since they are deprecated/removed in 0.72 - [dev-menu][dev-launcher] rebuild bundles # Note - react-native-web is not bumped because of the [issue](https://github.com/necolas/react-native-web/issues/2523), so it's still react-native-web@~0.18.10. - currently disable ci typecheck for @expo/cli because of upstream metro typescript support. i'll have another pr to fix those errors. - updates e2e ci on android is broken at [here](https://github.com/expo/expo/blob/fada3d764957779fbfc3d7b723d185db1d933d95/packages/expo-updates/e2e/fixtures/Updates.e2e.ts#L518). i doubt if that's related to the react scheduler change. i'd disabled the failed test case. - the react-native upstream [migrated away the `@types/jest`](https://github.com/facebook/react-native/pull/36068). i was afraid that will be a breaking change to the existing jest test code since it requires the explicit `@jest/globals` import. i didn't do this in this upgrade. # Test Plan - ✅ fabric-tester (without expo-dev-client) - ✅ ci passed. there are some errors which are known: - updates e2e on android: as mentioned above - ios expo go on eas build: versioned expo go are broken on eas build m1 worker. this is also happening on main. - android client: no space left on the ubuntu worker. this is also happening on main. - ✅ bare-expo - ✅ unversioned expo go + ncl --------- Co-authored-by: Tomasz Sapeta <[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
[core][ios] Fix `PhaseScriptExecution` failed with a nonzero exit code (#21340)# Why Fixes `PhaseScriptExecution` failed with a nonzero exit code when the `command -v node` fails. # How W
[core][ios] Fix `PhaseScriptExecution` failed with a nonzero exit code (#21340)# Why Fixes `PhaseScriptExecution` failed with a nonzero exit code when the `command -v node` fails. # How When the command -v node fails, the entire `expo-configure-project. sh` fails as well, due to the `set -e` setting, which terminates the script whenever any command exits with a non-zero status. The problem in our case is caused by the failure of the `command -v node`. However, by using `NODE_BINARY=$(command -v node)` in combination with the export function, the exit code will always be 0, regardless of whether or not the `command` fails. # Test Plan - bare-expo ✅ - Expo Go ✅
[autolinking][ios] Generate the modules provider in the build phase script (#21108)
[autolinking] Suppress node warnings about deprecated exports mapping (#21222)
[1/3] upgrade react-native 0.71 (#20799)# Why upgrade react-native 0.71 for sdk 48 close ENG-7192 # How - update package versions - `react: 18.1.0 -> 18.2.0` - `react-native 0.70.5
[1/3] upgrade react-native 0.71 (#20799)# Why upgrade react-native 0.71 for sdk 48 close ENG-7192 # How - update package versions - `react: 18.1.0 -> 18.2.0` - `react-native 0.70.5 -> 0.71.0` - `react-dom: 18.1.0 -> 18.2.0` - `react-test-renderer: 18.1.0 -> 18.2.0` - `react-native-web: 0.18.9 -> 0.18.10` - `babel-plugin-react-native-web: 0.18.9 -> 0.18.10` - `metro-react-native-babel-preset: 0.72.3 -> 0.73.5` - upgrade three project templates based on [upgrade-helper](https://react-native-community.github.io/upgrade-helper/?from=0.70.6&to=0.71.0) - bare-expo - expo-template-bare-minimum - fabric-tester (this is based on `npx expo prebuild --clean --no-install --template /path/to/expo-template-bare-minimum.tgz`) so it includes some inconsistent changes - [@expo/config-plugins]: support 0.71 template transform. the `namespace` in build.gradle and the files in `release` build variants - [fbjni] upgrade 0.3.0 to align 0.71 (also ndk version) - [expo-updates] move the `EX_UPDATES_NATIVE_DEBUG` `bundleInDebug` setup to templates. unfortunately, because RNGP setups the task dependencies pretty early. the original setup in expo-updates build.gradle is too late. note that the change doesn't reference any files from templates to expo-updates package. somehow it's not tightly coupled. - [native-tests / expo-modules-test-core / expo-modules-autolinking] fix ios unit test build error because jsc now in a dedicated podspec. in theory, the ios native unit test could now run on hermes as well. - for other details, please check commit histories one by one. # Test Plan - bare-expo ios / android - fabric ios / android - ci passed (except ios) - test-suite ios is broken for unknown reasons. it breaks only on github actions and hermes. for nightlies testing, i also [changed it to jsc](https://github.com/expo/expo/blob/1e029c89c4247802cc4880e27e116a6b4c71c502/tools/src/commands/SetupReactNativeNightly.ts#L287-L293) to make ci green. i'll try to follow up and investigate the root cause.
[ios] Fix File.exist? for [email protected] (#20757)
[autolinking] Fix enabling modular headers for subspecs (#20582)
[modules] Fix incompatible issue for react-native 0.71 (#20470)# Why sdk 48 may come next year and react-native 0.71 may be released this year. it's good to have react-native 0.71 support for ou
[modules] Fix incompatible issue for react-native 0.71 (#20470)# Why sdk 48 may come next year and react-native 0.71 may be released this year. it's good to have react-native 0.71 support for our modules. if users want to upgrade 0.71, they could change their project to be a bare project for the early preview. # How - [core][av][gl] because 0.71 doesn't serve android aar along with npm package, the aar extraction from `node_modules/react-native/android/**/*.aar` will break on 0.71. 0.71 also ships modules with prefab support. it's good to rewrite the gradle/cmake files to link with prefab modules. that would reduce much complexity. however, to be backward compatible with 0.70, i moved most logic to `ExpoModulesCorePlugin.applyLegacyReactNativeLibsExtractionPlugin` and `legacy/CMakeLists.txt`. so that we could be backward compatible and easily remove the isolated code after we drop sdk 47 support. - [dev-launcher] add 0.71 sources because new parameter to `DevSupportManagerBase` - [core][dev-menu] fix ios build errors for jsc because 0.71 moved the header to `<React-jsc/JSCRuntime.h>` - [core][autolinking] integrate the `RCTAppDelegate` with our `EXAppDelegateWrapper`. that would simply the install-expo-modules migration where we only need the change `RCTAppDelegate -> EXAppDelegateWrapper` in AppDelegate.h. however, integrate RCTAppDelegate comes with some issues from expo-modules-core. [this commit](https://github.com/expo/expo/pull/20470/commits/2959477c5782f5d3ef770fbe72b04c1770bc566b) changes many code and i'll try to explain here: - RCTAppDelegate is in `React-RCTAppDelegate` pod, which does not define module. we define module for it in our patch system in autolinking. - defines `RCT_NEW_ARCH_ENABLED` as RCTAppDelegate - in new architecture mode, RCTAppDelegate comes with [more cxx dependencies](https://github.com/facebook/react-native/blob/03b17d9af7e4e3ad3f9ec078b76d0ffa33a3290e/Libraries/AppDelegate/RCTAppDelegate.h#L12-L18) for fabric. that's why we should add more header search paths and also move to EXAppDelegateWrapper.mm. # Test Plan - [x] ci passed - [x] bare-expo build and launch - [x] bare-expo nightlies build and launch - [x] fabric-tester build and launch - [x] fabric-tester nighties build and launch (should apply [the patch to fabric-tester](https://gist.github.com/Kudo/417a5159cb01a400ecee22ad4985d287)) - [x] rn 0.71-rc4 project build and launch (could apply [the patches](https://gist.github.com/Kudo/7448c733f12e700c7fbed76251fa3553) for testing) - [x] rn 0.71-rc4 project (new architecture) build and launch ([this pr](https://github.com/facebook/react-native/pull/35661) for react-native is required) - [x] rn 0.71-rc4 project (use_frameworks!) build and launch
[autolinking] Automatically use modular headers for pod dependencies (#19443)
[autolinking] Fix node resolution error when executed from scripts (#18580)# Why fix https://github.com/expo/expo/pull/18330#issuecomment-1208645614 # How when executed from package.json `
[autolinking] Fix node resolution error when executed from scripts (#18580)# Why fix https://github.com/expo/expo/pull/18330#issuecomment-1208645614 # How when executed from package.json `scripts`, the *node* from `command -v node` is actually a wrapper to temp file, e.g. */var/folders/yw/6bx918xn4671rggfcdxz7fph0000gn/T/yarn--1660058355887-0.20052152174853344/node* ``` #!/bin/sh exec "/Users/kudo/.volta/tools/image/node/16.16.0/bin/node" "$@" ``` the temp wrapper file may be purged soon after prebuild completed. the pr changes the `command -v node` to `node --print "process.argv[0]"` when generating the *.xcode.env.local* content. it should be the final node path. even though it's slightly different for my setup, e.g. volta: `/Users/kudo/.volta/bin/volta` -> `/Users/kudo/.volta/tools/image/node/16.16.0/bin/node` where it was originally pointed to volta wrapper path and now to final node executable. that should be fine for pointing to final node executable path though. # Test Plan ``` yarn create expo-app -t blank@sdk-46 sdk46 # add `"prebuild": "npx expo prebuild -p ios --clean"` to package.json *scripts* field yarn prebuild # verify the content of .xcode.env.local ```
[autolinking][ios] Add an option to include test specs from autolinked modules (#18496)
Deprecate source-login-scripts.sh (#18330)# Why the `source-login-scripts.sh` introduced a lot of pain where the community reported much build errors from it. it doesn't support shells other tha
Deprecate source-login-scripts.sh (#18330)# Why the `source-login-scripts.sh` introduced a lot of pain where the community reported much build errors from it. it doesn't support shells other than zsh and bash. this pr find a new way to deal with xcode building issues that it cannot find the correct nodejs path. close ENG-4864 close ENG-5242 # How react-native introduces `.xcode.env` and `.xcode.env.local` for developers to override the `$NODE_BINARY`: https://github.com/facebook/react-native/pull/33546 to make sure building success from expo-constants, expo-updates, and also the app target when generating bundles. i would like to reuse the `.xcode.env` and `.xcode.env.local` from react-native. this pr further generates `.xcode.env.local` automatically for the app during `pod install`. we can ensure that `pod install` is executed from shell and nodejs is available. so we will generate `export NODE_BINARY="$(command -v node)"` in the `.xcode.env.local`. for xcode, the path will be `$PODS_ROOT/../.xcode.env.local`, every xcode subprojects can source the file to get correct `$NODE_BINARY`. # Test Plan - building bare-expo from xcode (opening xcode by macos finder) - building bare-expo by `yarn ios` - updates e2e ci passed - building expo-go (prerequisite: #18344) Co-authored-by: James Ide <[email protected]>
[autolinking] Only patch imports inside node_modulesregression from 6adee594a4697e937e2d9206a4ab1f9ed211cce0where the patcher should not touch files in workspace.
[ios][autolinking] Use regex to match modules in expo_patch_react_imports! (#17968)# Why The previous version of the script would ignore modules if the absolute path contained ignored names even
[ios][autolinking] Use regex to match modules in expo_patch_react_imports! (#17968)# Why The previous version of the script would ignore modules if the absolute path contained ignored names even though the string had nothing to do with the ignored modules, for example: - /Users/username/code/react-native/node_modules/react-native-permissions - /Users/username/code/expo-learning/node_modules/react-native-paypal This led me to temporarily having to change the structure and naming of my projects since I like to organize them by technology # How This PR changes the implementation to use a regex that instead will make sure that the excluded package names are located inside the `node_modules` directory. This way users of the packages can name and strucuture their projects in any way without being affected by the script.
[ios] Update react-native to 0.69 for expo go (#17629)# Why upgrade react-native for sdk 46 # How - update our react-native fork - [android] add hermes-engine prebuilding. the main change
[ios] Update react-native to 0.69 for expo go (#17629)# Why upgrade react-native for sdk 46 # How - update our react-native fork - [android] add hermes-engine prebuilding. the main change is [here](https://github.com/expo/react-native/commit/8bb810c9860fc1e49d9f55bb3929ad0eb534f441). because in expo-go we are building react-native from source. in 0.69 it also means to build hermes from source. that will make our ci time more difficult. - [expo][android] add ReactNativeHostWrapper for 0.69 because `com.facebook.react.devsupport.interfaces.RedBoxHandler` package renaming. - update some expo modules to support 0.69 **TODO** `et update-rn` is not included in this pr. i will do it later and commit directly. because that includes mass changes and makes review very difficult. # Test Plan update react-native, react, in expo/expo and test NCL with android/ios unversioned expo go Co-authored-by: Tomasz Sapeta <[email protected]>
[ios][tools][ci] Redesign iOS unit tests (#17634)# Why iOS Unit Test CI job had several issues: - Fastlane is being run for each package separately, so it's restarting the simulator each time.
[ios][tools][ci] Redesign iOS unit tests (#17634)# Why iOS Unit Test CI job had several issues: - Fastlane is being run for each package separately, so it's restarting the simulator each time. This makes the job slower and moreover, test results are scattered across all fastlane logs. - Some tests are being run on bare-expo, others on the client project. - Packages to be tested need to be defined manually in podfile - Some dev-client tests aren't being run at all (bug in expotools) # How Basically, running tests once from a single xcscheme is faster and clearer than doing it separately for each package. - Applied some autolinking + fastlane changes from #16993 and https://github.com/expo/expo/commit/0e0c1e3db71535002e56453ff6004b06e2836c8e - now we have `use_expo_modules_tests!` for autolinking only test packages. - Created (`expo init -t bare`) a new `apps/native-tests` app which has no JS code, but only native iOS project with a single test-only scheme (`NativeTests.xcscheme`) > It might be possible to integrate it as a separate test target in bare-expo instead of creating a new app - Created a custom fastlane action `generate_test_scheme`, which takes that NativeTests scheme as a template and automatically finds test targets (named `PodspecName-Unit-Tests`, generated by CocoaPods during `pod install`) and generates a `NativeTests_generated` scheme aggregating all these targets. Package filtering is also supported. - Created a new ios lane `:unit_tests` which uses that action to generate the scheme and then run tests, adopted the `et ios-native-unit-tests` command to use this lane. - Fixed expotools not recognizing the `expo-dev-launcher` podspec, because it was in the package root instead of the `ios/` subdir. - Got rid of `React-hermes` test spec dependencies. They're not needed anymore. JS engine for `apps/native-tests` is set to JSC. - Added `FASTLANE_SKIP_UPDATE_CHECK=1` to the CI env to prevent fastlane from spamming. One drawback of this approach is that we now have to maintain another app, another podfile etc
[autolinking] Fix for custom iOS build configuration types (#17439)Co-authored-by: Tomasz Sapeta <[email protected]>
[autolinking] Set EXPO_CONFIGURATION_* flags for Swift compiler (#17378)# Why It turned out that `#if DEBUG` in Swift works only in some projects (especially in Expo Go and BareExpo) but the fla
[autolinking] Set EXPO_CONFIGURATION_* flags for Swift compiler (#17378)# Why It turned out that `#if DEBUG` in Swift works only in some projects (especially in Expo Go and BareExpo) but the flag might be unset depending on the build settings. Follow up #17331 Should help in fixing #17373 # How I'm introducing `EXPO_CONFIGURATION_DEBUG` and `EXPO_CONFIGURATION_RELEASE` Swift flags that will be added to project's build settings as part of the autolinking process. Then, we'll be able to safely use `#if EXPO_CONFIGURATION_DEBUG` in the modules providers and maybe also in some other places. # Test Plan - Running `pod install` in Expo Go and BareExpo properly added these flags to `OTHER_SWIFT_FLAGS` build setting - Confirmed that running `pod install` again doesn't necessarily save the project (incremental mode works as expected)
[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`
12