DevLog:2025年8月18日

1、截至目前已经用Cursor编辑了63939行代码,今天继续让Cursor恢复各个模块的功能,并优化应用界面和交互,整体原则就是优先用已有的代码
2、首先是AI对话相关功能,从添加模型开始,添加模型功能目前不能正常使用,填写所有信息并点击添加后,没有保存到模型列表里,且添加模型界面需要增加一个备注字段,优先用已有的代码来实现此功能
3、在可以保存模型之后,发现只能删除,不能编辑模型,且API Key、Tavily Key都是以明文显示,也不安全,点击AI对话右上角的模型切换按钮,也看不到目前已有的模型,继续让Cursor修正
4、一直以来都是使用Cursor的Auto模式,但今天第一次见到它出现了思考过程,今天这是在调用什么支持深度思考的模型了吗?
5、继续调整模型添加和选择相关功能,比如把备注字段放在添加和编辑模型界面的最上面,对话界面右上角也显示备注字段,显示选择状态等等
6、AI模型的添加、编辑、切换基本搞定,接下来测试对话过程,首先遇到的问题是:已经填写了AI模型的信息,但提问后反馈“错误,未找到指定的AI模型”,在修改过程中发现目前存在aiModels和aiConfigs两种模型数据混用的情况,于是让Cursor检查有无其它功能仍在混用,Cursor检查后建议完全迁移到aiConfigs,因为它功能更完整,且不需要Core Data的复杂性,已经实现了完整的GRUD操作
7、有点疑惑UserDefaults和Core Data两种数据存储方式竟然可以混用?询问Cursor目前哪些地方用了UserDefaults,哪些地方用了Core Data,Cursor在梳理后表示现在的确是“分层混用”的状态,Core Data管理业务数据(笔记、会话、消息),UserDefaults管理轻量设置(外观、Tavily Key)以及AI模型配置aiConfigs,技术上是合理的,决定暂时保持目前的混用状态
8、继续测试AI对话相关功能,发现无论我问哪个模型,都会收到“这是一个模拟的AI问答。您的问题是:你好”的回答;对话内容没能保存到对话列表里;即使模型不支持深度思考,也会显示思考过程,看一下是怎么回事,并且尽量使用已有的文件和代码来解决问题
9、再次测试时发现无论使用哪个模型都会收到模拟的回答,而不是真实的AI的回答,并且AI问答列表显示的内容也有问题,继续让Cursor修正,Cursor表示是为了先确保实现其它功能,避免因误调用产生费用,而且即使真实调用失败时界面也能正常流转,但我不需要这种所谓的兜底方案,于是直接让Cursor真实调用AI模型,不需要模拟回答
10、然后又遇到了“网络连接错误”的提示,怀疑可能是Base URL的问题,询问Cursor之后,决定让应用自动补全/chat/completions,并且在AI模型添加/编辑界面增加说明文字,防止用户填错,Cursor添加了智能URL自动补全机制,如果用户只输入了基础地址(如 api.openai.com),会自动添加 https:// 和 /v1/chat/completions,如果用户已经包含了部分路径,会智能补全,从而避免重复添加路径导致的双重拼接问题,测试发现只需要填写最简单的网址就可以,比如https://api.deepseek.com、https://openrouter.ai/api
11、然后我发现无论模型是否支持深度思考,在回答时都会显示思考过程区域,如果模型不支持深度思考,就看不到完整的回答内容,让Cursor增加了自动判断模型是否支持深度思考的机制,修改过程中Cursor在AI模型设置中增加了深度思考开关,将决定权交给用户,我觉得还是自动判断更方便,于是改成了自动判断是否支持深度思考的方式
12、现在可以正常判断出deepseek r1支持深度思考了,思考过程可以展开/折叠,但即使展开也看不到思考过程的详细内容,在回答过程中,界面无法随着回答内容自动向下滚动,且看不到完整的回答内容,Cursor在修改过程中改进思考过程内容、改进自动滚动逻辑、改进内容更新机制,在测试过程中发现之前的MarkdownRenderer和CodeBlock相关功能还都有效,太棒了!
13、我之前有要求Cursor在AI对话页的每条消息下面添加三个按钮,收藏、复制、删除,不知道现在还有没有相关代码,没有的话就重新添加三个按钮和对应的功能,针对这一需求,修改后竟然给思考过程和回答内容增加了不同的背景色,但思考过程应该在回答内容上方,继续调整
14、调整完这些之后,AI对话界面的问题和回答都统一居左了,让Cursor调整了下,问题在左边,思考和回答在右边,然后点击收藏消息时,不要滚动到底部,保持在当前的浏览位置就行
15、接下来测试Tavily相关功能是否正常,询问deepseek r1一个需要搜索最新信息的问题,同步测试下深度思考是否正常,能否看到搜索链接,能否点击打开对应页面,能否收藏等功能,发现1.深度思考可以按句流式输出,但看不到完整的思考内容,只能看到最后两行 2.目前项目文件里已有Tavily相关文件和代码,回答内容的下方需要展示Tavily参考的链接,并且可以点击打开链接,看看现有的文件是否支持该功能 3.回答内容中包含网址时,其中的“.”会显示为“。” 4.点击收藏按钮,虽然提示收藏成功,但没有出现在备忘录列表里,四个问题全部反馈给Cursor修改
16、今日遗留问题:1.AI回答内容里的“.”都显示成了“。”,网址和代码都受此影响;2.思考内容虽然支持流式输出,但始终只能看到两行,看不到全部思考内容;3.提出问题后,只有主动滑动一下才能看到底部的“AI正在思考中”的提示
17、Cursor已经开始建议我“Start a new chat for better results”,难道是这个对话里内容太多了?明天重新开启一个对话之后再修正这三个遗留问题,然后测试其它功能

