DevLog:2025年12月17日

1、总结一下当前五个应用的进展和问题:

ChatWith移动端:已使用Flutter重写,仍在测试与补充功能阶段,需要尽快完善功能并打包,通过TestFlight上线测试版

NoteWith移动端:使用原生Swift编写,已经引入MarkdownUI和RichTextKit来解决AI对话内容渲染和备忘录模块的富文本编辑器功能,仍在测试与补充功能阶段

ChatWith Mac端:使用原生Swift,由ChatWith移动端改写(或者是NoteWith移动端改写?记不清了)改写,目前功能基本达成需求,并且已经打包两个版本,主要问题在于在不同对话间切换/在对话中切换模型时偶发应用卡死的问题

NoteWith Mac端:使用原生Swift,和ChatWith类似,由NoteWith移动端改写,仍在测试与补充功能阶段

DoitWith移动版:只有Todo相关的功能,比较简单,仍在测试与补充功能阶段

2、ChatWith移动端的核心功能跟NoteWith移动端其实是基本一致的,ChatWith Mac端和NoteWith Mac端的核心功能也基本一致,重复开发和测试增加了不小的工作量,且目前没有想好要怎样实现NoteWith双端的AI对话和备忘录两个模块间的联动,至于DoitWith,同类型的应用非常多,还没有想到能有什么创新点,先暂时搁置,集中精力推进ChatWith移动端和ChatWith Mac端的开发工作

DevLog:2026年12月5日

1、昨天引入RichTextKit,替换了目前的备忘录模块,但依然未能正常进行构建测试,在Xcode中构建时发现存在两处错误,再次反馈给Cursor并修改后构建成功

2、测试发现目前的确已经可以实现富文本编辑器的部分功能,比如设置加粗、下划线、删除线、文字颜色、字体、对齐方式,但工具栏中的斜体、字号大小,还有一个不知道是啥按钮,点亮和取消都没有看到什么变化,而且需要先选中文字,再从菜单里选“Format——More”才能在窗口底部弹出格式工具栏,感觉不够直观,需要缩减菜单层级

3、反馈后Cursor把工具栏改成了常驻在标题和编辑器之间,但在Xcode中多次构建都存在错误,猜测可能是Composer 1模型的问题?于是把Cursor中的模型切换回了Auto再试,但在修改过程中又把格式工具栏给我改回了自定义的NSAttributedString,测试发现其中的按钮基本都没有用,于是要求Cursor用RichTextKit内置工具栏RichTextFormat.Toolbar替换自定义实现

4、这下RichTextFormat.Toolbar常驻在备忘录详情页的标题和编辑器之间了,但格式工具栏高度有些夸张了,我希望能把第一行(包含加粗、斜体、下划线、删除线、字号)常驻,其他按钮先折叠起来,在第一行按钮后方增加一个向下的箭头,点击可以展开完整的工具栏

5、Cursor在使用RichTextContent的API、RichTextStyle枚举、RichTextAction,并保持与RichTextKit的兼容性的同时,实现了我的需求,工具栏默认折叠,只显示第一行常用按钮,点击箭头可以展开更多选项,效果还可以

6、接下来添加一个支持深度思考的模型,测试思考内容的流式输出和展示是否正常

7、插播另一个话题,在使用Cherry Studio询问“有哪些比较好用的跨端开发框架”时,发现使用Cherry Studio调用百度千帆平台的DeepSeek API时,响应速度和回答速度都非常慢,回答一个问题可能需要四五分钟的时间,但直接调用DeepSeek官方的API就没有问题,看了下我在百度千帆上的费用还有47块多,消耗的速度好慢

8、说到跨端开发框架,DeepSeek推荐用Flutter,支持iOS、Android、Web、桌面(Windows/macOS/Linux),高性能、重热载、组件库丰富、生态强大,缺点在于需要学习Dart语言(有Cursor,这个不算缺点)、包体积较大、Web端体验较差(无所谓,我也没打算上Web端),看起来的确是最符合我需求的跨端开发框架

9、之前移动端的ChatWith一直无法全屏显示,多次修改也无果,决定就用它开刀了,看能否在Cursor里使用Flutter框架,把它改成跨端应用,先搞好iOS端,再搞Mac端

