DevLog:2026年1月26日

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

1.DoitWith

-在添加Todo和编辑Todo的界面中增加“优先级”选项,包括“高”和“低”两个选项,放在“下一步”和“分组”之间

-在“待办”和“已完成”中间加一个“四象限”,共有四个大卡片,在卡片中罗列符合条件的Todo条目

-当天到期且优先级为高的在右上,当天到期且优先级为低的在右下,非当天到期且优先级为高的在左上,非当天到期且优先级为低的在左下,四个卡片的颜色略有区别,右上为浅红色,右下和左上为浅黄色,左下为浅绿色

-在这四个大卡片中,有“下一步”的Todo位置靠上,没有“下一步”的Todo位置靠下

-卡片上,每条Todo只显示标题和下一步,没有下一步的Todo就只显示标题

-四象限界面的Todo条目显示效果还有待优化,现在有些简单

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

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

2.DoitWith for Mac

-简化优先级设置,只留“低”和“高”两个选项

-在全部Todo和已完成Todo之间增加“四象限”Tab,和手机端的四象限划分逻辑、Todo显示逻辑保持一致,但这个Tab可能不需要像另外两个Tab那样分为三栏,样式上要有区别

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

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

3.ChatWith

-首次启动时启动速度超级慢,大概要20秒左右

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

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

4.ChatWith for Mac

-在AI对话中是否可以调用笔记内容作为参考

-火山引擎的Bot无法显示思考过程,即使其使用的是支持深度思考的DeepSeek

-OpenRouter提供的Claude API无法正常使用,测试返回403错误

-界面上有些文字需要改小一点,比如设置列表中的文字、对话列表和对话详情页上的“对话”、笔记列表和笔记详情页上的“笔记”、搜索页面顶部的“搜索”

-笔记详情页,未打开笔记时会显示“还没有笔记 从AI对话中保存内容到这里”,改成“请选择一个笔记或创建新笔记”,跟对话详情页的空状态提示字体大小一致

-在笔记界面,笔记列表中标题下的小字仅显示纯文本,不要显示富文本符号或Markdown语法标记

-笔记编辑视图的工具栏现在是居中对齐,需要改成靠左对齐

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

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

2、这两天先修改DoitWith和DoitWith for Mac,增加四象限功能板块,先是DoitWith移动版,需求包括:

1.在添加Todo和编辑Todo的界面中增加“优先级”选项,包括“高”和“低”两个选项,放在“下一步”和“分组”之间

2.在“待办”Tab和“已完成”Tab中间加一个“四象限”Tab,该Tab内共有四个大卡片,在卡片中罗列符合条件的Todo条目

3.当天到期且优先级为高的在右上,当天到期且优先级为低的在右下,非当天到期且优先级为高的在左上,非当天到期且优先级为低的在左下,四个卡片的颜色略有区别,右上为浅红色,右下和左上为浅黄色,左下为浅绿色

4.在这四个大卡片中,有“下一步”的Todo位置靠上,没有“下一步”的Todo位置靠下

5.卡片上,每条Todo只显示标题和下一步,没有下一步的Todo就只显示标题

3、针对这5条需求,修改点包括在结构体中添加优先级字段、添加优先级选择器、添加四象限Tab、创建QuadrantView视图以实现四象限布局和逻辑等等,首次构建即成功,但四象限页面的显示效果还需要优化,比如四个卡片可以都用长方形,让四个卡片占满整个界面,现在底部有大片空白,“重要不紧急”、“重要紧急”、“不重要不紧急”、“不重要紧急”放到四个卡片顶部居中,另外,已过期且优先级为高的Todo也显示在“重要紧急”卡片里,已过期且优先级为低的Todo显示在“不重要紧急”卡片里,最后把“重要紧急”改成“重要且紧急”

4、修改后再次构建测试,发现这次四象限占满了整个屏幕,Cursor使用的GeometryReader可能不合适,反馈后,添加了边框和内边距,并且移除了全屏布局,让内容在安全区域内显示,再次测试,效果基本符合预期,但首次遇到了紫色的警告信息,原因在于当可用空间不足时,计算可能为负,需要改用更安全的方式来计算卡片尺寸,包括移除手动尺寸计算、使用自适应布局、添加ScrollView等,调整后四个卡片又变成了正方形,在将卡片的最小高度调整至320之后,基本达成需求

5、DoitWith移动版修改告一段落,接下来继续优化ChatWith for Mac,目前界面上比较明显的问题在于略显粗糙,而且有大量的依赖版本比较旧,也需要更新,昨天在用ChatWith for Mac的源文件开发iOS版之后,今天构建测试Mac版,又需要运行一次pod install,然后成功构建,继续检查并修复问题

6、首先是设置-关于页面,把初始版本发布挪到近期更新的最前边,然后修复该页面的底部溢出问题(内容太多时底部会出现BOTTOM OVERFLOWED BY XX PIXELS的提示),解决方法是用SingleChildScrollView包裹整个内容,窗口较小时可滚动查看,构建测试,问题已修复

7、上传附件和图片后,附件图标/缩略图右上方的红叉现在太大了,需要改小一点,另外附件图标/缩略图的圆角边框也显示不全,针对这一需求,Cursor将红叉图标从16缩小至12,并调整了位置,同时优化了圆角边框显示,上传附件预览区域和消息中的附件显示做了同步调整,构建测试,需求已达成

8、在设置-AI模型管理中添加了火山引擎的Bot,提供商选自定义,高级设置中填写完整URL(包含/chat/completions),测试通过,但对话时收到了“错误:未收到任何响应内容”的提示,Cursor添加了更详细的诊断信息,经过多次修改,并修复构建问题(又出现了反复创建脚本修改、反复运行脚本失败的循环),之后打断,要求直接检查有没有语法错误,修复之后成功构建,已经可以和火山引擎的Bot对话,但看不到思考过程,后面还需要再让Cursor检查并增加

9、然后是在与支持文档/图片的claude 3.7对话时,出现了“错误:访问被拒绝,请检查API Key权限”的提示,在测试模型时出现了403错误(为啥之前好好的,现在又不行了?),Cursor添加了OpenRouter推荐请求头,改进了错误处理,并统一了请求头格式,再次构建测试,依然403,并且提示“this model is not available in your region”,这种像是被墙了的提示,可是这个API我在Chatbox中使用时是完全正常的,多次修改后依然未能解决,而且好像越改越复杂了,之前没有这么复杂时也可以正常使用

10、发现在笔记界面,笔记列表中标题下的小字显示了富文本符号或Markdown语法标记,而不是纯文本,观感上有些不好,Cursor同时在笔记列表视图、搜索视图、回收站视图、回收站设置视图中添加了_stripMarkdownAndRichText函数,用于清理富文本符号和Markdown标记,测试发现已经去掉了Markdown标记,但富文本符号依然存在,再次修改(添加dart:convert导入,用于解析JSON格式的Quill Delta数据,并增强上述函数)之后,需求达成

