Is there a way of grabbing the current scheme from a run script phase?
I've tried $(SCHEME_NAME)
but it doesn't exist.
Is there a way of grabbing the current scheme from a run script phase?
I've tried $(SCHEME_NAME)
but it doesn't exist.
我找不到要使用的环境变量,所以我不得不开发一个变通方法:在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 文件中。
显然,您可以通过硬编码文件名来简化这一点,但这会更加健壮(而且我们还有其他东西最终在中间目录中)。
最简单的一个是根据方案设置“用户定义”变量并使用它。
您可以将方案名称写入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")
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"