DevLog:2025年9月10日

1、关于Markdown渲染三方库,Cursor之前建议了SwiftUI-Markdown和MarkdownUI,但追问之后它更建议使用MarkdownUI,原因在于它完全基于SwiftUI构建,与项目架构完美匹配,且渲染性能更好,维护活跃,API简洁,支持表格、代码块、链接等所有常用的Markdown功能,说的这么好,实际用起来如何还得测试一下
2、除了AI问答之外,我还希望能将MarkdownUI用在备忘录模块,并且实现所见即所得的渲染,不再使用预览和编辑双视图,Cursor表示完全可以,并且所见即所得的渲染正是MarkdownUI的优势之一,优势包括:内容变化时自动重新渲染、可以只显示渲染后的效果,无需双视图、渲染流畅、支持所有Markdown语法、可以自定义样式和主题
3、Cursor还给出了三种实现方案,纯预览模式(类似Notion)、混合模式(小区域显示原始Markdown代码)、编辑模式,个人比较倾向于第一种,希望能够解决这段时间一直没能解决的AI对话、备忘录对Markdown语法的渲染问题
4、先修改备忘录模块,这次Cursor创建了一个使用MarkdownUI的备忘录编辑器组件MarkdownEditorView,并且修改了其它关联文件来使用这个组件,移除不再需要的工具栏和预览切换功能,因为MarkdownEditorView已经内置了这些功能,然后通过Swift Package Manager添加了MarkdownUI库,据称已经实现了真正的所见即所得编辑体验
5、测试发现备忘录界面有一行多余的“备忘录编辑器”,另外备忘录的内容显示有问题,当切换到不同备忘录时,内容没有正确更新,然后我还发现在打开某条备忘录,并且在列表中右键删除这条备忘录时,右侧应该显示“选择一个备忘录开始编辑”的界面,而不是仍然能看到已经删除的备忘录,Cursor移除了MarkdownEditView中的if !isEditing的条件判断,确保当外部内容改变时,编辑内容总是会更新,然后移除了NoteEditView工具栏中的“备忘录编辑器”文字(但现在仍然还有多余的修改时间,也需要删掉),并且修改了NotesListView来监听备忘录列表的变化
6、然后优化了备忘录页面的标题显示,备忘录列表顶部固定显示“备忘录”三个字,备忘录详情顶部根据我选中的备忘录标题而变化,未选中任何备忘录时则显示“备忘录”三个字
7、我其实不需要现在的编辑按钮,更倾向于直接点击备忘录内容区域就能编辑,所见即所得,并实时保存修改,类似Notion,明天看看Cursor能否在继续使用MarkdownUI的前提下实现这一功能

DevLog:2025年9月9日

1、继续昨天的修改,昨天为了实现对表格较好的渲染效果,拆分出了UnifiedMarkdownView,用于渲染普通文本,表格和代码块都已有专用的文件来渲染,但UnifiedMarkdownView使用了简单的Text组件,丢失了Markdown渲染效果,还是需要换成NSTextView,以实现良好的Markdown渲染效果、文字选择、右键菜单等功能
2、为了实现除表格和代码块之外的文本内容的渲染效果,Cursor创建了新的文件MarkdownTextView,至此明确了组件的职责,MarkdownTextView专门渲染普通文本,TableView专门渲染表格内容,CodeBlockView专门渲染代码块内容,UnifiedMarkdownView统一协调各个组件
3、接下来又是漫长的添加调试信息、定位问题的过程,在此过程中出现了应用卡死、文本不显示等问题,一直没能实现用NSTextView来渲染AI问答的文本内容,目前还是用的Text,可以正常显示文本、选择并复制文本,但没能搞定用AttributedString来解析Markdown,暂时搁置
4、先修改表格的样式,发现目前的表格第二行显示了一堆分隔符,而非正常的表格内容,而且Cursor给表格增加了最大高度限制和滚动功能,我也用不到,让Cursor修改下,Cursor创建了MarkdownTableCell组件来渲染表格单元格,但导致了应用卡死,在恢复到简单的Text组件后暂时不会卡死了,但表格里还是混合了Markdown语法标记,尤其是加粗标记
5、先保存粗体处理试试看,目前测试过的两个表格,都是粗体字比较常见,没想到只想使用这一个功能,也会导致应用卡死,只能先撤销了这一步修改,接下来准备试试Cursor建议的第三方Markdown库,比如SwiftUI-Markdown或MarkdownUI,如果可以的话,应该可以搞定AI对话中的文本、表格,以及备忘录的Markdown渲染