11、然后改一下笔记编辑视图的工具栏,现在是居中对齐,需要改成靠左对齐,Cursor用Row包装了QuillSimpleToolbar的工具栏,并设置了左对齐,但如果缩小编辑窗口,导致一行无法显示所有的工具按钮时,会出现“RIGHT OVERFLOWED BY XX PIXELS”的提示(溢出了),再次反馈修改,这次又给工具栏包装了一层SingleChildScrollView,并且启动了水平滚动,在保持左对齐、避免溢出的同时,当窗口宽度不足时,工具栏可水平滚动查看所有按钮,需求达成

12、界面上有些文字需要改小一点,现在有些突兀,比如设置列表中的文字、对话列表和对话详情页上的“对话”、笔记列表和笔记详情页上的“笔记”、搜索页面顶部的“搜索”等等, 反馈给Cursor后,发现它将多处20号字改成了16号字,于是再次要求它直接将其它20号字也改成16号字,再把设置详情等界面里超过16号的文字都统一成16号字(除了关于ChatWith界面的ChatWith标题保持在32号不变),这下整体看起来协调多了

13、然后优化笔记详情页的空状态提示,现在未打开笔记时会显示“还没有笔记 从AI对话中保存内容到这里”,改成“请选择一个笔记或创建新笔记”,跟对话详情页的空状态提示字体大小一致

14、经过这一下午对ChatWith for Mac的修改,发现它的细节问题还是挺多的,还是需要在后续使用中陆续发现、修改

15、DevLog已记录100天,明天起仅记录当天修复、调整、新增的功能和重要心得,不记录完整的修改过程

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

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

1.DoitWith

-按住拖动调整排序的功能无法正常使用

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

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

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

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

-考虑到后续可能要和Mac版数据打通/同步,趁早将应用的数据持久化方式由Core Data改成SwiftData

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

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

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

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

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

3.ChatWith for Mac

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

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

4.DoitWith for Mac

-询问并调整数据持久化方式,Core Data改为SwiftData

-增加新Tab:已完成Todo,集中显示已完成的Todo及所属分组,放到现有的待办事项下面,待办事项Tab更名“所有Todo”

-界面优化,以卡片形式呈现每条Todo和Todo分组,并且“全部Todo”和“已完成Todo”界面效果一致

-增加“下一步”功能,和DoitWith移动版采用相同的完成Todo逻辑

-增加图标,使用DoitWith移动版的图标底图

-统一管理版本号,当前版本为v0.1.0

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

-清理可能的残余文件

-结合当前应用的功能刷新一下README.MD

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

2、首先调整DoitWith for Mac的数据持久化方式,使用ChatGPT建议的SwiftData,并且明确不需要“首次打开自动迁移历史数据”的机制,修改过程涉及创建SwiftData模型、更新DataManager、配置ModelContainer、更新所有Views、更新ViewModels、清理旧代码等

3、在构建测试之前先进行了一些清理,比如询问还有哪些数据在使用UserDefaults?还有没有需要清理的AI对话、笔记相关功能的代码?Cursor检测后删除了不再使用的InterfaceSettings.swift、ResizableHSplitView.swift以及DoitWith.xcdatamodeld目录(其中仍有AI对话和笔记相关的实体),并移除了项目文件中的引用,目前仍在使用UserDefaults的仅剩AppearanceManager.swift,来存储外观模式设置

4、接下来构建测试,首次构建失败,先让Cursor检查有没有语法问题,为啥总是会反复出现这种问题呢,我之前已经明确要求了修改后要自动检查是否有语法问题,难道这种要求也只针对当时所在的对话生效,而不是全局生效?在没有反馈Xcode构建错误信息的情况下,让Cursor检查是否有语法问题,修正了Preview代码缺少参数、SwiftData Predicate关系比较问题、以及清理未使用的代码,涉及8个文件

5、再次构建测试,可以正常启动且无构建错误,接下来先进行如下修改:

1.将现有的“待办事项”Tab改名为“所有Todo”,增加新Tab“已完成Todo”,放在“所有Tab”下面

2.已完成Todo里集中显示已完成的Todo及所属分组,和“所有Todo”界面版式一致,分组所在栏宽度固定300,无需新建分组和新建Todo按钮

3.设置-数据管理页面,去掉数据操作和导出数据、导入数据按钮

4.设置-关于页面,去掉“待办事项管理工具”和“一个专注于待办事项管理的应用”,在DoitWith下增加一行“Manage things with next steps”

6、针对上述需求,Cursor创建了CompletedTodoListView、CompletedTodoGroupListView、CompletedTodoItemsListView三个视图文件,组合成“已完成Todo”页面,并且更新了项目文件,构建成功,需求达成

7、继续修改,接下来是界面显示效果的优化,以卡片形式呈现分组和每条Todo,卡片可以有细边框和阴影效果,并且在“所有Todo”和“已完成Todo”两个界面使用同样的卡片效果,针对这一需求,Cursor创建了CardStyle.swift,提供统一的卡片样式ViewModifier,并具备细边框、阴影效果、圆角,以及选中状态高亮等特性,两个界面样式一致,构建测试后感觉基本达成需求,不像之前那样简陋了

8、优化一下最左侧栏和设置列表的显示效果,现在有点简陋,而且现在文字太小了,稍微改大一点,把“所有Todo”改成“全部Todo”,构建测试发现效果加的有点过了,而且还有很多界面上的细节需要调整,一并要求Cursor:

1.去掉界面右上角DoitWith下面的小字,缩小一下DoitWith的字号

2.最左侧栏的“全部Todo”、“已完成Todo”、“设置”,减小选中时的色块高度,稍微缩小下字号

3.最左侧栏宽度调整为200,去掉分隔线

4.搜索图标和文字,与调整后的导航列表另外三项的图标和文字大小一致

5.加大搜索弹窗,现在太小了

6.设置列表不再使用灰色作为底色,与其他页面的列表页底色一致

9、本轮修改去掉了界面右上角的DoitWith,将导航列表的宽度、字体大小、字重、间距统一,搜索弹窗尺寸由400*300加大至600*500,设置列表移除了灰色背景,再次构建测试,顺眼一些了,但设置列表仍然使用了灰色作为底色,检查一下还有哪里限定了这个界面的底色,再次修改后需求达成

10、接下来是添加图标,和统一版本号,在让Cursor检查并统一版本号(统一从Bundle中读取版本号,而不是硬编码)的同时,让ChatGPT基于DoitWith移动版图标的底图制作了DoitWith for Mac的图标包,参考以往的方法把图标包(含Contents.json文件)复制到对应路径后,出现了“The app icon set “AppIcon” has 10 unassigned children.”的错误提示,经Cursor检查这是因为缺少了“idiom”:“mac”字段,而它是macOS AppIcon配置的必需字段,将该字段添加到所有图标条目后问题解决,图标也已OK