10、询问Cursor如果我想把ChatWith改成用Flutter框架的话,可行性如何,Cursor认为目前应用的功能在Flutter中均可实现,核心功能在Flutter中均有对应的方案,我比较关注本地存储和Markdown渲染,本次存储上,Cursor建议对话数据用sqflite数据库,配置用shared_preferences,Markdown渲染用flutter_markdown或markdown_widget,且Flutter的Markdown包更成熟,但是,需要完全重写,无法复用Swift代码

11、Cursor还推荐了如下技术栈:

核心框架:Flutter SDK(最新稳定版)

状态管理:Provider或Riverpod(推荐 Riverpod)

网络请求:dio(支持流式响应)

本地存储:shared_preferences (配置)、sqflite (对话数据)

Markdown渲染:flutter_markdown

UI组件:cupertino_icons (iOS风格图标) 、flutter_slidable (滑动操作)

并且推荐完全迁移,优点在于跨平台、长期维护成本低,缺点在于需要重写所有代码

12、继续询问,如果按照Cursor的建议完全迁移,并使用Cursor推荐的技术栈的话,让它分析了一下详细的迁移计划和项目结构建议,它直接写了三个文档:FLUTTER_MIGRATION_PLAN.md(迁移计划)、FLUTTER_CODE_EXAMPLES.md(代码示例)、FLUTTER_QUICK_START.md(快速开始),可能Cursor认为我自己会参考这三个文档来开发吧,先这样,接下来让Cursor来进行迁移

DevLog:2025年12月4日

1、今天让Cursor引入RichTextKit,替换目前的备忘录模块,Cursor分成了四步操作

1.添加RichTextKit的Swift Package Manager依赖

2.更新NoteEditView,使用RichTextKit替换当前的Markdown编辑器

3.更新Note模型以支持RichTextKit的富文本格式

4.更新NotesListView以正确显示富文本内容

2、同时对之前的功能进行了调整,比如移除了编辑/预览切换功能,可以直接编辑,支持富文本编辑(加粗、斜体、下划线、字体、颜色等),保留了标题输入和字数统计功能

3、据Cursor介绍,RichTextKit提供的功能还是很丰富的,包括加粗、斜体、下划线、删除线等文本样式、字体和字号设置、文本和背景颜色、文本对齐、图片

4、测试时首先遇到了一个Missing package product ‘RichTextKit’的错误,可能是因为未能正确添加RichTextKit依赖导致的,让Cursor修正了下,今天也没有时间测试

5、昨天刚更新Cursor,今天又有更新了,最新版本号2.1.47,暂时没发现有什么区别

DevLog:2025年12月3日

1、参考ChatWith for Mac添加模型的逻辑,预置一些常用的模型服务提供商,供用户在添加模型时选择,包括OpenAI、DeepSeek、Anthropic Claude、OpenRouter、Google Gemini、智谱GLM、月之暗面Kimi、百度文心一言、百度云千帆、阿里通义千问、阿里云百炼、腾讯混元、硅基流动、火山方舟、自定义,用户在添加模型时只需选择模型服务提供商,就能自动匹配对应的BASE URL,并且都是完整的地址,选择“自定义”时,可以自行填写BASE URL,并且有提示文字“需填写完整地址”,备注、模型名称、API Key仍然需要用户自定填写

2、在修改过程中,Cursor创建了模型服务提供商定义AIModelProvider.swift,并且将新文件添加到了项目文件里,测试发现功能基本正常,然后修改了AIModelManagementView里的几处细节:

1.有两个“服务提供商”,需要删除位置靠下的“服务提供商”,虽然完成了,但目前这里的界面略丑,后面再优化一下

2.模型名称下面的说明文字需要固定为“如openai/gpt-3.5-turbo,可根据需要修改”

3.在模型列表页,左滑菜单中已有“测试”按钮,就不需要再在模型右侧设置“地球”标志了,已经让Cursor去掉了

3、明天再让Cursor引入RichTextKit,替换目前的备忘录模块吧,今天就到这儿了

DevLog:2025年12月2日

1、昨天在引入MarkdownUI替换之前自定义的MarkdownRenderer之后,Cursor未能进行构建测试,虽然也自称检查后未发现语法错误,但今天在Xcode中构建测试发现AI对话核心的文件AIChatView存在多个错误,导致构建失败,先复制给Cursor让它修复下这些错误

