| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | #!/bin/bash## Helper to run the pods tests.set -eureadonly ScriptDir=$(dirname "$(echo $0 | sed -e "s,^\([^/]\),$(pwd)/\1,")")printUsage() {  NAME=$(basename "${0}")  cat << EOFusage: ${NAME} [OPTIONS]This script runs some test to check the CocoaPods integration.OPTIONS: General:   -h, --help         Show this message   --skip-static         Skip the static based pods tests.   --skip-framework         Skip the framework based pods tests.   --skip-ios         Skip the iOS pods tests.   --skip-osx         Skip the OS X pods tests.EOF}TEST_MODES=( "static" "framework" )TEST_NAMES=( "iOSCocoaPodsTester" "OSXCocoaPodsTester" )while [[ $# != 0 ]]; do  case "${1}" in    -h | --help )      printUsage      exit 0      ;;    --skip-static )      TEST_MODES=(${TEST_MODES[@]/static})      ;;    --skip-framework )      TEST_MODES=(${TEST_MODES[@]/framework})      ;;    --skip-ios )      TEST_NAMES=(${TEST_NAMES[@]/iOSCocoaPodsTester})      ;;    --skip-osx )      TEST_NAMES=(${TEST_NAMES[@]/OSXCocoaPodsTester})      ;;    -*)      echo "ERROR: Unknown option: ${1}" 1>&2      printUsage      exit 1      ;;    *)      echo "ERROR: Unknown argument: ${1}" 1>&2      printUsage      exit 1      ;;  esac  shiftdone# Sanity check.if [[ "${#TEST_NAMES[@]}" == 0 ]] ; then  echo "ERROR: Need to run at least iOS or OS X tests." 1>&2  exit 2fiif [[ "${#TEST_MODES[@]}" == 0 ]] ; then  echo "ERROR: Need to run at least static or frameworks tests." 1>&2  exit 2fiheader() {  echo ""  echo "========================================================================"  echo "    ${@}"  echo "========================================================================"  echo ""}# Cleanup hook for do_test, assumes directory is correct.cleanup() {  local TEST_NAME="$1"  echo "Cleaning up..."  # Generally don't let things fail, and eat common stdout, but let stderr show  # incase something does hiccup.  xcodebuild -workspace "${TEST_NAME}.xcworkspace" -scheme "${TEST_NAME}" clean > /dev/null || true  pod deintegrate > /dev/null || true  # Flush the cache so nothing is left behind.  pod cache clean --all || true  # Delete the files left after pod deintegrate.  rm -f Podfile.lock || true  rm -rf "${TEST_NAME}.xcworkspace" || true  git checkout -- "${TEST_NAME}.xcodeproj" || true  # Remove the Podfile that was put in place.  rm -f Podfile || true}do_test() {  local TEST_NAME="$1"  local TEST_MODE="$2"  header "${TEST_NAME}" - Mode: "${TEST_MODE}"  cd "${ScriptDir}/${TEST_NAME}"  # Hook in cleanup for any failures.  trap "cleanup ${TEST_NAME}" EXIT  # Ensure nothing is cached by pods to start with that could throw things off.  pod cache clean --all  # Put the right Podfile in place.  cp -f "Podfile-${TEST_MODE}" "Podfile"  xcodebuild_args=( "-workspace" "${TEST_NAME}.xcworkspace" "-scheme" "${TEST_NAME}" )  # For iOS, if the SDK is not provided it tries to use iphoneos, and the test  # fail on Travis since those machines don't have a Code Signing identity.  if  [[ "${TEST_NAME}" == iOS* ]] ; then    # Apparently the destination flag is required to avoid "Unsupported architecture"    # errors.    xcodebuild_args+=(        -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO        -destination "platform=iOS Simulator,name=iPad 2,OS=9.3"    )  fi  # Do the work!  pod install --verbose  xcodebuild "${xcodebuild_args[@]}" build  # Clear the hook and manually run cleanup.  trap - EXIT  cleanup "${TEST_NAME}"}# Run the tests.for TEST_NAME in "${TEST_NAMES[@]}" ; do  for TEST_MODE in "${TEST_MODES[@]}" ; do    do_test "${TEST_NAME}" "${TEST_MODE}"  donedone
 |