DevLog:2025年8月17日

1、今天重点优化备忘录相关功能,首先我发现备忘录列表里显示的备忘录内容不会随修改更新,比如备忘录里明明有文字,列表里却显示“空内容”,另外需要把备忘录标题下面的“文本编辑器”和右侧的字数统计去掉,因为界面右下角已经有字数统计了
2、修正这一问题后,发现又看不到支持深度思考的模型的思考过程了,并且在AI回答时,界面也不会自动向下滚动,可能是昨天将MessageView从AIChatView中拆分出来之后又有部分功能丢失了?先把这部分功能加回来,然后优化一下输出时的卡顿问题
3、继续优化备忘录,测试时发现了“列表顺序会随着点击发生变化,而不是只有修改内容时才会变化”和“光标自动跳转到结尾”的问题,在修改过程中,我发现虽然目前用的TextEditor是纯文本编辑器,但当前仍然有用到NSAttributedString来进行富文本处理,其实现在不需要处理富文本了,于是让Cursor去掉了富文本相关的代码
4、发现部分备忘录内容可以正常显示,部分不能,Cursor排查后发现Note模型有两个内容字段,一是markdownContent的纯文本内容,二是attrbutedContent的富文本内容,Cursor修改后改为二者均可正常显示,且优先使用前者,如果前者为空则使用后者
5、在修正备忘录问题的过程中,让Cursor去掉了知识库相关功能,暂时没有想好知识库该怎么用,而且知识库目前的存储也是以备忘录的形式存储的,和备忘录有些重合,先优化备忘录模块,后面再考虑更加其它功能吧
6、然后又修正了AI对话删除之后同时存在于列表和回收站的问题,修正了AI对话右上角无法切换模型的问题,奇怪的是之前我明明记得有一个AIModelSelectorView文件,啥时候消失了?
7、在让Cursor美化AIModelSelectorView时,美化有些过度了,并且再次出现了macOS不支持的SystemGray颜色,仍然时从iOS迁移至macOS的后遗症
8、结合当前应用的功能,让Cursor更新README,同时更新了应用的版本号为0.1,涉及info.plist和project.pbxproj两个文件
9、还在纠结数据的存储方式,因为UserDefaults主要用于存储一些配置相关的数据,在存储大小、性能、数据完整性、扩展性上均有限制,Cursor建议在数据量增长后迁移到Core Data或SQLite,比如数据大小超过5MB时,但因为对话内容中有大量的Markdown渲染,还有备忘录功能,数据可能很快就超过5MB了
10、决定先把目前的0.1备份一下,然后把数据存储机制改成Core Data,并且不需要迁移已有数据
11、Cursor表示要完成这一迁移,需要如下步骤 1.首先创建Core Data模型文件 2.创建Core Data管理器 3.更新数据模型以使用Core Data 4.更新DataManager以使用Core Data 5.更新相关的ViewModels,接下来当然又是修改项目文件、修复编译错误的漫长过程,待完成后再挨个测试功能
12、在修复编译错误的过程中,Cursor为了能更快解决编译错误竟然删除了五个视图文件,我拒绝,让它重新创建这五个文件,然后修正错误,因为担心后面还会再删除其它文件导致应用功能大量缺失
13、累计修复了:类型定义问题、可选值处理、方法签名修复、ScrollViewReader问题、Core Data关系处理、视图组件修复,以及几处警告,终于可以成功构建了
14、接下来测试功能,一打开App天都塌了,缺失了大量功能,接下来逐个修复,
1.备忘录界面没有创建备忘录的按钮 2.去掉预置模型中的所有模型,让用户自己添加,并且在添加模型界面增加Tavily密钥字段 3.AI模型管理界面无法关闭或返回 4.整体布局也很奇怪
15、Cursor还是将应用改成了三栏式布局,之后恢复设置功能,其中包含统一管理模型、数据统计、切换深色浅色模式、管理回收站等功能,并且提出优先让Cursor使用已有的文件和代码
16、然后调整了关于、模型管理功能(既然已经没有预置模型,那就不再需要每次打开应用时都删除了)、调整搜索功能(在导航栏里添加搜索按钮,点击弹出搜索弹窗,去掉备忘录界面的搜索按钮),仍然要求优先用已有的代码,目前已经恢复了应用的布局,今后再恢复各个功能

