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