151 lines
3.6 KiB
Bash
151 lines
3.6 KiB
Bash
|
#!/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
|
||
|
# in case 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 Air (5th generation),OS=16.1"
|
||
|
)
|
||
|
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
|