DevLog:2026年1月25日

1、截至目前,四款应用问题如下,加粗内容暂未修复:

1.DoitWith

-不包含任何Todo的分组下会显示“该分组暂无待办”,但底下还有半截分隔线,需要和正常的Todo条目下的分隔线格式一致

-设置-关于,DoitWith下面的小字和开屏上的小字是否一致?以设置-关于中的小字为准

-在Todo页面,没有“下一步”的Todo,在标题下显示“仅此一步”

-在已完成Todo页面,有下一步的Todo,在标题下显示“包含下一步”,没有“下一步”的Todo,在标题下显示“仅此一步”

-考虑到后续可能要和Mac版数据打通/同步(通过CloudKit,两个App绑定同一个iCloud Container),趁早将应用的数据持久化方式由Core Data改成SwiftData,和DoitWith for Mac的数据持久化方式保持一致,仅外观设置使用UserDefaults保存

-当天到期的Todo,早上九点推送通知

-添加小组件,小组件上显示当天到期的Todo,信息包括所在分组、标题、下一步

2.DoitWith for Mac

-调整新建分组、添加和编辑Todo窗口的视觉效果,部分图标和文字太小

-设置-关于页面下方增加“近期更新”区域,由Cursor总结近期更新了哪些功能

3.ChatWith

-清除后台后,再打开应用秒闪退,无法使用

-在与支持深度思考的模型对话时,可以看到思考内容区域,但看不到具体的思考内容

-发送消息后立刻显示在对话界面内,现在好像是在AI有响应后才会显示

-虽然可以看到Tavily已经联网获取了一些链接,但AI回答内容好像没有结合Tavily搜索结果

-参考链接引用10条,参考链接区域默认折叠,可展开

4.ChatWith for Mac

-关于页面的“初始版本发布”放到最上边

-优化上传附件和图片后的显示效果,比如取消附件和图标的红叉需要改小一些

2、近期的重点在于对齐移动版和Mac版的现有功能,修复明显问题,首先是DoitWith移动版,将数据持久化方式由Core Data改成SwiftData,步骤包括创建SwiftData模型文件,更新PersistenceController.swift、更新TodoData.swift、更新所有视图文件,删除旧的Core Data文件,修改过程中发现虽然Composer 1模型的修改速度非常快,但修改后出现多个语法错误,未能自动检测出来

3、接下来测试功能,让Cursor修复问题,首先是待办页的空状态提示,“暂无任务”改成“暂无待办”,“添加任务开始使用”改成“添加待办或分组以开始使用”,另外待办页无待办时,这些文字上方会显示一条分割线,需要去掉,出现分割线的原因是,以前在无待办时,List里仍有一个底部占位Section(Spacer高度200),该Section上方会出现分割线,修改之后,仅在有待办或分组时显示底部占位Section

4、然后测试添加、完成、修改、删除、搜索Todo和分组,测试发现问题如下:

1.不包含任何Todo的分组下会显示“该分组暂无待办”,但底下还有半截分隔线,需要和正常的Todo条目下的分隔线格式一致

2.在Todo页面,没有“下一步”的Todo,在标题下显示“仅此一步”

3.在已完成Todo页面,有下一步的Todo,在标题下显示“包含下一步”,没有“下一步”的Todo,在标题下显示“仅此一步”

5、之前遇到过的同一分组内的Todo无法通过拖动调整顺序的问题,这次测试未能复现,可能在修改数据持久化方式之后也给解决了?

6、继续优化ChatWith移动版,主要针对之前测试遇到的问题,包括:

1.在与支持深度思考的模型对话时,现在可以看到思考内容区域,但看不到具体的思考内容,只能看到“思考中…”的提示

2.用户发送消息后,需要立刻显示在对话界面内,现在好像是在AI有响应后才会显示

3.虽然可以看到Tavily已经联网获取了一些链接,但AI回答内容好像没有结合Tavily搜索结果

4.参考链接引用由5条加到10条,并且参考链接区域默认折叠,可展开

7、首轮修改之后,上述问题只有4已经被修复,换用内置的Kimi K2试一下,卡在分析问题的过程中,等了一段时间也没有对代码进行实际的修改,然后切换到Composer 1,修改速度很快,并且解决了“看不到具体的思考内容”、“回答内容未结合Tavily搜索结果”的问题,再次测试,要求进行如下修改:

1.思考内容区域要整合到AI消息区域中,即 最上面是思考区域(如果支持深度思考的话),然后是回答内容、参考链接,并且这三块要对齐

2.用户问题发送之后,对话界面应该立刻跳到新问题的位置,现在好像还需要手动往上划一下才能看到?

