From 1fb7a25f7b9686b23bf354feedb8c39334d45ff6 Mon Sep 17 00:00:00 2001 From: Harry Tormey Date: Wed, 1 Aug 2018 20:37:17 -0700 Subject: [PATCH] Add iOS Validate Environment Script (#19750) Summary: Fixes #19694 this diff adds an iOS environment validation script as requested by hramos. A similar script for Android exists: scripts/validate-android-test-env.sh. This script: - Validates that the minimum required Xcode version is installed (people using Xcode 8 with a recent release may encounter cryptic build errors). - Validates the correct Node version is installed (Node 10 is not fully supported at the time, Node 6 is no longer supported). Run ./scripts/validate-ios-test-env.sh on a properly setup OSX machine and verify it works, change the version comparison and make sure it fails. [INTERNAL] [ENHANCEMENT] [scripts] - Add iOS validate environment script Pull Request resolved: https://github.com/facebook/react-native/pull/19750 Differential Revision: D9005151 Pulled By: hramos fbshipit-source-id: a69ef2a6e513e580089c791fd44a0e70c2a3f240 --- scripts/validate-ios-test-env.sh | 51 ++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100755 scripts/validate-ios-test-env.sh diff --git a/scripts/validate-ios-test-env.sh b/scripts/validate-ios-test-env.sh new file mode 100755 index 000000000..d52bb9d75 --- /dev/null +++ b/scripts/validate-ios-test-env.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# This script validates that iOS is set up correctly for the +# testing environment. +# +# In particular, it checks that the minimum required Xcode version is installed. +# It also checks that the correct Node version is installed. Node 10 is not fully +# supported at the time and Node 6 is no longer supported. + +# Function used to compare dot seperated version numbers +function version_gt() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; } + +# Check that node is installed. +if [ -z "$(which node)" ]; then + echo "Could not find Node binary. Please check your nodejs install." + echo "See http://facebook.github.io/react-native/docs/getting-started.html for instructions." + exit 1 +fi + +# Check that the correct version of node is installed +NODE_VERSION="$(command node --version | sed 's/[-/a-zA-Z]//g' |sed 's/.\{2\}$//')" + +if (( $(echo "${NODE_VERSION} <= 6.0" | bc -l) )); then + echo "Node ${NODE_VERSION} detected. This version of Node is not supported." + echo "Note: Node 10 is not fully supported at the time and Node 6 is no longer supported." + echo "See https://nodejs.org/en/download/ for instructions." + exit 1 +fi + +if (( $(echo "${NODE_VERSION} == 10.0" | bc -l) )); then + echo "Node ${NODE_VERSION} detected. This version of Node is not fully supported at this time." + echo "See https://github.com/facebook/react-native/issues/19229 for more information." + exit 1 +fi + +# Check that Xcode is installed. +if [ -z "$(which xcodebuild)" ]; then + echo "Could not find Xcode build tools. Please check your Xcode install." + echo "See http://facebook.github.io/react-native/docs/getting-started.html for instructions." + exit 1 +fi + +MIN_XCODE_VERSION=9.4 +# Check that the correct version of Xcode is installed +XCODE_VERSION="$(command xcodebuild -version | sed '$ d' | sed 's/[-/a-zA-Z]//g')" +if (version_gt $MIN_XCODE_VERSION $XCODE_VERSION) && [ "$XCODE_VERSION" != "$MIN_XCODE_VERSION" ]; then + echo "Xcode ${XCODE_VERSION} detected. React Native requires ${MIN_XCODE_VERSION} or newer." + echo "Older versions of Xcode may cause cryptic build errors." + echo "See http://facebook.github.io/react-native/docs/getting-started.html for instructions." + exit 1 +fi