SwiftUI:自动预览更新始终暂停

Bri*_*n M 32 xcode swiftui

我有一个现有的应用程序,基本上是一个购物清单应用程序,我正在尝试添加一些甜蜜的 SwiftUI 爱。

我的问题是实时预览更新不起作用 - 警告“自动预览更新暂停”不断显示。我点击了恢复按钮,它构建了应用程序,它显示了当前视图,然后立即再次显示该警告。如果不使用恢复按钮,我永远无法看到画布中反映的代码的更改。

这发生在 Xcode 11.1 和 11.2 beta 2 中。我在 SO 上几乎找不到其他任何提及,并且在 Apple 的开发论坛上有一个帖子没有答案。

Kac*_*bek 41

如果您在构建阶段中有自定义运行脚本阶段并且您不想(或不能)删除它们,请尝试选中复选框“仅在安装时运行脚本”。

在此处输入图片说明

  • 这就是我的情况的原因 - 我有一个脚本来自动增加内部版本号。不错的收获。谢谢。 (3认同)

Vas*_*ior 28

所有给定答案的问题在于,如果您想让预览工作,您需要在调试模式下选中或取消选中您的脚本。

这是使用环境变量的便捷替代方法。

这真的很简单

将脚本的所有内容嵌入if到检查我们是否正在使用预览的语句中。如果我们处于预览状态,则不要运行脚本的内容,否则,让我们运行它。而且您不必仅为发布版本而牺牲您的脚本。

这是模板:

if [ $ENABLE_PREVIEWS == "NO" ]
then
  # your code to execute here
else
  echo "Skipping the script because of preview mode"
fi
Run Code Online (Sandbox Code Playgroud)

下面是我用来提高构建版本号的完整示例

# xcode-build-bump.sh
# @desc Auto-increment the build number every time the project is run.
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below in to new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Insure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0)
if [ $ENABLE_PREVIEWS == "NO" ]
then
  buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
  buildNumber=$(($buildNumber + 1))
  /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
else
  echo "Skipping Bump of version"
  echo $ENABLE_PREVIEWS
fi
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@Vaseltior!这让我烦恼了好几天!我希望苹果能够真实地描述为什么预览不起作用,而不是毫无意义的短语...... (2认同)

Bri*_*n M 11

我最终向 Apple 发送了反馈,他们回复了一个修复程序。我在目标中有一个构建脚本,它会自动增加构建号。如果我删除该脚本,则预览会按预期工作。

因此,如果您遇到此问题,请删除 Target -> Build Phases -> Run Script 中的任何内容,然后重试。画布预览应按您的预期更新。

  • 在 10.15.2 上运行的 Xcode 11.3.1 也存在同样的问题(无脚本)。如果我单击“恢复”,画布窗格就会消失,并且在重新打开画布时再次出现警告。去年,在遇到太多错误后,我放弃了测试版的 SwiftUI,后来又想它现在肯定能用了,但不行。这些工具完全是垃圾,根本不起作用。即使创建一个全新的、干净的 Swift UI 项目,它也会立即崩溃。我希望 Apple 能够修复这些可怕的错误,因为 SwiftUI 前景广阔,但它却给开发者留下了不好的印象。也许是 Xcode 12 + 10.6。 (3认同)
  • 我没有任何构建脚本,但在 Xcode 11.2.1 中仍然遇到此问题。 (2认同)

Imt*_*ath 9

对我来说,当我使用 Legacy Build System 时,Canvas 不起作用。

你可以通过改变它,

文件 -> 项目设置(或工作区设置) -> 构建系统 -> 选择“新建构建系统(默认)”。

正如它所说,它是默认选项。如果出于任何原因选择了旧版构建系统,Canvas 将无法工作。

2020 年 6 月 30 日编辑:我们不再有Legacy Build SystemXcode 12 测试版。