11、发现两处可能是前面修改时的遗留问题,比如Assets.xcassets中有一个LaunchScreenBackground.colorset文件夹,另外还有一个NoteWith文件夹,里面包含了一些文件夹和文件,不知道是否有用,Cursor检查后认为,这两个文件夹都已无用,前者是iOS App的启动界面背景(移动版转为Mac版的残余),后者是改名DoitWith之前项目的残留文件,统一删除

12、接下来是给Todo添加“下一步”功能,具体需求包括:

1.在添加和修改Todo时,可以给Todo增加多个“下一步”,默认显示三行“下一步”,用户可以自行增加更多“下一步”

2.如果一条Todo未添加“下一步”,点击完成按钮时就直接完成整条Todo,如果添加了“下一步”,点击完成按钮时就完成下一步,所有下一步均完成后,才会完成整条Todo

3.加高每条Todo的卡片,除了现有的内容外,在标题下增加一行“下一步:下一步的具体内容”,如果没有下一步,这行就显示“仅此一步”

14、本次修改涉及文件较多,首先创建了NextStep模型,并修改了添加Todo界面、编辑Todo界面、Todo卡片显示、完成逻辑,同时更新了搜索窗口、回收站视图等位置,共修改了14个文件,自行检查语法错误并修正后,构建成功

15、然后构建DoitWith for Mac,测试增、删、改、查的全流程,对该功能进行微调,同时调整下搜索弹窗

1.包含下一步的Todo,在完成后,卡片上的标题和截止日期之间需要显示“包含下一步”,这样可以保证已完成的Todo卡片高度一致

2.搜索界面右下角需要增加“完成”按钮,点击可关闭搜索弹窗

3.搜索界面中的条目无需显示创建时间

16、上述修改涉及TodoItemsListView.swift和SearchWindowView.swift两个视图文件,构建测试,需求已达成,接下来开始陆续优化界面效果,首先是新建分组的弹窗,最上面的“新建分组”标题和右侧的“取消”、“添加”按钮太靠上了,显得界面很拥挤,可以看一下新建待办事项的弹窗顶部的效果是怎样实现的

17、结合文字描述和截图,Cursor经过多次修改,包括给新建分组弹窗的顶部设置了明确的间距,拉大弹窗尺寸等,但这个弹窗的标题和右侧按钮的显示总是不正常,明确要求对比这两个文件(右键——Add File to Cursor Chat)后,得知AddTodoView使用了ScrollView包裹内容区域,内容从顶部开始,而AddTodoGroupView使用的是Vstack,内容较少时会在垂直方向居中,修改方法是给AddTodoGroupView的内容区域添加ScrollView,与AddTodoView一致,再次测试,需求达成

18、今天的最后一个修改:结合当前应用的功能刷新一下README.MD,并且删掉PROJECT_STRUCTURE.MD文件

DevLog:2026年1月22日

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

1.DoitWith

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

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

-已完成Todo页面同样以分组形式显示,需要能看到Todo原本所属的分组

-已过期的Todo需要在显示上有所差异,比如标题用红字

-设置-关于卡片最下方增加版本号信息,先用v0.1.0,居中显示

-按住拖动调整排序的功能无法正常使用

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

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

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

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

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

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

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

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

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

-参考链接区域版式优化,目前的链接间距太近,想点开某条时容易点错

-点击对话界面右上角弹出选择模型界面,每个模型的信息分成四行,备注、模型名称、是否支持联网,是否支持深度思考

-长按消息(包括用户消息和AI消息)可弹出菜单,菜单中包含复制、收藏、删除 三个按钮,其中在AI消息上长按点删除时要同步删除思考过程、回答内容和参考链接

-消息(包括用户消息和AI消息)的时间显示有问题,现在只显示时:分,看不到是哪天,当天的消息可以只显示时:分,最近的消息显示昨天、前天、几天前,较早的消息显示完整日期+时:分

3.ChatWith for Mac

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

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

4.DoitWith for Mac

-询问并调整数据持久化方式

-界面优化,以卡片形式呈现每条Todo

-增加“下一步”功能,和DoitWith移动版采用相同的完成Todo逻辑

2、继续优化ChatWith,之前遗留的几个问题暂时搁置,本轮修改主要针对以下几点:

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

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

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

4.参考链接区域版式优化,目前的链接间距太近,想点开某条时容易点错

5.点击对话界面右上角弹出选择模型界面,每个模型的信息分成四行,备注、模型名称、是否支持联网,是否支持深度思考

3、Composer 1模型的修改速度一流,涉及了五个文件,连接真机测试,1已实现,2消息框的高度没有变,可输入区域还是只有一行,右侧已有联网搜索开关,3对话列表里的标题已可显示用户的最后一个问题,但点开对话之后顶部的标题还是第一个问题,需要统一成最后一个问题,4参考链接之间的间距可以适当缩小一些,5已实现,另外在设置-模型管理界面,每个模型的信息也和刚刚修改的选择模型界面一样分为四行:备注、模型名称、是否支持联网、是否支持深度思考,继续让Cursor修改

4、本次修改Cursor针对消息框设置了最多5行的显示高度,设置了最大高度为120,对话列表和对话页面标题保持一致,将参考链接间距由上次修改的12改为8,并且调整了模型管理页面,与模型选择界面保持一致,真机测试,其他问题都已解决,但输入框仍然只显示为一行,另外再调整下添加模型和编辑模型页面,现有的五个字段都必填,并且把“备注”挪到最前边,提示“起个简单好记的名字吧”

5、针对添加模型和编辑模型页面,Cursor在调整字段顺序的同时,给备注、API Key、Tavily Key字段添加了必填验证,不过Tavily Key字段其实不用必填,再次改了下,针对输入框的高度,截了一张ChatWith for Mac的输入框的图,并让Cursor参考调整了输入框的高度,但测试发现依然未能实现想要的效果,决定将联网搜索按钮从目前的位置挪出来,浮在输入框的上方,居左显示,带有提示文字,另外,在添加模型和编辑模型界面,备注字段的输入框高度和其他几个字段高度保持一致

6、再次真机测试,需求已实现,继续优化,除上述未解决的问题之外,在对话界面还要增加如下功能:

1.长按消息(包括用户消息和AI消息)可弹出菜单,菜单中包含复制、收藏、删除 三个按钮,其中在AI消息上长按点删除时要同步删除思考过程、回答内容和参考链接

2.消息(包括用户消息和AI消息)的时间显示有问题,现在只显示时:分,看不到是哪天,当天的消息可以只显示时:分,最近的消息显示昨天、前天、几天前,较早的消息显示完整日期+时:分

