-
-
Save sekati/3172554 to your computer and use it in GitHub Desktop.
# xcode-build-bump.sh | |
# @desc Auto-increment the build number every time the project is run. | |
# @usage | |
# 1. Select: your Target in Xcode | |
# 2. Select: Build Phases Tab | |
# 3. Select: Add Build Phase -> Add Run Script | |
# 4. Paste code below in to new "Run Script" section | |
# 5. Drag the "Run Script" below "Link Binaries With Libraries" | |
# 6. Insure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0) | |
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}") | |
buildNumber=$(($buildNumber + 1)) | |
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}" |
# xcode-version-bump.sh | |
# @desc Auto-increment the version number (only) when a project is archived for export. | |
# @usage | |
# 1. Select: your Target in Xcode | |
# 2. Select: Build Phases Tab | |
# 3. Select: Add Build Phase -> Add Run Script | |
# 4. Paste code below in to new "Run Script" section | |
# 5. Check the checkbox "Run script only when installing" | |
# 6. Drag the "Run Script" below "Link Binaries With Libraries" | |
# 7. Insure your starting version number is in SemVer format (e.g. 1.0.0) | |
# This splits a two-decimal version string, such as "0.45.123", allowing us to increment the third position. | |
VERSIONNUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}") | |
NEWSUBVERSION=`echo $VERSIONNUM | awk -F "." '{print $3}'` | |
NEWSUBVERSION=$(($NEWSUBVERSION + 1)) | |
NEWVERSIONSTRING=`echo $VERSIONNUM | awk -F "." '{print $1 "." $2 ".'$NEWSUBVERSION'" }'` | |
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $NEWVERSIONSTRING" "${PROJECT_DIR}/${INFOPLIST_FILE}" |
Work well like charm in Xcode 8.3.2
I may missed something out when setting up my project, but the above path, ${PROJECT_DIR}/${INFOPLIST_FILE}
, throws an exception on my end. I noticed that the ${INFOPLIST_FILE}
contains absolute path to my project's Info.plist
. Removing the ${PROJECT_DIR}/
did it for me. Using Xcode 8.3.2
Thanks @cusster that worked for me also
Thanks @cusster! Have a nice day.
Still works in Xcode 9.1
For Xcode 9 Support:
https://gist.github.com/AppleEducate/14a408e130a0968a1173ce2eead7ca4d
For Xcode 10 support:
Adding the generated info.plist -- ${TARGET_BUILD_DIR}/${INFOPLIST_PATH} -- as in input file to the script got the dependencies right so Xcode does things in the desired order.
For us, the script don't update the build number but by changing the script the build number change (code for xcode 10):
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$PRODUCT_SETTINGS_PATH")
buildNumber=$(cut -d'.' -f2 <<<$buildNumber)
buildNumber=$(date +"%y%m%d")"."$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$PRODUCT_SETTINGS_PATH"
#180925.1008 First is the current date and after the dot the build number
For us, the script don't update the build number but by changing the script the build number change (code for xcode 10):
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$PRODUCT_SETTINGS_PATH") buildNumber=$(cut -d'.' -f2 <<<$buildNumber) buildNumber=$(date +"%y%m%d")"."$(($buildNumber + 1)) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$PRODUCT_SETTINGS_PATH" #180925.1008 First is the current date and after the dot the build number
Thanks @jndefosse, I use the commit count as the build number.
buildNumber=$(git rev-list --count HEAD)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$PRODUCT_SETTINGS_PATH"
I needed to compare buildNumber with the current value in the plist before updating the plist. If the plist is updated on every build, then the SwiftUI previewer will continually stop:
currentNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$PRODUCT_SETTINGS_PATH")
if [ "$buildNumber" -ne "$currentNumber" ] ; then
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$PRODUCT_SETTINGS_PATH"
fi
From Xcode 13, a new project will not generate an info.plist. Instead this is embedded in the project.
If you want a project to generate an Info.plist, set Generate Info.plist file
to no
and then open the Info tab and add a option (e.g. App Transport Security Settings
). Xcode will then generate the Info.plist file and add all the values as well as update the build settings.
If you want to keep $(MARKETING_VERSION)
in Info.plist for CFBundleShortVersionString but
want to increase version after successful archive or build
then use following script
following script will increase like 1.0 to 2.0
but of-course that logic can be modified using above explained gist etc
Good work!