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

1、目前在对话界面提交问题后应用还是会卡死,也没有“AI正在思考中”的状态提示,先让Cursor继续拆分ChatView,检查有无功能重复,如果与现有的单独文件有重复就保留单独文件,并且拆分ChatView中的部分功能为单独文件
2、Cursor拆分出了MessagefViews、ChatInputViews、ModelSelectorView、MessageDetailView四个文件,总计约200行,移除了所有重复的组件定义,提取的组件可以在其它地方复用,更易维护,ChatView现在是一个结构良好的主视图文件,进一步的拆分可能会增加不必要的复杂性
3、接下来继续测试功能,好像在和支持深度思考的模型对话时应用会卡死,且不输出回答内容,和不支持深度思考的模型对话时就能正常输出,但我现在不需要展示思考过程,直接给我展示AI的回答内容就行;另外,AI对话界面不能随着流式输出向下滚动;收藏时没有收藏成功的提示;收藏后的内容没有出现在收藏列表里,让Cursor检查下这几个问题
4、在让Cursor解决上述问题的同时,进一步优化MarkdownRenderer,以实现对表格的正确渲染,昨天测试了一个问题发现AI的回答中有表格,没能正确渲染,还是显示了大量的Markdown语法
5、发现在收藏列表页,点击收藏条目时不会打开,无法查看详情,而是会直接复制收藏的条目,看来可能在拆分文件后有部分功能失效了,继续修复
6、Cursor单个对话的Context Usage,难道是每天有限额,第二天自动重置?
7、再优化一些细节:去掉收藏列表长按菜单中的“查看详情”,直接点击就可以查看详情了, 不需要额外的按钮;现在AI回答内容和收藏内容都不能选取文字并复制,需要添加这个功能;还有对话列表向上滑动时底部会出现大片空白,我需要像收藏列表那样向上滑动时到最后一条就停止,不要出现大片空白;收藏夹列表右上角也添加设置图标,点击可打开设置界面
7、多次修改对话列表页底部的大片空白问题,在让Cursor添加调试信息后,发现可能存在重复计数的情况,将DEBUG信息截图发给Cursor并修复后解决了问题,并且还找回了之前不知道什么原因被删除的历史对话,没想到竟有意外收获
8、之后去掉了Cursor为了便于调试给对话列表和收藏列表添加的底色,并且在设置里添加了数据统计功能,可以查看对话数量和收藏数量,然后再优化三个细节:AI对话界面右上角显示的模型名称字体有点小,可以和左上角的“返回”字号保持一致;另外每次打开新对话时都使用默认模型,不用在设置中对模型进行选择了
9、接下来解决查看收藏相关的问题,比如:每次打开应用后,第一次打开一条我想要看的收藏时,弹窗是空白的,再打开另一条就可以正常看到内容;收藏列表貌似不是按收藏时间倒序;新收藏的内容不会立刻出现在收藏列表里;在对话中点击已收藏的内容并“取消收藏”时,不会取消收藏,多次修改后收藏和取消收藏功能均已正常
10、还有一个问题:目前的ChatWith用StoryBoard作为启动页面,NoteWith和DoitWith则是用SplashView作为启动页,这两种形式有啥区别?Cursor表示使用前者的场景有:简单的品牌展示、快速启动需求、不需要复杂动画、团队习惯Interface Builder;使用后者的场景有:需要启动动画、需要初始化逻辑(网络检查、数据加载等)、需要用户交互、需要动态内容、偏好代码管理,于是果断选择切换成SplashView,并且要求了ChatWith用40号加粗白色、副标题用title3、颜色用.white.opacity(0.8),和NoteWith、DoitWith保持一致
11、测试发现虽然可以正常启动,但我不清楚目前用的是SplashView.swift还是LaunchScreen.storyboard,Cursor检查时发现之前的LaunchScreen.storyboard还是没有删干净,除了文件本身外,还涉及了Info.plist、project.pbxproj中这个文件的引用,虽然这些地方都被Cursor修改了,但应用出现了不全屏显示的问题,清理Build Folder、重置模拟器之后,应用依然不能全屏显示,可能还是受到了早期代码的影响?
12、这次Cursor甚至创建了一个单独的全屏管理器FullScreenManager.swift,在多个生命周期点设置全屏,并在ChatWithApp、ContentView、SplashView、Info.plist中采用了多层全屏配置
UIScreen.main.bounds显示的是(0.0, 0.0, 320.0, 480.0),貌似是iPhone4的尺寸,后来还采用了硬编码的iPhone 16尺寸,依然没有解决问题,但我觉得应该没有这么复杂
13、之后把DoitWith的SplashView文件发给Cursor,对比了下有没有影响是否全屏的东西,也让Cursor重点检查下创建比较早的文件,看看有没有影响是否全屏的东西,毕竟这款应用刚由Trae创建时也存在不能全屏的问题,但还是没有解决问题
14、先让Cursor清理了多余的强制全屏的文件和代码,包括刚刚创建的FullScreenManager,之后在Cursor中开启新对话,决定让claude-4-sonnet来检查下为何应用不能全屏,并且要求只解决不能全屏显示的问题,不要修改其它功能,但这个模型在国内无法正常使用,即使架了梯子也不行
15、继续用Auto模式在新对话中检查不能全屏的问题,按照建议修改了下也没能全屏,然后在Trae中切换到Claude-4-Sonnet模型,继续检查不能全屏的问题,虽然没有直接解决问题,但它帮我发现了目前项目文件夹里有两个SplashView.swift,于是询问Cursor哪个是多余的,Cursor建议删除根目录中的SplashView.swift,保留Views文件夹中的同名文件,并修改项目配置,确保正确引用,但即使删除了根目录中的文件,并修改了引用,应用依然不能全屏

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年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月16日