DevLog:2025年8月16日

1、今天抽空优化应用功能和界面,首先是和导航栏的问题:我在首页选择了模型之后开始对话,但好像无论我选不选,都会跟模型列表里的第一个模型对话,而且我选择模型之后首页也看不到我选了哪个模型;另外左侧导航栏和图标和文字好像都没有对齐,我需要让图标和文字都左对齐
2、针对导航栏图标和文字不对齐的文字,Cursor进行了多次修改,包括将List改为VStack、给按钮添加背景颜色、点击区域等等,修改过程了再次出现了“ContentView文件结构被破坏,让我重新创建这个文件”的提示,可能是因为调整了中间的某行代码,但没有找到对应的闭合大括号导致的,这个问题近期遇到了多次,当然在修改过程中也没有全部重写ContentView,只是重写了其中的一部分
3、导航栏的问题还在修改中,由于首页和其它页面使用了不同的布局结构,导致样式难以统一,Cursor表示最好的解决方案是将所有的页面统一使用NavigationSplitView,这样可以确保样式完全一致,并且首页也可以有导航栏收起按钮,但不知道这样是否会导致首页变成三栏,先改一下试试看
4、果然在这次修改后首页也变成了三栏,但第二栏真的没有什么用,既然多次修改都暂时不能达成需求,且首页更多的是品牌展示的作用,决定先去掉首页模块,重点把其它界面的功能补齐,体验做好
5、首先就是优化AI对话输入框,将输入框加大、加高,并且使用圆角,以及对导航栏五个按钮的点击区域进行优化,让整行都可以点击,Cursor在修改时多次加高了导航栏按钮的高度和输入框的高度,依然没有解决问题,特别是输入框,只有我输入的内容足够多时才会变高,平时仍然是窄窄的一小条
6、通过将TextField替换为TextEditor,解决了输入框只有一窄条的问题,但底部的附件和发送按钮和底部边缘之间没有任何间距,甚至发送按钮都被遮挡了,反复调整多个边距数据终于达成需求,按钮不被遮挡,输入框的高度足以显示多行内容,且有圆角
7、然后调整了AI对话界面我的头像的位置,改成与消息气泡的顶部对齐,之前有些太靠下了
8、接下来优化AI对话的内容的滚动问题,让打开对话时自动滚动到最近的消息,同时给选中的对话增加一个选中状态的视觉反馈,Cursor通过增加双重滚动机制解决了前者,然后增加了浅蓝色半透明的选中状态,决定让Cursor将这一选中状态设计也应用到知识库、备忘录、设置列表中,视觉效果更统一一下,但设置列表由于采用了NavigationLink,本身就有内置的选中状态样式,再叠加了自定义的选中状态之后导致样式重叠,但NavigationLink内置的选中状态样式的确难看,于是让Cursor将NavigationLink替换为自定义Button组件,并且套用了自定义的选中状态样式
9、多次测试发现并没有统一消息的滚动机制,有时还会滚动到一半,先让Cursor改成了打开对话时跳到最近一次对话内容,然后增加对代码块的渲染,去掉长按消息后的弹窗,改成在消息底部增加收藏、复制、删除三个按钮,并具备对应功能,Cursor说针对代码块设计了明显的边框和背景,但在Xcode模拟器中测试时好像没有生效,再次让Cursor修改,并让代码块解析器能够识别更多类型的代码内容,然后又修复了几次代码识别识别逻辑(包含智能边界检测、全面的文字过滤、精确的代码识别等等),因为有些普通的回答内容也被包含在了代码块里,修改之后基本达成要求
10、预感现在AIChatView可能需要拆分了,因为目前包含了太多功能,于是询问Cursor是否有必要拆分该文件,Cursor认为目前的AIChatView文件过大、功能混杂,且有代码重复风险,并给出了拆分建议,先拆分代码模块,再拆分UI组件,最后优化主视图,决定让Cursor按照渐进式方案拆分
11、边拆分边测试,发现代码片段看不到代码块了,Cursor表示时在修复编译错误时失去了代码渲染功能,于是重新启用了代码块渲染,并且修改了项目文件,添加了新创建的文件,之后多次针对代码不能被正常渲染的问题修改CodeBlockParser文件,比如文字被判断成代码,代码中的注释被判断成文字,Swift代码被识别成Python代码等,多次修改之后Python代码和Swift代码的显示效果都能正常被包含在代码块中,且没有出现误判,Cursor添加的调试信息还是很管用的
12、现在AI对话页面的消息滚动效果没有统一(打开对话时有的对话会滚动到最近一条,有的对话会滚动到中间,有的对话会滚动到底部),询问Cursor目前是不是还有对浏览位置的保存机制(比如再次打开时会跳转到上次浏览的位置)导致滚动效果不统一,Cursor表示目前没有对浏览位置的保存机制,滚动效果不统一的原因可能是因为SwiftUI的渲染机制、动画延迟、消息数量差异等,然后再次修改AIChatView的滚动逻辑,结果是:统一滚动到最新消息、响应消息变化、避免滚动位置不一致、平滑的滚动动画,实际测试仍有部分对话没能直接滚动到底部
13、发现一个新问题,包含搜索结果的回答内容,底部不显示消息来源了,让Cursor检查问题出在哪里,检查发现AIMessage模型中有searchlinks字段,但MessageView缺少了搜索链接显示逻辑,修正之后,再统一了参考链接的显示宽度(是参考链接部分没有继承AI回答内容的宽度限制导致的宽度不一致)
14、AI消息相关的功能现在逐渐增多,接下来想让Cursor把MessageView从AIChatView中拆分出来,Cursor也认为应当拆分,以提升后续的代码可维护性,创建了新的MessageView文件,但又突然创建了脚本,想用脚本修改项目文件,被我叫停了
15、发现Cursor在拆分文件时经常出现类似的问题,在创建新文件后都需要将新文件添加到项目文件里,但有时Cursor会后退一步,不管新建的文件,而是选择在原有文件中恢复原本已拆分出去的功能,或者创建脚本,用脚本去修改项目文件(Cursor会先对项目文件做备份),当然可以叫停,让Cursor直接去修改项目文件
16、今天Cursor的Dashboard统计功能竟然正常了,可以看到从付费到现在的代码修改量,到目前为止已经编辑了50211行代码

