From 0a16b53a78a99ba2e3ac69695ffee1298d380d59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ramos?= Date: Wed, 24 Apr 2019 09:26:56 -0700 Subject: [PATCH] Use Xcode 10.2.0 and iOS 12.2 in iOS tests (#24572) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/24572 Bumps to Xcode 10.2.0 and uses the iOS 12.2 simulator when running tests. Changelog: [iOS] [Changed] - iOS tests: Bump Xcode to 10.2.0, iOS to 12.2. Reviewed By: cpojer Differential Revision: D15049833 fbshipit-source-id: 40ee039f8be4db1365ad650b45e2e3e0a4ea80f3 --- .circleci/config.yml | 101 ++++++++++++++++++++++++++++++++++-- scripts/.tests.env | 2 +- scripts/run-ci-e2e-tests.js | 2 +- 3 files changed, 99 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6d9baf915f1c9c..81c267cafbc33b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -170,7 +170,7 @@ android_defaults: &android_defaults macos_defaults: &macos_defaults <<: *defaults macos: - xcode: "10.1.0" + xcode: "10.2.0" # ------------------------- # JOBS @@ -340,12 +340,22 @@ jobs: # Runs unit tests on iOS devices test_ios: <<: *macos_defaults + environment: + - REPORTS_DIR: "./reports" steps: - attach_workspace: at: ~/react-native - run: - name: Boot iPhone Simulator + name: Print Xcode environment + command: xcodebuild -version + + - run: + name: List available devices + command: instruments -s devices + + - run: + name: Boot iOS Simulator command: source scripts/.tests.env && xcrun simctl boot "$IOS_DEVICE" || true - restore-cache: *restore-brew-cache @@ -357,8 +367,91 @@ jobs: - save-cache: *save-brew-cache - run: - name: iOS Test Suite - command: ./scripts/objc-test-ios.sh test + name: Start Metro packager + command: yarn start --nonPersistent --max-workers=1 || echo "Can't start packager automatically" + background: true + + - run: + name: Start WebSocket test server + command: open "./IntegrationTests/launchWebSocketServer.command" || echo "Can't start web socket server automatically" + background: true + + - run: + name: Verify RNTester can be built + command: | + source ./scripts/.tests.env + xcodebuild \ + -project RNTester/RNTester.xcodeproj \ + -scheme RNTester \ + -sdk iphonesimulator \ + -destination "platform=iOS Simulator,name=$IOS_DEVICE,OS=$IOS_TARGET_OS" \ + -UseModernBuildSystem=NO \ + build | \ + xcpretty --report junit --output "$REPORTS_DIR/junit/ios_buiild/results.xml" && \ + exit "${PIPESTATUS[0]}" + + - run: + name: Wait for Metro packager + command: | + max_attempts=60 + attempt_num=1 + until curl -s http://localhost:8081/status | grep "packager-status:running" -q; do + if (( attempt_num == max_attempts )); then + echo "Packager did not respond in time. No more attempts left." + exit 1 + else + (( attempt_num++ )) + echo "Packager did not respond. Retrying for attempt number $attempt_num..." + sleep 1 + fi + done + echo "Packager is ready!" + + - run: + name: Preload the RNTesterApp bundles + command: | + curl --silent 'http://localhost:8081/RNTester/js/RNTesterApp.ios.bundle?platform=ios&dev=true' --output /dev/null + curl --silent 'http://localhost:8081/RNTester/js/RNTesterApp.ios.bundle?platform=ios&dev=true&minify=false' --output /dev/null + curl --silent 'http://localhost:8081/IntegrationTests/IntegrationTestsApp.bundle?platform=ios&dev=true' --output /dev/null + curl --silent 'http://localhost:8081/IntegrationTests/RCTRootViewIntegrationTestApp.bundle?platform=ios&dev=true' --output /dev/null + + - run: + name: Run RNTester Unit Tests + command: | + source ./scripts/.tests.env + xcodebuild \ + -project RNTester/RNTester.xcodeproj \ + -scheme RNTester \ + -sdk iphonesimulator \ + -destination "platform=iOS Simulator,name=$IOS_DEVICE,OS=$IOS_TARGET_OS" \ + -UseModernBuildSystem=NO \ + -only-testing:RNTesterUnitTests \ + build test | \ + xcpretty --report junit --output "$REPORTS_DIR/junit/ios_unit_tests/results.xml" && \ + exit "${PIPESTATUS[0]}" + + - run: + name: Run RNTester Integration Tests + command: | + source ./scripts/.tests.env + xcodebuild \ + -project RNTester/RNTester.xcodeproj \ + -scheme RNTester \ + -sdk iphonesimulator \ + -destination "platform=iOS Simulator,name=$IOS_DEVICE,OS=$IOS_TARGET_OS" \ + -UseModernBuildSystem=NO \ + -only-testing:RNTesterIntegrationTests \ + build test | \ + xcpretty --report junit --output "$REPORTS_DIR/junit/ios_integration_tests/results.xml" && \ + exit "${PIPESTATUS[0]}" + + - run: + name: Stop Metro packager and WebSocket test server + command: | + # kill whatever is occupying port 8081 (packager) + lsof -i tcp:8081 | awk 'NR!=1 {print $2}' | xargs kill + # kill whatever is occupying port 5555 (web socket server) + lsof -i tcp:5555 | awk 'NR!=1 {print $2}' | xargs kill - run: name: iOS End-to-End Test Suite diff --git a/scripts/.tests.env b/scripts/.tests.env index d8c1d907761a92..a34b26404f31ad 100644 --- a/scripts/.tests.env +++ b/scripts/.tests.env @@ -17,7 +17,7 @@ export AVD_NAME="testAVD" export AVD_ABI=x86 ## IOS ## -export IOS_TARGET_OS="12.1" +export IOS_TARGET_OS="12.2" export IOS_DEVICE="iPhone 6s" export TVOS_DEVICE="Apple TV" diff --git a/scripts/run-ci-e2e-tests.js b/scripts/run-ci-e2e-tests.js index 8baca7f30d3c7c..c39f4455b80e8e 100644 --- a/scripts/run-ci-e2e-tests.js +++ b/scripts/run-ci-e2e-tests.js @@ -220,7 +220,7 @@ try { if ( tryExecNTimes( () => { - let destination = 'platform=iOS Simulator,name=iPhone 6s,OS=12.1'; + let destination = 'platform=iOS Simulator,name=iPhone 6s,OS=12.2'; let sdk = 'iphonesimulator'; let scheme = 'EndToEndTest';