I am trying to add a Python script to into my project to obtain the build and marketing numbers directly from Git.
I have created a new target phase and that runs a script as explained in:
And I have written a Python script that parses the program Info.plist using
from Foundation import NSMutableDictionary
However the script fails while being compiled and reports the following error to the build results:
Running a custom build phase script: gitversion.py Traceback (most recent call last): File "/Users/jorge/Documents/Programming iPod/Pruebas/RowOrder/Scripts/gitversion.py", line 9, in <module> from Foundation import NSMutableDictionary File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/Foundation/__init__.py", line 8, in <module> File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC/objc/__init__.py", line 26, in <module> from _bridgesupport import * File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC/objc/_bridgesupport.py", line 9, in <module> import pkg_resources File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/pkg_resources.py", line 651, in <module> class Environment(object): File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/pkg_resources.py", line 654, in Environment def __init__(self, search_path=None, platform=get_supported_platform(), python=PY_MAJOR): File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/pkg_resources.py", line 55, in get_supported_platform plat = get_build_platform(); m = macosVersionString.match(plat) File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/pkg_resources.py", line 181, in get_build_platform plat = get_platform() File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/util.py", line 97, in get_platform cfgvars = get_config_vars() File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/sysconfig.py", line 525, in get_config_vars func() File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/sysconfig.py", line 408, in _init_posix raise DistutilsPlatformError(my_msg) distutils.errors.DistutilsPlatformError: $MACOSX_DEPLOYMENT_TARGET mismatch: now "10.5" but "10.6" during configure Finished running custom build phase script: gitversion.py (exit status = 1)
Clearly, distutils has somehow hardcoded that it is compiled for version 10.6 (Snow Leopard, that is the one I am using), but the project has the MacOSX Deployment target set to 10.5.
If i try to set this variable in the project to 10.6, I then get:
ld: library not found for -lcrt1.10.6.o
Any ideas on how to solve this issue? Thanks in advance.
I have the same problem, and I wanted to keep the python version because handling the plist via
NSMutableDictionary is much nicer than using regex on
Building on Maxence's answer, the solution was to strip the python code out of the Run Script build phase into a
#!/usr/bin/env python import os from Foundation import NSMutableDictionary from subprocess import Popen, PIPE p = Popen( "/sw/bin/git rev-parse --short HEAD", stdout=PIPE, close_fds=True, shell=True) version = p.stdout.read() print version info = os.environ['INFOPLIST_FILE'] print info plist = NSMutableDictionary.dictionaryWithContentsOfFile_(info) print plist plist['revision'] = version[:-1] plist.writeToFile_atomically_(info, 1)
Then replace the original Run Script with a shell script:
env MACOSX_DEPLOYMENT_TARGET=10.6 python gitversion.py
Be sure to remember to change the
Shell setting to