DevLog:2025年9月3日

1、参考Xcode的建议和Cursor的解释,对项目进行了死代码剥离(Dead Code Stripping),Cursor称这是一个编译优化功能,可以移除未使用的代码和数据,减小最终应用程序的大小,提高应用程序的加载性能,并且这是一个安全的优化
2、继续调整细节,比如将备忘录中的“笔记”替换为“备忘录”,和应用中备忘录模块名字保持一致,搜索界面按钮的顺序调整和文字修改,删除NotesListView也就是备忘录列表中未被使用的搜索功能,等等,让代码更干净一些
3、继续想办法解决从NoteWith还是手机应用时就一直存在的老大难问题:备忘录,询问了Cursor,有没有一些比较好用的Markdown编辑器,可以替换掉目前正在使用的NSTextView,Cursor给我推荐了SwiftUI Markdown、MarkdownUI、AttributedString+Markdown解析、以及MarkdownEditor、RichTextEditor两个第三方开源组件、和WebView+JavaScript方案
4、选择了第一个方案,但Cursor建议将现有的单视图编辑器改为双视图模式,即将编辑和预览分开,在编辑时可以实时更新预览,再具体一些,它推荐内联预览模式,可以同时看到编辑和预览,上面是编辑区域,下面是预览区域,可以展开/收起、可以拖拽调整高度,先试试看
5、修改过程中发现编辑区域已经显示了渲染效果,但预览区域显示的是未渲染的效果,这是因为之前创建的WYSIWYGMarkdownEditor是一个所见即所得编辑器,在编辑时就已经渲染了Markdown,按照Cursor的建议替换成了TextEditor
6、测试发现预览界面依然存在一些Markdown语法标记,可能是因为MarkdownRenderer不够完善,于是让Cursor修改,之后又是漫长的修正MarkdownRenderer的过程,因为Cursor在修改过程中认为之前的MarkdownRender太过复杂,于是删掉、重新创建了一个
7、目前应用内包含了两个Markdown渲染器,一个是AI对话使用的MarkdownWithCodeBlocksView,一个是备忘录使用的MarkdownRenderer

DevLog:2025年8月29日

