Xcode目标阶段Python脚本

Jor*_*tiz 5 python iphone xcode

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

我创建了一个新的目标阶段,并运行脚本,如下所述:http:
//yeahrightkeller.com/2008/10/19/xcode-run-script-build-phase-tip/

我编写了一个Python脚本,用于解析程序Info.plist

from Foundation import NSMutableDictionary
Run Code Online (Sandbox Code Playgroud)

但是,编译时脚本失败并向构建结果报告以下错误:

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)
Run Code Online (Sandbox Code Playgroud)

很明显,distutils以某种方式硬编码它是为版本10.6(Snow Leopard,我正在使用的那个)编译的,但该项目将MacOSX部署目标设置为10.5.

如果我尝试将项目中的此变量设置为10.6,那么我得到:

ld: library not found for -lcrt1.10.6.o
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何想法?提前致谢.

Ned*_*ily 1

Apple 随 Snow Leopard (10.6) 一起分发 Python 2.5 和 2.6,并且两者都是以 10.6 的部署目标构建的。如果您确实需要将应用程序定位为 10.5,则无法安全地使用 Apple 在 10.6 上提供的 Python 来部署到 10.5。

最简单的解决方案可能是从 python.org下载并安装Python 2.6 。该 Python 的目标版本是 10.3+,因此它可以在 10.5 和 10.6 上运行。您可能还需要确保 Python 已安装在将部署您的应用程序的所有计算机上。

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

编辑:根据您的评论,我不确定我是否理解您的问题。由于您在 10.6 上运行,因此我不清楚 (1) 为什么将部署目标设置为 10.5,以及 (2) 是否需要将部署设置为 10.5。我猜测您有一个在 10.5 上开发的现有 Xcode 项目,然后从 10.5 上的 Xcode 导入或升级到 10.6 上的 Xcode。如果是这种情况,那么我认为唯一需要做的就是将项目窗口顶部的 Active SDK 从 10.5 更改为 10.6(在概述中)。这样做并强制清理所有目标应该可以解决该crt library not found错误;如果不是,则项目依赖项有问题。

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