2、Cursor在简化了AIChatView的部分代码后构建成功,接下来测试并逐个修改各个模块的问题,先是这两个:

1.添加模型之后,发送消息后收到错误提示:发送消息失败:API错误(404),导致无法正常对话

2.AI模型管理界面缺少对模型的测试机制,需要增加测试机制,点击可测试,确认能正常连接

3、Cursor认为第一个问题是因为缺少URL补全机制导致的,于是修复了URL拼接问题,在用户填写的Base URL后面增加/chat/completions,然后在模型管理界面(包括列表视图、表单视图)添加了测试UI

4、在Xcode中打开发现测试UI工作正常,但我与测试可用的模型对话时,出现AI正在思考中的提示之后,没有收到任何回复,继续让Cursor检查原因并修复

5、Cursor修复了流式解析问题,包括改进流式响应解析逻辑、改进错误处理、增强兼容性等,虽然可以正常构建了,但我测试了两个问题,回答内容都未能完整显示,输出了一部分就停了,并且停止按钮一直未能变成发送按钮(正常的话应该收到所有回答之后停止按钮就会变成发送按钮)

6、Cursor认为问题原因在于流式输出解析顺序和ViewModel中的更新逻辑,前者主要是先检查finish_reason再处理delta,导致最后一块内容可能被跳过,当finish_reason存在时直接break,未处理该条数据中的delta,后者主要是更新频率限制在100ms,可能导致最后的内容未及时更新,同时,为了确保流式输出正确完成,Cursor也做了一些修改,无论finish_reason是否存在,都会在结束时调用onUpdate,即使delta为空,也会更新一次,确保状态正确,isLoading会被正确设置为false,停止按钮会变回发送按钮

7、继续在Xcode中测试了两个问题,这次可以完整显示所有回答内容了,并且停止按钮也会随着输出结束变回发送按钮

8、接下来准备参考ChatWith for Mac添加模型的逻辑,预置一些常用的模型服务提供商供用户选择,包括OpenAI、DeepSeek、Anthropic Claude、OpenRouter、Google Gemini、智谱GLM、月之暗面Kimi、百度文心一言、百度云千帆、阿里通义千问、阿里云百炼、腾讯混元、硅基流动、火山方舟、自定义,然后让Cursor引入RichTextKit,替换目前的备忘录模块

DevLog:2025年11月6日

1、让Cursor将当前版本(v0.2)打包,Cursor这次还同步创建了发布说明文档,其中包括版本信息、安装说明、更新内容、系统要求、支持的AI平台、反馈与支持、注意事项等内容,看起来还是挺规范的

2、已经用上了v0.2版本,以后对话时多多使用,修正问题并进一步优化,同时我还询问了Cursor下一个版本的建议,以细节补充和优化为主,Cursor给出了高、中、低三个不同优先级的建议,但我个人还是觉得有些并不着急

3、高优先级建议包括停止生成按钮(发送消息后按钮变成停止生成按钮,可以随时点击停止)、会话重命名/自动命名(其实现在可以重命名,也会自动获取用户的最后一个问题作为会话的名字)、消息复制按钮(已有)、快捷键支持(比如给创建新对话、切换模型、搜索等功能指定快捷键,这个可以有)、错误处理优化(更友好的错误提示、API限流处理、离线模式、崩溃日志等,我暂时不需要)

4、中优先级建议包括重新生成功能、代码块复制(这个可以有)、消息时间显示(我忽略了这一点,现在还真没有)、空状态设计(无对话、无收藏时的引导界面,这个好像也已经有了)、数据导出功能(收藏内容导出成.md还是比较实用的)

5、低优先级建议包括主题色自定义(花里胡哨,不需要)、使用统计(显示使用次数、Token消耗等,后面可以加上)、标签分类(暂不需要)、字体调节(暂不需要)、帮助文档(暂不需要)

6、总结一下,v0.3要增加的功能包括:停止生成按钮、快捷键支持、代码块复制、消息时间显示、数据导出功能、使用统计,也都是一些细节上的补全

7、目前在进行中的开发项目,移动端有ChatWith、NoteWith和DoitWith,Mac端有ChatWith for Mac和NoteWith for Mac,NoteWith for Mac是由移动端NoteWith修改而来,功能上相当于在ChatWith基础上增加了备忘录和待办事项功能,整合的功能比较多,后续可能会考虑删掉待办事项功能,留给DoitWith,且AI对话功能需要重复开发,暂时先搁置,接下来继续开发移动端NoteWith

