如何区分SwiftUI预览构建与Cmd+B构建?实现Build phase按需执行
让Build Phase仅在实际构建时运行,跳过SwiftUI预览
要区分Xcode的实际构建/运行和SwiftUI预览构建,核心是利用Xcode自动设置的环境变量:
- SwiftUI预览构建时,环境变量
ACTION的值为build-for-previews; - 手动构建(Cmd+B)时
ACTION值为build,点击播放按钮运行时为install。
处理Run Script类型的Build Phase
直接在脚本最开头加入判断逻辑,预览时直接退出脚本,不执行后续内容:
# 检测到是SwiftUI预览构建,跳过后续脚本执行 if [ "$ACTION" = "build-for-previews" ]; then exit 0 fi # 这里写你原本需要执行的脚本内容 # 示例: # echo "执行实际构建的脚本任务"
处理非脚本类型的Build Phase
如果是Copy Files、Embed Frameworks这类自定义Build Phase,可以给它添加前置控制脚本:
- 在目标的Build Phases列表中,新增一个"Run Script" phase,放在你要控制的phase之前;
- 在这个前置脚本中写入:
if [ "$ACTION" = "build-for-previews" ]; then # 预览时让前置脚本返回失败,阻止后续phase执行 exit 1 else # 实际构建时正常通过,后续phase正常执行 exit 0 fi
- 确保你要控制的phase处于前置脚本之后,Xcode会在前置脚本失败时自动跳过后续phase的执行。
内容的提问来源于stack exchange,提问作者Tobonaut
相关产品推荐
相关产品推荐