7、测试发现上述需求已实现,发现回收站还有一个问题,目前设置-回收站-收藏内容里会显示我删除的每一条对话内容,这里应该只显示我删除的收藏内容,经过一次修改后我才注意到,每条收藏只有复制、取消收藏两个选项,点取消收藏后,这条内容就会从收藏列表消失,不会进入回收站,需要将“取消收藏”改成“删除”,点击即进入回收站-收藏内容里,并且可恢复到收藏列表、可永久删除,这样才合理,在修改过程中,Cursor出现了反复使用同样的命令行的循环,打断之后虽然出现了构建错误,但再次反馈问题并重新生成代码、运行pod install之后,应用可正常构建,并且删除收藏/恢复收藏的需求也已达成

8、发现真机测试的效率真的比模拟器测试要高很多,而且更符合真实的使用场景,毕竟在Mac上用鼠标操作iOS应用还是不太符合使用手机的习惯,而且模拟器和手机的性能表现也很不一样,在模拟器上有些卡顿的功能,在真机上使用却会很流畅

9、然后将ChatWith for Mac的模型服务商列表截图给Cursor,让它给添加模型和编辑模型界面增加常用的提供商,实现自动填充Base URL的功能,同时保留自定义选项,可以手动输入Base URL,修改之后替换了下百度云千帆的链接,此需求已达成

10、然后是设置-数据统计页只需要保留AI对话和收藏内容两个卡片就行,不要再套一层卡片(外层Card包装),另外设置页底部增加一个“关于ChatWith”卡片,大字显示应用名“ChatWith”,第二行小字“Any AI LLM you like.”,第三行是版本号“v0.1.0”,这三行信息都居中显示

11、至此ChatWith的修改暂告一段落,继续修改DoitWith,需求包括:

1.首次启动应用时无需生成示例数据

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

3.已完成Todo页面同样以分组形式显示,需要能看到Todo原本所属的分组

4.已过期的Todo需要在显示上有所差异,比如标题用红字

5.设置-关于卡片最下方增加版本号信息,先用v0.1.0,居中显示

12、也用Composer1模型进行修改,修改点包括修改TodoData.swift以移除自动创建示例数据的逻辑,修改SettingView.swift中的统计逻辑,修改CompletedTodosView.swift以按分组显示已完成的Todo,修改TodoRowView.swift和GroupTodoRowView.swift以添加过期检查逻辑,修改SettingView的关于部分,之后开始真机测试,上述需求的2、3、4、5均已实现,1可能需要在另一台手机上测试

13、然后检查一下目前应用都在哪些地方规定了版本号,可否只在一处填写版本号,在其他地方调用该处的版本号信息?针对这一需求,Cursor创建了AppConfig.swift文件来集中管理应用配置信息,规定了版本号优先从Bundle读取(Xcode项目中的MARKETING_VERSION),如果无法读取则使用默认值“v0.1.0”,同时提供了构建版本号的读取方法,然后将刚刚增加的设置-关于板块的硬编码版本号改为从项目配置中读取,这样就实现了版本号只在一个地方定义,并自动同步到使用版本号的地方

14、不止一个地方提到了“版本号”和“构建版本号”两个概念,询问了下ChatGPT,简单说就是版本号Version是给用户看的,构建版本号Build是给系统/开发者/审核看的;版本号表示产品层面的版本,如果用三位数(比如1.0.1)的话,三位数分别代表主版本号、次版本号、修订号,分别对应大版本、功能更新、Bug修复,构建版本号表示技术层面的“第几次打包”,每打一次包,就应该不一样,同一个版本号,对应的构建号必须递增,且不能重复;举例说,日常开发版本号可能是1.0.0+1,有功能更新时版本号可能是1.1.0+10,大版本发布时版本号可能是2.0.0+1,后续可以按照这种方式来管理版本,更加规范一些

15、针对DoitWith for Mac的数据持久化方式,首先让Cursor检查了下,受到以前有AI对话和笔记板块的影响,目前实际使用的是UserDefaults+JSON编码(TodoItem和TodoGroup通过JSON序列化存储在UserDefaults,每次修改都会序列化整个数组并保存),CoreDataManager已经初始化但实际未使用,而且数据模型中还保留着已经删除功能的实体(AIMessage、AISession、AIModel、Note);目前存在的问题有些多,比如Core Data已经初始化但未使用,造成资源浪费,数据模型包含已删除功能的实体,需要清理,UserDefaults不适合存储大量结构化数据,性能较差,每次保存都要序列化整个数组,数据量大时会有性能问题

16、针对上述问题,Cursor建议了三个方案,一是完全移除Core Data以简化架构,减少资源占用,降低维护成本;二是迁移到Core Data,性能好,支持大量数据,支持复杂查询/排序/过滤;三是使用SwiftData,具备更现代的API,与SwiftUI集成更好,代码更简洁,可自动处理数据同步,ChatGPT强烈推荐使用SwiftData(苹果在WWDC23推出的Core Data现代化封装,语法极简,学习成本低),认为它能最大化开发效率,同时不牺牲未来扩展性,让待办类工具使用Core Data有些“杀鸡用牛刀”,决定采纳ChatGPT的建议,使用SwiftData

17、Cursor认为TodoItem、TodoGroup这种业务数据可以使用SwiftData,界面设置和外观设置等配置数据可以继续使用UserDefaults,明天按照Cursor的建议修改下DoitWith的数据持久化方式,后续DoitWith移动版也考虑将Core Data换成SwiftData,ChatWith和ChatWith for Mac已经使用Flutter重制,不涉及Core Data或SwiftData

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:2026年1月20日

1、继续测试昨天对DoitWith的完成Todo逻辑的修改效果,目前已经实现如果一个Todo中有多个下一步,点击完成按钮会先完成下一步,如果一个Todo中没有下一步,点击完成按钮会完成整个Todo的功能,但仍有两个问题,在编辑有“下一步”的Todo后,这条Todo会被分类到General中,而不是保持在原本的分组,另外已完成的Todo就不要再显示在首页的Todo列表里了,只显示在“已完成”页面就行

2、Cursor在修改过程中调整了编辑时的分组逻辑,如果在编辑时选择了分组,且与当前分组不同,才更新分组,如果在编辑时没有选择分组,且原来有分组,那就移动到General,如果原来就是General,那就保持在General,针对第二个问题,添加了过滤条件,已完成的Todo只会显示在“已完成”页面,即CompletedTodosView

3、再次构建测试,发现点击完成一条Todo后,已完成页面仍然是空的,看不到我刚刚完成的Todo,继续修复,Cursor表示修复后会直接从CoreData查询所有已完成的Todo(包括Genral和分组中的),并且按创建日期降序排列,在已完成视图出现时自动刷新,显示最新的已完成Todo

