|
#!/bin/bash |
|
set -ex |
|
export SCRIPT_DIR=$(dirname "$0") |
|
|
|
SCHEME="Git2Go" |
|
KEYCHAIN="$SCHEME.keychain" |
|
PROVISIONING_PROFILE="$SCRIPT_DIR/Release.mobileprovision" |
|
INFO_PLIST="$SCHEME/Info.plist" |
|
APP_ID="" # something like 123456 find it in itunesconnect.apple.com |
|
export ITUNES_CONNECT_ACCOUNT="" # the user used for deployment |
|
|
|
is_ci_build(){ |
|
local CI=0 |
|
if [ -z "$KEYCHAIN_PASSWORD" ]; then |
|
CI=1 |
|
fi |
|
return $CI |
|
} |
|
|
|
prepare_keychain() { |
|
delete_keychain |
|
security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN" |
|
security default-keychain -s "$KEYCHAIN" |
|
security list-keychains -s "$KEYCHAIN" |
|
security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN" |
|
security set-keychain-settings -t 3600 -l "$KEYCHAIN" |
|
local certpath="$SCRIPT_DIR/apple_wwdr.cer" |
|
curl 'https://developer.apple.com/certificationauthority/AppleWWDRCA.cer' > "$certpath" |
|
security import "$certpath" -k "$KEYCHAIN" -T /usr/bin/codesign |
|
security import "$SCRIPT_DIR/ios_distribution.p12" -k "$KEYCHAIN" -P "$KEY_PASSWORD" -T /usr/bin/codesign |
|
} |
|
|
|
delete_keychain() { |
|
if [ -f "$HOME/Library/Keychains/$KEYCHAIN" ]; then |
|
security delete-keychain "$KEYCHAIN" |
|
fi |
|
} |
|
|
|
copy_provisioning_profile() { |
|
local PROV_PROFILE_DIR="$HOME/Library/MobileDevice/Provisioning Profiles/" |
|
if ! [ -d "$PROV_PROFILE_DIR" ]; then |
|
mkdir -p "$PROV_PROFILE_DIR" |
|
fi |
|
cp "$PROVISIONING_PROFILE" "$PROV_PROFILE_DIR" |
|
} |
|
|
|
set_build_number() { |
|
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $CIRCLE_BUILD_NUM" "$INFO_PLIST" |
|
} |
|
|
|
build() { |
|
set -o pipefail && xcodebuild -scheme $SCHEME -configuration Release clean build -sdk iphoneos CONFIGURATION_BUILD_DIR=$PWD/build | xcpretty -c |
|
} |
|
|
|
archive() { |
|
xcrun -sdk iphoneos PackageApplication -v $PWD/build/$SCHEME.app -o $PWD/build/$SCHEME.ipa |
|
zip -r build/$SCHEME.dSYM.zip build/$SCHEME.app.dSYM |
|
} |
|
|
|
upload_to_testflight() { |
|
bundle exec ipa distribute:itunesconnect -i $APP_ID --upload -f $PWD/build/$SCHEME.ipa |
|
security delete-keychain "$KEYCHAIN" |
|
} |
|
|
|
export -f is_ci_build |
|
export -f prepare_keychain |
|
export -f copy_provisioning_profile |
|
export -f set_build_number |
|
export -f build |
|
export -f archive |
|
export -f upload_to_testflight |
|
export -f delete_keychain |
|
|
|
if [ "$#" -eq 0 -o "$#" -gt 2 ]; then |
|
exit 1 |
|
fi |
|
|
|
COMMAND="$1" |
|
|
|
case "$COMMAND" in |
|
|
|
###################################### |
|
# Deploy |
|
###################################### |
|
"deploy") |
|
if ! is_ci_build; then |
|
echo "Not a CI build" |
|
exit 0 |
|
fi |
|
|
|
prepare_keychain |
|
copy_provisioning_profile |
|
set_build_number |
|
build |
|
archive |
|
upload_to_testflight |
|
exit $? |
|
;; |
|
|
|
###################################### |
|
# Prepare keychain |
|
###################################### |
|
"prepare-keychain") |
|
if ! is_ci_build; then |
|
echo "Not a CI build" |
|
exit 0 |
|
fi |
|
|
|
prepare_keychain |
|
|
|
exit 0 |
|
;; |
|
|
|
###################################### |
|
# Delete keychain |
|
###################################### |
|
"delete-keychain") |
|
if ! is_ci_build; then |
|
echo "Not a CI build" |
|
exit 0 |
|
fi |
|
|
|
delete_keychain |
|
|
|
exit 0 |
|
;; |
|
|
|
###################################### |
|
# Bootstrap |
|
###################################### |
|
"bootstrap") |
|
bundle install |
|
brew update |
|
brew install carthage |
|
exit $? |
|
;; |
|
|
|
###################################### |
|
# Test |
|
###################################### |
|
"test") |
|
set -o pipefail && xcodebuild -scheme $SCHEME build test -sdk iphonesimulator8.3 ONLY_ACTIVE_ARCH=NO -destination name="iPhone 6" | xcpretty -c -r junit --output $CIRCLE_TEST_REPORTS/xcode/results.xml |
|
exit $? |
|
;; |
|
*) |
|
|
|
echo "Unknown command '$COMMAND'" |
|
exit 1 |
|
;; |
|
|
|
esac |