DevLog:2025年8月15日

1、发现从付费之后,可以从Cursor的Dashboard里查看近期的代码量,建议了多少行、接受了多少行,可以选择日期,但不知道为啥从8月6日往后就不再统计数据了,前几天的数据也有时能看有时不能看,目前Lines of Agent Edits总数是26255,看样子近几天的数据是有统计在内的,只是折线图上不显示
2、接下来给NoteWith for Mac增加一个“首页”,页面简洁,主要是只有一个对话框;对话框上方放标题“NoteWith”和副标题“any AI LLM you like.”;对话框中预置“start with a question”;可在对话框中输入问题;对话框右侧放切换模型按钮、发送按钮;发送问题之后打开新的AI对话界面
3、Cursor创建了新的首页视图HomeView,预置了占位符文本,模型选择器复用了已有的ModelSelectorView、发送问题时时自动切换到AI对话标签页,并且在导航栏添加了首页按钮
4、但构建测试发现首页也采用了三栏布局,略丑,于是询问Cursor能否不在首页应用三栏布局,只留左侧导航栏和右侧一整部分,右侧一整部分采用现有的首页中间栏内容
5、Cursor修改了ContentView,为首页使用不同的布局,在进一步解决了无法在不同Tab间切换的问题后,首页模块已具备,但未测试具体功能
6、界面上也有一些比较丑的元素,比如内容输入框的样式,决定让Cursor参考其它应用,比如豆包、ima、Cherry Studio的输入框调整下试试,看它能否通过截图来推测实现方式,Cursor可以复刻样式,但复刻的比较机械,甚至连豆包有但NoteWith没有的功能的按钮也给加上了,而且文本输入框还是窄窄的一小条
7、让Cursor去掉了我现在暂时还用不到的功能按钮,比如深度思考的开关、剪刀按钮、电话按钮、麦克风按钮,Cursor同步修改了首页和AI对话页的输入框,去掉了这些按钮,添加附件的按钮后续可能会用到,先保留了
8、Cursor添加的预置内容也很机械,我想要提问的话要先删掉预置内容,再输入自己想要提的问题,实际上我的想法是这些预置内容仅仅是一个提示,点击输入框时会自动消失,于是先让Cursor去掉了这些预置内容,只留空白的输入框

