Better way of incrementing build number?

I’ve messed around with a lot of the answers on this question, and none of them quite satisfied me. However, I finally came up with a mixture that I really like!

We simply set the version number for the built product to the number of Git commits. This won’t mess with your source control, since the script only mutates the built product.

Add this “Run Script” build phase to the end of your build phases:

if [ "${CONFIGURATION}" = "Release" ]; then
    buildNumber=$(git rev-list --count head)
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
fi

Set your Info.plist version in your project to whatever you want, it will never get used when building a release build. I set mine to AUTOMATED or DEVELOPMENT so it’s clear when I’m running a development build.

That’s it! The built app will have a constantly increasing build number. (As long as you always do your builds off the same branch.)

Why I like this method:

  • Easy
  • Doesn’t pollute Git version history
  • CFBundleVersion is totally automatic
  • The pretty version number can be modified whenever I want

Other notes:

  • If you have app extensions in your project, simply set the same build script on those targets too. This will keep all the version numbers automated and in sync. The App Store requires extension versions match your main app.

Leave a Comment