1、首先让Cursor把深度思考内容的底色换成浅灰色,目前的颜色在AI对话界面中略显突兀,因为提问和回答内容都改成了白色
2、需要继续优化AI回答内容的Markdown渲染效果,渲染后的内容能否不以空格替代语法占的位置?比如加粗的文字前后都有两个空格,Cursor表示在Markdown样式应用的过程中,代码使用了NSColor.clear来隐藏语法标记,但这只是让语法标记变透明,并未真正移除它们占用的空间,需要用字符串替换来真正移除语法标记
3、但测试发现使用字符串替换的效果不好,回答内容被截断,且原本使用了同一个Markdown语法的内容,部分文字有渲染效果,部分没有,尝试用属性应用而不是字符串替换,一顿操作之后,又回到了之前的效果,渲染后的内容还是以空格替代了语法标记占的位置,又是一个悬而未决的问题
4、如果改用SwiftUI的Text来渲染AI对话内容,会失去文本选择功能、失去右键菜单、文本搜索等高级文本交互功能,Markdown渲染也会有限制,还是继续保持目前的NSTextView吧
5、发现在AI对话列表中点击右键修改标题时会弹出弹窗,可以在弹窗里输入新标题,但弹窗上方一直有一个空的icon,之前也修改过多次,但删不掉,于是要求改成点击右键修改标题,直接在对话标题位置修改、回车确认,修改过程中发现AIChatSessionListView和AIChatView在功能上有一些重叠,Cursor分析后发现AIChatSessionListView没有被使用,AIChatView中包含了了会话列表和聊天功能,于是决定把会话列表相关功能从AIChatView中迁移到AIChatSessionListView里,这样更便于后续对聊天功能和列表功能进行分别管理,然后修正了导航栏消失、部分界面变成四栏布局等问题
6、接下来需要统一一下AI对话列表和AI对话之间、备忘录列表和备忘录详情之间的分割线样式、底色样式,选中样式,以及拖动调整比例的功能,在实现这一需求的过程中,将ContentView中有关AI对话列表功能完全移动到了AIChatSessionListView中,这下ContentView就只专注于导航和界面切换了,减少了跨组件的状态传递,符合单一职责原则
7、然后统一了两个列表的默认宽度(最小200、理想300、默认300、最大400)和样式(首次打开和切换时不选中任何一条内容、每个条目都不需要用圆角,翻译一下,正确的说法应该是移除自动选中和圆角设计)
8、发现在Views/Notes/Components文件夹下有两个文件,SearchBarView和EmptyStateView,但不知道这两个文件现在还有没有用,这是之前使用UserDefaults来存储数据时,Cursor拆分的组件,现在NotesListView里已经有了重复的组件,SearchBarView用于在备忘录中搜索内容,EmptyStateView是空状态显示组件,Cursor建议删掉这两个文件,我觉得目前这俩文件好像也没啥用了,甚至这两个文件都没有被项目文件引用,删完之后项目结构更加整洁了
9、AI对话和备忘录列表修改告一段落之后,我又开始看待办事项分组列表,询问Cursor后发现这个列表不是单独的文件,是TodoListView文件的中的一个组件,并且备忘录界面使用了HSplitView,可调节宽度,待办事项界面使用了HStack,固定布局,虽然备忘录分组管理的功能完整,但界面布局和AI对话、备忘录列表不一致,还是决定以后要改成一致的

DevLog:2025年8月28日

1、本周着实有点忙,这两天一行未改,先继续修正AI对话内容显示不全的问题,现在只显示一行或者几行,需要滑动才能看到全文,Cursor认为这是一些文本显示组件没有正确设置高度约束导致的
2、还没测试,有点纠结为什么每次新打开一个Cursor对话,就会在修改后尝试直接启动应用,每次都需要我跟它强调下不要直接打开应用,构建下看看有没有编译错误就行,然后在Cursor设置的Rules&Memories中发现了它可以根据过往对话内容学习我的偏好,并且列出了我的这项要求“The user prefers that the assistant not open the application automatically”,果断同意
3、查看已保存的记忆时,发现其中还有一条“用户要求每次构建时,默认使用iPhone 16模拟器,除非用户单独指定其它机型”,稍微修改了下,增加了“在构建iOS应用时”
4、继续测试,发现仍未解决,Cursor继续修改了文本容器的配置、文本视图的垂直调整大小设置等等, 但未解决问题,Cursor再次提出要用Swift的Text组件来替换NSTextView,在确认不会影响备忘录(只修改MarkdownWithCodeBlocksView,不修改备忘录使用的渲染组件)之后,我同意了替换
5、现在AI问答的内容可以完整显示了,但无法选择回答的内容了,且有部分Markdown语法的渲染效果不太好,比如链接不能点击直接打开、同时应用加粗和标题语法的内容仍然会看到语法标记等等,于是让Cursor检查一下还有没有其它的语法渲染效果可以优化一下
6、Swift的Text无法实现文本选择,还是回到了NSTextView,然后AI问答内容又不正常显示了,所有的AI问答内容都只能看到一行,继续修改,多次修改后终于可以同时实现问答内容全部显示、文本选择和Markdown渲染了,发现在和Cursor对话时,问题描述要尽量详细,并且每次修改后有什么变化都要一起告诉它,便于它判断上一步的修改方法是否正确,让下一步的修改更有针对性
7、虽然达成了上述目标,但用户消息和AI消息的一直有白色的底色,多次修改也去不了,于是换个思路,将用户消息和AI消息的浅绿、浅蓝底色统一为NSTextView的默认底色,再调整了间距等细节
8、今天到此为止了,明天继续优化Markdown渲染效果,看能否去掉隐藏的Markdown语法占据的位置,现在回答内容里的空格有点多,然后把默认行间距调整为1.2倍,现在排版有些太紧巴了
9、另外吐槽一下,最近遇到Connection Failed提示的次数有点多