4、再次构建测试,发现在添加Todo——点击完成Todo或完成下一步时,会有一条之前已经完成的Todo变回未完成状态,出现在Todo列表里,即已完成的Todo被重置了,反馈给Cursor修改,Cursor认为这是因为重新排序时没有排除已完成的Todo,导致已完成的Todo的order被错误地重新赋值,可能会影响已完成的Todo的状态

5、再次测试,以上问题已解决,接下来对界面布局进行一些调整:

1.搜索栏挪到顶部,“添加”按钮放在搜索栏右侧

2.待办、已完成、设置 三个按钮放在底部,点击可切换至对应界面

3.设置界面底部增加“关于DoitWith”板块,展示应用名DoitWith和副标题(Manage things with next steps)

6、修改过程中,Cursor创建了MainView(底部导航栏),使用TabView管理三个页面,并修改了TodoView(搜索栏和添加按钮)、CompletedTodosView(改为Tab页面)、SettingsView(添加关于板块),更新了ContentView(将TodoView替换为MainView,使用新的底部导航结构),由于项目使用了PBXFileSystemSynchronizedRootGroup,Xcode会自动检测并包含DoitWith文件夹中的新文件,所以刚刚创建的MainView就不需要手动更新到项目中了

7、构建测试,已实现上述界面调整需求,但在待办界面,搜索栏和顶部的“待办”、下方的快速导航栏之间的间距有些大,需要稍微改小一些,Cursor同步调整了搜索栏与导航栏之间、搜索栏与快速导航栏、快速导航栏与第一个分组之间的间距,再次构建测试,界面比之前稍微紧凑了一些,基本达成需求

8、接下来给DoitWith添加图标,使用ChatGPT创建图标包,指令是“我有一个待办类iOS应用,叫DoitWith,我需要给它加上图标,你先帮我创建一张1024*1024的底图,格式要符合iOS应用对图标文件的要求,颜色和DoitWith的启动页面颜色保持一致(red: 27/255, green: 94/255, blue: 32/255),需要稍微有一点创意,同时保持简洁”

9、ChatGPT给了我两张图,但都不是很满意,元素和色彩都稍微有点多,并且还出现了“图标套图标”的问题,虽然主体基本可用,但还有一个明显的“内层圆角块/底座”的感觉,在裁切成图标文件后就会像是套了一层,为了让图标更简洁,多次跟ChatGPT对话,去掉了内层圆角容器的感觉,并且微调了色彩,生成了图标包,放到Assets.xcassets文件夹里之后,应用图标搞定

10、ChatGPT还提示我可以在真机上测试时注意看桌面、Spotlight搜索结果、设置App列表这三个位置里的图标是否干净、清晰、锐利,如果都OK,那就可以长期使用

11、我发现目前应用在一些界面上还存在英文提示,比如搜索页未搜索到结果时的提示、Todo的日期信息(月份)、点击完成Todo时的弹窗提示等,需要改成对应的汉字,让Cursor排查下还有没有其它地方要改,但启动页、设置-关于页中的英文不要改,Cursor修改了TodoView中的提示文本、弹窗按钮文本、日期格式化、导航标题(我又让改回去了),以及General分组的名称,另外添加Todo和编辑Todo界面里的日期选择器还是英文的,反馈后Cursor给这两处增加了locale环境变量,这样DatePicker就会使用中文界面,构建测试,需求达成

12、接下来暂时不增加新功能,昨天询问了如何在真机上测试iOS App,Cursor指出这种方式只要有Xcode+Apple ID就可以,不需要通过TestFlight,也不需要上架,步骤包括用数据线把iPhone连到Mac、在Xcode中打开项目、设置签名、选择真机为运行设备、点击RUN等,并且我有已付费的开发者账号,通过这种形式进行测试时不会有7天过期的限制

13、按照ChatGPT的提示连接自己的手机进行测试,发现ChatGPT少写了一步,在选择真机为运行设备前,需要在手机的设置中打开开发者模式

14、想用同样的方法把之前使用Flutter重构的ChatWith移动版安装到手机上,但我发现目前的ChatWith移动版在模拟器中安装后,面上显示的是Flutter的图标,名字叫Chatwith Flutter,于是让Cursor修改了应用的名字(将Info.plist中的CFBundleDisplayName由Chatwith Flutter改为ChatWith),并且用ChatGPT制作了图标包(18张,包含Contents.json),替换了原来的Flutter图标

15、然后连接手机并且在手机上运行ChatWith,首次启动时竟然出现了“允许ChatWith查找本地网络中的设备?”的提示,为啥功能这么简单的应用居然会有这种权限要求呢?

16、到目前为止,已经把ChatWith for Mac(使用Flutter重构)安装到了电脑上,并且把ChatWith(使用Flutter重构)和DoitWith(使用SwiftUI原生开发)移动端安装到了电脑上,接下来在日常使用中测试一段时间,并修复使用中发现的问题

17、同步开发DoitWith for Mac,在之前的NoteWith for Mac基础上修改,之前已经有了对话、笔记、Todo三个板块,功能比较杂乱,也不太符合实际的使用需求,让Cursor简化当前应用的功能,去掉对话和笔记功能,并且将应用名称和所有的NoteWith都改成DoitWith,这个应用今后也尽量只用SwiftUI原生开发

18、Cursor陆续进行了这些操作:删除AI对话和笔记相关的文件,更新ContentView、SearchWindowView、RecycleBinView、DataManager等文件以移除AI和笔记功能,将所有文件中的NoteWith重命名为DoitWith,重命名项目文件夹和配置文件,更新项目配置文件等等,几分钟时间完成

19、构建测试,需要重新在Xcode中打开项目文件,并且让Cursor修正了CoreDataManager.swift路径配置错误、应用已删除的文件等多个问题,主要是清除已经删掉的AI对话、笔记相关功能代码,终于可以顺利构建

20、首先调整了最左侧栏、待办分组栏的宽度设置,最左侧栏固定为200,待办分组栏固定为300,并且禁止用户拖动调整宽度,然后我发现在Xcode中,当前项目好像仍在引用MarkdownUI,但涉及这个依赖的AI对话、笔记功能已经都删掉了,让Cursor从项目文件中移除对MarkdownUI的引用,重新构建、功能正常

21、明天开始,在使用并记录ChatWith for Mac、ChatWith、DoitWith的问题的同时,持续优化DoitWith for Mac,包括修改数据存储方式、增加下一步功能、调整界面、增加图标等等,之前使用SwiftUI开发的NoteWith移动版暂时搁置

DevLog:2026年1月19日

1、上周参考ChatGPT的建议,给DoitWith增加了“下一步”功能,用于记录工作流程,同时调整了部分操作方式和界面细节,构建测试,发现问题如下:

1.应用内的示例Todo无法修改内容,标题、下一步、日期、重复在修改之后保存,均未生效

2.修改新建的Todo时也无法生效

3.删除示例Todo后,第一次删除会被归类到General,第二次删除后仍然在General里,同时回收站中也有同样的条目,应该是在删除之后直接进入回收站,不应继续存在于Todo列表中

