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

发表回复