SwiftUI:自动预览更新一直暂停

时间:2019-10-21 15:58:58

标签: xcode swiftui

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

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

这是在Xcode 11.1和11.2 beta 2中发生的。我在SO上几乎找不到其他提及,而在Apple的Dev论坛上有一个线程没有答案。

7 个答案:

答案 0 :(得分:24)

如果在构建阶段中具有自定义运行脚本阶段,并且您不想(或无法)将其删除,则尝试选中“仅在安装时运行脚本”复选框。

enter image description here

答案 1 :(得分:10)

所有给出的答案的问题是,如果要使预览正常工作,您需要在调试模式下检查或取消选中脚本。

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

这真的很简单

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

这是模板:

if [ $ENABLE_PREVIEWS == "NO" ]
then
  # your code to execute here
else
  echo "Skipping the script because of preview mode"
fi

在下面一个完整的示例中,我使用了一个完整的示例来更改我的构建版本号

# 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

答案 2 :(得分:9)

对我来说,当我使用旧版构建系统时,Canvas无法正常工作。

您可以通过更改它,

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

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

于2020年6月30日编辑: 我们不再在Xcode 12 Beta中拥有Legacy Build System

答案 3 :(得分:2)

我最终向Apple发送了反馈,他们做出了回应。我的目标中有一个构建脚本,该脚本会自动增加构建号。如果我删除了该脚本,则预览将按预期进行。

因此,如果遇到此问题,请在“目标”->“构建阶段”->“运行脚本”中删除所有内容,然后重试。画布预览应按预期更新。

答案 4 :(得分:0)

在实验中,我发现ENABLE_PREVIEWS在SwiftUI项目中始终设置为YES。相反,我发现在普通版本中,Xcode集TARGET_DEVICE_MODEL在SwiftUI中没有。

所以解决方案类似于此答案中描述的解决方案:https://stackoverflow.com/a/62216533/833197,但使用了差异变量。

另一方面,在最新的Xcode版本中,在构建脚本的Info.plist中进行任何设置似乎都为时已晚。在下一次构建之前,将不会使用它。另外,您最终会得到文件的修改后的版本控制工作副本,这可能不是您想要的。

要解决此问题

  1. 在构建方案中使用预构建脚本
  2. 生成带有内部版本号的xcconfig,并使其被版本控制系统忽略(在我的情况下为git)。

可以在Info.plist文件中引用xcconfig文件中设置的变量。

答案 5 :(得分:0)

对我有用的是“清理” Xcode

在Mac上

打开Xcode

command+k(清洁控制台)

command+option+k(重新加载控制台)

command+option+shift+k(清理构建文件夹)

退出Xcode

在终端窗口中,清理派生数据。我根据Xcode的安装位置运行以下命令。我相信它的基本位置

rm -rf ~/Library/Developer/Xcode/DerivedData

重新打开xcode,效果很好!

答案 6 :(得分:0)

很奇怪。但是对我来说,当我仅使用数字命名项目时(即“ 111”),自动预览总是会失败。使用字母命名(带或不带数字)时,一切正常。

是12.3 Beta(12C5020f),Big Sur Beta 11.1(20C5048k)。