2、Cursor在修改过程中指出问题1和2是由于EditTodoView只更新内存数组,未更新CoreData导致的,问题3是因为分组信息未能正确获取,并且删除后要调用loadFromCoreData()重新加载,确保列表更新,再次测试,已经可以正常保存修改,但删除后仍然会被归类到General分组,继续反馈给Cursor修改

3、Cursor认为这是因为删除时创建的todoCopy被当做正常Todo出现在列表中,在删除Todo时,需要从CoreData中删除原始TodoEntity,并创建DeletedTodoEntity,保存到回收站,修改后再次测试删除功能也已正常

4、然后和Cursor明确“完成Todo”的逻辑,如果一条Todo未添加下一步,点击完成按钮时就直接完成整条Todo,如果添加了下一步,点击完成按钮时就完成下一步,所有下一步均完成后,才会完成整条Todo,另外,在添加和修改Todo时,下一步的输入框里不要提示下一步1、下一步2,只显示“下一步”就好

5、突然想起来上周发起的4个Archive任务,打开看了下4条都已经通过了Notary,目前的状态都是Ready to distribute,第4条没有任何的问题,全部绿色,前3条都有黄色的提示信息“Unable to find API request response with task ID for GET submissions”,询问ChatGPT得知,这是Xcode(Organizer/Notary UI)在向Apple Notary服务拉取公证日志(log)时失败了,常见的原因包括Apple服务端短暂异常/延迟、网络或代理导致请求被拦截、或Xcode UI的偶发BUG(任务其实已经在处理/已完成,但UI拉日志失败),怀疑可能是因为公司网络质量差导致的

6、接下来尝试用命令行形式将.app制作成.dmg,包括安装create-dmg——进入.app所在目录——生成DMG——公证DMG——Staple等步骤:

1.安装create-dmg:

brew install create-dmg

2.进入.app所在目录(在Archieve中导出时选择导出到桌面,不要cd进.app里面):

cd ~/Desktop

3.生成DMG:

create-dmg \

  –volname “chatwith” \

  –window-size 800 400 \

  –icon-size 120 \

  –icon “chatwith.app” 200 190 \

  –app-drop-link 600 185 \

  “chatwith.dmg” \

  “chatwith.app”

4.公证DMG:

xcrun notarytool submit chatwith.dmg \

  –apple-id wujinlei51@gmail.com \

  –team-id 6UY94UFR36 \

  –password xzfg-rgmk-niks-ehtt \

  –wait

5.Staple:

xcrun stapler staple chatwith.dmg

最后一步收到The staple and validate action worked!的提示之后,就说明公证票据已经成功“钉”进chatwith.dmg,即使离线,Gatekeeper也能验证,到此完成,今晚换另一台电脑安装测试

7、继续前边对DoitWith的修改,主要是明确完成Todo的逻辑,并调整下一步输入框的提示文字,针对完成Todo的逻辑,需要修改CoreData模型、修改Todo结构体、修改完成Todo的逻辑,并修改TodoRowView和GroupTodoRowView显示下一步完成状态,Cursor在进行这些修改的同时,增加了一个针对编辑Todo的功能:在EditTodoView中,当修改nextSteps时,会自动过滤掉超出范围的已完成索引,明天测试一下这个功能具体是指什么

DevLog:2026年1月16日

1、参考昨天ChatGPT的建议,结合我的日常使用需求,将DoitWith调整成一款用于记录工作流程的工具,并且还有一些界面上的调整需求,包括:

1.每一条待办都可以添加多个“下一步”,创建和修改待办时都可以添加,默认显示两个“下一步”,也可以点击按钮添加更多“下一步”,去掉现有的“描述”字段

2.在首页列表里,待办的标题下方显示“下一步:下一步的具体内容”

3.主界面右上角,在目前已有的“设置”、“新建”两个按钮的右边,增加“已完成”按钮,点击可以在弹出的页面中查看已完成的待办

4.两条待办之间的间距缩小一点,紧凑一些,现在一屏只能容纳4条待办

5.目前当需要编辑或删除待办时,需要长按条目触发菜单,修改一下操作方式,改成向左滑动,在待办条目右侧显示编辑、删除按钮

2、另外结合过往的经历,iOS应用应该都会遇到数据永久化方式的问题,ChatGPT建议,如果只做轻量待办,UserDefaults够用,若想做出更多功能,比如搜索、统计、节奏、多端同步(iCloud)、复杂重复,CoreData会更合适,而且能成为“可持续迭代”的底座

3、长痛不如短痛,先让Cursor评估一下当前版本哪些数据适合用CoreData,哪些数据适合继续用UserDefaults,Cursor创建了详尽的存储方案评估.md文件,建议将Todo数据(数量会增长,需要复查查询,与分组有关联关系)、TodoGroup数据(与Todo存在一对多关系,CoreData管理关系更稳妥)、DeletedTodo数据(回收站数据可能累计,可通过CoreData做定时清理)迁移到CoreData,至于appColorScheme可以继续使用UserDefaults(配置简单、集成方便)

4、先按照Cursor的建议将Todo数据、TodoGroup数据、DeletedTodo数据迁移到CoreData,具体步骤包括创建CoreData模型文件(.xcdatamodeld)定义实体和关系、创建CoreData Stack、重写TodoData类,实现数据迁移逻辑、更新项目文件(添加CoreData模型文件引用)、更新DoitWithApp.swift,初始化CoreData等

5、完成一轮修改后,发现又忘了要求Cursor不要给应用添加“首次启动时自动从UserDefaults迁移到CoreData”的功能,因为当前版本还没有对外发布,另外在创建多个新文件后,项目文件好像还没有更新,再次反馈检查并去掉迁移逻辑(移除了migrateFromUserDefaultsIfNeeded()方法),至于项目文件,Cursor认为理论上不需要手动更新project.pbxproj,因为项目使用了PBXFileSystemSynchronizedRootGroup,Xcode会自动同步DoitWith文件夹中的文件

6、在Xcode中构建测试,TodoData.swift出现了三处警告一处错误,修正后可以正常构建,功能也基本正常

7、回到今天最初的需求,让Cursor调整应用的功能,调整部分界面和交互方式,本次修改涉及更新CoreData模型、更新Todo结构体、修改AddTodoView和EditTodoView、修改TodoRowView、修改部分界面等,修改小问题后可正常构建,但会卡在启动页面,提供调试信息后Cursor指出这是因为代码还在尝试访问已从CoreData模型中移除的descriptionText属性,导致运行时异常,在移除对descriptionText的访问的同时,添加了“如果nextSteps无法解码或为空,直接初始化为空数组”的规则,下周再测试

