Skip to content

Instantly share code, notes, and snippets.

@sinofool
Last active September 19, 2023 20:54
Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save sinofool/39dc371e95c799094f7b to your computer and use it in GitHub Desktop.
Save sinofool/39dc371e95c799094f7b to your computer and use it in GitHub Desktop.
A script to override xcode project configurations
#!/bin/bash
set -x
USAGE() {
cat << EOF
Usage: ${0##*/} <-i ident.p12> [-p password] <-m profile.mobileprovision> [-a com.example.app] [-n NewName] [-I Info.plist]
-i ident.p12 The signing identity file.
-p password The password of signing identity file.
-m profile.mobileprovision Signing provision profile
-a com.example.app Override CFBundleIdentifier
-n NewName Override CFBundleName
-I Info.plist Override plist file target
-h help
EOF
exit 1
}
while getopts "i:p::m:a::n::I::h" opt ; do
case "$opt" in
i) SIGNFILE=$OPTARG ;;
p) SIGNPASS=$OPTARG ;;
m) PROVFILE=$OPTARG ;;
a) OVER_APPID=$OPTARG ;;
n) OVER_NAME=$OPTARG ;;
I) OVER_FILE=$OPTARG ;;
h|*) USAGE ;;
esac
done
if [ ! -f "$SIGNFILE" ]
then
echo "signing identity file not exists"
exit 1
fi
if [ ! -f "$PROVFILE" ]
then
echo "signing provision profile not exists"
exit 1
fi
if [ "$OVER_APPID" != "" ]
then
if [ ! -f "$OVER_FILE" ]
then
echo "Use -I Info.plist to find plist"
exit 7
fi
/usr/libexec/PlistBuddy -c "set :CFBundleIdentifier $OVER_APPID" "$OVER_FILE"
fi
if [ "$OVER_NAME" != "" ]
then
if [ ! -f "$OVER_FILE" ]
then
echo "Use -I Info.plist to find plist"
exit 7
fi
/usr/libexec/PlistBuddy -c "set :CFBundleName $OVER_NAME" "$OVER_FILE"
fi
RAND_KEYCHAIN=cmdbuild$$.keychain
security create-keychain -p $$ $RAND_KEYCHAIN || exit 2
security default-keychain -s $RAND_KEYCHAIN || exit 2
security list-keychains -s $RAND_KEYCHAIN || exit 2
trap "{
security delete-keychain $RAND_KEYCHAIN || echo Cannot delete keychain $RAND_KEYCHAIN
}" EXIT
if [ "$OVER_NAME" != "" ]
then
if [ -f "$OVER_FILE" ]
then
trap "{
git checkout \"$OVER_FILE\"
security delete-keychain $RAND_KEYCHAIN || echo Cannot delete keychain $RAND_KEYCHAIN
}" EXIT
fi
fi
if [ "$SIGNPASS" == "" ]
then
security import "$SIGNFILE" -k $RAND_KEYCHAIN -T /usr/bin/codesign || exit 3
else
security import "$SIGNFILE" -k $RAND_KEYCHAIN -P "$SIGNPASS" -T /usr/bin/codesign || exit 3
fi
security unlock-keychain -p $$ $HOME/Library/Keychains/$RAND_KEYCHAIN || exit 4
security set-keychain-settings -u $RAND_KEYCHAIN || exit 5
#security show-keychain-info $RAND_KEYCHAIN
SIGN_IDEN=$(security find-identity -p codesigning -v $RAND_KEYCHAIN|head -n1|cut -d "\"" -f 2)
if [ "$SIGN_IDEN" == "" ]
then
exit 5
fi
#echo $SIGN_IDEN
# For macOS 10.12+, new security enforcement need following command.
security set-key-partition-list -S apple: -k $$ -D "$SIGN_IDEN" -t private
PROV_UUID=$(/usr/libexec/PlistBuddy -c "Print UUID" /dev/stdin <<< `security cms -D -i "$PROVFILE"`)
if [ "$PROV_UUID" == "" ]
then
exit 6
fi
if [ ! -d "$HOME/Library/MobileDevice/Provisioning Profiles/" ]
then
mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles/"
fi
cp "$PROVFILE" "$HOME/Library/MobileDevice/Provisioning Profiles/$PROV_UUID.mobileprovision"
#echo $PROV_UUID
xcodebuild $CMDBUILD_ARGS CODE_SIGN_IDENTITY="$SIGN_IDEN" PROVISIONING_PROFILE="$PROV_UUID" OTHER_CODE_SIGN_FLAGS="--keychain '$HOME/Library/Keychains/$RAND_KEYCHAIN'"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment