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行代码
标签: Xcode
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月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月5日
1、今天先处理一下ChatWith在使用深度思考模型时的显示效果问题,目标是如果模型支持深度思考,那就在对话过程中先展现思考过程,思考过程结束后折叠思考内容,继续展现回答内容,整个过程都需要流式输出,且能随着输出过程自动向下滚动
2、Cursor在修改过程中,根据我提供的调试信息再次添加了更详细的调试信息,再次测试时发现1.虽然可以看到思考过程,但却是在回答结束后才发现在回答内容上方有思考过程,应该先让我看到思考过程,思考结束后再呈现回答内容 2.思考过程显示不全,只能看到一部分 3.一旦折叠或展开思考过程,就会自动跳到对话界面的底部,体验也不是很好,最好是我在折叠或展开思考过程时,仍然停留在当前位置
3、这三个问题还没有解决,又发现在AI输出过程中,CPU占用率可以飙升到100%,且回答内容越长应用就会越卡顿,一旦回答完成或点击返回到对话列表后CPU占用率立即下降到0%,Cursor认为这种性能问题是由于存在多个重复的滚动监听器,并且每次流式输出都会触发频繁的UI更新,优化后性能有了明显的改善
4、多次修改后仍然不能完美解决思考过程的展现,决定暂时简化掉这一功能,去掉对深度思考过程的展现,直接流式输出回答内容,已实现
5、然后测试时发现MarkdownRenderer需要再完善一下,比如AI回答的内容里如果有链接,还会显示成带有Markdown语法的形式,不会直接显示成链接,另外还需要优化一下对话界面,在发送问题之后,发送按钮变为停止按钮,点击可以打断AI的回答,已实现
6、目前的对话列表中,长按对话可在菜单中选择置顶,但置顶后的对话和其它对话在样式上没有区别,让Cursor优化一下显示效果,Cursor优化的效果还不错,比如加上了与启动界面颜色一致的细边框、PIN图标、置顶标识、渐变背景等等,之后又边测试边让Cursor处理了无法取消置顶、对话列表不按最后对话时间排序、对话时间只显示小时和分钟等问题,并且去掉了多余的置顶和模型图标
7、出于好奇,询问了Cursor有没有必要将对话列表和收藏列表拆分成单独的视图,Cursor表示强烈建议拆分,目前这两个列表均在ChatView内,而ChatView已经有1300多行代码,包含了太多不同的功能模块,违反了单一职责原则,且代码组织混乱、状态管理复杂,建议拆分除单独的ConversationListView、FavoritesView、SearchView,并创建一个ConversationManager数据管理器来处理共享状态
8、Cursor还给出了分步骤的实施建议,先创建新文件结构,拆分独立文件,再优化数据管理,创建ConversationManager,减少重复代码,之后再组件化,提取可复用组件并创建Components目录,以提高代码复用性
9、虽然现在应用功能并不多,但拆分过程中也容易出现各种错误,比如已经拆分为单独文件的视图和原有的代码并存导致冲突,需要边修改边构建,之后再详细测试每一个功能确保应用功能正常,Cursor在拆分完成后表示,现在应用有了更好的架构基础,便于未来的功能扩展和维护
10、在Xcode模拟器中测试调整架构后的应用,发现如下问题,可能是拆分单独的视图之后导致的功能丢失:对话内容无法通过长按复制/收藏;发送问题之后会出现错误提示“请先配置API密钥”,但我已经配置了模型信息;“设置”界面左上角需要添加“返回”按钮;收藏列表需要以对话列表的样式显示,每条收藏在列表中仅显示两行文字即可
11、在修复上述问题的过程中遇到了对话长度超限的问题,不得已开启了新对话,在修复几处错误之后,Cursor试图开启模拟器帮我测试应用,我更习惯自己在模拟器中测试,回复“以后我自己”(其实还没有打完就点了发送),Cursor竟然理解了我的意思,回复说“好的,我理解您想要自己处理后续的操作”
12、再次测试,发现这些问题:新收藏的对话内容没有出现在收藏列表里;发送问题之后没有“AI正在思考中”的提示;回答过程中会同时出现两条一样的回答内容,回答结束后仅显示一条
13、Cursor没能一次解决上述问题,测试发现还有新问题:发送问题之后仍然没有“AI正在思考中”的提示;我需要以流式输出显示回答内容,不要一次跳出全部回复内容;对话界面需要跟随流式输出向下滚动,始终显示最新的回答内容;收藏列表需要按收藏时间倒序排列
14、在修改过程中,Cursor建议将ChatView的body结构拆分为更小的组件,比如消息列表、输入框、头部等分别提取为独立组件,以减少嵌套和条件判断,但多次修改后仍然频繁出现错误,比如问题提交之后应用就会卡死、新建对话后原有的对话会消失、同时输出两条一样的回答内容、对话中只能看到最早的一个问题,其它的内容都不显示 等等问题,猜测可能是在将ChatView拆分成多个文件之后,在拆分组件时,出现了功能上的重复和冲突,于是让Cursor继续检查ChatView和Views目录下的文件有没有功能重复的情况
15、目前在对话界面提交问题后应用还是会卡死,也没有了“AI正在思考中”的状态提示,明天让Cursor继续拆分ChatView,检查有无功能重复,并添加调试信息定位问题,还有另一个问题也明天处理:目前的ChatWith用StoryBoard作为启动页面,NoteWith和DoitWith则是用SplashView作为启动页,这两种形式有啥区别?
16、最近Cursor在更新之后添加了一个Context Usage的提示,以后注意时刻关注这个用量提示,如果要对应用做比较大的改动,但用量快到顶了,就开启一个新对话,虽然可以选择参考上次的对话内容,但好像参考的效果不太行
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模型相关的设置改成弹窗),“设置”改成“我的”等等
DevLog:2025年7月28日
1、上周经历了Trae、Lingma和Cursor的多轮修改之后,DoitWith原本已经具备的删除Todo和回收站功能暂时消失了,但RecycleBinView文件还在,决定让Cursor试一下恢复这个功能
2、但在模拟器中测试目前的DoitWith时,发现无法创建Todo,创建时Debug信息会提示:
UIKeyboardLayoutStar implements focusItemsInRect: – caching for linear focus movement is limited as long as this view is on screen.
Error: this application, or a library it uses, has passed an invalid numeric value (NaN, or not-a-number) to CoreGraphics API and this value is being ignored. Please fix this problem.
If you want to see the backtrace, please set CG_NUMERICS_SHOW_BACKTRACE environmental variable.
且应用会卡死,直接把这些错误信息给到Cursor,Cursor在修改TodoData.swfit、TodayView.swift、AddTodoView.swift之后,虽然可以构建成功,但又卡在了启动界面,不进入TodayView界面
3、在排查问题的过程中,Cursor在多个文件里添加了调试信息,以便于定位问题,后续可以把这些DEBUG信息给到Cursor,更有针对性的解决问题
4、多次修改之后仍然会卡在启动界面,决定暂时让Cursor简化当前的应用:“不需要Today界面了,进入应用后直接显示Todo界面,底部也不需要在Today和Todo之间切换,先看下都有哪些文件和代码可以简化”,Cursor征求我的同意后删除了TodayView.swift、MainTabView.swift,并对多个文件进行简化,在我的要求下保留了SplashView启动界面和RecycleBinView回收站,Cursor还顺便在设置中添加了回收站功能,简化之后的应用经Xcode模拟器测试,可以正常启动,且可以正常创建Todo
5、但是相比之前我的需求,缺少了长按菜单(删除Todo、修改截止日期、修改分组等)、Todo页面视图也过于简单,甚至看不到Todo条目的截止时间,但是相比之前多了左上角的“Edit”按钮,点击后可以对Todo条目进行拖动排序,后续调整和增加功能时,还是要遵循“小步快跑”的原则,不要一次调整或增加太多功能,这样出现问题后也比较容易排查
6、询问Cursor当前的文件中是否有长按Todo弹出的菜单相关代码、给Todo条目分组的代码,前者已经没有了,后者还存在,但功能未启用,决定先让Cursor完善一下Todo条目的显示:目前Todo列表中仅显示Todo标题,还需要显示描述(Description)、截止日期(Due Date)、重复频率(Repeat)信息,并且适当拉高Todo条目的显示高度,以容纳这些信息,Cursor很快修改完成,并且优化了显示效果
7、重复频率目前有Daily、Weekly、Monthly,分别对应日、周、月,需要增加一个Yearly,即每年重复提醒一次,继续让Cursor添加此功能,很快添加完成
8、感觉现在每一条Todo显示的高度有些太高了,需要稍微减小一些条目高度,可以适当缩短每个Todo的三行内容之间、每两条Todo之间的垂直间距,Cursor给出了修改前后的对比:
调整前:条目间垂直间距:8pt、内容间垂直间距:6pt、图标顶部间距:2pt
调整后:条目间垂直间距:5pt、内容间垂直间距:3pt、图标顶部间距:1pt
9、接下来修正一个问题:点击右上角“+”时,每条Todo的右侧会出现删除按钮,需要调整成点击左上角的”Edit”时,每条Todo的右侧会出现拖动调整顺序按钮(已有,且功能正常)和删除按钮,点击删除按钮可删除本条Todo,点击右上角“+”时,每条Todo的右侧不要再出现删除按钮
10、在修正这些问题之后,继续让Cursor修正删除Todo时卡死、删除的Todo不显示在回收站里,回收站里的Todo点“恢复”之后,不会显示在 Todo界面等问题,顺便解决数据结构冗余的问题(同时存在Todo和TodoItem两个结构体),Cursor在代码中添加了很多调试信息,方便定位问题,结合调试信息和Xcode代码窗口的错误提示,Cursor修正了这一问题,今天就到这儿了
DevLog:2025年7月25日
1、Trae今天早上竟然修正了昨天的无限循环的错误问题,可以构建,并在Trae的模拟器中打开应用了,但经测试发现,Today页面的头部缺失,只显示了截止日期为当天的Todo,而且也缺失右上方的添加和设置按钮,继续让Trae修正
2、不知道为啥用Trae修改应用时,既会修改我要求的地方,又会自己改一些我没有要求的地方,比如DoitWith中条目的样式、底部Tab的底色、底部两个Tab的名字(之前是英文Today和Todo,现在被改成了今天、待办),难道是我中途切换了模型导致的?
3、这两天Trae还出现了一个问题,就是会判定某个文件存在重复(但实际上并没有重复文件),然后删掉这个文件,再创建一个新的文件,但命名变成了全小写,比如maintabview.swift,之后再表示之前判断错了,并没有重复文件,这是在折腾啥?
3、AI IDE貌似存在一个通用的问题:初期能够很快实现简单的需求,随着后续功能增加,出问题的概率就会越来越大,近期从UserDefaults切换至Core Data时必出问题
4、下载了一个新的AI IDE,阿里的通义灵码,反正DoitWith也已经被Trae中的多个模型(Doubao-Seed-1.6、Kimi-K2、Claude Sonnet 4、Qwen-3-Coder)修改的面目全非了,准备试试,内置了Qwen-3-Coder、Qwen-3-Thinking、Qwen-2.5-max,可以使用Auto模式,也可以手动切换
5、先询问了Lingma对当前DoitWith的体验和优化和功能增强的建议,决定先让Lingma为当前应用增加Trae没能完成的重复任务功能:
我需要增加这个功能:支持为每个Todo设置“重复”,在创建Todo/修改Todo截止时间时,可以设置/修改重复频率,可选“每天、每周、每月、每三个月、每年”五种重复频率
6、Lingma添加了这个功能,涉及TodoData、TodoView、TodayView三个文件,并且要求它检查了,不存在语法错误,但是Lingma表示它无法直接构建项目,建议我在X中进行构建,甚至智能问答模式下不会主动修改文件,只会给出“应该改成什么样”的建议,要求它修改文件之后才直接对这三个文件做了修改
7、在处理一些警告时,再次出现了只给建议和示例,不直接修改文件的问题,再次要求后,在Xcode中构建仍然提示同样的问题,试试看将“智能问答”模式切换为“文件编辑”模式,但是使用过程中Lingma变得非常卡,点击“停止”后甚至卡住不动了,不完全退出后重新打开项目,历史记录显示已完成修改,Lingma IDE技术人员建议我用智能体模式,可以给出建议并修改文件,但是智能体模式同样无法直接构建项目
8、再次切换回Cursor,希望能够解决Trae和Lingma一直没能解决的频繁出现的编译错误,但提示免费额度已经用完了,充了一个月的Pro,支付宝付款144.11,之后Cursor开始修复问题并进行构建测试,很快就修复完成,构建成功,过程中提示解决了MainTabView的问题、数据结构不一致的问题、缺失的属性和方法问题、枚举类型问题、类型不匹配问题、组件引用问题、语法错误,问题着实有点多,可能都是之前频繁切换IDE和模型的后遗症,现在已经可以构建成功,然后又遇到了之前一直没能解决的卡在启动界面的问题
9、在“移除Today界面长按Todo弹出菜单,只可以点击Todo条目前的圆形按钮以完成Todo”之后,终于解决了应用卡在启动界面的问题,看来可能是Today界面的功能太过复杂导致启动时被卡住
10、今天的最后一步操作是:把界面右下角的设置按钮移动到Todo界面右上角,并且在设置中增加Todo条目统计功能,分为“待完成Todo”和“已完成Todo”两条显示,每次换用不用的IDE或模型,都会导致需求之外的改动,以后尽量只用一个Cursor,少用Trae和Lingma
DevLog:2025年7月24日
1、暂时没能找到Trae的官方交流群,官网引导到了稀土掘金的Trae用户交流圈,已注册稀土掘金并加入了交流圈,并且发帖询问Xcode模拟器测试时卡在启动页的问题
2、继续让Trae提供功能增强和优化的建议,基于Kimi-K2模型的分析,Trae给出了划分优先级的功能增强和用户优化建议,我只选了这两项:
1.重复任务:支持设置每周、每月、每三个月、每年重复任务,可以在创建Todo/修改Todo截止时间时进行设置/修改
2.Todo界面右上角添加多选按钮(图形按钮),点击可以多选Todo,并进行批量完成/删除操作
3.截止日期中的月份现在显示为英文,需要改成数字+中文,如“July”需改成“7月”
3、发现在切换模型为Kimi-K2之后,Trae不会自动检查语法错误了,也不会自动进行构建测试了,将模型切换为自动后,思考和修改过程又开始出现英文,明确要求了下以后不要用英文输出,但之后还是有出现用英文回答的时候,特别是复制Xcode的报错信息给Trae之后
4、不知道是不是Trae将我上面的第二条需求理解错了,修改了AppIcon,导致后续频繁出现编译错误,而且Trae在运行一段时间之后会提示“模型思考次数已达上线,请输入继续后获得更多结果”,这时如果使用的是带有深度思考能力的模型(比如Doubao-Seed-1.6),可能操作就会被打断,忘记了前面已经检查/修改到了哪个文件的哪一部分,手动选择其它不带有深度思考能力的模型就不会有这种“因中断而忘记进度”的问题出现
5、在使用AI编程的过程中还是尽量不切换模型比较好,切换模型之后Trae需要一些时间来熟悉整个项目,对之前出现的错误的理解可能也会有问题,而且使用Kimi-K2模型时,无法自动进行构建测试,切换到Qwen-3-Coder模型之后就可以自动进行构建测试了
6、貌似在今天的修改过程中,卡在了“重复任务”这条需求上,然后尝试让Trae去掉这个功能及相关代码,还在不断修复编译错误等问题
DevLog:2025年7月22日
1、继续修改DoitWith,尝试让Trae完成编辑截止日期的功能:
完善添加和编辑截止日期的功能,在创建Todo时默认以当天为截止日期,也可自行选择截止日期,精确到天,长按每一条Todo可编辑截止日期,同样精确到天
2、Trae在修改过程中会反复验证语法是否正确,这一步应该可以提升在Xcode中构建成功的概率,减少因语法错误导致构建失败,Trae已经按上述要求添加了设置和编辑截止日期的功能,Xcode模拟器测试也已成功
3、接下来完善分组相关功能,比如点Todo界面右上角加号可以添加分组(目前已支持),在添加Todo时可以选择分组,默认放到用户创建的第一个分组里,长按每条Todo可编辑所属分组
4、Trae完成了上述需求,但应用存在一个问题,目前在创建Todo时,如果没有分组,应用中会提示请先创建分组,但点击无法创建分组,需要修改成这样:应用内预置“工作”和“生活”两个分组,在创建Todo时默认位于“工作”分组,且可以点击切换到其它分组(包含用户自行创建的分组)
5、同时给Trae提了另一个要求:以后除非我另做要求,都统一用iPhone 16模拟器来构建,但不在模拟器中进行测试,我自己会去Xcode中测试,但Trae貌似没有理会这个要求,也可能理解成了这是仅对上一条需求提的要求
6、发现Trae在构建成功后不会进行下一步,好像会卡在构建这步,即使底部的“终端”中已提示BUILD SUCCEEDED,当然可以选择“跳过”,没有任何影响
7、接下来完善TodayView,需在该界面显示截止日期为当天的Todo,可勾选完成,不需要其它长按菜单,如果没有符合要求的Todo,则该界面显示“今天没有待办事项 享受轻松的一天吧!”多次修改后未能完成,后来回想起之前Cursor在修改Today界面时,在 MainTabView.swift中,Today标签页显示的不是TodayView.swift组件,而是一个静态的“Today”文本,让Trae修改之后已经基本满足需求
8、下一步,让Trae添加Todo的删除和恢复机制,删除后进入回收站,可在设置界面进入回收站并恢复已删除的Todo,结合应用当前的功能写一个README文件
9、在Xcode中测试应用时再次出现了卡在启动界面,不进入Today界面的情况,但在Trae中进行测试时就正常,按指导清理了Xcode和模拟器缓存,但无效,之后暂时先在Trae的模拟器中进行测试
10、用Trae修正了在Today界面和Todo界面创建Todo和分组时,两个界面的数据同步问题,在其中任何一个界面创建Todo和分组时,都会同步显示在另一个界面
11、到现在已经把我在OpenRouter平台充的钱用完了,基本都是这两天在Trae中使用Claude Sonnet 4消耗的,这消耗的也太快了,当然Claude Sonnet 4的API价格比较贵也是原因之一,OpenRouter上的Claude Sonnet 4的价格是百万输入3美元,百万输出15美元,作为对比,DeepSeek-R1 0528的价格是百万输入和输出均为0.272美元
12、切换Trae的模型为Kimi-K2,先让它给应用增加回收站功能,可以集中查看已经删除的Todo条目,并且在右侧设置恢复按钮,可以恢复到这条Todo被删除时所在的分组中,Kimi-K2的表现好像还可以
13、决定让Kimi-K2来检查一下当前应用是否会在启动时卡在启动页,不进入Today界面,在对代码进行多次优化,比如优化数据加载逻辑,改进数据更新机制等等之后,在Xcode模拟器里测试应用仍然会卡在启动界面,但在Trae中测试时就可以正常使用,很奇怪
14、让Trae结合应用现有的功能,创建了一个README.md文件,放在应用文件的根目录里,今天到此结束