mirror of
https://github.com/facebook/react-native.git
synced 2024-11-22 06:29:46 +00:00
436da18fce
Summary:
The `react-native-xcode` script assumes the that `node_modules` folder are in the same location as the react native project. This adds the ability to declare `CUSTOM_DIR` in `.xcode.env` file to let react-native-xcode know where the react native project is located - required for monorepos
## Issue
At the moment if a project is not using the default react native file structure then when trying to create a build or archive using Xcode it will fail, with the following error:
> File /Users/itxch/Library/Developer/Xcode/DerivedData/app-evgjukoxhuupzzdglopjnhcntvpw/Build/Intermediates.noindex/ArchiveIntermediates/jungul/BuildProductsPath/Release-iphoneos/app.app/main.jsbundle does not exist. This must be a bug with React Native, please report it here: https://github.com/facebook/react-native/issues
## Background
My project is a monorepo, using `npm` workspaces.
#### This is the relevant file structure
![files](https://user-images.githubusercontent.com/54910400/203641210-596ee866-9f9f-429c-8bae-62d0f3afc623.png)
This file structure is incompatible with line 63 of `react-native-xcode.sh`
c5a8425fad/scripts/react-native-xcode.sh (L63)
Note: `$REACT_NATIVE_DIR` is the `react-native` package directory inside node modules.
So by default this sets project root to be the parent folder of the `node_modules` folder. However in my case this is not correct, it should actually be:
```sh
PROJECT_ROOT=${PROJECT_ROOT:-"$REACT_NATIVE_DIR/../../app"}
```
## Solution
Seeing as hardcoding the value would not work, the simplest solution is to set the directory via a variable
```sh
PROJECT_ROOT=${PROJECT_ROOT:-"$REACT_NATIVE_DIR/../../$CUSTOM_DIR"}
```
`$CUSTOM_DIR` can easily be set via `.xcode.env` file.
## Changelog
[IOS] [Added] - allow for custom project dir in react-native-xcode script
Pull Request resolved: https://github.com/facebook/react-native/pull/35449
Test Plan:
After updating my `.xcode.env` file to include `export CUSTOM_DIR=app`, I can successfully create a build or an archive.
If the variable is not set it will be black, so it will not effect `$PROJECT_ROOT`
Reviewed By: GijsWeterings
Differential Revision: D41529396
Pulled By: cortinico
fbshipit-source-id: 890e9867e31f83a08561df8c2de1069e771726fc
17 lines
764 B
Bash
17 lines
764 B
Bash
# This `.xcode.env` file is versioned and is used to source the environment
|
|
# used when running script phases inside Xcode.
|
|
# To customize your local environment, you can create an `.xcode.env.local`
|
|
# file that is not versioned.
|
|
|
|
# NODE_BINARY variable contains the PATH to the node executable.
|
|
#
|
|
# Customize the NODE_BINARY variable here.
|
|
# For example, to use nvm with brew, add the following line
|
|
# . "$(brew --prefix nvm)/nvm.sh" --no-use
|
|
export NODE_BINARY=$(command -v node)
|
|
|
|
# If you're not using the default file structure, e.g. a monorepo
|
|
# then you can pass in the root react native directory.
|
|
# E.g. To set it to be the parent directory of the ios folder
|
|
# export PROJECT_ROOT="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )/../"
|