8、ChatGPT提出的另一个建议“为macOS/iOS原生体验而生(利用Spotlight、菜单栏快速完成、Live Activity/Widget驱动行动、支持快捷指令等macOS/iOS原生能力)”也可以考虑,既然目前应用使用的是Swift语言,那就把iOS原生的功能,以及界面设计语言充分利用起来,这是下一步的开发重点

9、再记录一个ChatWith for Mac需要优化的细节:

1.关于页面的 初始版本发布 放到最上边

DevLog:2026年1月15日

1、昨天的遗留问题包括:通过command+N在AI对话和备忘录界面新建对话、新建备忘录,和通过拖拽上传图片/文档,再次测试已支持通过拖拽上传图片/文档,但控制台里依然返回了“图片文件不存在”的调试信息,Cursor优化了错误处理,将“图片文件不存在”的提示改为仅在调试模式下打印,并添加说明,再次构建,功能依然正常,调试信息依然是“图片文件不存在”,先不管了,后面会统一去掉所有的调试信息

2、然后是在AI对话界面用command+N新建对话,在笔记界面用command+N新建笔记这两个功能,目前还不是很稳定,比如在AI对话界面,光标停留在AI对话列表页、详情页、输入框等位置时,有时可以用快捷键新建对话,有时不能,而在笔记界面,只有点开一条笔记的编辑模式后,才能通过command+N新建笔记,我的需求是,只要打开了AI对话界面,不管是未选中任何对话,还是打开了一条对话,或者光标停留在输入框,都可以通过command+N新建对话,只要打开了笔记界面,不管是未选中任何笔记,还是打开了一条笔记,或者切换到了编辑模式,都可以通过command+N新建笔记

3、Cursor为Shortcuts添加了autofocus:true和canRequestFocus:true,据称能确保快捷键始终可用,再次构建测试,依然未能实现需求,决定回退一点,在AI对话界面,只有打开对话并且在输入框聚焦时,才能通过command+N新建对话,并且在设置-快捷键的“新建对话”后面增加“(在输入框聚焦时)”说明文字;在笔记界面,只有打开笔记且在编辑模式时,才能通过command+N新建笔记,并且在设置-快捷键的“新建笔记”后面增加“(在编辑模式时)”说明文字

4、再次构建测试,在修正两个文件中括号不匹配的问题之后,可以正常构建,快捷键功能也可正常使用

5、前两天在询问千问时,它有提到可以通过macOS的textutil实现对word文档的解析,Cursor也认为该方案可行,textutil支持.doc和.docx格式,可将word文档转换为纯文本,支持UTF-8编码输出,并且是macOS系统自带的功能,无需额外依赖,可以使用MethodChannel实现(当前的PDF解析实现方式),优点在于性能、稳定性好、实现简单,但仅限于macOS,无法跨平台,无法提取文档中的图片,无法处理某些复杂的word对象,这些在我看来都可以接受

6、要求Cursor直接使用textutil来实现AI对话过程中对word文档的解析,实现方式与现有的PDF解析一致,同时添加文件大小限制,单个word文档不能超过10MB,Cursor创建了新的文件WordTextExtractor.swift并更新了项目文件,新增功能包括文件大小限制、错误处理、与PDF解析一致的实现方式

7、构建测试,发现已经支持上传并解读word文档,通过附件按钮上传、拖拽上传均可,但目前还不支持将图片、文档粘贴到对话框并解读,询问Cursor能否增加对粘贴图片、文档并解读的支持,效果要和通过附件按钮上传、拖拽到对话窗口的效果一致,在修改过程中,Cursor扩展了Swift端剪贴板处理,更新了Dart端粘贴处理,据称实现的效果包括支持粘贴图片、支持粘贴文档、与拖拽和附件上传效果一致,并且自动去重

8、继续构建测试,已经支持粘贴图片和文档,需要更新一下AI对话界面输入框的提示文字,改为“输入消息…(支持拖拽或粘贴文本/图片/文档)”,这种比较小且非常明确的需求,可以先在代码中搜索找到对应的位置,选中所在行并Add to Chat,修改起来会更快

9、在通过命令行进行构建测试的过程中,多次出现对依赖版本的检查,其中12个包有更新版本可用,1个包已被官方弃用,询问ChatGPT后得知这不是错误,不影响编译或运行,且并不是所有的包都建议升级,升级后也可能会导致新的编译问题,其中的flutter_lints、lints、package_info_plus、pointycastle版本号变化较大,后面可以考虑升级,flutter_markdown官方已经不维护了,建议改用flutter_markdown_plus,等后面更熟悉Flutter了再尝试更新

10、刷新一下README.MD和设置-关于ChatWith界面的“近期更新”内容,版本号不变,接下来打包(flutter build macos –release -v)、测试几天,然后下一个版本重点优化笔记板块的功能和界面

11、记录一下在终端中用指令打包的方法,首先cd+空格,打开项目文件夹,直接拖到终端窗口里,就会自动补全路径,然后回车,然后再输入flutter build macos –release -v,接下来等着它完成就行,正常的话会有BUILD SUCCEED、Building macOS application…(completed in 44.6s),并用绿色对号和加粗的文字提示路径Built build/macOS/Build/Products/Release/chatwith.app,去项目文件夹下这个路径里找就行了,然后把这个.app文件拖到访达的“应用程序”文件夹里,就可以正常使用了

12、再补充一些基础知识,flutter build macos –release -v只能用于打包使用Flutter开发的macOS应用,使用Xcode原生、Electron/Tauri、.NET/Qt/C++开发的应用有各自的打包指令,但如果要正常分发甚至想上架的话,还都需要经过代码签名、公证等步骤,macOS应用如果不公开分发,有.app文件就够了,只是会面临Gatekeeper的拦截

13、了解一下如果把当前这个使用Flutter开发的macOS应用部署到iOS设备上,可能会涉及哪些调整,根据ChatGPT的回复,这会涉及项目结构与构建目标、UI/交互、生命周期与状态管理差异、文件系统与文档上传能力改造、权限与能力声明、依赖/插件、原生集成与性能、发布与合规等方面,在将目前项目的pubspec.yaml复制给ChatGPT后,它指出目前的大多数依赖本身是支持iOS的,如果要将macOS版本迁移到iOS,可能主要会卡在数据库实现、文件选择/文件访问、iOS权限与plist配置以及少量插件的iOS兼容性细节上

14、从现在的情况来看我好像没有必要再单独去修改使用flutter重构的ChatWith移动版了,因为功能上的需求都是一样的,重复开发也只是徒增工作量,后面可以等ChatWith for Mac功能稳定了,直接让Cursor搞一个功能一致的iOS版