DevLog:2025年8月14日

1、今天继续优化NoteWith for Mac的界面交互,测试功能,首先就是修改AI对话和备忘录的界面布局,采用类似苹果备忘录的样式,左边导航栏,中间列表栏,点击列表中的条目在右侧打开,不再使用弹窗形式,条目右侧的编辑、置顶、删除按钮合并到右键菜单里
2、预感修改量会比较大,但这种交互方式比较适合用在Mac应用上,会更直观一些,Cursor首先修改了ContentView来实现三栏布局,修改AIChatSessionView来支持选择功能、移除按钮、添加右键菜单,修改NotesListView实现类似功能、修改AIChatView移除弹窗相关代码,移除返回按钮和dissmiss相关代码,修改NoteEditView,移除返回按钮和dissmiss相关的代码,修改saveNote方法,之后修复编译错误,构建成功
3、Cursor认为三栏布局是macOS应用的经典设计模式,右键菜单是macOS用户熟悉的交互方式,更符合macOS用户的使用习惯
4、继续优化交互:备忘录条目上的的右键菜单不再需要编辑按钮,在列表中点击条目时,第三栏里直接打开编辑界面就行;然后设置界面的第三栏默认显示AI模型管理的详情,点击第二栏时第三栏内容也随之切换
5、针对设置界面交互的变化,Cursor创建了SettingsListView和SettingsDetailView,之后修正新文件没有被添加到项目以及多处编译错误,之后构建成功
6、测试后再次优化多处交互,以及一些功能上的问题:点击备忘录列表中的条目,第三栏没有随之切换;去掉备忘录页面右上角的保存按钮,自动保存我所做的修改就行;设置中,备忘录回收站缺少了AI对话回收站那种恢复和永久删除的功能;左侧导航栏,把搜索按钮放最上面,然后是AI对话、备忘录、设置
7、在排查“点击备忘录列表中的条目,第三栏没有随之切换”的问题时,Cursor添加了一些调试信息,并创建了新的Note类型和onChange监听器,解决了问题,之后再修正新出现的“只要点击一次,即使没有修改标题或内容就会触发更新”的问题,Cursor通过添加标志机制来精确控制何时触发保存,需求达成
8、现有功能已基本稳定,接下来增加“知识库”模块,需求:增加知识库模块,和AI对话、备忘录同级,按钮放在导航栏的AI对话和备忘录之间,样式类似备忘录页面,从AI对话中收藏的内容进入知识库中,不再进入备忘录,同时在设置中添加“知识库回收站”,放在设置中的AI对话回收站和备忘录回收站之间,也可以像AI对话回收站那样清空、恢复和永久删除内容
9、Cursor陆续创建了知识库的数据模型、数据服务、ViewModel、知识库列表视图、知识库编辑视图、知识库回收站视图,然后更新关联的文件并把新创建的文件添加到了项目文件和对应的组,甚至还在搜索窗口的结果显示部分添加了知识库内容,我在提需求时忘了这一点
10、从目前的界面看下来功能已经基本齐备了,接下来测试新增的功能,并继续优化界面的细节,今天没有时间测试了

DevLog:2025年8月13日