8、将近三个月没有修改过NoteWith了,甚至都忘了它的功能都有啥,先让Cursor梳理一下目前的项目,都有哪些功能,有哪些优化建议,在梳理过程中,先整理了应用功能与优化建议文档,然后检查发现了重复文件,Cursor建议先清理重复文件(我还发现目前应用文件夹里有多个Trae创建的项目文件备份和.sh文件,也都不需要了,一并清理掉)、清理调试打印和未使用的代码,后面可以考虑更换数据持久化方案为Core Data,然后优化性能、扩展功能等等

9、Cursor直接删掉了15个无用文件(应用能否正常运行还有待验证),然后我删掉了多余的空文件夹,和之前不知道啥时候、由哪个AI工具编写的重构指南文件,以及一个项目初始化脚本setup.sh

10、时隔三个月再次启动了iOS模拟器,iOS 26已经发布,模拟器也换成了iPhone 17 Pro、iOS 26.0,并且部分界面也自动变成了iOS 26的效果,比如底部的AI对话、备忘录、我的三个按钮及其切换效果,决定趁现在应用功能还很简单,结合近期修改ChatWith for Mac的经历,先开启一个新对话,把NoteWith的AI对话和备忘录的数据永久化方式改为Core Data,AI模型、设置等仍然采用UserDefaults

11、Cursor的建议是使用Core Data存储Note、AIChatSession、AIMessage、SearchLink、deletedNotes,仍然使用UserDefaults来保存AIConfig和应用设置,因为Core Data适合结构化数据,支持关系、查询和迁移,UserDefaults适合小量配置,访问频繁但更新不频繁

12、接下来创建Core Data模型文件和相关组件,创建了备忘录、AI对话、AI消息、搜索链接四个实体及对应的扩展类,重构了DataManager,并更新了项目文件,和以往修改数据永久化方式一样,这次Cursor也增加了迁移机制,首次运行时会自动将现有的UserDefaults数据迁移到Core Data,但因为当前应用还没有发布,不需要迁移机制,让Cursor去掉了迁移机制,并且修复了构建错误,具体使用体验怎么样,哪些功能受到了影响,明天再测试,然后引入三方库MarkdownUI和RichTextKit,完善AI问答和备忘录的渲染效果和编辑体验

DevLog:2025年10月31日

1、今天开始继续完善NoteWith for Mac,并且持续试用ChatWith for Mac,积累下一个版本的优化点

2、参考之前ChatWith for Mac的经验,先让Cursor按照目前的功能模块梳理一下文件结构,另外笔记功能也看下有没有合适的三方库可以较好地支持富文本编辑,就像渲染AI回答内容的markdown-ui一样

3、目前应用包含的功能模块有AI对话、备忘录、待办事项、设置、搜索以及通用组件,架构上分成了Models数据模型、Services服务层、ViewModels视图模型、Views视图层,数据存储方式上,备忘录、AI对话都采用了Core Data,但TodoItems和TodoGroups以及AIConfigs仍然是用的UserDefaults

4、然后让Cursor根据目前的架构整理了一下文件夹,代码组织清晰了一些,接下来运行一下试试,看看都哪些功能需要调整

5、首先,目前的备忘录在打开时默认是预览模式,需要在详情里点一下然后切换到编辑模式,询问Cursor有没有比较好用的三方库,能让目前的备忘录模块实现类似苹果备忘录的富文本编辑功能,且不需要在预览和编辑模式间切换,Cursor给出了三个方案,方案一是RichTextKit,专为SwiftUI设计,支持实时富文本编辑(所见即所得),无需在编辑/预览模式间切换,且API简洁,易于集成,可以实现类似苹果备忘录的编辑体验;方案二是AttributedString+NSTextView,即对当前的方案进行优化,这个方案我是肯定不会用的,相当于又倒退了;方案三是ProseMirror via WKWebView,可以实现功能完整的富文本编辑器,支持表格、列表、链接等,但因为需要通过WebView嵌入,导致性能开销较大,且与SwiftUI的集成略复杂,体积也较大

6、综合看下来只有方案一最符合我的需求,下周再让Cursor集成RichTextKit,试试效果