1、了解了下Cursor的订阅,虽然默认的Auto模式已经足以满足我的需求,但马上两周的免费试用期就要结束了,到时看看功能上有什么变化,如果功能严重受限,考虑订阅Cursor Pro,目前可以用支付宝支付
2、Cursor具备Agent、Ask、Manual、Background四种编程方式,可以根据需求选择,模型方面,Auto模式由Cursor根据任务类型和复杂程度自动判断使用哪个模型,也可以关闭Auto模式,指定模型
3、NoteWith和ChatWith由于涉及接入AI大模型,在上架时可能需要先备案,但备案手续复杂且审核时间长,考虑开发一款不需要进行备案的App
4、赶在Cursor的Pro试用过期之前,让Cursor再帮我开发一个新应用,吸取之前的教训,这次在一开始就提出了尽量详细的需求:
1.iOS平台,应用名称为DoitWith,采用SwiftUI开发
2.应用启动界面以墨绿色为底色,启动界面显示应用名DoitWith,下方一行为副标题“Todo and Note, in one App.”
3.应用界面分为Today、Todo、Note共三个tab,可在底部点击切换,三个tab的右上角都有加号和齿轮图标,Todo界面点加号可选择创建新Todo或创建新分组,笔记界面点加号可以创建新笔记,点击齿轮进入设置界面,Today列表、Todo列表和笔记列表的设计要足够简洁且风格一致一些
4.Today界面列出今天到期的Todo项目,可以长按每条Todo进行完成、重命名、修改、删除等操作
5.Todo界面可以自行设置组(默认有工作、生活两个分组,各有一条示例Todo)、可设置提醒时间,任务过期时文字变红并在文字前添加警告emoji,每条Todo都可以通过长按进行完成、重命名、修改、删除等操作,可将Todo在不同分组间拖动
6.笔记界面默认显示笔记列表,点击创建笔记按钮或笔记列表页右上角加号可创建笔记,采用富文本编辑器,支持常用的文字格式设置,选中文字后即可在底部调节格式
7.设置界面可查看Todo和Note的数量
8.采用你推荐的数据存储方式
5、Cursor对我的需求进行细化和明确,给出了技术选型与架构建议:
-UI 框架:SwiftUI(官方推荐,现代、易维护)
-数据存储:推荐使用 Core Data(苹果官方,适合本地结构化数据,支持分组、提醒、富文本等需求)
-富文本编辑:使用 SwiftUI + NSAttributedString,或集成第三方如 TextEditorPlus(如需更强大功能)
-本地通知:用于 Todo 提醒
-MVVM 架构:便于维护和扩展
以及任务拆解:
-项目初始化与启动页开发
-TabView 主界面搭建
-Today、Todo、Note 三个 Tab 的基本结构
-加号与齿轮按钮功能实现
-Todo 分组、拖动、提醒、过期样式
-Note 富文本编辑器集成
-设置界面开发
-数据存储(Core Data)建模与集成
-本地通知集成
-UI 优化与风格统一
6、Cursor让我在 Xcode 里手动新建一个 SwiftUI iOS App(建议命名为“DoitWith”,语言选择 Swift,生命周期选择 SwiftUI App,勾选“Use Core Data”),之后再进行后续操作
7、在Cursor创建应用的过程中,有两次需要我手动创建NSManagedObject Subclass,昨天在修改NoteWith时也出现了这种情况,猜测可能是因为在数据存储方面采用了Core Data
8、在集成富文本编辑器时,Cursor建议我使用RichTextKit的包管理集成,且Cursor无法自行完成这一操作,需要我在Xcode中Add Packages,集成RichTextKit,但我个人不太喜欢这种功能较为复杂的三方库,于是询问Cursor:有没有iOS自带的组件可以实现类似需求?我对这个编辑器的功能要求不是很高
9、Cursor推荐使用UIKit的UITextViews实现基础富文本编辑,然后通过UIViewRepresentable桥接到SwiftUI,这样无需引入第三方库,且兼容性和性能都很好
10、Cursor在创建完成后提示构建成功,但再次出现了昨天NoteWith的问题“可能有重复的NSManagedObject子类文件,或者Xcode项目引用了同一份文件的多份引用”,明天再看怎么解决