1、昨晚突发奇想,问ima能否将iOS应用的项目文件改造为Mac应用,可以是可以,但一些问题需要注意,比如使用Xcode的Apple Catalyst技术,可以自动生成适配macOS的版本,这种方式可以复用大部分iOS代码,但需处理平台差异,也就是框架的差异,macOS应用使用的是AppKit,当然也可以用AI IDE来转换,要求“将iOS项目迁移至macOS,替换UIKit为AppKit”
2、不过对于目前的NoteWith而言,如果要迁移到macOS上,需要将SwiftUI替换为AppKit,UIKit和SwiftUI是Apple提供的两大UI框架,前者比较传统,后者比较现代,但二者可以混用
3、先把NoteWith的项目文件复制一份,文件夹更名为NoteWith for Mac,之后让Cursor在此基础上进行改造,然后NoteWith后续就兼顾手机和平板,个人认为macOS的操作方式还是以键鼠为主,直接将平板端应用安装在Mac上,操作并不是很方便
4、指令:我需要将这个使用SwiftUI编写的iOS应用改造为Mac应用,保留现有的AI对话(模型切换、流式输出、收藏等)、备忘录(置顶、编辑等)、模型(添加、管理等)、数据统计、深色模式等等功能,但要适配Mac端的用户操作习惯
5、Cursor陆续进行了修改项目配置、修改info.plist、修改主应用文件、修改ContentView、修改AI对话列表视图、修改备忘录列表视图、修改设置视图、修改备忘录编辑视图(含移除UIKit的导入)、修改AI模型管理视图、修改回收站视图等操作,之后继续修复UIKit导致的错误、将MarkdownEditorView改为使用AppKit的NSTextView、去掉iOS特性的颜色和API(比如systemGray仅限iOS使用)、去掉在macOS上不可用的ActionSheet,终于可以构建成功
6、小结,将iOS SwiftUI应用改造为macos应用的过程中,涉及项目配置修改、主应用文件适配、视图层修改、系统服务适配、颜色和样式适配、交互方式适配等
7、虽然构建成功,但功能还是要挨个测试并让Cursor修复,在Xcode中启动应用测试,这可比测试iOS应用简单多了,直接打开就能用键鼠操作,之前在不支持触控的Mac上测试iOS应用的触控操作属实有点费劲
8、初步测试发现这些问题:1.设置界面切换深色模式时,应用没有切到深色模式 2.AI模型管理界面,预置的模型和新添加的模型都无法编辑、删除 3.设置界面AI模型数量统计不正确 4.备忘录列表,创建新备忘录后只能编辑标题,不能编辑内容,先让Cursor修复一波
9、然后是对深色模式进行优化,现在不仅显示效果差,在切换到其它应用时外观设置还会丢失,Cursor优化了多个视图的深色模式显示效果、列表的空状态提示等,深色模式切换已基本可用
10、接下来是第二波修改,主要针对AI对话界面:1.提问的字体比回答的字体大很多,需要取一个居中值,让提问和回答内容字体大小一致 2.发送按钮比输入栏高很多,需要取一个居中值,让输入栏高度和发送按钮高度一致,同步优化下AI对话界面和备忘录界面的搜索栏输入框高度 3.长按消息弹出的弹窗上方有一个无用的按钮,可以删掉,修改过程中再次遇到了字体大小被MarkdownRenderer强制设置的问题,Cursor修改了这个文件,使其能够接受自定义的字体大小参数
11、第三波修改主要围绕应用的外观,可能是因为目前的应用沿用了大量的iOS代码,在应用的外观上有些别扭,比如图标按钮比较大但文字按钮比较小;搜索栏高度合适但有内边距,不够简洁;设置界面的数据统计功能三个横条的高度和AI模型管理、回收站、外观设置的三个横条相比偏窄等等,让Cursor统一优化下,并且让Cursor看看还有没有其它地方可以修改,让应用界面比较现代一些
12、Cursor创建了更现代化的设计系统,统一按钮样式、搜索栏样式和设置界面的布局,并对多个视图和按钮样式进行优化,之后修复一些几处小问题,测试发现界面上稍微有些改善,一些按钮不像之前那样局促了
13、继续测试并优化体验,特别是改为用键鼠操作后,那些曾经需要触控才能实现的操作现在都要改成用键鼠操作,比如AI对话条目右侧增加置顶和删除按钮,并且优化一下左侧的导航栏,去掉文字、增大图标,然后增加AI对话的删除/恢复机制,给AI对话双方增加头像标识
14、因为在AI对话列表中创建新对话时标题被遮挡,但多次修改后仍然被遮挡,且搜索栏样式较丑,决定将搜索按钮放在左侧导航栏,点击弹出搜索窗口,可在一个入口搜索AI对话和备忘录内容,Cursor在修改时自动创建了新文件SearchWindowView,去掉了AI对话列表和备忘录列表顶部的搜索栏,并且修改了搜索逻辑
15、搜索窗口做的还可以,但即使没有了搜索栏,在创建新的AI对话时标题还是会被遮挡,让Cursor将AI搜索列表页和备忘录页对比一下看看,为什么会有遮挡的情况,Cursor表示AI对话列表和备忘录列表的功能差异较大(反正就是想表达直接对比没有多大意义,也不会带来什么改善),后来添加了滚动监听,检测到状态变化时自动滚动到列表顶部,也算是解决了问题
16、然后优化备忘录界面,备忘录内容无法修改的问题依然存在,而且新创建的备忘录也会被部分遮挡,让Cursor结合DEBUG信息修正无法修改的问题,并参考AI对话列表的处理方式来处理新建备忘录被遮挡的问题,增加条目右侧的修改、置顶、删除按钮(Cursor在修改的同时移除了原有的收藏按钮),让AI对话列表和备忘录列表都能显示一行预览内容,目前AI对话列表只显示标题,尽量让两个列表的样式一致
17、目前AI对话列表和备忘录列表都已支持标题+置顶标识、Markdown渲染的内容预览(最后一条AI回答)、时间、操作按钮(编辑、置顶、删除),对比后发现置顶备忘录的标题左侧还缺一个置顶标识(pin.fill),也让Cursor加上了,至此两个列表样式基本一致
18、然后统一了AI对话回收站和备忘录回收站的样式和功能,现在都有恢复、永久删除、清空三个按钮了
19、功能修复至此告一段落,让Cursor删除多余的项目文件备份和脚本,接下来要重点处理备忘录的编辑功能
20、备忘录的编辑功能目前还无法正常工作,我不再需要切换编辑和预览状态,从列表中点击备忘录条目即可进行编辑,即使简化了需求也没有解决问题,于是询问Cursor有没有其它编辑器可以替换它,Cursor认为当前使用的NSTextView存在布局约束冲突、状态同步复杂、进程间通信稳定性、配置复杂等问题,并且推荐了“简化版TextEditor+工具栏”的替换方案,认为这种方案稳定性高、功能足够、易于维护,且符合macOS的设计规范,用户体验好,接受了Cursor的建议,很快替换完成
21、在编辑备忘录时,一旦选中文字并点击格式按钮切换格式,所有内容都会被应用格式,而不是只针对被选中的文字,并且无法用command+z撤销修改,还有,既然导航栏多次修改后依然没有去掉折叠/展开按钮,干脆就加回功能文字:AI对话、备忘录、搜索、设置
22、备忘录的编辑功能还是不能正常使用,先让Cursor将其替换为富文本编辑器试试,如果可以的话,就将备忘录功能与AI对话功能分离,类似ima的“笔记”,然后增加一个知识库模块,收藏的AI回答内容进入知识库,不需要对收藏的内容进行编辑
23、Cursor在修改备忘录编辑功能时表示将NSTextview替换成了SwiftUI原生的TextEditor,但前面好像已经换成了TextEditor,虽然现在可以使用了,但前面Cursor到底有没有替换编辑器呢?
24、总之,在将NoteWith迁移到macOS上之后,先修复功能上的BUG,之后再扩展一些功能,接下来先增加知识库模块,收藏的AI回答的内容放到知识库里,不放到备忘录了
25、这段时间Cursor创建了多个project.pbxproj的备份文件和脚本文件,测试基本稳定后再让它删掉这些文件,而且我发现创建了新对话后就容易出现这种问题:不直接修改项目文件,而是用脚本修改,构建完成后尝试打开应用等等

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月11日

