从运行脚本阶段获取当前的Scheme Name

时间:2013-09-13 01:04:39

标签: xcode

有没有办法从运行脚本阶段获取当前方案?

我已经尝试$(SCHEME_NAME)但它不存在。

3 个答案:

答案 0 :(得分:15)

我找不到要使用的环境变量,所以我不得不开发一个解决方法:在 Build Pre-action 中将一个方案名称写入磁盘,然后将其读出来在运行脚本阶段。

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

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

Build Pre-action

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

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

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

SCHEME_NAME=`cat ${SCHEME_FILE}`

请务必将中间件构建目录添加到.gitignore文件中。

显然,您可以通过硬编码文件名来简化这一点,但这样做会更加强大(我们还有其他的东西也会在中间名目录中出现)。

答案 1 :(得分:0)

您可以将方案名称写入info.plist文件,并在“运行脚本阶段”中将其读回,在“编辑方案”菜单中,选择“构建”->“预操作”并添加以下脚本:

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

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

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

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

答案 2 :(得分: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"