DevLog:2025年7月14日

1、今天对NoteWith做一些优化,包括:
1.去掉启动页面的图标,只留应用名和下面的文字就行
2.在模拟器中打开应用时,进入启动页前会有一两秒的白屏,需要去掉,打开应用直接进入启动页
3.在模拟器中运行应用时会有警告,需要修正一下:
/Users/jinlei.wu/Documents/GitHub/NoteWith/NoteWith/ViewModels/AIViewModel.swift:86:21 Capture of ‘self’ with non-sendable type ‘AIViewModel’ in a ‘@Sendable’ closure
2、修正后经Cursor构建和模拟器测试,上述优化均已完成,但还是感觉启动速度有些慢,继续让Cursor优化:感觉应用启动有点慢,虽然现在启动时没有白屏了,但还需要在蓝屏状态下等一两秒才会出现应用明和副标题
3、Cursor检测了当前的启动流程,发现SplashView会显示2秒钟,Cursor对这个问题进行了修正,并通过异步加载数据来减少启动时间,告诉我启动页显示时间由2秒缩短为0.5-1.2秒,并加入了淡入淡出动画,在启动时异步加载数据,主界面准备好后立刻切换,最大程度减少等待,Xcode模拟器测试发现冷启动时仍然会先蓝屏再显示标题和副标题,继续让Cursor优化
4、Cursor指出这是由于当前的启动页SplashView并没有在应用一启动时就立刻渲染,而是先显示了LaunchScreen,然后才切换到SwiftUI的SplashView,Cursor在修改中表示更好的方法是完全移除LaunchScreen配置,让应用直接进入SwiftUI,修改后构建测试成功,Cursor告诉我现在应用冷启动时会立即显示标题和副标题,无蓝屏过渡,直接显示内容,并且会快速进入主界面,数据加载完后立即切换,Xcode测试发现现在启动页面一闪而过,虽然给人一种快速进入应用的感觉,但不利于让用户记住这款应用的名字,决定将启动页面显示时长固定为1秒钟
5、Cursor快速修改,包括:简化启动逻辑,固定显示时间,清理不再使用的代码,但实际测试发现在冷启动时依然会先白屏,然后再显示启动页,不像ChatWith那样可以直接进入启动页,直接问Cursor:现在冷启动时还是会先白屏一下再进入启动页,为啥不能像ChatWith那样启动应用就直接显示启动页呢?
6、Cursor好像理解了我的问题(涉及两个项目之间的对比),并表示需要创建并配置Laucn Screen Storyboard文件,并对PBXFileReference等进行修改
7、Cursor一通操作之后又删除了刚刚创建的LauchScreen.storyboard文件,构建测试成功,再次用Xcode模拟器测试,好像没有任何的变化,应用启动时的表现又回到了今天最初的状态,可能是因为应用在启动时的数据加载要比ChatWith多吗?
8、直接问Cursor这个问题,Cursor表示NoteWith的确需要在启动时加载更多内容,并给出建议,比如将部分数据加载延迟到用户首次访问时,或者进行异步初始化,将数据加载移到后台线程,或者分页加载等等
9、参考Cursor的建议:延迟加载AI会话历史页面,当用户访问该页面时再行加载,以缩短启动时间,Cursor对多个文件进行了修改,将AI对话数据加载从初始化中分离,实现了备忘录数据和AI配置的立即加载,且仅在用户访问AI对话页面时加载AI会话历史,再次进行构建测试,提示成功
10、Xcode测试,好像启动速度的确比之前快了一点点,白屏时间缩短了一些,继续优化:把AI配置也改成延迟加载吧,和AI会话历史一样,仅在用户访问AI对话页面时再行加载。但我忽略了一点,用户在访问AI配置时当然也需要加载配置,但Cursor发现了这个问题,并且进行了同步修改,还是很智能的
11、Cursor总结,现在在启动应用时只加载备忘录数据,访问A对话页面时会加载AI会话历史和AI配置,访问设置页面时加载AI配置,实现了启动性能的提升和按需加载,减少启动时的内存占用,Xcode模拟器测试发现相比上一次修改没有特别明显的变化,后面等真机测试,积累一些数据之后再看看启动性能如何吧
12、用Cursor分别打开NoteWith和ChatWith,并询问同一个问题:你对目前这版应用有什么完善功能、优化性能的建议吗?
13、Cursor对当前版本的NoteWith的功能和性能方面的建议:
基于你目前对NoteWith的启动性能和数据延迟加载优化,整体架构已经非常合理,用户体验也有明显提升。以下是一些进一步完善功能和优化性能的建议,供你参考:
一、功能完善建议
多端同步与云备份
支持 iCloud 或第三方云服务(如 Dropbox、OneDrive)同步备忘录和AI会话,防止数据丢失,方便多设备协作。
搜索与筛选功能
在备忘录和AI会话列表中增加全文搜索、标签筛选、时间排序等功能,提升内容管理效率。
多主题/深色模式自定义
支持更多主题色彩和自定义深浅模式,提升个性化体验。
AI助手能力扩展
增加AI助手的多轮对话记忆、上下文理解、语音输入/输出等功能,提升智能化水平。
数据导入导出
支持导入/导出备忘录和AI会话为常见格式(如txt、markdown、csv),方便迁移和备份。
快捷操作与小组件
支持iOS主屏幕小组件、Siri快捷指令,提升便捷性。
二、性能优化建议
数据分页与懒加载
对于备忘录、AI会话等大数据量列表,采用分页加载或无限滚动,避免一次性加载全部数据。
本地缓存与异步存储
采用本地缓存机制(如 NSCache、Core Data),并将数据存储操作放到后台线程,避免主线程阻塞。
图片与多媒体资源优化
若后续支持图片、音频等多媒体内容,需考虑资源压缩、懒加载和缓存,减少内存占用。
启动流程进一步精简
检查启动流程中是否还有可以异步处理的逻辑,确保主线程尽快渲染首屏。
内存泄漏与资源释放
定期使用 Xcode Instruments 检查内存泄漏,确保大对象及时释放,避免长时间运行后内存膨胀。
三、代码结构与可维护性建议
模块解耦与协议抽象
通过协议(Protocol)和依赖注入解耦各模块,便于单元测试和后续扩展。
单元测试与UI自动化测试
增加关键功能的单元测试和UI自动化测试,提升代码质量和发布稳定性。
错误处理与用户提示
完善网络、存储等异常场景的错误处理,并给予用户友好提示。
如果你有具体想扩展的方向(如AI能力、协作功能、数据安全等),可以进一步细化需求,我可以帮你详细设计实现方案!
14、Cursor对当前版本的ChatWith的功能和性能方面的建议:
非常感谢你的信任!基于你目前的ChatWith应用(多会话AI对话、收藏、会话置顶、API配置、数据本地化、原生SwiftUI等),我有以下功能完善和性能优化建议,供你参考:
一、功能完善建议
消息搜索功能
支持在所有会话或当前会话内全文搜索历史消息,提升信息检索效率。
多模型/多API切换
支持在不同会话中选择不同的模型或API(如GPT-3.5、GPT-4、Claude等),满足多样化需求。
消息多选与批量操作
支持批量收藏、删除、导出消息,提升管理效率。
导出与分享
支持将会话导出为文本、Markdown或PDF,便于归档和分享。
自定义主题/暗色模式
增加主题切换,适配不同用户的视觉偏好。
消息撤回与编辑
支持用户撤回或编辑已发送的消息(本地层面)。
快捷指令/预设Prompt
提供常用Prompt模板,用户可一键插入,提升效率。
多端同步(iCloud/云端)
支持iCloud同步,实现多设备无缝切换。
更丰富的消息类型
支持图片、代码块、表格等富文本消息,提升交互体验。
消息上下文管理
支持设置会话上下文长度、历史消息截断策略,优化大模型调用成本。
二、性能优化建议
异步加载与懒加载
对长会话消息列表采用懒加载,避免一次性渲染全部消息导致卡顿。
本地缓存与数据归档
对历史会话、收藏等数据做分批加载和归档,减少内存占用。
UI渲染优化
使用LazyVStack、@ViewBuilder等SwiftUI高效渲染方式,避免不必要的重绘。
API请求超时与重试机制
增加网络请求的超时、重试和错误恢复机制,提升稳定性。
内存泄漏检测
定期用Instruments等工具检查内存泄漏,优化数据结构和引用关系。
启动速度优化
精简启动流程,异步加载非核心数据,提升冷启动体验。
三、用户体验提升
新手引导与帮助中心
增加首次启动引导页、FAQ或内置帮助,降低上手门槛。
交互动画与反馈
适当增加发送、收藏等操作的动画和提示,提升操作愉悦感。
无障碍适配
适配VoiceOver、动态字体等,提高可访问性。
如需对某一条建议详细展开(如实现思路、代码示例、UI设计等),请随时告诉我!
15、结合Cursor的建议,先对ChatWith进行优化:
结合你的建议,我需要为ChatWith增加如下功能:
1.增加消息搜索功能,搜索栏放在对话列表顶部,可以在所有会话的历史消息中进行搜索,无需保存搜索历史
2.对长会话消息列表采用懒加载,避免一次性渲染全部消息导致卡顿
3.使用SwiftUI高效渲染方式,避免不必要的重绘
4.在收藏消息时增加动画提示,提醒用户“收藏成功,可前往收藏页查看”
5.可长按收藏内容进行取消收藏、复制内容到剪贴板等操作,长按弹出的菜单提示“取消收藏”、“复制收藏”
Cursor对这些需求制定了实现方案,我要求“按你计划的步骤来开发吧,并且每步完成后都使用iPhone 16模拟器构建一下,先不用在模拟器中运行”,Curso开始逐条处理,中间需要多次确认,Cursor很快处理完成并提示构建成功
16、在Xcode模拟器中添加模型测试对话,提示服务器错误:HTTP 404,并且还有两处可以优化:新建对话的顶部不需要“已加载全部消息”的提示,优化一下会话列表的样式,可以改成无边框的卡片式风格,继续让Cursor修改,修改的效果也不是很理想,全部对话列表页的样式太丑了,目前每个卡片的长度是只比标题长一点儿吗?我需要即使标题特别短,卡片边缘也能到达屏幕左右两侧,另外,设置页面的API路径,有没有自动添加/chat/completions?继续让Cursor修改
17、404问题已解决了一部分,目前使用模型时需要在设置中填写不带/chat/completions的API路径,如https://api.deepseek.com/v1/,Cursor解释说实际请求的API路径时“你设置的baseURL+/chat/completions”,设置页面只需填写基础URL,不要带/chat/completions
18、经测试DeepSeek官方的API(API地址是https://api.deepseek.com/v1/)和火山引擎的API(增加了联网搜索能力之后的“应用”,API地址是https://ark.cn-beijing.volces.com/api/v3/bots/)均可正常使用,但OpenRouter的模型仍然会报错404,即使API路径只填写了https://openrouter.ai/api/v1/
19、今天用Cursor修改代码时,在构建测试环节多次出现“看起来没有iPhone 15模拟器,让我使用可用的iPhone 16模拟器来构建”的提示,需要等待iPhone 15模拟器无法进行测试,并多确认一次用iPhone 16模拟器测试(甚至后来还出现了一次用iPhone 14模拟器进行测试),可能是我的Xcode里没有安装iPhone 15的模拟器,但我没有找到从哪里设置Cursor默认的模拟器,且测试过程中还出现了Cursor自动启动模拟器、安装并启动应用的情况
20、这段时间用Cursor一直用的是默认模式,没有手动切换过模型,感觉也基本够用了,可能我的应用功能比较简单吧

DevLog:2025年7月10日

1、今天仍然是让Cursor优化应用,先让Cursor把应用的名字修改一下,改成ChatWith,并且在启动页的ChatWith下面增加一行小字any AI LLM you like.Cursor很快处理完成,检查应用后发现存在一行永远不会执行的死代码,也让Cursor给处理掉了,Xcode模拟器测试也已成功,之后让Cursor把所有的ChatApp(最先跟Trae描述应用需求后自动生成的名字)都改成了ChatWith,包括文件和文件夹的名字
2、其它需求后面再陆续,主要是界面的优化,以及开发者账户的完善,为真机测试做准备
在文字输入框左侧增加加号,点击可选择相册中的图片并发送给AI
发送按钮改成更简洁的向上的箭头
设置页底部增加关于,链接到README
在苹果开发者网站创建Certificate和Provisioning Profile,用于真机测试
3、下载了桌面版GitHub,创建了本地仓库,后续可以把项目搬到GitHub上,一是备份,二可以试试怎样用GitHub管理项目,在网页版GitHub里创建的仓库上传文件不是很方便
4、远期规划
数据存储在iCloud,并通过iCloud在多设备间同步
了解下怎样给应用添加图标
探索下怎样用AI快速开发鸿蒙版应用,先下载了最新的DevEco Studio