15、在测试的这段时间,也筹划一下其他的应用,目前已有的几个半成品项目中,只有DoitWith的功能与其他几个不同,目前是一款使用Swift开发的待办应用,已经具备了常用的添加/修改/删除待办、完成待办、待办分组、重复提醒、数量统计等功能,但不知道下一步该往哪个方向走,将目前已有的功能清单、核心的代码文件和主界面截图发给ChatGPT后,ChatGPT指出目前我已经把一个标准的To-Do App该有的东西几乎都做完了,现在不是“功能不够”,而是“任务本身是死的”,只是起到了“记录我要做什么”的作用,但市面上几乎所有成熟的To-Do App的竞争点已经是“系统如何帮我更容易把事情做完”,所以我才会遇到“我不知道加什么功能,但又不想和别人一样”的典型问题

16、而且ChatGPT还指出了目前应用的几个问题,比如每条待办都是孤立的,没有前后关系/状态演进/行动提示,目前的分组是静态分组,所有的事都会被同等对待,完成一个任务也没有反馈感,ChatGPT不建议再横向加功能(比如子任务、优先级、项目/文件夹、日历视图),而是给出了三个进化路线:让待办变成过程,而不是清单(增加“下一步”功能);让DoitWith变成节奏型待办(每天只能标记3个重点任务,超过就要替换);为macOS/iOS原生体验而生(利用Spotlight、菜单栏快速完成、Live Activity/Widget驱动行动、支持快捷指令等macOS/iOS原生能力)

17、这三个建议中的“最小可执行版本”是给任务加一个字段:nextAction或statusNote,UI上显示在标题下,用户完成的是“这一步”,不是整个任务,这样就会让列表变“活”

18、还得再思考思考具体往哪个方向演进,或许也可以结合我的日常工作来调整,做成一款通用性没有苹果的“提醒事项App”那么强的待办App,比如设置项目、稿件、视觉等标签?增加由哪个员工来写,和哪个客户对接等字段?

DevLog:2026年1月14日

1、询问Gemini后,使用命令行在终端里打包了应用(cd+空格+项目文件夹路径,进入项目根目录,然后运行flutter build macos –release -v),实测只用了49.3秒就完成了打包,并且自动放到了项目文件夹——build-macos-Build-Products-Release文件夹下,拽到应用程序文件夹替换掉之前用Swift开发的版本,测试后发现功能正常

2、但是这个版本依然没有签名,可能在使用过程中还是会受苹果的Gatekeeper机制影响,结合Gemini的建议,删除缓存,将My Mac切换为Any Mac(Apple Silicon, Intel),并且给Xcode打开完全磁盘访问权限后再次打包,依然卡在in progress环节

3、然后根据Gemini的建议,陆续在终端中查询了最近公证记录(一共提交了4条,每条都是在in progress)、查询公证错误报告(公证流程还没有走完,所以也没有什么具体的错误信息),先继续优化应用、丰富功能,继续等这4条看啥时候能完成

4、接下来给应用增加对快捷键、右键菜单、剪贴板中的图片、拖拽图片和文件的支持,具体的需求是:

1.在设置列表中增加“快捷键”,放在数据统计和回收站中间,右侧设置详情展示对快捷键的说明

2.我需要的快捷键包括新建对话/笔记command+N(在对话页就新建对话,在笔记页就新建笔记)、发送消息command+enter(仅针对对话页)

3.另外在AI对话页,给每条消息增加右键菜单,包括收藏、复制、删除三个功能

4.AI对话页面目前好像不支持读取系统剪贴板中的图片,只支持文字,我需要在AI对话过程中,可以将剪贴板中的图片粘贴到AI对话框,效果和上传图片的效果一致

5.AI对话页面也需要支持拖拽图片和文件,将图片或文件拖拽到AI对话界面,效果和上传图片/文件的效果一致

5、在提交给Cursor之前,先询问下它对快捷键有哪些建议,只有上面需求中的两条好像的确有点少,结合Cursor的建议,增加command+F(打开搜索功能),其他快捷键后续再视使用情况陆续补充

6、本次修改涉及10个文件,包括设置列表中的快捷键选项、快捷键实现、AI对话页消息右键菜单、剪贴板图片粘贴支持、拖拽文件支持,测试时构建失败,可能这次同时涉及多个小功能的修改,比较复杂吧,出现了括号不匹配、结构问题、缺失的Intent类等问题,构建成功

7、逐个测试新增功能,并要求Cursor修复:

1.设置-快捷键,右侧的详情需要做一些微调,去掉顶部的“快捷键”三个字,“对话页面”改成“AI对话”,“笔记页面”改成“笔记”,去掉底部的“消息操作”分组及右键菜单的说明,其他快捷键说明和后面的文字需要居中对齐,目前好像是顶部对齐

2.新建对话、新建笔记的快捷键不管用,按command+N时未能新建对话、新建笔记,comman+enter发送消息的快捷键已支持

3.目前AI回复的消息已支持右键菜单,需要给用户消息也增加同样的右键菜单

4.不要自动把剪贴板中的图片粘贴过来,留给用户手动操作

5.实测仍不支持拖拽图片或文件到AI对话界面

8、再次测试,以上的1、3、4、5已支持,新建对话、新建笔记的快捷键command+N还是不管用,另外消息输入框还不支持通过command+V粘贴文字,也需要继续修改,当前对话中针对这一需求已经进行了两次修改,均未能实现,于是开启了一个新对话

9、提出需求:我需要在对话界面可以通过command+N新建对话,在笔记界面可以通过command+N新建笔记,另外对话的输入框需要支持用command+V粘贴从其他地方复制的文本和图片

10、Cursor指出目前新建对话和新建笔记的快捷键支持已经在对话和笔记列表中实现,无需修改,然后调整了对话输入框的粘贴处理逻辑,同时支持粘贴文本和图片,再次构建测试,对话框现在可以粘贴文字了,但粘贴图片时看不到缩略图,并且发送图片给支持图片的API后,再次出现了“错误: API密钥无效,请检查API Key设置”的提示,通过附件按钮上传图片时,可以正常显示缩略图,正常进行提问和解读,而且新建对话和新建笔记的快捷键只有光标停留在输入框、编辑某条笔记时才能生效,我需要的是只要当前位于对话界面就可以用快捷键新建对话,只要当前位于笔记界面就可以用快捷键新建笔记

11、修改后再次测试,两个问题都未能解决,继续反馈修改,粘贴到对话框的图片应该和通过附件上传图片的效果一致,Cursor添加了调试信息,明天再结合调试信息继续反馈给Cursor修改

12、发现在对AI消息进行收藏、复制操作时,没有将深度思考内容和Tavily的参考链接包含在内,但在右键点击时,在深度思考内容和Tavily参考链接的显示区域也可以弹出右键菜单,但想了想好像的确不需要复制和收藏思考内容及Tavily参考链接,以后视需求再做调整

13、明天继续详细测试每个功能,再问问Cursor能否使用macOS的textutil实现对word文档的解析(来自千问的建议),然后版本号更新为v0.1.1,build号用2,刷新README.MD和设置-关于ChatWith,下一个版本重点优化笔记板块的功能和界面