8、再次测试,上述问题好像也已经修复,但应用非常卡顿,可能是添加了太多调试信息导致的,后面再去掉,先继续用Composer 1尝试修复“清除后台后,再打开应用秒闪退”的问题,这次修改涉及生命周期管理、错误回复、超时保护、友好错误提示等,再次测试,应用直接无法正常启动了,要求Cursor清理所有的调试信息,并检查语法错误,首次启动速度是快了一点儿,但依然没有解决清除后台后无法启动的问题

9、决定换个思路,在ChatWith for Mac的基础上,适配一个iOS版,先让Curosr评估了下,首先,核心业务逻辑100%兼容,且有部分Flutter依赖已支持iOS,需要适配的部分包括部分原生平台代码、UI布局、几个macOS平台的特定功能(比如拖拽、粘贴、word文档和PDF文档解析),Cursor给出了完全兼容(使用条件编译和抽象层)和最小化适配两个方案,决定采纳方案1,希望这样可以减少后续对单独某个功能在Mac和iOS端的重复修改

10、由于存在代码隔离机制,macos和ios是独立的目录和Xcode项目,另有lib统一管理两个平台共用的代码,在后续测试时需要打开.xcworkspace文件,而非.xcodeproj文件,并且在修改共享的代码时要注意平台兼容性

11、分析的很简单,但实际操作时反复出错,比如因为权限问题不能创建项目文件,因为网络问题不能运行pod install等等,按照Cursor提供的文档手动创建项目后,又提示创建的项目不正确,反复修改了一段时间,仍未能修复

12、使用Cursor中的Codex插件检查该版本iOS应用的构建失败问题,几次修改后可以正常构建,但同样出现了ChatWith移动版存在的“清除后台后再打开应用秒闪退”的问题,结合Device Logs,Codex认为可能是一些依赖导致的崩溃,于是先暂时将其在iOS上禁用,避免启动时注册崩溃,多次修改后依然未能解决,而且基于ChatWith for Mac修改的iOS版应用在界面上还是Mac版的样子,完全没有适配移动设备,可能将使用Flutter开发的桌面版应用改为移动版并没有Cursor说的那么简单

13、用Codex,结合Device Logs检查一下“清除后台后再打开应用秒闪退”和首次打开时启动速度很慢的问题,也进行了多次反馈和调整,甚至还暂时去掉了可能导致崩溃的SwiftFlutterSecureStoragePlugin,即flutter_secure_storage依赖,但还是不管用

14、换个思路,从应用的首次启动速度入手,Codex加上了首屏耗时分析,包括First frame: startup=26145ms build=7611ms raster=11ms total=8631ms,针对这一问题进行多次修改,包括把启动阶段的初始化拆到首帧后执行、把设置读取和服务配置的初始化延后到首帧之后、把原生启动页改成橙色背景+标题和副标题以跳过白屏、去掉启动阶段的首帧调试输出等,首屏耗时变成了flutter: First frame: startup=18011ms build=4065ms raster=5ms total=4074ms

15、然后按照Codex的建议,删除App,运行flutter clean、flutter pub get,再重新构建,解决构建错误等等,首次启动可以正常启动,但启动速度比之前更慢了,而且清除后台后无法启动的问题依然存在,后面还得继续修改

DevLog:2026年1月21日

1、截至目前,三款应用问题如下,加粗内容暂未修复:

1.DoitWith

-设置-已完成 Todo,数据统计不正确

-首次启动应用时无需示例数据

-已完成Todo页面同样以分组形式显示

-已过期的Todo需要在显示上有所差异

2.ChatWith(目标是对齐ChatWith for Mac)

-清除后台后,再打开应用秒闪退,无法使用

-在与支持深度思考的模型对话时,看不到思考内容,我需要增加一个展示思考内容的区域,默认折叠,可以点击展开,并且显示样式要和回答内容有所区别(两轮修改后已有思考内容区域,但看不到具体的思考内容)

-参考链接放到AI回答内容气泡下方,不要合并到AI回答内容的气泡内

-发送消息后立刻显示在对话界面内,现在好像是在AI有响应后才会显示

-不要给所有填写了Tavily Key的模型开启联网搜索功能,由用户自行开启/关闭联网搜索功能

-发送按钮上方设置联网搜索开关,并调整布局,拉高消息框,右侧有竖向排列的联网搜索开关和发送按钮

-设置界面删掉多余的说明文字“管理您的AI模型配置,包括API Key、Base URL、模型名称等”

-针对API Key和Tavily Key添加加密机制,提升安全性

-目前已有默认模型机制,但还不能在对话中切换模型,需要添加切换模型机制,点击对话界面右上角的模型备注信息,弹出切换界面,切换界面列出当前的所有模型,点击可切换,并与新模型对话