1、今天先试一下上周五新增的Tavily联网搜索功能是否可用,但在Xcode模拟器中打开应用发现,添加Tavily API字段之后原本保存的模型都被删掉了,先添加一个deepseek v3试试,果然可以在AI回答内容中融合最新信息,并且会标注信息的来源(以“来源1、来源2、来源3”的文字形式),我需要增加参考的搜索结果数量至5条,并且在回答内容中带上链接,点击可以直接跳转到来源链接,然后结合Cursor的建议添加更多的搜索触发词,毕竟现在已经很少会完全让AI基于训练数据回答了
2、Cursor大幅扩展了搜索触发词列表,可以通过更多自然语言触发搜索,并且支持调用Tavily API获取5条搜索结果,在AI回答下方显示参考链接区域,点击链接可以直接跳转到浏览器,甚至还设计了卡片和蓝色主题?同时还有一些性能优化,比如链接信息轻量化存储、异步处理避免阻塞主线程等等,实测并没有出现“参考链接”区域,链接也无法点击、跳转,只能看到网址,而且Xcode中还有一些警告信息,截图反馈给Cursor调整
3、在修改过程中,同步让Cursor修改了对话页面的收藏逻辑,去掉消息右侧的收藏按钮,改为长按消息弹出菜单,菜单中包含收藏、复制、删除,目前已经可以看到AI回答内容底部的“参考链接”区域,且链接可以点击跳转至浏览器打开
4、测试发现复制和收藏功能已经实现,但“删除”功能好像不管用,让Cursor修复,然后优化了“选择模型”界面(ModelSelectorView)的视觉效果,采用和“AI模型管理”界面(AIModelManagementView)一致的视觉效果
5、发现在AI模型管理界面,AI模型列表上方有大片的空白,Cursor认为是因为AIModelManagementView使用了NavigationView包装整个界面,这回自动添加导航栏的空白区域,修复之后选择模型界面和AI模型管理界面样式已经一致

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明显变慢了,经常在修改过程中等待很长时间

