Iphone Xcode目标阶段Python脚本

Iphone Xcode目标阶段Python脚本,iphone,python,xcode,Iphone,Python,Xcode,我正在尝试将Python脚本添加到我的项目中,以直接从Git获取构建和营销编号 我创建了一个新的目标阶段,它运行一个脚本,如中所述: 我已经编写了一个Python脚本,它使用 from Foundation import NSMutableDictionary 但是,脚本在编译时失败,并向生成结果报告以下错误: Running a custom build phase script: gitversion.py Traceback (most recent call last): F

我正在尝试将Python脚本添加到我的项目中,以直接从Git获取构建和营销编号

我创建了一个新的目标阶段,它运行一个脚本,如中所述:

我已经编写了一个Python脚本,它使用

from Foundation import NSMutableDictionary
但是,脚本在编译时失败,并向生成结果报告以下错误:

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)

关于如何解决这个问题有什么想法吗?提前感谢。

苹果将Python2.5和2.6与Snow Leopard(10.6)一起发布,这两个版本的部署目标都是10.6。如果您确实需要将应用程序定位于10.5,那么您就不能安全地使用10.6上苹果提供的Python在10.5上部署

最简单的解决方案可能是下载并安装。Python的目标是10.3+,因此它将同时适用于10.5和10.6。您可能还需要确保在部署应用程序的所有计算机上安装Python

另一个选择可能是使用python.org 2.6创建一个单独的独立助手应用程序,并将其与主应用程序一起部署。或者在py2app下创建整个应用程序。无论哪种情况,应用程序都将包含自己的python框架解释器和框架,独立于系统版本

编辑:根据你的评论,我不确定我是否理解你的问题。由于您运行的是10.6,我不清楚(1)为什么将部署目标设置为10.5;(2)是否需要将部署设置为10.5。我猜您有一个现有的Xcode项目,它是在10.5上开发的,然后从10.5上的Xcode导入或升级到10.6上的Xcode。如果是这样的话,那么我认为唯一需要做的事情就是在项目窗口顶部将活动SDK从10.5更改为10.6(在概述中)。这样做并强制清除所有目标应能解决
crt库未找到
错误;如果不是,则项目依赖关系有问题


另一方面,如果您确实需要在10.6上为10.5开发,那么您的gitversion.py似乎无意中引入了对Python2.6的依赖(从回溯中可以看出),这不是10.5的一部分。除非您真的需要Python2.6特性,否则您应该能够通过使用Apple在10.5和10.6上提供的Python2.5来消除这些特性。在这种情况下,您所需要做的可能就是确保在构建阶段脚本中使用/usr/bin/python2.5调用python,而不仅仅是python。

对于此脚本,您只需暂时将MACOSX_部署_目标的值设置为10.6即可。所以你的命令是:

env MACOSX_DEPLOYMENT_TARGET=10.6 gitversion.py

我也有同样的问题,我想保留python版本,因为通过
NSMutableDictionary
处理plist要比在
Info.plist
上使用regex好得多

基于Maxence的回答,解决方案是将python代码从运行脚本构建阶段剥离到
gitversion.py
文件中:

#!/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)
然后用shell脚本替换原始运行脚本:

env MACOSX_DEPLOYMENT_TARGET=10.6 python gitversion.py

请务必记住将
Shell
设置更改为
/bin/sh

在这里您可以找到解决方案:


非常感谢您的回答。考虑到我在10.6中遇到的错误,为10.5部署是必须的。但是10.5不起作用,因为distutils期望10.6(如环境变量所示)。有没有办法告诉distutils为10.5工作或使用10.5版本?我的目标只是添加一个python脚本作为目标阶段,因为读写plist更容易,而不是部署python应用程序。请参阅上面的其他注释。希望有帮助!再次感谢你,内德。这不是一个MacOSX项目,而是一个iPhone项目,它似乎需要10.5作为目标,因为否则即使在清理目标之后,我也会得到:ld:library not found for-lcrt1.10.6.o。我决定不遗余力地用一个完全相同的perl脚本替换python脚本。我在perl中没有遇到同样的错误。上帝保佑Perl!谢谢你!我仍然认为python在用作iPhone项目的脚本时存在问题,但我有一个解决方法。可用于读/写Info.plist,仅供参考。
env MACOSX_DEPLOYMENT_TARGET=10.6 python gitversion.py