-对话界面右上角显示的模型信息太长了,改为只显示备注,不显示模型名称

-对话列表中显示的标题是用户的第一个问题,需要改为用户的最后一个问题

-虽然可以看到Tavily已经联网获取了一些链接,但AI回答内容好像没有结合Tavily搜索结果

3.ChatWith for Mac

-关于页面的“初始版本发布”放到最上边

2、首先让Cursor修正ChatWith移动版的启动即闪退问题,包括在main.dart中添加错误处理,防止初始化失败导致崩溃、添加全局错误处理,捕获未处理的异常、检查并修复数据库初始化可能的错误等步骤,再次测试暂时没有出现闪退问题,后面再继续测试,发现一个新问题,在对话页右上角点加号创建新对话时,会先闪过一个红屏,但也能正常创建新对话

3、Cursor表示问题可能出现在chat_page.dart中,当找不到对话时,之前会抛出Exeption,导致红屏,修改之后会返回一个默认的Conversation对象,显示“新会话”标题,在重新构建之前,发现再次出现了闪退问题,并且是“首次安装、启动后应用可以正常运行,一旦清了后台再打开,就会闪退”,Cursor认为这可能是应用从后台恢复时数据库连接已失效,但静态变量仍保留引用,使用失效连接会抛出异常,Provider初始化时未捕获异常,导致崩溃,于是对数据库层、Provider层进行了修改,并对main.dart添加了全局错误处理,主要是在获取数据库时检查连接有效性,失效则重新初始化

4、再次测试,依然会遇到清除后台后重新打开时闪退的问题,并且在真机测试过程中,控制台的日志也找不到ChatGPT和Cursor都在说的Exeption、Error、Fatal相关的错误,Cursor添加了更详细的调试信息,先看下在模拟器中测试时能否复现这一问题,以及返回怎样的错误信息,但在测试过程中并未看到“应用从后台恢复”及以后的调试信息,并且之后添加了更详细调试信息之后,也没能看到Cursor提及的可能有用的调试信息,在清除后台后重新打开时,没有返回任何调试信息

5、修改过程中反复遇到了因为没有添加缺失的导入,导致构建失败——反馈问题——添加导入的问题, 跟Cursor明确了下,以后在添加或修改代码时,主动检查并添加所有必需的导入,避免等构建失败后再修复

6、多次反馈、反复修改后依然存在清除后台后无法启动的问题,接下来先测试其他功能,暂时搁置对这一问题的修正

7、逐步调整ChatWith的其他功能,首批修改内容如下:

1.在与支持深度思考的模型对话时,看不到思考内容,我需要增加一个展示思考内容的区域,默认折叠,可以点击展开,并且显示样式要和回答内容有所区别

2.参考链接放到AI回答内容气泡下方,不要合并到AI回答内容的气泡内

3.发送消息后立刻显示在对话界面内,现在好像是在AI有响应后才会显示

4.对话界面右上角显示的模型信息太长了,改为只显示备注,不显示模型名称

5.设置界面删掉多余的说明文字“管理您的AI模型配置,包括API Key、Base URL、模型名称等”

8、在切换到Composer 1模型后(Cursor内置的GPT、Gemini、Claude等模型都因为区域受限无法使用,即使我开了梯子),响应速度明显快了很多,进行了调整思考内容展示区域、参考链接移到气泡下方、发送消息后立刻显示、模型信息只显示备注、删除设置界面多余的说明文字等修改,真机测试,上面的需求1未实现,2参考链接气泡和回答内容气泡未对齐,要继续改,3未实现,4、5已实现,另外在对话窗口顶部,对话的标题应该居左显示,再次反馈并修改

9、继续真机测试,思考内容区域只显示“思考中”,不显示具体的思考内容,发送消息后仍然要等一下才会显示在对话界面,参考链接气泡对齐方式已调整,标题已居左,继续修改,这两个问题依然没能解决,暂时搁置

10、继续进行其他修改,本轮需求包括:

1.针对API Key和Tavily Key添加加密机制,提升安全性

2.目前已有默认模型机制,但还不能在对话中切换模型,需要添加切换模型机制,点击对话界面右上角的模型备注信息,弹出切换界面,切换界面列出当前的所有模型,点击可切换,并与新模型对话

11、修改过程中,Cursor引入了encrypt和flutter_secure_storage用于AES加密存储,创建了model_selector_dialog.dart用于选择模型,并将model_display.dart修改为可点击,接下来真机测试(又要运行pod install以同步iOS依赖),模型切换和选择功能已经实现,但Tavily联网搜索功能好像失效了,重新填写Tavily Key(猜测可能是因为加密机制的问题?),依然无法在对话中获取参考链接和最新信息

