| #!/bin/bash | 
 | # | 
 | # Helper to run the pods tests. | 
 |  | 
 | set -eu | 
 |  | 
 | readonly ScriptDir=$(dirname "$(echo $0 | sed -e "s,^\([^/]\),$(pwd)/\1,")") | 
 |  | 
 | printUsage() { | 
 |   NAME=$(basename "${0}") | 
 |   cat << EOF | 
 | usage: ${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 | 
 |   shift | 
 | done | 
 |  | 
 | # Sanity check. | 
 | if [[ "${#TEST_NAMES[@]}" == 0 ]] ; then | 
 |   echo "ERROR: Need to run at least iOS or OS X tests." 1>&2 | 
 |   exit 2 | 
 | fi | 
 | if [[ "${#TEST_MODES[@]}" == 0 ]] ; then | 
 |   echo "ERROR: Need to run at least static or frameworks tests." 1>&2 | 
 |   exit 2 | 
 | fi | 
 |  | 
 | header() { | 
 |   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}" | 
 |   done | 
 | done |