有没有办法从运行脚本阶段获取当前方案?
我已经尝试$(SCHEME_NAME)
但它不存在。
答案 0 :(得分:15)
我找不到要使用的环境变量,所以我不得不开发一个解决方法:在 Build Pre-action 中将一个方案名称写入磁盘,然后将其读出来在运行脚本阶段。
对于您感兴趣的每个方案,请转到编辑方案并使用以下代码添加脚本:
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文件中。
显然,您可以通过硬编码文件名来简化这一点,但这样做会更加强大(我们还有其他的东西也会在中间名目录中出现)。
答案 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"