12、Cursor添加了调试信息,测试发现Tavily Key解密成功,但出现网络错误,错误信息为null,继续添加更详细的调试信息,再次测试,结合调试信息中的错误HandshakeExeption: Connection terminated during handshake,Cursor认为是SSL/TLS握手失败,于是在Info.plist中添加了App Transport Security配置,在ApiClient中配置了SSL证书验证,再次测试,虽然可以联网搜索并获取链接,但搜索到的信息并未整合到回答内容里,反馈之后,Cursor改进了搜索结果的格式,添加了系统信息(明确指导AI要基于搜索结果回答问题),并且改进了消息构建逻辑,测试发现此问题仍然存在,后续再修改

DevLog:2025年12月1日

1、目前ChatWith for Mac的主要问题在于偶发应用卡死问题,之前已经多次修复但一直未能解决,先暂停

2、先把手机端的NoteWith搞一个版本到手机上进行实测,目前的NoteWith还有很多地方需要完善下才能通过TestFlight发布测试版,比如还没有应用图标(需要让ChatGPT给做一套),上次将对话和备忘录改用Core Data存储之后未做实际测试,且还需要引入三方库MarkdownUI和RichTextKit,完善AI问答和备忘录的渲染效果和编辑体验

3、先让ChatGPT给设计图标,这次以蓝色为底色,并且“也需要一些设计感,像上面那套图标那样简洁就可以”,但这次ChatGPT也把“NoteWith”给套到了对话消息的图标里,要求“不要把NoteWith放在对话消息图标里,没有体现出Note的含义”,然后要求ChatGPT基于这张图生成一套用于iOS App的图标文件,可以直接放到项目文件里使用,很快就生成了,图标搞定

3、时隔半个月再打开Cursor,发现它推出了自己的模型Composer 1,据称生成速度相比同类模型快四倍,且目前可以免费使用,决定使用它来为应用引入三方库MarkdownUI和RichTextKit

4、先引入MarkdownUI,指令“我需要为当前的应用引入三方库MarkdownUI,用于AI问答内容的显示效果渲染”,Cursor指出需要先添加Swift Package Manager依赖,再更新代码以使用MarkdownUI渲染AI回答内容,在引入MarkdownUI之后更新了AIChatView,以使用MarkdownUI来渲染AI回答内容,并且相比之前自定义的MarkdownRenderer增加了代码块、行内代码等样式,接下来需要在Xcode中打开项目,MarkdownUI会自动下载并集成,AI问答内容将使用MarkdownUI进行渲染

5、Composer在执行这次修改时速度的确很快,但在修改结束后未能进行构建测试,要求构建之后仍然不行,说是“命令行构建因模拟器配置问题无法完成,但依赖已成功解析,代码语法检查通过,项目配置正确,建议在Xcode中直接构建和运行,Xcode会自动处理模拟器配置”

6、然后打开Xcode,发现模拟器又要更新版本至iOS 26.1,需要下载8.32GB,看来我的确是有阵子没有用Xcode运行iOS应用了,而且貌似在新的系统版本下载完之前无法进行构建测试,只能等了,看今晚能不能把模拟器下载完,明天再构建测试

7、想尝试添加一个自定义的模型,在Cursor的设置中,目前预置的模型包括Composer 1、Grok Code、Kimi K2,并且可以通过填写API Key等信息快速添加OpenAI、Anthropic、Google、Azure、AWS Bedrock的模型,有一点之前没有注意,就是如果要使用其他兼容OpenAI的模型的话,可以开启“OpenAI API Key”,填写Key,并打开Override OpenAI  Base URL修改API地址,然后在上方找到Add Custom Model填写模型名称,我试一下OpenRouter的Claude Sonnet 4,不知道为啥加不上,感觉添加模型不是很方便

8、上周看Trae.ai官方公众号推送了文章说TRAE SOLO已经登陆中国版,并且可以免费使用,今天更新了下Trae,据介绍,SOLO 模式集成包括 IDE 在内的多种工具。你只需表达需求,它就会基于目标主动推进完整开发流程。

-SOLO=The Responsive Coding Agent,可以让你直观了解智能体正在处理的内容——从文件、工具到完整的工作上下文,它会随你的操作和变化即时响应,始终与你的工作流保持同步。

-从清晰的规划开始,与子智能体协作,将复杂问题拆解为更为聚焦的任务。借助完整代码上下文进行迭代、重构与优化,实现高精度的工程化执行。

-自动将长对话整理为结构化的任务流,清晰呈现执行路径。所有改动统一汇总在代码变更视图,配合上下文状态统一展示,方便回溯与协作。

介绍了这么多,也没有看出来它到底和之前、和Cursor有什么不同,后面再实际测试看看吧