DevLog:2025年8月7日

1、暂时决定不再纠结ChatWith不能全屏的问题,目前ChatWith和NoteWith的功能有些类似,可以先将这两天ChatWith新增的一些功能复刻到NoteWith上,比如多模型管理和切换,考虑到后续功能扩展和维护的需求,拆分一些视图
2、询问Cursor拆分建议后,竟然没有二次询问就直接开拆了,Views、Service、ViewModels、Models都进行了拆分,并且创建了项目重构的总结文档,但没有像往常一样直接开始构建测试,当然也没有添加新的文件引用、删除旧的文件引用,在修正文件引用错误后竟然构建成功了,但还没有测试原有功能能否正常使用
3、下达指令:我现在需要给应用增加“多模型管理及切换”的功能,给模型的设置增加一个“备注”字段,在“我的”界面可以显示当前已经添加的多个模型的备注名和模型名,然后在每个AI对话界面的右上角设置一个切换按钮,可以随时切换不同的模型,这也是给ChatWith添加多模型管理功能的经验
4、Cursor的最新版本有些地方和之前不一样了,比如之前在创建新文件后,可以直接修改项目文件已引用新文件,但现在要么先备份已有的项目文件,再从头创建新的项目文件,要么先写一个脚本,再执行脚本来更新项目文件,这种操作方式很奇怪,于是手动停止之后让它直接更新了项目文件,而且我还发现这次更新之后,虽然修改代码速度还是很快,但它需要很长时间才能继续进行下一步
5、之后基于Cursor的修改结果,优化一些细节:1.去掉AI对话界面右上角的设置按钮,我不需要从这里进入“我的”页 2.AI模型设置界面缺少备注字段(实际上“模型名称”就是“备注”,但下面又有另一个模型名称字段),我不需要设置“最大Token数” 3.从AI模型管理界面进入“添加模型”时,”模型名称”改成“备注”,把模型配置和基本信息合并,并且也不需要设置最大Token数 4.“编辑模型”界面同样需要把”模型名称”改成“备注”,把模型配置和基本信息合并,删除最大Token数的设定
6、然后发现修改后的应用在“AI模型管理”中可以完成所有模型相关操作,不需要单独的“AI模型设置”入口,让Cursor删除了这个入口,“我的”界面变得更加简洁了
7、接下来对应用功能进行测试并修改细节,包括添加模型、测试流式输出(含思考内容的流式输出)效果、修改发送按钮(发送后变成停止按钮,点击可以中断AI的回答)
8、多次修正细节之后,添加模型、发送/停止按钮切换功能都已支持,目标达成,且AI回答内容可流式输出,移除了我认为多余的“当前”标签和maxTokens设置
9、但还是存在默认模型无法切换、默认模型状态不能同步到每个位置的问题,明天继续修改,另外还需要对思考内容进行流式输出,并且与AI回答内容在样式上要有所区别