DevLog:2025年8月25日

1、接下来优化文字选择相关功能,我的目标是可以选择AI对话内容中的部分文字,测试发现目前的NoteWith在选择AI对话内容的部分文字时,无法同时选择掺杂了了不同Markdown语法的内容,比如同一行文字里如果既有加粗的文字也有普通文本,就无法选择,如果这一行文字只有H3或者普通文本,就可以选择
2、Cursor理解了我的需求,但没完全理解,它还在延续上周对备忘录功能的修改,表示当前的WYSIWYG Markdown编辑器通过隐藏Markdown语法标记(将颜色设置为透明)来实现视觉效果,这回导致文本选择问题,因为不同的Markdown语法被分割成了不同的文本片段,于是Cursor主要修改了NoteEditView文件,改进了文本视图配置、添加文本存储代理、实现NSTextStorageDelegate、改进选择范围处理,测试发现备忘录中的内容的确可以跨行、跨语法选择了
3、但其实我是想让Cursor处理AI对话中文字内容无法跨Markdown语法选择的问题,在和Cursor明确后,它修改了MarkdownWithCodeBlocksView(其中使用NSTextViewWrapper来渲染各种Markdown元素),创建了新的ImprovedMarkdownTextView(实际名字是OptimizedMarkdownTextView),使用单个NSTextView来渲染整个文本内容,并删除旧的MarkdownLineView结构,修改过程中甚至还直接删掉了整个MarkdownWithCodeBlocksView,因为Cursor觉得它太复杂了?
4、Cursor重新创建了MarkdownWithCodeBlocksView,让整个Markdown内容在一个NSTextView中,但实测发现AI对话内容无法正常渲染,且应用非常卡顿,在不同对话间切换时甚至会卡死,原因可能是过多的调试输出、复杂的正则表达式处理、频繁的文本存储更新、重复的样式应用等,之后测试时发现AI回答内容无法正常渲染,有的看不到任何回答,有的会显示在一个小框里,没有展开显示,不过现在已经可以跨语法选择了,还是有成果的
5、截了多张AI回答以小框显示的图给Cursor之后,它判断可能是NSTextView的高度没有正确设置,需要让NSTextView能够根据内容自动调整高度,修改一轮之后问题依然存在,甚至还差一点就给我替换成SwiftUI的Text视图,赶紧拦住,后面重开一个对话再修改这个问题吧

DevLog:2025年8月21日

