DevLog:2025年10月31日

1、今天开始继续完善NoteWith for Mac,并且持续试用ChatWith for Mac,积累下一个版本的优化点

2、参考之前ChatWith for Mac的经验,先让Cursor按照目前的功能模块梳理一下文件结构,另外笔记功能也看下有没有合适的三方库可以较好地支持富文本编辑,就像渲染AI回答内容的markdown-ui一样

3、目前应用包含的功能模块有AI对话、备忘录、待办事项、设置、搜索以及通用组件,架构上分成了Models数据模型、Services服务层、ViewModels视图模型、Views视图层,数据存储方式上,备忘录、AI对话都采用了Core Data,但TodoItems和TodoGroups以及AIConfigs仍然是用的UserDefaults

4、然后让Cursor根据目前的架构整理了一下文件夹,代码组织清晰了一些,接下来运行一下试试,看看都哪些功能需要调整

5、首先,目前的备忘录在打开时默认是预览模式,需要在详情里点一下然后切换到编辑模式,询问Cursor有没有比较好用的三方库,能让目前的备忘录模块实现类似苹果备忘录的富文本编辑功能,且不需要在预览和编辑模式间切换,Cursor给出了三个方案,方案一是RichTextKit,专为SwiftUI设计,支持实时富文本编辑(所见即所得),无需在编辑/预览模式间切换,且API简洁,易于集成,可以实现类似苹果备忘录的编辑体验;方案二是AttributedString+NSTextView,即对当前的方案进行优化,这个方案我是肯定不会用的,相当于又倒退了;方案三是ProseMirror via WKWebView,可以实现功能完整的富文本编辑器,支持表格、列表、链接等,但因为需要通过WebView嵌入,导致性能开销较大,且与SwiftUI的集成略复杂,体积也较大

6、综合看下来只有方案一最符合我的需求,下周再让Cursor集成RichTextKit,试试效果

DevLog:2025年9月12日

