DevLog:2025年9月15日

1、目前ChatWith for Mac使用的数据存储方式是UserDefaults,虽然目前应用的功能还很少,UserDefaults足矣,但这种存储方式不适合大量数据存储,数据量大时读写较慢,只能存储基本类型和可编码对象,且不支持复杂查询,决定趁现在应用功能还少(并且参考NoteWith的教训,将数据存储方式切换到Core Data之后基本上所有功能都要重新测试、大量修改),先把对话数据切换到Core Data,设置类的数据仍然用UserDefaults
2、Cursor拆解步骤包括:设置Core Data模型和持久化容器、创建Core Data实体模型、更新ConversationManager使用Core Data、迁移现有的UserDefaults数据到Core Data,修改过程中Cursor创建了新的文件,但没有直接修改项目文件,反而又把新文件删除了,打断操作后纠正了这种无故回退的操作,而且反复创建版本化的模型文件
3、为了优先保证成功构建,Cursor先创建CoreDataManager,并通过CoreDataManager管理对话数据,但底层先使用了UserDefaults,在我的要求下切换到了Core Data,创建了ChatWith.xcdatamodeld模型文件,定义了ConversationEntity和MessageEntity实体,设置了正确的属性和关系映射(之前用Trae时创建模型文件、定义实体和设置属性、关系映射都需要手动操作),同时还实现数据迁移机制,自动检测并迁移现有的UserDefaults数据到Core Data
4、但目前这个应用还不需要数据迁移机制,于是修改了CoreDataManager和ConversationManager,移除了数据迁移相关代码,至此,对话数据使用Core Data进行持久化存储,设置数据继续使用UserDefaults
5、测试发现有多个文件出现了onChange相关的警告,这是因为在macOS 14.0中,onChange(of:perform)语法被弃用了,需要使用新的语法,修改后警告消除
6、还有一处警告信息:ChatWith isn’t code signed but requires entitlements. It is not possible to add entitlements to a binary without signing it.这是因为应用中又entitlements权限文件,但没有进行代码签名,macOS要求又权限文件的应用必须进行代码签名,Cursor认为目前应用不需要特殊权限,于是将其删除,后续如果需要将应用发布到App Store或者需要特殊权限时可以重新创建entitlements文件并配置签名代码、添加必要的权限声明
7、接下来修改应用的布局,先修改对话和收藏界面,左侧是列表,右侧是详情,Cursor使用了NavigationSplitView来替代以前的TabView,并且创建了左侧边栏SidebarView、右侧详情DetailView
8、之后扫了一遍所有的文件,删除了未被使用的FavoritesView和ConversationListView
9、接下来测试具体的功能,从添加模型、发起对话开始,首先在设置中添加模型时,目前的设置界面显示非常局促,不能完整显示具体的设置内容,要求Cursor将其改成分栏布局,即使用NavigationSplitView,并且调整了界面的文字和图标大小等等,但多次调整后依然有部分元素被遮挡,看来还得重新规划一下应用界面的布局,可能NoteWith目前在使用的三栏布局的确是比较好的方案