- 热重载通过动态加载代码更改而无需重启应用,提供了比Xcode预览更快的迭代速度。
- 该技术使用动态库(.dylib)以及dlopen/dlsym函数在运行时加载和调用新代码。
- 通过使用@_cdecl导出函数并返回一个NSHostingView来桥接SwiftUI和C,避免了Swift的名称修饰。
- 宿主应用加载库,使用NSViewRepresentable嵌入NSView,并通过定时器定期检查文件更改。
- 为了强制dlopen加载更新后的库,每次重新加载前将文件复制为新名称。
- 通过在宿主中存储应用状态并通过createState和createStatefulView函数将其传递给库,实现了跨重载的状态持久化。
- 版本之间的不兼容状态更改可能导致崩溃;可以通过对状态进行版本化并在需要时重置来缓解此问题。