1、昨天把备忘录编辑功能由TextEditor换成了NSTextView,已经具备编辑、保存、选择、右键菜单等基础功能,今天继续测试并丰富备忘录编辑功能
2、测试发现目前备忘录未应用Markdown渲染,只显示了纯文本,未实现像Obsidian那种“所见即所得”的效果,Cursor表示需要将编辑器升级为支持实时Markdown渲染的WYSIWYG编辑器(不知道这个名字是啥意思),替换整个SimpleTextEditor为WYSIWYGMarkdownEditor
3、修改过程中发现又使用了NSColor.systemGray6这种iOS上才有的颜色,难道还是从iOS应用转为macOS应用的后遗症?
4、修改之后,部分Markdown语法已经实现了所见即所得的效果,比如标题1、标题2、标题3、有序列表、无需列表,但是粗体、斜体、行内代码三个语法虽然可以所见即所得,换行时渲染效果就会失效,而且编辑器内不支持通过快捷键command+Z实现撤销操作,Cursor先修复了撤销操作,然后通过改进样式应用逻辑来修复部分语法渲染失效的问题
5、编辑器出现了不能插入任何语法标记的问题,且刚刚insertMarkdown函数只是简单的在文本末尾添加内容,而不是在光标位置插入内容,Cursor进行了同步修改,自称可以实现在光标位置插入、包围格式智能光标、行级智能格式换行等等
6、再次测试,发现粗体、斜体、代码块这三个功能不好用,比如点击粗体按钮后,会在光标位置插入对应的Markdown语法,且光标在中间,但输入文字后,不会应用粗体效果,且部分文字会消失,斜体也是这样,代码块貌似不能正常闭合,会影响到后文的渲染,继续让Cursor修改
7、多次修改后,还出现了看不到备忘录内容的问题,Cursor创建了一个临时调试的简化版本,并增加调试信息来定位问题,粗体和斜体的正则表达式好像一直有问题,这几天一直在修复这个问题
8、在Cursor对编辑器进行“根本架构层面”的修改之后,文字可以正常输入、窗口可以随意调整、粗体也能正常渲染了,但我发现备忘录里应用Markdown语法后的内容,有的会同时显示语法标记和渲染效果,有的只显示渲染效果,Cursor更建议所有Markdown语法都隐藏标记,于是陆续隐藏了标题、列表、引用样式的语法标记,显示效果还可以,后面继续优化
9、接下来增加待办事项模块,在导航栏的“备忘录”下面增加“待办事项”,并由Cursor来设计一些待办事项相关功能,同时在搜索、数据统计、回收站中也增加待办事项相关功能,测试一下看看Cursor能够做到什么程度
10、Cursor创建了待办事项数据模型、在DataManager中添加待办事项管理功能、创建待办事项视图模型、创建待办事项主视图、创建添加待办事项视图、创建添加分组视图、创建待办事项详情视图,并更新导航栏、更新搜索功能、更新设置(数据统计、回收站),果然这次创建了很多新文件后,又没有更新项目文件就开始构建,甚至还想使用Xcode的命令行工具来添加文件,但明明可以直接修改项目文件,我叫停了使用脚本的操作,要求Cursor直接修改项目文件
11、然后再次构建测试,修复多个新文件中出现的macOS不支持的API,之后构建成功,据Cursor总结,目前已实现了完整的GRUD操作(创建、读取、更新、删除)、分组管理(支持自定义分组和颜色标识)、优先级系统(四个等级的优先级管理)、截止日期、智能分类(自动分类逾期、今日、其它待办)、搜索集成、数据统计、回收站及UI适配macOS
12、测试待办事项相关功能之前先让Cursor统计了下当前的代码量,目前整个NoteWith共有8292行Swift代码
13、开始测试并修复待办事项模块的问题,包括1.新建待办的界面显示不正常 2.新建分组的界面显示不正常,Cursor不仅修改了这两个视图,还修改了TodoDetailView,并设置了三个视图的固定窗口尺寸,显示不正常的原因在于,在macOS上,NavigationView和Form的组合可能会导致显示问题,改为VStack和ScrollView的自定义布局
14、之后在测试添加分组时,发现DEBUG信息中出现大量的颜色名称(Cursor创建的待办事项模块可以用不同颜色来区分分组),但这些颜色没有在应用的资源目录中定义,导致系统无法找到对应的颜色资源,Cursor修改了多个文件来解决颜色问题,使用了系统预定义颜色,并创建颜色转换函数
15、解决之后,测试待办事项添加、修改相关的功能,比如待办事项列表里看不到星期几,添加待办时可以精确到小时和分钟(其实我只需要精确到年月日),两个问题均已解决,今天就到这里了
16、怎么感觉现在这个NoteWith越来越像Notion了?原本我是在仿ima的

DevLog:2025年8月20日

