02
单 Target 项目先隔离视图初始化和测试数据
只有一个 App Target 的项目,通常不需要立刻重建整个 Xcode 环境。更有效的做法是把复杂页面缩减成最小组件,再按依赖顺序逐项恢复。
建议按以下步骤执行:
- 将页面暂时替换成只包含
Text、VStack 和固定状态的简单视图。
- 确认文件中存在适用于当前工具链的
#Preview 或 PreviewProvider。
- 暂时移除网络请求、磁盘读取、数据库容器、登录状态和全局单例。
- 先恢复固定字符串和静态图片,再恢复
Environment、Observable 状态。
- 最后恢复网络、数据库或业务服务,并记录首次重新失败的依赖。
如果最小组件可以预览,而原视图失败,问题通常位于初始化路径或预览数据,而不一定是 Canvas 本身。预览创建对象时,不应默认网络可用、用户已经登录,或者生产数据库能够在每次刷新时重复初始化。
数据驱动型 App 要隔离 SwiftData 和外部服务
SwiftData、远程 API 和登录状态都可能使 Preview 变得不可重复。预览环境应使用固定样本、可替换服务和适合 Preview 的内存数据,而不是直接连接生产数据库。
可以分别准备空列表、正常列表和异常状态三组样本,并为数据库容器提供仅供预览使用的内存配置。外部服务则应替换成返回固定结果的测试实现,这样才能区分“对象创建失败”“数据为空”和“视图渲染失败”。
如果错误涉及宏语法、并发隔离或特定 SwiftData 行为,应对照当前 Xcode 的官方文档和发布说明。开发者论坛中的个案可以帮助发现线索,但不能直接推导为所有项目都会出现的已确认缺陷。
为什么模拟器可以启动 App,Canvas 却仍然无法显示?
模拟器验证的是完整 App 在运行目的地上的启动过程,Preview 还要单独建立预览宿主和刷新过程。两者使用的构建产物、初始化路径和运行时条件并不完全相同,所以应把模拟器成功和 Preview 成功分别记录,不要用前者替代后者。查看 Xcode 模拟器与真实设备运行说明