On my iCatalog project I have more than 40 targets (FOURTY!), all with individual info.plist. Let me share a quick command line script that lets me simultaneously bump the software version to a different value for all targets at the same time. This has proven extremely helpful.
The script I use uses the defaults tool to write the new value into the plists and then converts it back to text xml plist format.
bump_version_to.sh
#!/bin/sh if [ "$#" -ne 1 ] then echo "Usage: bump_version_to <version>" exit 1 fi for FILE in `ls */*Info.plist` do INFO_PLIST=`pwd`/${FILE%.*} defaults write "$INFO_PLIST" CFBundleVersion "$1" plutil -convert xml1 "$INFO_PLIST.plist" done |
Put this script into your project root. It expects the info.plist files to be one level below it. Make it executable with chmod +x. Run it passing the new version string. Boom!
Categories: Recipes
What I really want to know is – why do you have 40 build targets!?
😉 Many Many clients, each with their own app….. (but I will have to think of something down the road)
I use a different method. I have a version.xcconfig file with just one line:
CURRENT_PROJECT_VERSION = xxx
And in my Info.plist I simply set once and for all ${CURRENT_PROJECT_VERSION} for the CFBundleVersion entry.
Much simpler IMHO. You don’t even have to invoke a separate shell script from the command line. All you have to do is change the value in one file. And you can even set up a Run Script build phase to increment it automatically at each build if you fancy.