react-native: NODE_BINARY in .xcode.env not working
Description
I would like to use the .xcode.env to set my node version. My .xcode.env looks like:
export NODE_BINARY=$(command -v node)
When I execute this command in a terminal window, it returns the proper node version. I’ve tested, and the only way I can set the node version is using Build Phases -> Bunde React Native Code and Images -> and exporting NODE_BINARY in the shell commands there to the absolute path:
export NODE_BINARY=/Users/myuser/.nvm/versions/node/v14.18.1/bin/node
Can anyone suggest why NODE_BINARY is not being set through the .xcode.env file? Do I have to take any extra steps to use this during archive?
Version
0.70.4
Output of npx react-native info
System: OS: macOS 12.6 CPU: (12) x64 Intel® Core™ i7-9750H CPU @ 2.60GHz Memory: 23.84 MB / 32.00 GB Shell: 3.2.57 - /bin/bash Binaries: Node: 14.18.1 - ~/.nvm/versions/node/v14.18.1/bin/node Yarn: 1.22.18 - ~/.nvm/versions/node/v14.18.1/bin/yarn npm: 6.14.15 - ~/.nvm/versions/node/v14.18.1/bin/npm Watchman: 2022.03.21.00 - /usr/local/bin/watchman Managers: CocoaPods: 1.11.3 - /Users/micahsklut/.rbenv/shims/pod SDKs: iOS SDK: Platforms: DriverKit 22.2, iOS 16.2, macOS 13.1, tvOS 16.1, watchOS 9.1 Android SDK: API Levels: 29, 30, 31 Build Tools: 29.0.2, 30.0.2, 30.0.3, 31.0.0 System Images: android-29 | Intel x86 Atom_64, android-29 | Google APIs Intel x86 Atom_64, android-30 | Google APIs Intel x86 Atom Android NDK: Not Found IDEs: Android Studio: 2021.3 AI-213.7172.25.2113.9123335 Xcode: 14.2/14C18 - /usr/bin/xcodebuild Languages: Java: 1.8.0_292 - /usr/bin/javac npmPackages: @react-native-community/cli: Not Found react: 18.1.0 => 18.1.0 react-native: ^0.70.4 => 0.70.6 react-native-macos: Not Found npmGlobalPackages: react-native: Not Found
Steps to reproduce
Run Archive. The system node is being used, unless I set it as explained above.
Snack, code example, screenshot, or link to a repository
About this issue
- Original URL
- State: open
- Created 2 years ago
- Reactions: 5
- Comments: 22 (8 by maintainers)
Loading nvm from within
.xcode.env
seems to resolve this for me:nvm is common enough that I would suggest this should work out of the box.
The problem is that Xcode scripts works in a different environment than a regular terminal/ Xcode also overrides some basic ENV var that can shadow and mask other variables we might set.
If you don’t have node in the default PATHs, like
/usr/local/bin
, for example, Xcode is not able to find it. A simple solution could be to create a symlink to node in/usr/local/bin
:We are investigating better way to handle this, but we haven’t found a robust approach yet, unfortunately. 😦
Apparently this is caused by
nvm
A less invasive workaround (that breaks nvm):ln -s $(which node) /usr/local/bin/node
in my case it was NVM. Either let nvm go or reconfigure it In your build phases scripts
Thanks for good answer. The important thing is uninstalling unused node version.
This analysis is correct. I solved this problem by completely uninstalling node and then downloading the .pkg installation from the node.js ,because the installation location of the installation package is /usr/local/bin/node by default.
@cipolleschi thanks, they are on two lines in the file and it was auto generated like that! i commented out
export NODE_BINARY=$(command -v node)
and updated the other with my node path
export NODE_BINARY=/usr/local/bin/node
project now builds
Thanks
Hey @adamjw3! Your Xcode env has 2
export NODE_BINARY
on the same line. That would not work.You should have either
Or
@lucianomlima yeah, that’s definitely very weird. Can you try add a script phase after building just calling
which command
? 😕In my case, Xcode can find node (using the ,
export NVM_DIR=path/to/.nvm
approach) but can’t findcommand
, that is a built-in shell library. Sounds weird.