1、今天主要测试和优化备忘录功能,以及设置模块,首先设置界面目前有一个“设置概览”页,包括了数据统计和快速操作(导出数据、重置设置),但我不需要重置设置功能,且已经有单独的“数据管理”界面,决定让Cursor去掉“设置概览”,点击导航栏的“设置”时,默认打开AI模型管理,之后又修改了外观模式切换功能的样式,改成了三行,点击切换
2、然后来看备忘录功能,首先经过了多次修改之后,印象中备忘录应该是集成了TextEditor,但这个纯文本编辑器功能太过简单,且不能修改格式,进一步跟Cursor确认下:目前的备忘录功能,采用了哪个编辑器?是纯文本还是富文本?能否使用富文本编辑器?你推荐用怎样的方案?
3、Cursor推荐使用Markdown编辑器,优势在于:可以保持纯文本存储,数据兼容性好,支持丰富的格式化功能,且已有Markdown渲染基础设施(MarkdownRenderer),可以通过Markdown语法实现富文本效果,文件体积小,性能好,实现方式是:编辑时显示Markdown语法,预览时渲染为富文本,支持实时切换预览
4、同时Cursor还给到了具体的实施建议:添加编辑/预览切换、集成现有的Markdown渲染、语法高亮、工具栏,决定让Cursor按此建议实施,再结合测试情况调整,我不太想要编辑/预览切换按钮,比较符合直觉的方式应该是打开时就是预览,点击一下自动切换到编辑模式,先看看Cursor改的怎么样
5、Cursor基于NSTextView创建了自定义的CustomMarkdownEditor组件,换掉了原有的TextEditor,并且增加了Markdown工具栏、语法高亮功能等,支持字数统计、自动保存,测试发现打开一条备忘录后编辑器中看不到备忘录的内容,且出现了大量的“Modifying state during view update, this will cause undefined behavior”的提示,Cursor表示这是由于自定义编辑器实现中的状态管理问题导致的
6、在修复过程中,没想到Cursor直接删掉了刚刚创建的CustomMarkdownEditor,又改回了TextEditor,但的确可以看到其中的内容、可以切换编辑/预览状态,也可以保存修改了,并且也能应用MarkdownRenderer实现对Markdown语法的渲染,但针对粗体、斜体、行内代码三种Markdown语法,仍然缺乏对应的渲染机制,于是提示Cursor优化MarkdownRenderer
7、多次修改MarkdownRenderer等文件,希望能够实现对粗体、斜体、行内代码的正常渲染,但依然有问题,原因应该还是AI对话和备忘录模块都在使用的MarkdownRenderer和MarkdownWithCodeBlocksView等文件的问题,继续让Cursor修改,特别是最后卡在了斜体的渲染上,我发现NoteWith在备忘录和Markdown渲染上,混用了SwiftUI的Text和AttributedString,以及NSTextViewWrapper和NSAttributedString,这会让应用变复杂,于是要求只用NSTextView和NSAttributedString,目前的方案是编辑器是TextEditor,渲染器是NSTextView和NSAttributedString
8、多次修改后依然无法正常显示斜体和粗斜体,其它格式都可以正常渲染和显示,到底问题出在哪儿了?询问Cursor有没有必要将TextEditor替换成NSTextView?这样是否能简化Markdown语法的渲染?Cursor分析后表示目前使用的方案是编辑模式使用SwiftUI TextEditor,预览模式使用MarkdownWithCodeBlocksView自定义渲染,渲染管道使用了NSAttributedString+NSTextViewWrapper,这一方案编辑体验好,预览功能独立,不影响编辑,但需要解决复杂的字体属性传递问题,且编辑和预览体验不一致,如果将TextEditor替换为NSTextView,可以统一渲染系统,减少复杂性,可以实现实时预览(所见即所得),以及更好的字体属性控制,缺点在于编辑体验可能变差,需要处理光标位置、选择范围等复杂逻辑,且可能影响性能,但我个人更偏向所见即所得的编辑体验,比较符合直觉
9、Cursor在进行上述分析的同时,也建议再用颜色+背景+字体的测试方法来确定下颜色属性、北京属性和字体属性是否能正确应用,测试发现问题可能出在斜体字体的创建上(感觉这么长时间的测试好像白测了),我再给Cursor一个机会,但斜体依然不能正常显示,决定将TextEditor切换为NSTextView
10、切换之后,使用了统一的渲染架构,编辑和预览使用相同的底层技术,且Cursor表示NSTextView在macOS上性能更好,未来可以轻松添加富文本编辑功能,先试试看吧
11、首先就有一个大BUG,编辑视图看不到备忘录的内容,更别提编辑了,但预览视图可以看到,有没有必要使用编辑和预览两种视图?Cursor先通过设置textView.delegate导致文本变化无法正确同步的问题,但仍然看不到其中的内容,决定让Cursor改成所见即所得的编辑方式,但修改后编辑器都点不开,简化了一些功能后也依然无法正常使用,Cursor在修复时推测可能是文字颜色或字体渲染问题,继续添加调试信息来定位问题
12、Cursor在设置编辑器的初始尺寸之后,解决了看不到备忘录内容的问题,目前备忘录内容可打开,可编辑,可保存,可以看到光标,后续再测试其它格式设置按钮
13、今日剩余其它功能规划:1.给AI模型添加界面增加一个测试按钮,添加新模型时先试一下能不能正常响应 2.可以选择AI对话内容中的部分文字并进行复制等操作 3.完善设置中增加导入/导出功能,支持将外部内容导入到备忘录,支持将备忘录导出成txt或md

