For end users every application has a version number. But for us developer, every application has also a build number too, that is used by the system (e.g. Launch Services) and is needed to track down the source code powering the application.
When creating a Cocoa application you can set these numbers by filling CFBundleShortVersionString and CFBundleVersion keys within info.plist. How to choose the right numbers? Some info on the web:
We use Subversion to handle our source code, so we agreed it would be cool having the Svn version number synced to the CFBundleVersion. We’ve created a Python script that effortlessly does the job syncing the two numbers:
#!/usr/bin/python
from AppKit import NSMutableDictionary
import os
def increaseVersion():
# reading svn version
version = os.popen('svnversion -n').read()
version = version.split(':')[-1]
if not version[-1].isdigit():
version = version[:-1]
# reading info.plist file
projectPlist = NSMutableDictionary.dictionaryWithContentsOfFile_('Info.plist')
# setting the svn version for CFBundleVersion key
projectPlist['CFBundleVersion'] = version
projectPlist.writeToFile_atomically_('Info.plist', True)
if __name__ == '__main__':
increaseVersion()
How to use the script in Xcode:
- Add a new build phase at the end of your target’s build phases: right click on your Target , Add -> New build Phase -> New Run Script Build Phase.
- Double click on the new “Run Script” item and copy/paste the script in the Script field.
- Make sure that the Shell field is set to: /usr/bin/python.
When you build your application, the Svn version number will be applied for the CFBundleVersion key.
This script is designed to run on Mac OS X 10.5; can run also on 10.4 provided you install PyObjC.