TLDR
- ...You need a Mac to do it
- Install Xcode, Node.js, and Yarn
- Install Ruby gem
cocoapods
- Try
$ sudo xcode-select --switch /Applications/Xcode.app
if you run into issues in$ pod install
(onInstalling Flipper-Glog
)
Steps
-
Install Node.js with a way of your choice (Homebrew, asdf, etc.)
# via homebrew $ brew install node # check version of node to see if node is installed # it should print node's version number $ node -v # => v12.15.0
-
Install Yarn with a way of your choice (Homebrew, asdf, etc.)
# via homebrew $ brew install yarn # check version of node to see if yarn is installed # it should print yarn's version number $ yarn -v # => 1.22.5
-
Initialize a React Native Project
$ npx react-native init MyFirstRNProject
-
Install Ruby gem
cocoapods
$ sudo gem install cocoapods
-
Change directory to
YourProject/ios/
to install iOS dependencies$ cd MyFirstRNProject/ios $ pod install
-
If error prints like the following, run
$ sudo xcode-select --switch /Applications/Xcode.app
and do$ pod install
again. It should be working then.Analyzing dependencies Fetching podspec for `DoubleConversion` from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec` Fetching podspec for `Folly` from `../node_modules/react-native/third-party-podspecs/Folly.podspec` Fetching podspec for `glog` from `../node_modules/react-native/third-party-podspecs/glog.podspec` Downloading dependencies Installing CocoaAsyncSocket (7.6.4) Installing CocoaLibEvent (1.0.0) Installing DoubleConversion (1.1.6) Installing FBLazyVector (0.63.2) Installing FBReactNativeSpec (0.63.2) Installing Flipper (0.41.5) Installing Flipper-DoubleConversion (1.1.7) Installing Flipper-Folly (2.2.0) Installing Flipper-Glog (0.3.6) [!] /bin/bash -c set -e #!/bin/bash # Copyright (c) Facebook, Inc. and its affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. set -e PLATFORM_NAME="${PLATFORM_NAME:-iphoneos}" CURRENT_ARCH="${CURRENT_ARCH}" if [ -z "$CURRENT_ARCH" ] || [ "$CURRENT_ARCH" == "undefined_arch" ]; then # Xcode 10 beta sets CURRENT_ARCH to "undefined_arch", this leads to incorrect linker arg. # it's better to rely on platform name as fallback because architecture differs between simulator and device if [[ "$PLATFORM_NAME" == *"simulator"* ]]; then CURRENT_ARCH="x86_64" else CURRENT_ARCH="armv7" fi fi export CC="$(xcrun -find -sdk $PLATFORM_NAME cc) -arch $CURRENT_ARCH -isysroot $(xcrun -sdk $PLATFORM_NAME --show-sdk-path)" export CXX="$CC" # Remove automake symlink if it exists if [ -h "test-driver" ]; then rm test-driver fi ./configure --host arm-apple-darwin # Fix build for tvOS cat << EOF >> src/config.h /* Add in so we have Apple Target Conditionals */ #ifdef __APPLE__ #include <TargetConditionals.h> #include <Availability.h> #endif /* Special configuration for AppleTVOS */ #if TARGET_OS_TV #undef HAVE_SYSCALL_H #undef HAVE_SYS_SYSCALL_H #undef OS_MACOSX #endif /* Special configuration for ucontext */ #undef HAVE_UCONTEXT_H #undef PC_FROM_UCONTEXT #if defined(__x86_64__) #define PC_FROM_UCONTEXT uc_mcontext->__ss.__rip #elif defined(__i386__) #define PC_FROM_UCONTEXT uc_mcontext->__ss.__eip #endif EOF # Prepare exported header include EXPORTED_INCLUDE_DIR="exported/glog" mkdir -p exported/glog cp -f src/glog/log_severity.h "$EXPORTED_INCLUDE_DIR/" cp -f src/glog/logging.h "$EXPORTED_INCLUDE_DIR/" cp -f src/glog/raw_logging.h "$EXPORTED_INCLUDE_DIR/" cp -f src/glog/stl_logging.h "$EXPORTED_INCLUDE_DIR/" cp -f src/glog/vlog_is_on.h "$EXPORTED_INCLUDE_DIR/" checking for a BSD-compatible install... /usr/local/bin/ginstall -c checking whether build environment is sane... yes checking for arm-apple-darwin-strip... no checking for strip... strip checking for a thread-safe mkdir -p... /usr/local/bin/gmkdir -p checking for gawk... no checking for mawk... no checking for nawk... no checking for awk... awk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-apple-darwin-gcc... /Library/Developer/CommandLineTools/usr/bin/cc -arch armv7 -isysroot checking whether the C compiler works... no xcrun: error: SDK "iphoneos" cannot be located xcrun: error: SDK "iphoneos" cannot be located xcrun: error: SDK "iphoneos" cannot be located xcrun: error: unable to lookup item 'Path' in SDK 'iphoneos' /Users/some_user/Library/Caches/CocoaPods/Pods/Release/Flipper-Glog/0.3.6-1dfd6/missing: Unknown `--is-lightweight' option Try `/Users/some_user/Library/Caches/CocoaPods/Pods/Release/Flipper-Glog/0.3.6-1dfd6/missing --help' for more information configure: WARNING: 'missing' script is too old or missing configure: error: in `/Users/some_user/Library/Caches/CocoaPods/Pods/Release/Flipper-Glog/0.3.6-1dfd6': configure: error: C compiler cannot create executables See `config.log' for more details
-
Change back to the root directory. Open 2 terminals; start the project in one terminal, open Xcode in the other
$ cd ../ # open 2 terminals # start the project on one $ yarn start # open xcode with another one $ open ios/MyFirstRNProject.xcworkspace
-
In Xcode, select the emulator of your choice (I choose iPhone 8) then build the app
-
And Voilà! You have built your first React Native iOS app!