DevLog:2025年8月12日

1、今天先继续优化NoteWith的AI对话使用体验,发现两个小问题:1.提交问题之后,“AI正在思考中”显示的位置有点靠下,需要手动滑动一下屏幕才能看到,在回答结束后,“回答完成”和时间的显示位置也有点靠下,也需要手动滑动屏幕才能看到 2.为什么即使我用的是deepseek r1这种支持深度思考的模型,在对话时也看不到思考过程?
2、Cursor在修改时专门添加了对DeepSeek模型的deepseek_thinking字段支持,现在可以正确显示思考过程了,并且也优化了滚动体验,解决了上述两个问题,看样子在给Cursor下需求时还是要尽量详细,之前多次反馈看不到思考内容,但没有点名deepseek r1
3、但是深度思考内容的样式需要调整一下,现在使用了和回答内容一样的字体和颜色,需要在文字上做一些区分,要求Cursor将思考内容的字号缩小一点,并且使用稍浅色的字体,和回答内容有所区分
4、但第一次修改后未能生效,回想起我之前给MarkdownRenderer限定了所有文本的字体样式,可能是受此影响,于是让Cursor修改了AIChatView,让思考内容部分直接使用纯文本,不使用MarkdownRenderer,这下思考和回答内容有了明显的区别,有点理解为什么会有人说改过去的代码和改别人的代码有多痛苦了
5、发现在备忘录列表页,点击星号时列表中条目的时间会变,我的需求是:这个时间只有我在添加收藏和编辑收藏内容时才变,不能因为加星和取消星号就变,Cursor修复了DataManager和NotesDataService中的toggleFavorite方法,实现了这一需求
6、再次细化需求:在保证点星号时间戳不发生变化,只有真正编辑备忘录内容时时间戳才会更新 的基础上,我还需要点亮星号后让这条收藏置顶显示,未点亮星号的收藏按照更新时间排序,Cursor优化了NotesViewModel的排序逻辑,搞定
7、继续优化细节,发现在AI对话列表里,可以通过滑动触发删除操作,在这里增加一个“编辑”按钮,点击可以编辑这条对话的标题,并把“Delete”改成“删除”;然后也把备忘录列表滑动菜单里的“Delete”也改成“删除”,需求很快达成
8、发现在Cursor中开启一个新对话后,原本提醒Cursor的一些注意事项会失效,比如我之前已经提示了不止一次,代码修改完之后只需要构建一下就行,不需要帮我启动应用,但每次开启新对话,修改代码后就会构建并且想要启动应用,还得手动skip一下
9、决定把AI对话列表这种滑动的交互方式应用到AI模型管理界面,在条目上滑动时出现编辑、删除按钮,点编辑可以进入AI模型编辑界面,点删除可以删除当前这个模型,Cursor修改了AIModelManagementView,将原来的菜单按钮改为滑动操作
10、接下来多试试不同的AI应用,看看有没有其它比较高频同时又不太复杂(不知道实现起来会不会复杂)的功能可以增加到NoteWith里,以及找一个更好用的富文本编辑器,之前使用了UITextView,但体验一直不是很好,问了下火山引擎提供的DoubaoPro,有哪些比较容易集成的富文本编辑器,它也推荐UITextView,再结合NSAttributedString处理富文本属性,优点在于稳定性好,性能开销小,上手容易,缺点在于功能相对有限,且样式设置较为繁琐,看看先增加一个tab来测试富文本编辑器,没问题了就删掉现有的Markdown编辑器

DevLog:2025年8月8日