1、继续修改备忘录模块,目前已经应用了MarkdownUI,但仍然没有实现我希望的所见即所得的效果,仍然需要点击编辑按钮才能修改内容,修改之后变成了点击备忘录内容区域就能进入编辑模式,在编辑模式下使用TextEditor进行纯文本编辑,在预览模式下显示MarkdownUI渲染的效果,并且支持文本选择
2、接下来尝试用MarkdownUI优化AI回答内容的渲染效果,先用MarkdownUI优化除代码块和表格之外的内容的渲染效果,因为代码块和表格已经有单独的文件在渲染,Cursor通过在UnifiedMarkdownView中添加import MarkdownUI,并将.text组件的渲染从简单的Text替换为Markdown(text),实现了这一需求
3、然后用MarkdownUI渲染了AI回答中的表格,让普通文本和表格渲染效果一致,再将MarkdownUI用到代码块的渲染中,我发现在这个过程中Cursor修改的文件是UnifiedMarkdownView,并不是专门用于渲染代码块的CodeBlockView和MarkdownWithCodeBlocksView,以及专门用于渲染表格的TableView和MarkdownWithTablesView,询问后Cursor表示这些文件目前没有被使用,于是删除并修改了项目文件,移除对这些文件的引用,之后测试了一个新的问题,删除这四个文件的确对AI回答的渲染没有任何影响,现在AI问答中所有的Markdown内容都通过MarkdownUI进行统一渲染
4、真真切切感受到了使用成熟的三方库给应用开发带来的效率提升,之前为了实现对代码块和表格的渲染不知道修改了多少次代码才让这两个模块的显示效果基本可用
5、但现在还有CodeBlockParser、TableParser、MarkdownTableCell 三个文件,不知道是否还在使用,询问Cursor后得到的答复是只有TableParser还在使用,它定义了TableRow结构体,是UnifiedMarkdownView中表格解析的核心数据结构,所以仍然保留了这个文件,另外两个文件已经不再使用,直接删除并修改了项目文件,实测对目前的AI回答内容渲染效果无影响
6、发现在AI对话列表里,有部分对话只显示了标题,没有显示摘要,这和我之前的规划不符,再次明确标题默认是我在这个对话中提出的最后一个问题,下面小字默认是最后一个回答内容的前50字
7、由于近期对应用的修改较为频繁,猜测可能还有部分文件也没有被使用,但依然存在于文件目录中,于是直接让Cursor检查目前还有哪个文件未被使用,并明确“先检查下,不要直接删除”防止像上面第3步那样直接删除多个文件,虽然没有什么实际影响
8、检查发现MarkdownTextView、MarkdownRenderer都已被MarkdownUI取代,还有多余的DataManger,以及前边经过分析认为有用的TableParser,都可以删除,决定让Cursor逐个删除并测试构建,确认没有依赖关系,在将这些文件删除,并且将原本在TableParser中定义的TableRow结构体移到了UnifiedMarkdownView中之后,构建成功,并且AI问答和备忘录的渲染依然正常,今天一共删除了大概9个文件,这下项目更干净了,且功能没受影响
9、AI问答的内容,与消息气泡的边缘的距离有些太近了,需要适当增加一点边距,询问Cursor了解当前的边距设定之后,将用户消息和AI消息的下边距统一由4增加到8,现在看来稍微好些了
10、发现不知道从啥时候开始,在AI对话、备忘录和待办事项三个界面,第二栏和第三栏之间无法通过拖动分割线调整比例了,我记得之前已经将这三个界面的第二栏和第三栏统一用HSplitView,并且设置了最大宽度、最小宽度和理想宽度,检查后发现AIChatSessionView、NotesListView和TodoListView都设置了固定的宽度300,会阻止用户通过拖动分割线调整比例,并且待办事项列表页也设置了最小宽度,也会影响待办事项列表(分组)的宽度
11、在修改过程中,我提出希望Cursor能够保存用户通过拖动调节的宽度值,Cursor创建了新的InterfaceSettings数据模型和ResizableHSplitView组件,前者用于持久化保存宽度设置,后者用于监听用户拖动分割线时的宽度变化,多次修改后默认宽度依然是400,虽然可以通过拖动分割线调整宽度,但调整后的宽度不会被保存,切换到其它界面再切回来,宽度依然是400,后续再修改
12、突然想看看最近Trae多次更新之后水平有没有什么提升,于是复制了一份ChatWith,改名为ChatWith for Mac,让Trae把这个iOS应用改成Mac应用,经历了修改项目文件、Info.plist、ContentView、ConversationListView、ChatWith、MessageViews等等文件,以移除iOS特有、在macOS上不适用的代码,接下来就是漫长的构建失败-查找原因-修改-继续构建失败-清理缓存-继续构建失败的过程,在这一过程中遇到了6次“模型思考次数已达上限”的提示,即使经历了如此漫长的修改,仍然构建失败,没想到Trae的Auto模式还是这么难用,第七次提示模型思考次数已达上限之后终于还是没耐心了
13、由Cursor接手继续修改,指令“这是一个由iOS应用改成的macOS应用,但在修改过程中反复出现构建错误,看一下原因”,Cursor在构建一次之后直接定位了问题所在,于是创建了任务列表来修复错误,只用了几分钟就构建成功,为什么Trae连快速定位问题都做不到呢?
14、而且Trae在修改过程中,还在项目文件夹里创建了很多个扩展名为.o的文件,Cursor表示这是编译过程中的中间产物,包含机器码,但通常应该在DerivedData目录下,而不是在源代码目录,于是让Cursor直接删掉了这些文件
15、然后让Cursor评估是否还需要原本iOS应用的启动画面文件SplashView,macOS应用通常直接显示主界面,不需要启动画面,删除此文件后Cursor同步从项目文件中移除了SplashView的引用
16、测试发现应用可以打开,但在Dock栏没有图标,且打开的应用没有直接出现在所有窗口最前,让Cursor修改之后解决了应用未显示在所有窗口最前的问题,但应用的图标不是macOS应用默认的图标,接下来让Cursor排查目前未被使用的文件,包括了由Trae创建的测试文件TestFile.swift,以及Package.swift(Swift Package Manager文件,但项目使用的Xcode项目,又是一个Trae的迷之操作),果断删掉了这两个文件,然后在Xcode中重新打开项目所在文件夹,图标问题解决了
17、接下来可以测试和完善功能了,首先就是设置界面和AI对话界面弹窗太小的问题,完全看不到其中的内容(可能macOS上不太适合这种弹窗sheet的交互方式吧),Cursor同步修改了对话列表界面的弹窗、AI对话界面的模型选择器、设置界面的模型编辑弹窗、收藏界面的弹窗,但修改效果不佳
18、发现Cursor在最近更新后,修改过程中会标出哪个操作使用了用户的习惯或规则
19、接下来,优先把应用的数据存储方式由UserDefaults改成User Defaults和Core Data混用