Xcode 使用 python 子流程构建

Xcode build using python subprocess

我有一个 python 脚本用于 xcode 构建。下面是其中的一部分。

cmd = "xcodebuild -verbose -configuration Release -workspace".split()
cmd += [PROJECT_WORKSPACE_FOLE_NAME_PATH]
cmd += "-scheme".split()
cmd += [scheme]
cmd += "CONFIGURATION_BUILD_DIR =".split()
cmd += [APP_OUTPUT_DIRECTORY]
cmd += "CODE_SIGN_IDENTITY =".split()
cmd += [DEVELOPER_ID]
cmd += "OTHER_CODE_SIGN_FLAGS = ".split()
cmd += [--keychain, TEAMCITY_KEYCHAIN_PATH]
subprocess.call(cmd)

这给了我一个错误。

xcodebuild: error: invalid option '--keychain'

请帮帮我。

EDIT::等效工作bash脚本如下

  xcodebuild -verbose -configuration Release -workspace  "$PROJECT_WORKSPACE_FILENAME_PATH" -scheme "$SCHEME"    CONFIGURATION_BUILD_DIR="$APP_OUTPUT_DIR" CODE_SIGN_IDENTITY="$DEVELOPER_ID" OTHER_CODE_SIGN_FLAGS="--keychain $TEAMCITY_RUN_SCRIPT_LOCATION/$TEAMCITY_KEYCHAIN"

最大的问题是您传递的设置有误。如果您查看 xcodebuild 联机帮助页,您会发现它们是作为单个参数 setting=value 传递的。例如,在您的(工作)bash 示例中,参数之一是:

OTHER_CODE_SIGN_FLAGS="--keychain $TEAMCITY_RUN_SCRIPT_LOCATION/$TEAMCITY_KEYCHAIN"

但是在您的 Python 代码中,您将其作为四个单独的参数传递:OTHER_CODE_SIGN_FLAGS=--keychain 和 [=18 的值=].

那不是一回事。显然 xcodebuild 正在将 OTHER_CODE_SIGN_FLAGS= 和路径解释为有效的东西(但可能不是你想要的东西),但它将 --keychain 视为它不存在的标志什么都不知道,这就是你得到错误的原因。

解决方案是构建一个参数,就像您在 bash 中所做的那样。而不是这个:

cmd += "OTHER_CODE_SIGN_FLAGS = ".split()
cmd += [--keychain, TEAMCITY_KEYCHAIN_PATH]

这样做:

cmd += ["OTHER_CODE_SIGN_FLAGS=--keychain " + TEAMCITY_KEYCHAIN_PATH]

但是你在其他所有设置上都犯了同样的错误。如果您传递错误的其他论点,我也不会感到惊讶。因此,仅仅修复这个错误并不能使一切都神奇地工作;你必须修复所有这些问题。