1、NoteWith默认模型的切换还是存在问题,正确的逻辑应该是:我将模型B设置为默认模型时,模型A自动取消默认模型状态,反之亦然,但现在我将模型B设置为默认模型时,模型A仍然还是默认模型;并且我将模型B设置为默认模型时,新建AI对话后自动使用模型B,多次修改后无果,决定先简化一下模型的选择和切换逻辑
2、简化内容包括:去掉“默认模型”和“当前模型”相关设置,在模型设置中不需要这两个功能,也不需要设置这两种状态,在创建新对话时,直接用AI模型列表里的第一个就行
3、测试发现Cursor直接把AI对话界面右上角的模型切换功能也给去掉了,还得加回来,在加回这个功能的过程中,我询问Cursor“你看下是否需要单独的视图文件来管理这个功能”,Cursor的确创建了一个单独的ModelSelectorView文件,但在将这个文件添加到项目文件的过程中,Cursor又突然说项目文件被损坏了,并且决定不创建单独文件,改为在AIChatView中直接内联定义ModelSelectorView,并且又恢复了昨天备份的一版项目文件,再次更新引用,感觉有点绕圈了,为什么之前可以直接修改项目文件,现在不行了呢?而且它这样恢复备份之后,我还得关掉Xcode,重新打开项目所在文件夹,好在测试后实现了我的需求
4、模型管理相关功能已经基本OK了,接下来就是思考内容的流式输出,在ChatWith上花了很多时间想完善这个功能,但一直没能达成,先跟Cursor明确下需求,针对支持深度思考的大模型,目前的应用是否会对思考内容进行流式输出?我需要看到支持深度思考的模型的思考过程,先流式输出思考内容,再流式输出回答内容,且思考内容和回答内容在样式上要有所区别,思考内容要支持折叠和展开
5、Cursor表示目前已经有部分功能支持了 ,但需要完善流式输出逻辑,更好地处理思考内容和回答内容的分离,并且优化UI交互(思考内容的折叠和展开),修改完成后测试,发现即使用的是DeepSeek-R1(深度求索官方的API)也不会出现思考过程,另外还有两个影响使用的问题1.在同一个对话里多次对话后,AI的输出就会变得特别卡,我再提出新问题时也会变卡 2.目前的markdown渲染也不是很完善,比如回答内容里有python代码时就无法正常渲染,可以看下截图,是不是还要再完善下MarkdownRenderer
6、Cursor认为可能是历史消息过多导致内存占用过大、每次发送消息时都加载全部历史记录、流式输出时的状态更新过于频繁,优化了AIViewModel、AIService中的历史消息处理,之后完善MarkdownRenderer,以支持代码块、语法高亮和图表,修改完成后连续回答多个问题之后应用还是会卡顿,对代码块的渲染效果也不是很好,另外还发现,在切换一个对话的模型之后,其它对话的模型也都会随之切换,我需要在每个对话中保存对模型的选择,比如在对话1中选择模型A,对话2中可以选择模型B,对话3中选择模型C,应该互不影响
7、Cursor认为卡顿是因为每次流式更新时都在主线程更新UI,并且频繁的状态更新导致界面卡顿,继续优化了AIViewModel中的流式更新逻辑,关于模型的选择,需要在每个对话中独立保存模型选择,修改之后前者略有改善,后者已经搞定
8、继续优化一下模型选择器的触控区域:点击AI对话界面右上角选择模型时,选择模型时,需要加大触控选取的范围,我需要点击整行时都可以选择对应的模型,现在只有点击文字区域时才会选择对应的模型,Cursor修改成了整个模型行都是可点击区域,并且认为这更符合iOS用户习惯
9、昨晚GPT-5刚发布,今天早上打开Cursor就提示已支持,并且可以免费使用,但我没有试用
10、突发奇想,问Cursor能否通过Tavily实现联网搜索,竟然可以,快速创建了一个Tavily搜索服务TavilySearchService,并且在AIConfig中添加Tavily API密钥配置,修改AIService集成Tavily搜索功能,Cursor表示需要在对话过程中输入搜索、查找、最新、新闻、今天、现在、实时、当前、最新消息、最近、近期等关键词才能触发联网搜索,并且会将搜索结果作为上下文提供给AI,但目前会自动获取前3个最相关结果
11、以后再测试集成Tavily搜索的效果如何,再看看要不要增加搜索结果数量,要不要调整填写Tavily API的位置等等
12、发现这两天Cursor明显变慢了,经常在修改过程中等待很长时间