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、从目前的界面看下来功能已经基本齐备了,接下来测试新增的功能,并继续优化界面的细节,今天没有时间测试了
标签: NoteWith
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月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回答内容在样式上要有所区别
DevLog:2025年8月4日
1、今天开始优化ChatWith,比如流式输出、Markdown渲染、深色模式等功能同样也可以加到ChatWith里,另外尝试一下增加多模型设置和切换功能
2、测试下看Cursor能否看懂这种指令“参考NoteWith,完善一下ChatWith在与AI对话时的流式输出和Markdown渲染效果”毕竟上次使用时刚刚用它完善了NoteWith的流式输出和Markdown渲染效果,但看样子Cursor无法在修改一个项目时参考另一个项目的代码
3、在修正“新的实例没有加载已保存的大模型相关配置”这一问题之后,测试流式输出和Markdown渲染的效果,发现还有一些可优化的地方,比如:1.我添加了支持深度思考的模型,但没有看到思考过程,需要同样以流式输出显示思考的过程,并且在样式上要和回答的内容有所区别,且可以将思考过程折叠和展开 2.回答的内容在流式输出时好像会居中显示,也不符合日常的使用习惯 3.正在流式输出时,回答内容的上方有一个灰色的圆形,那是啥?
4、继续修正测试时发现的小问题,比如:1.为什么思考的过程和回答内容都显示不全?2.Markdown渲染效果也有问题,比如同时使用多个Markdown语法时会混合显示部分渲染效果和语法标记,可否把几种比较常见的Markdown语法混用情况写到MarkdownRenderer里?3.应该优先显示思考过程,再显示回答内容,现在会先显示一部分回答内容,然后又弹出了思考内容
5、继续修正测试时发现的小问题,比如:1.在回答过程中会出现上下两部分同时显示的问题,到底哪个是思考过程?2.回答完毕后只剩一个回答结果,但回答过程中内容显示错乱,而且回答过程中无法上下滑动查看回答内容,3.“收藏”页面需要改成列表,以列表形式,显示每条收藏的内容的前两行,并且点击打开后可查看经Markdown渲染的内容
6、继续修正测试时发现的小问题,比如:1.我需要按照这个顺序:先流式输出思考过程,思考完成后,思考内容自动折叠,之后流式输出回答内容。2.目前这版的思考过程和回答内容无法区分,且在对话界面会同时显示两块内容,不知道哪个是思考过程哪个是回答内容,且应用会卡死
7、多次调整之后发现仍然无法搞定思考过程流式输出的需求,好在回答内容可以正常流式输出了,然后让Cursor去掉对话界面顶部的“已加载全部消息”提示,并且收藏列表页顶部添加一条和对话页顶部一样的搜索栏,并且收藏列表的样式、间距等和对话列表保持一致,让界面更统一一些
8、边添加功能边测试真的太重要了,之前用Trae编写ChatWith并且让Cursor做了些优化之后,一直没有实际测试,今天才发现有这么多的细节问题需要调整
9、接下来在设置中增加深色模式切换功能,让用户可以在浅色、深色、跟随系统三个选项间切换,然后增加多模型设置和切换功能,比如可以在设置中添加新模型,可以给不同的模型添加备注,在对话界面可以自行切换模型(显示模型的备注)
10、Cursor在修改过程中出现了单个对话内容太长的提示,可能是因为我在上次修改的基础上继续进行对话,导致触及了单个对话的内容长度限制,于是开启了一个新的对话,好在出现这一提示之前已经构建成功了
11、接下来优化设置界面添加模型、编辑模型的逻辑,在设置界面中点击“添加新模型”时,直接打开添加新模型页面,内容和编辑模型界面一致,然后设置界面的模型名字和备注名字换一下顺序,突出备注名,弱化模型名,之后再根据测试情况继续优化编辑模型的操作方式,以及外观选项的显示效果和位置,模型管理放在上面,外观设置往下挪
12、反复测试并让Cursor优化设置、模型添加/编辑、切换的功能,出现了切换外观不立即全局生效,首次打开编辑模型界面时内容为空的问题,于是让Cursor添加多处调试信息以帮助定位错误,结合调试信息,Cursor解决了首次打开编辑模型界面内容为空的问题,但外观切换不能立即全局生效的问题还存在
13、Cursor解释说SettingsView在sheet内部,可能时因为外观的变动未能正确传递到sheet内部的视图,于是让Cursor将SettingsView拆分成独立的文件,但还是没能解决外观变动不立即全局生效的问题,再次让Cursor检查后快速修正,看来可能将SettingsView拆分成独立文件后的确提升了应用的可维护性,检查和修正问题变得简单些了
14、到今天为止,尝试使用AI(按使用频率排序Cursor>Trae>Lingma)开发应用已经有一个月了,简单总结下:
1.初期构思应用时,需求尽量简单一些,提升首次编写的成功率
2.找到一个心目中的样本,参考它的功能构思自己应用的功能,或者结合它的不足,让Cursor在自己的应用中有针对性的解决
3.后续增加功能时,每增加一个功能就在Cursor中构建,并且在模拟器中测试一下,看是否有明显问题,修正问题之后再增加新功能,不要妄图一次增加太多功能
4.遇到问题,可以让Cursor在代码中添加调试信息,结合调试信息和实测表现,Cursor可以更快地解决问题
5.关于数据持久化方案,零基础开发不要轻易尝试Core Data,UserDefaults对于一个刚刚开发的应用也已经足够了,不可能一步到位,等对Swift足够熟悉之后,再尝试Core Data
6.开发过程中不要频繁切换工具,也不要频繁切换模型,其实Cursor的Auto模式就已经够用了,切换模型可能会导致在修改某个功能的同时,其它功能也被修改
7.可以在开发过程中让Cursor记住你的某些使用习惯,比如默认用哪个型号的模拟器,在修改后先行构建测试,检查有没有语法和编译问题等等
8.如果卡在某个功能上太长时间无法解决,可以开启一个新会话,再让Cursor重新检查问题出在哪儿,或者先妥协一下,缩减一些功能
15、仍然不确定目前ChatWith,以及NoteWith是否能正常展现支持深度思考的模型的思考过程,留给明天吧,今天就到这儿了
DevLog:2025年8月1日
1、我发现在备忘录界面中添加文字时就会一直出现报错信息,Cursor表示这些错误信息主要来自输入法系统,表明在文本输入过程中出现了问题,Cursor对NoteEditView的代码进行了优化,并且优化NoteEditView的主要逻辑,减少不必要的更新
2、Cursor修复完成后再次测试,问题仍然存在,于是要求Cursor评判是否是昨天添加的设置对齐方式的功能,或者限定备忘录默认字体产生的影响
3、Cursor不仅没能修复大量出现的错误,还产生了新的问题:一是创建新备忘录/编辑备忘录时标题栏不显示了,二是创建的新备忘录没有出现在备忘录列表里,先让它把这两个问题解决掉
4、Cursor用添加调试信息的方法快速解决了上面第二个问题,于是让它用类似的方法,添加调试信息,看看能不能解决在添加文字、调整对齐方式时大量出现的错误信息,多次修改之后终于解决了大量报错和应用崩溃的问题
5、在测试其它的格式设置按钮时发现,粗体、斜体、下划线、删除线等格式,一旦设置后就很难取消,正常的话应该再点一次就能取消格式设置,但现在需要点击多次才能取消,在修改过程中还遇到了设置格式时有时会生效有时不生效的问题 ,Cursor表示是格式检查逻辑和UI更新实际的问题,但多次修改后无果
6、决定先简化备忘录的格式设置工具栏,只保留加粗、斜体、下划线、删除线 四个按钮,其它的按钮及相关功能先删掉,但多次修改后仍然不能正常使用格式设置功能
7、决定将目前备忘录编辑界面的富文本编辑器改为Markdown编辑器,并且给这个编辑器添加和AI对话界面相同的Markdown渲染机制,之后再让Cursor移除了底部的工具栏,增加了常驻的字数统计功能,发现Cursor在一些设计细节上做的还是很好的,比如字数统计功能的位置、字体、颜色、对齐、背景、内边距等,都能尽量做到美观
8、之后让Cursor结合应用目前的功能刷新一下README,NoteWith至此暂时结束,下一步优化ChatWith,比如流式输出、Markdown渲染、深色模式等功能同样也可以加到ChatWith里,另外尝试一下增加多模型设置和切换功能
9、最近Cursor更新属实有些频繁,这几天基本一天一更新了,界面和交互上有一些小变化,别的变化暂时没发现
DevLog:2025年7月31日
1、询问了Cursor如果要增强NoteWith对iPad的兼容性,需要做哪些调整,Cursor表示不需要单独开发一个iPad版本,因为SwiftUI提供了很好的跨设备适配能力,可以先使用SwiftUI的响应式设计,之后再涉及iPad专用导航结构,最后再添加拖拽、分屏等高级功能,这样可以实现大部分业务逻辑和服务层代码的复用,只需要维护一套代码,功能更新同时适配两个平台,且用户体验一致
2、而且有这样一个兼容iPad的应用之后,就不用再开发单独的Mac版本,可利用Apple提供的Mac Catalyst技术,将iPad应用转换为Mac应用,无需重写代码,只需在Xcode中启动一个选项,即可保持与iPad版本相同的功能和界面:在Xcode项目设置中选择项目target、在”General”标签页勾选”Mac Catalyst”选项,选择”Mac”作为部署目标
3、发现自己的对NoteWith的设想和腾讯的ima.copilot有点像,决定体验一下ima,参考它来丰富NoteWith的功能,知识库功能更
4、下一步,优化AI问答页面的显示效果,需要支持流式输出,不要等回答完了再一次弹出全部回答内容,如果模型支持深度思考,同样也要以流式输出来展现思考过程,且思考内容与回答内容样式要有所区别,比如思考内容用灰色文字,可折叠/展开,回答内容用黑色文字
5、这个问题看来有点难度,Cursor尝试了多种不同的解决方案,但成功搞定了,之后继续优化,跟Cursor说,有几个小问题需要优化下:1.回答内容右侧的收藏图标,等回答结束后再出现,不要还没回答就出现 2.回答内容貌似不支持Markdown,需要添加对Markdown的支持 3.对话详情页需要跟着回答内容的流式输出自动向下滑动
6、Cursor创建了MarkdownRenderer.swift,并且让我手动添加到Xcode项目中,但模拟器测试发现还是不支持Markdown渲染,另外两个需求已经实现了,继续让Cursor修正,修正一次后发现目前会同时显示Markdown语法和渲染后的效果,继续让Cursor修正,再修正一次后发现如果有文字同时应用多个Markdown语法,会显示一种渲染效果+一种Markdown语法标记,不会只显示渲染效果,继续让Cursor针对集中常见的Markdown语法组合做优化,比如标题+加粗、列表+加粗、引用+加粗,终于解决了这一问题
7、Cursor给出了修改思路:先处理块级语法,再处理行内语法,使用循环处理确保所有标记都被移除,如果找不到结束标记,会移除开始标记,同时避免无限循环和语法错误
8、下一步对备忘录列表和备忘录界面进行优化,设置默认格式,默认采用苹方字体,字体大小默认和AI对话输出的无Markdown语法的字体大小一致,增加对齐方式的选择按钮,选中文字后可设置居中、居左、居右、两端对齐四种对齐方式
9、Cursor完成上述需求后,继续对对齐方式的设置按钮、默认行间距、默认字体大小进行优化,之后让Cursor处理设置对齐方式时DEBUG信息中出现大量错误信息和应用崩溃的问题,目前问题仍然存在
10、下一步在模拟器中测试下,是调整对齐方式时会频繁报错甚至崩溃,还是进行其它操作时会频繁报错,以更精确的定位问题,让Cursor修改
DevLog:2025年7月30日
1、继续对NoteWith进行优化,先对比DoitWith的启动页代码,调整了NoteWith启动页的标题和副标题字体大小,之后让Cursor调换AI对话和备忘录TAB的顺序
2、之后主要调整设置界面,首先把底部的设置改成“我的”,左上角的“设置”也改成“我的”,然后把AI模型相关的设置改成弹窗,目标是:点击“我的”可显示模型设置(点击AI模型设置后打开弹窗,在弹窗中设置API密钥、API地址、模型名称)、数据管理(包含回收站,需要删除回收站的图标)、数据统计(包含AI会话数量、备忘录数量),Cursor在修改完成后没有主动构建,跟Cursor强调了下以后完成每次修改后都构建一下试试
3、发现Cursor在修改底部的导航文字(“设置”改成“我的”)之后,原本的齿轮图标就不合适了,需要替换成比较合适的图标,另外需要在“我的”页面增加深色模式切换功能,可在 跟随系统、浅色、深色 三个选项间切换
4、在模拟器中测试发现,“我的”页面的AI模型、回收站,以及外观设置的三个按钮只有在点击文字和箭头时才会触发对应操作,需要改成点击整行时都能触发对应操作,继续让Cursor修改,Cursor表示是对按钮点击区域进行了优化,移除了Button和buttonStyle(PlainButtonStyle()),改用HStack + contentShape(Rectangle()) + onTapGesture
5、然后优化AI对话中的收藏操作,目前消息右侧的收藏按钮有点小,且位于消息的中间位置,消息比较长时不便于点击收藏,需要调整到消息的顶部位置,并且适当增大收藏按钮,在点击收藏按钮后需要提示收藏成功,在Cursor修改完成后,再对提示文字“已收藏”进行优化,改成了浮在对话界面中间停留一秒后自动消失,Cursor不仅完成了需求,还增加了阴影、动画效果、平滑动画,效果不错,今天到此结束,明天再测试和优化其它功能
DevLog:2025年7月29日
1、今天的目标是把DoitWith的分组功能加回来,目标是:
1.点击右上角的“+”可以选择创建新Todo、创建新分组
2.创建新Todo时可以选择分组
3.点击左上角“Edit”后,每条Todo右侧的删除按钮左边增加一个编辑按钮,点击弹出编辑界面,类似添加Todo界面,可以选择这条Todo的分组、设置截止日期和重复频率
4.设置中增加分组管理功能,可以删除分组,确认后即删除
2、决定让Cursor分步操作,先实现上面和1和2,Cursor增加了分组颜色设置等细节优化,但存在这些问题:新创建的分组不会出现在Todo列表里,我的需求是 即使目前已有的分组下都没有Todo,也要呈现在Todo列表里;另外新创建的Todo也没有出现在Todo列表里,检查一下是怎么回事;还有,创建完分组或Todo后,ActionSelectionView能否自动消失?目前还需要手动点一下取消才会消失
3、让Cursor修正这些问题之后,继续优化,发现点击左上角“Edit”时,只有General分组下的Todo支持拖动排序,其它分组下的Todo同样需要支持拖动排序,另外设置页面的TODO统计,数字也不对,是不是只统计了General分组下的Todo?然后去掉设置中的Reset to Default Data按钮和功能,我不需要
4、Cursor快速修复了上述问题,发现给Cursor的需求要尽量具体到某个按钮的某个功能,还有就是在付费之后Cursor的效率有明显的提升
5、继续修复一些小问题:点击左上角“Edit”后,我需要暂时隐藏掉Todo条目最左侧的圆圈,可能会让人误解这是多选按钮;另外现在每条Todo在点击完成后都无法撤销,我需要在再次点击时撤销完成状态
6、Cursor快速修复了上述问题,继续测试后发现还有问题,从回收站中恢复的Todo条目,不会回到原本所属的分组,而是到了General分组里,继续让Cursor修复问题,Cursor甚至还给出了“如果原来的分组被删除了,恢复的Todo会添加到General分组作为降级处理”的额外方案
7、从2-6的需求全部完成,接下来继续增加编辑Todo、管理分组的功能,先增加编辑Todo的功能,需求是:点击左上角“Edit”后,每条Todo右侧的删除按钮左边增加一个编辑按钮,点击弹出编辑界面(类似添加Todo的界面)可以在编辑界面修改这条Todo的标题、描述,设置截止日期和重复频率
8、Cursor在修改后仍然存在一些问题,一是编辑、删除、拖动排序三个按钮离的有点近,可以稍微拉大一点间距,防止误触,二是点击编辑按钮弹出了“删除”的弹窗,没有进入编辑界面,关于间距的修复,由于编辑、删除按钮和拖动按钮不属于同一个组件,无法调整边距,在尝试两次后撤销了间距调整操作,第二个问题已经修复完成,但存在首次打开Todo编辑界面立即消失,需要再次打开才能编辑Todo的问题,继续让Cursor修复,多次修改未果,点击编辑按钮会弹出删除的弹窗
9、决定换一种交互形式,去掉每条Todo右侧的编辑和删除按钮,改成长按每条Todo弹出菜单,菜单里包含编辑Todo、删除两个功能,点击编辑Todo进入编辑界面,点击删除弹出弹窗,确认后即删除(Cursor认为这样更加简洁,且符合iOS的设计规范)
10、实现这一需求后,发现首次长按Todo条目、编辑Todo时会弹出一个空白页面,再次编辑Todo时才会弹出完整的编辑界面,继续让Cursor检查并修正该问题,多次修改后解决
11、我发现即使不点击左上角的Edit按钮,也能通过长按和拖动来调整Todo的顺序,可以让Cursor去掉左上角的按钮,以及点击按钮后界面的变化相关代码,但要保留拖动调整Todo顺序的功能,Cursor边修改边检查/修复问题,涉及了TodoView.swift、TodoRowView.swift、GroupTodoRowView三个文件
12、接下来继续优化应用,主要针对分组管理:一是在Todo界面搜索栏下方添加几个按钮,按钮上显示分组的名字,点击可以直达该分组所在位置,创建新分组时自动在添加新按钮(Cursor说这叫“分组导航按钮”);二是需要在设置中增加管理分组功能,可以在这里删除分组,删除后该分组内的Todo自动移动到General分组,先增加第一个功能,增加分组导航栏
13、接下来让Cursor实现管理分组功能,Cursor创建了一个新的GroupManagementView视图来管理分组,可以在设置-管理分组中统一查看分组颜色标识、分组名称、分组内的Todo数量,也能点击删除,删除时会有确认对话框,并告知删除后的Todo会移动到General分组里
14、下一步优化搜索功能,目前的搜索框不是很好用,搜不到部分Todo条目,Cursor对搜索功能进行了优化,输入关键词即可在全部Todo内搜索,快速定位到搜索结果,但是有一个问题:在搜索到不在General分组内的Todo时,会同时显示搜索结果和“No Results”的提示,继续让Cursor优化,解决了这个小问题
15、之后让Cursor修改创建分组和Todo界面的英文,改成中文,Cursor还自动同步检查了编辑Todo界面,之后再让Cursor把设置界面的一些英文改成中文,模拟器测试OK,然后让Cursor结合当前应用的功能刷新了一下README
16、检查一下目前的文件中有没有深色模式相关的代码,Cursor检查后发现的确存在深色模式相关代码,但设置界面中没有对应的选项,于是开始修复,涉及了主应用入口、设置、SplashView、RecycleBinView等文件,并且发现存在两个设置文件SettingsView和SettingView,检查后删掉了SettingsView,测试深色模式可正常启用
17、DoitWith先到这里,回到NoteWith,在Xcode模拟器中运行时出现三处被弃用的语法警告,先让Cursor处理一下,之后对NoteWith的功能进行测试
18、首先是备忘录相关功能,点击创建备忘录按钮或右上角加号后,添加内容并保存,并没有出现在备忘录列表里,需要检查一下原因,多次修改后仍然无果,决定先让Cursor把数据存储方式从Core Data改回UserDefaults,这样可以简化数据管理,避免Core Data的复杂性
19、Cursor删除了8个涉及Core Data的文件,并清理其它文件中对Core Data的引用,创建了一个新的简化项目文件,移除所有Core Data相关的引用(已经自动备份了当前的项目文件),之后果然能够正常保存备忘录了,Cursor还是厉害,Core Data等以后比较熟悉了再切换吧,现在先用着UserDefaults
20、目前格式设置按钮在备忘录详情页标题下方,但选中文字时弹出的剪切、复制等按钮就会把格式设置按钮挡住,继续让Cursor修改:需要把格式设置按钮全都挪到备忘录详情页底部、字数统计栏上方,并且增加删除线、设置文字颜色按钮;删掉右侧的“清空内容”按钮;目前工具栏中的“A”图标对应的是什么功能?点击之后会卡死
21、Cursor在修改之后,格式设置功能还是有问题,决定让Cursor修改这些:备忘录详情的格式设置还是有问题,选中文字后,可以设置格式,但再次点击格式按钮后不会取消格式;另外在备忘录列表页,在某条备忘录的空白位置点击就会被标记星号,我的需求是只有点击到星号时才会被标记星号;还有,移除备忘录详情页标题旁边的分享和删除按钮,我暂时不需要;在设置中添加一个回收站功能,管理我删除的备忘录,可以在回收站中恢复已删除的备忘录,这些需求均被Cursor快速完成
22、继续测试并让Cursor优化AI对话页,测试发现在AI对话页面点击创建AI对话按钮和右上角的加号之后,都只会创建新对话,但不直接打开新对话,点击对话列表中的条目也无法打开;另外在设置中填上API密钥、API地址、模型名称后点击右上角保存,不会提示已保存,也不会返回到其它界面,让Cursor一并检查、修复完成,创建新对话后对以弹窗形式打开对话,且对话内容互相独立,设置模型信息之后点击保存会提示已保存,至此NoteWith的基本功能已经OK
23、然后让Cursor删掉了设置页的版本号、项目主页等不重要的信息,以后再继续测试、优化,包括AI对话和备忘录TAB调换顺序,增加深色模式,优化设置界面的交互逻辑(把AI模型相关的设置改成弹窗),“设置”改成“我的”等等