26

Is there a way of grabbing the current scheme from a run script phase?

I've tried $(SCHEME_NAME) but it doesn't exist.

4

4 回答 4

23

我找不到要使用的环境变量,所以我不得不开发一个变通方法:在Build Pre-action中将方案名称写入磁盘,然后在Run Script阶段将其读回。

对于您感兴趣的每个方案,请转到编辑方案并添加一个包含以下代码的脚本:

rm -rf ${INTERMEDIATES_OUTPUT_DIR}
mkdir -p ${INTERMEDIATES_OUTPUT_DIR}
echo MY_SCHEME_NAME > ${SCHEME_FILE}

构建预操作

接下来,转到构建目标的“构建设置”并添加两个“用户定义的设置”:

INTERMEDIATES_OUTPUT_DIR=${PROJECT_DIR}/build/intermediates/${CONFIGURATION}/
SCHEME_FILE=${INTERMEDIATES_OUTPUT_DIR}current_scheme.txt

打开你的“运行脚本”并添加:

SCHEME_NAME=`cat ${SCHEME_FILE}`

确保将中间体构建目录添加到您的 .gitignore 文件中。

显然,您可以通过硬编码文件名来简化这一点,但这会更加健壮(而且我们还有其他东西最终在中间目录中)。

于 2015-04-11T00:50:05.733 回答
0

最简单的一个是根据方案设置“用户定义”变量并使用它。

于 2021-11-14T12:44:33.073 回答
0

您可以将方案名称写入info.plist文件并在 Run Script Phase 中将其读回,在 Edit Scheme 菜单中,选择 Build -> Pre-actions 并添加以下脚本:

/usr/libexec/PlistBuddy -c "Set :SchemeName \"$SCHEME_NAME\"" "$INFOPLIST_FILE"

然后在 中添加SchemeName字符串类型的键info.plist,其初始值为空。

最后,在运行脚本阶段添加以下内容:

SCHEME_NAME=$(/usr/libexec/PlistBuddy -c "Print SchemeName" "$INFOPLIST_FILE")

于 2020-05-03T09:25:22.200 回答
0

INTERMEDIATES_OUTPUT_DIR 似乎不适用于构建我想要自定义的快速预览。我最终做了类似的事情defaults write,我发现在所有情况下都可以使用,并且不涉及文件的创建。

预建:

defaults write com.apple.dt.Xcode LastBuildScheme "MySchemeName"`

构建脚本:

[[ $(defaults read com.apple.dt.Xcode LastBuildScheme) = "MySchemeName" ]] && echo "Scheme" || echo "Not Scheme"
于 2020-08-11T16:43:05.157 回答