DevLog:2025年12月15日

1、继续测试深度思考功能是否正常,换不同的问题问一下支持深度思考的模型,以及对话的置顶/修改/删除功能(已有按钮,和之前使用Swift的ChatWith操作方式一致,但按钮的样式变了,可能是安卓原生的按钮?)

2、测试发现未能显示深度思考内容,且即使在问题中增加了“最新”这样的提示词,也未能联网获取最新信息,对话的三个操作按钮中,置顶/取消置顶功能正常,修改标题后在列表中仍然显示原标题,删除后可正常进入回收站,也能从回收站中恢复到对话列表,且在回收站里的对话会显示为修改后的标题

3、除了要修正上面的问题外,还需要补充的功能包括触发联网搜索、显示联网搜索的参考链接、测试模型是否可用,继续对Cursor提出需求如下:

1.只要是与支持深度思考的模型对话,就在对话最上方显示思考内容,默认展开,可在回答结束后折叠

2.只要我在模型设置中填写了Tavily Key,在回答时就调用Tavily的联网搜索能力,并且在回答内容下方显示参考链接,样式需要与回答内容有所区别

3.在添加/编辑模型页底部增加测试按钮,点击测试模型是否可正常使用,如果不能正常使用需要给出错误信息

4.在对话上左滑修改对话标题后,对话列表里仍然显示为原标题,但在回收站里的对话会显示为修改后的标题

5.对话列表里,只能看到最后一个问题,看不到最后一次回答,我需要在每个对话的标题下方显示一行最后一次回答的内容

4、修改完成后测试上述功能,发现:

1.与支持深度思考的模型对话时,仍然未能看到思考内容,又添加了另一个支持深度思考的模型(DeepSeek官方的deepseek-reasoner),也看不到思考内容,但是回答的速度还是挺快的

2.联网搜索功能已实现,点击参考链接不会直接打开,而是可以看到完整链接,并且可以选中、复制,可能改成点击直接跳转至默认浏览器打开链接会比较合适

3.模型测试功能已实现

4.已实现需求,对话列表里可以看到修改后的标题,但不是我最后一次提出的问题

5.创建新的对话,已经可以在列表里看到最后一次回答的内容,可能已经改好了?

5、基于上述测试结果,继续提出修改需求:

1.对于联网搜索的参考链接,我需要点击后直接在默认浏览器中打开

2.在对话列表中,我需要对话的标题默认显示我提出的最后一个问题,如果我修改了标题,则一直显示为修改后的标题

3.AI回答的内容下方,除了收藏按钮之外,还需要增加一个复制按钮,点击可将回答内容(不含参考链接)复制到剪贴板,并且在点击收藏和复制按钮时,要分别有收藏成功、复制成功的toast提示

6、修改过程中,对于上述第一个需求,出现了/Users/jinlei.wu/Documents/GitHub/ChatWith/chatwith_flutter/ios/Runner/GeneratedPluginRegistrant.m:24:9 Module ‘url_launcher_ios’ not found的错误提示,无法构建,Cursor认为这是在添加url_launcher后,iOS项目需要更新CocoaPods依赖,修改之后可以正常构建并在模拟器中运行应用,并且上述三个需求均已实现

7、仍有如下需求未能实现,后面在Cursor中开启新对话时再看能否实现:

对话页、收藏页、设置页三个页面的标题仍然是居中显示(第二次修改无效),看不到支持深度思考的模型的思考内容(第三次修改无效)

8、还需要处理一下目前Xcode中出现的警告信息:/Users/jinlei.wu/.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.6/ios/url_launcher_ios/Sources/url_launcher_ios/URLLauncherPlugin.swift:22:26 ‘keyWindow’ was deprecated in iOS 13.0: Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes,看样子还是刚刚添加的url_launcher导致的问题

DevLog:2025年12月9日

1、昨天在使用Flutter重写ChatWith时,一直无法成功构建,即使用Cursor提供的终端命令也无法打开应用,同时在修改过程中,Cursor给我创建了大量的.md说明文档和.sh安装脚本文件,只是在告诉我应该怎么做,而不是像之前那样直接进行修改

2、打开一个新对话,再让Cursor继续修复Xcode报的问题,并且看看这些.md和.sh文件是否有必要保留,于是询问Cursor:我之前用Flutter重写了这个应用,但一直构建失败,提示:Command PhaseScriptExecution failed with a nonzero exit code,并且在重写过程中,文件夹里多了很多.md和.sh文件,这些文件是否可以删除?

3、Cursor修复了构建失败的问题,认为构建失败不是因为PhaseScriptExecution脚本问题,而是代码编译错误,包括Message类问题、CardTheme类型错误、类型声明错误、缺少导入等,然后清理了.md和.sh文件共23个,然后在Xcode中尝试构建,竟然真的构建成功了

4、但是出现了很多的错误提示,基本都是Stale file ‘/Users/jinlei.wu/Documents/GitHub/ChatWith/chatwith_flutter/build/ios/Debug-iphonesimulator’ is located outside of the allowed root paths.,看这个提示信息,像是这个文件的路径错误?Clean Build Folder后解决,并且可以成功构建

5、决定让Cursor删掉/Users/jinlei.wu/Documents/GitHub/ChatWith/目录下使用Swift原生构建的应用,只保留使用Flutter构建的应用

6、继续构建并测试功能,首先就是点击右上角的设置按钮,设置界面里是空白的,提示“错误:Exception: SharedPreferences not initialized”,所以也没有办法添加模型,测试对话等一系列功能,Cursor认为问题原因在于preferencesStorageProvider是同步provider,但依赖异步的sharedPreferencesProvider,当SharedPreferences尚未初始化时,preferencesStorageProvider会抛出“SharedPreferences not initialized”异常,修复之后重新生成了代码,现在可以看到设置界面了,以后再添加模型试试能否正常使用

7、这几次构建测试,总觉得应用启动速度好慢,后面还需要给应用增加多模型管理和切换、联网搜索、回收站、深度思考、流式输出、Markdown渲染等功能,又是一个不断增加功能、测试功能的过程

DevLog:2025年12月8日

1、继续上周对移动端ChatWith的修改(或者说重写),用跨端开发框架Flutter替换Swift,“我需要你按照你的建议,帮我完全迁移,并且使用你推荐的技术栈”,Cursor列举了如下步骤:

1.创建Flutter项目结构和配置文件

2.实现核心数据模型(Message、Conversation、AIModel)

3.实现数据库层(SQLite+DAO)

4.实现API服务层(OpenAI流式输出)

5.实现Riverpod状态管理

6.实现UI层(启动页、主框架、对话列表、聊天界面、收藏、设置)

7.实现Markdown渲染和主题系统

8.配置全屏显示和平台特定设置

2、Cursor只用了十来分钟就写完了数十个文件,但接下来还需要我安装Flutter SDK、进入项目并安装依赖、生成代码,然后才能运行应用

3、目前涉及的技术栈包括:状态管理: Riverpod 2.5.1、网络请求: Dio 5.4.0、本地存储: SQLite + SharedPreferences、Markdown: flutter_markdown 0.6.18

4、手动下载并解压Flutter SDK之后,我不知道下一步该怎么配置,直接跟Cursor说“我已经下载了Flutter SDK,下一步怎么操作”,它就在电脑里搜索到了Flutter SDK的位置是/Users/jinlei.wu/Documents/Dev/flutter,然后开始配置环境变量,并验证安装、安装项目依赖、生成代码,之后还创建了一个总结文档

5、但不清楚目前怎样在iOS端运行应用,于是询问“怎样在浏览器里打开当前应用?怎样在Xcode中通过模拟器打开当前应用?”,Cursor直接给我提供了两个运行说明文档QUICK_RUN.md和RUN_GUIDE.md

6、按照提示在Xcode中打开RUNNER.xcworkspace,但提示错误Command PhaseScriptExecution failed with a nonzero exit code,Cursor检查后表示是因为未安装CocoaPods(iOS开发必须的依赖管理工具,Flutter的iOS插件需要通过它来管理),虽然它给出了解决方案,我还是希望Cursor能帮我安装,但未能实现,可能是卡在权限或者无法连接GitHub的资源上了?

7、可能还是需要通过终端命令的形式来安装,Cursor给出的步骤如下,中途切换了一下网络,第一步就无法直接下载

1.安装 Homebrew(如果还没有)

/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”

这一步中途切换了下网络,不然无法下载,但依然卡在了“Downloading Command Line Tools for Xcode 26.1”,搜索发现这还不是个例,网上有不少教程都建议这里手动去苹果开发者网站下载安装,然后重新运行这个命令

2.安装 Ruby 和 CocoaPods

brew install ruby cocoapods

第一步完成之后需要关掉终端,重新打开之后再输入这一命令,不然会提示zsh: command not found: brew

3.安装 iOS 依赖

cd /Users/jinlei.wu/Documents/GitHub/ChatWith/chatwith_flutter

cd ios

pod install

cd ..

4.在 Xcode 中打开

open ios/Runner.xcworkspace

8、在上面第三步就卡住了,多次调整后依然无法在Xcode中正常构建,明明CocoaPods已经安装并且可以查到版本号了,但仍然频繁出现构建失败的情况,Cursor建议优先使用Flutter命令运行应用,但也无法运行,提示找不到设备:

cd /Users/jinlei.wu/Documents/GitHub/ChatWith/chatwith_flutter

export PATH=”$PATH:/Users/jinlei.wu/Documents/Dev/flutter/bin”

flutter run -d “iPhone 16”

9、很奇怪的一点是,不知道为啥,Cursor给我创建了大量的.md说明文档和.sh安装脚本文件,而不是像之前那样直接进行修改操作,明天打开一个新对话,再让Cursor继续修复问题,并且看看这些.md和.sh文件是否有必要保留

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月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年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有什么不同,后面再实际测试看看吧

DevLog:2025年10月30日

1、有半个月没有打开Cursor了,这段时间Cursor已经更新到了2.0,界面上的最大变化就是在原本的Editor模式之外增加了一个Agents模式,暂时还没有发现具体的区别是啥

2、带我入门的Cherry Studio近期也在频繁更新,但感觉越来越臃肿了,目前已经有助手、智能体、小程序、知识库、文件、代码工具、笔记等功能模块,但我常用的也就第一个,也就是目前ChatWith for Mac的核心功能,后续可能会将收藏功能改成知识库,其它的暂时都用不到,而且目前Cherry Studio的响应速度也越来越慢,尤其在开启联网搜索后,先要深度思考一段时间,再调用联网搜索的结果,再从联网搜索结果中总结整理,整个过程比豆包的深度思考模式(边搜边思考)还慢,甚至让我又打开了界面丑陋但功能简洁的Chatbox

3、在前段时间修改搜索页、联网搜索逻辑,并调整部分界面显示效果后,今天打包一个当前版本,继续使用并在使用中发现问题、看是否要增加新功能

4、询问Cursor当前应用都在哪些地方限定了版本号?根据Cursor的回答,在Xcode项目配置文件ChatWith.xcodeproj/project.pbxproj中有MARKETING_VERSION(市场版本号)和CURRENT_PROJECT_VERSION(构建版本号),在设置详情SettingsDetailView中有硬编码的版本号,Cursor建议改为动态获取,已修改

5、然后让不同的AI来设计应用图标,用同样的指令试了豆包、ima、ChatGPT,还是ChatGPT的效果更好,豆包生成的图标混杂了一些奇怪的字符,ima生成的图标审美有些差,有些“复古”,ChatGPT生成的图标很简洁耐看,然后让ChatGPT先不做圆角效果,可以平铺整个画面,我再用Xcode中的AppIcon来生成图标,也能很好地理解我的需求并提供了图片

6、在添加图标前,发现目前的Assets文件中的AppIcon.appiconset/Contents.json配置仍是为移动设备设计的,当然还是因为这个应用是从iOS应用修改而来的,于是让Cursor修改了Contents.json为macOS配置

7、在翻看ChatGPT提供的图标设置方法时,发现它可以帮我生成可以直接拖入Xcode的AppIcon.iconset文件夹,其中包含所有尺寸的图标,我把ChatGPT提供的压缩包中的文件放到对应的路径之后再打包应用,果然已经有图标了,ChatGPT还是厉害

DevLog:2025年9月30日

1、首先跟Cursor明确了模型切换界面AIModelSelectorView底部的确认和取消按钮的功能,切换模型时,点“确认”确认我对模型的切换,点“取消”则不切换模型,仍然保持打开模型切换界面前的选择,为实现这一功能,Cursor在这个文件里增加了临时选择机制,界面会高亮显示临时选择的模型,只有点确认时才会更新模型选择并关闭界面,在打开界面时,临时选择状态会设置为当前已选择的模型

2、昨天发现Xcode更新了,并且支持了Coding Intelligence功能,可以使用内建的Claude in Xcode(需要登录Claude账号),也可以自己添加模型或调用本地模型,还没有测试,感觉这个功能可能会和Cursor之类的AI IDE比较像,当然了更专注于苹果的应用

3、接下来可以试试用Icon Composer或者Asset Catalog给ChatWith for Mac创建一套图标

4、遗留问题如下,节后再修改:

1.当前搜索页面缺少返回按钮,实际上搜索功能目前还不全,搜完能看到关键词所在的对话/收藏,但点击不会跳转到对应条目,还得再完善下

2.联网搜索的触发词有点少,比如“今年”就无法触发搜索,需要进一步扩充,或者增加一个联网搜索按钮,点亮后开启联网搜索,或者改一下逻辑,在添加模型时只要填了Tavily Key,就开启联网搜索,并且在选择模型界面显示是否填写了Tavily Key,如果填写了就显示“联网搜索已开启”

3.问题太长时,对话界面上方的标题可能会断行,需要限制一下字数

DevLog:2025年8月16日

1、今天抽空优化应用功能和界面,首先是和导航栏的问题:我在首页选择了模型之后开始对话,但好像无论我选不选,都会跟模型列表里的第一个模型对话,而且我选择模型之后首页也看不到我选了哪个模型;另外左侧导航栏和图标和文字好像都没有对齐,我需要让图标和文字都左对齐
2、针对导航栏图标和文字不对齐的文字,Cursor进行了多次修改,包括将List改为VStack、给按钮添加背景颜色、点击区域等等,修改过程了再次出现了“ContentView文件结构被破坏,让我重新创建这个文件”的提示,可能是因为调整了中间的某行代码,但没有找到对应的闭合大括号导致的,这个问题近期遇到了多次,当然在修改过程中也没有全部重写ContentView,只是重写了其中的一部分
3、导航栏的问题还在修改中,由于首页和其它页面使用了不同的布局结构,导致样式难以统一,Cursor表示最好的解决方案是将所有的页面统一使用NavigationSplitView,这样可以确保样式完全一致,并且首页也可以有导航栏收起按钮,但不知道这样是否会导致首页变成三栏,先改一下试试看
4、果然在这次修改后首页也变成了三栏,但第二栏真的没有什么用,既然多次修改都暂时不能达成需求,且首页更多的是品牌展示的作用,决定先去掉首页模块,重点把其它界面的功能补齐,体验做好
5、首先就是优化AI对话输入框,将输入框加大、加高,并且使用圆角,以及对导航栏五个按钮的点击区域进行优化,让整行都可以点击,Cursor在修改时多次加高了导航栏按钮的高度和输入框的高度,依然没有解决问题,特别是输入框,只有我输入的内容足够多时才会变高,平时仍然是窄窄的一小条
6、通过将TextField替换为TextEditor,解决了输入框只有一窄条的问题,但底部的附件和发送按钮和底部边缘之间没有任何间距,甚至发送按钮都被遮挡了,反复调整多个边距数据终于达成需求,按钮不被遮挡,输入框的高度足以显示多行内容,且有圆角
7、然后调整了AI对话界面我的头像的位置,改成与消息气泡的顶部对齐,之前有些太靠下了
8、接下来优化AI对话的内容的滚动问题,让打开对话时自动滚动到最近的消息,同时给选中的对话增加一个选中状态的视觉反馈,Cursor通过增加双重滚动机制解决了前者,然后增加了浅蓝色半透明的选中状态,决定让Cursor将这一选中状态设计也应用到知识库、备忘录、设置列表中,视觉效果更统一一下,但设置列表由于采用了NavigationLink,本身就有内置的选中状态样式,再叠加了自定义的选中状态之后导致样式重叠,但NavigationLink内置的选中状态样式的确难看,于是让Cursor将NavigationLink替换为自定义Button组件,并且套用了自定义的选中状态样式
9、多次测试发现并没有统一消息的滚动机制,有时还会滚动到一半,先让Cursor改成了打开对话时跳到最近一次对话内容,然后增加对代码块的渲染,去掉长按消息后的弹窗,改成在消息底部增加收藏、复制、删除三个按钮,并具备对应功能,Cursor说针对代码块设计了明显的边框和背景,但在Xcode模拟器中测试时好像没有生效,再次让Cursor修改,并让代码块解析器能够识别更多类型的代码内容,然后又修复了几次代码识别识别逻辑(包含智能边界检测、全面的文字过滤、精确的代码识别等等),因为有些普通的回答内容也被包含在了代码块里,修改之后基本达成要求
10、预感现在AIChatView可能需要拆分了,因为目前包含了太多功能,于是询问Cursor是否有必要拆分该文件,Cursor认为目前的AIChatView文件过大、功能混杂,且有代码重复风险,并给出了拆分建议,先拆分代码模块,再拆分UI组件,最后优化主视图,决定让Cursor按照渐进式方案拆分
11、边拆分边测试,发现代码片段看不到代码块了,Cursor表示时在修复编译错误时失去了代码渲染功能,于是重新启用了代码块渲染,并且修改了项目文件,添加了新创建的文件,之后多次针对代码不能被正常渲染的问题修改CodeBlockParser文件,比如文字被判断成代码,代码中的注释被判断成文字,Swift代码被识别成Python代码等,多次修改之后Python代码和Swift代码的显示效果都能正常被包含在代码块中,且没有出现误判,Cursor添加的调试信息还是很管用的
12、现在AI对话页面的消息滚动效果没有统一(打开对话时有的对话会滚动到最近一条,有的对话会滚动到中间,有的对话会滚动到底部),询问Cursor目前是不是还有对浏览位置的保存机制(比如再次打开时会跳转到上次浏览的位置)导致滚动效果不统一,Cursor表示目前没有对浏览位置的保存机制,滚动效果不统一的原因可能是因为SwiftUI的渲染机制、动画延迟、消息数量差异等,然后再次修改AIChatView的滚动逻辑,结果是:统一滚动到最新消息、响应消息变化、避免滚动位置不一致、平滑的滚动动画,实际测试仍有部分对话没能直接滚动到底部
13、发现一个新问题,包含搜索结果的回答内容,底部不显示消息来源了,让Cursor检查问题出在哪里,检查发现AIMessage模型中有searchlinks字段,但MessageView缺少了搜索链接显示逻辑,修正之后,再统一了参考链接的显示宽度(是参考链接部分没有继承AI回答内容的宽度限制导致的宽度不一致)
14、AI消息相关的功能现在逐渐增多,接下来想让Cursor把MessageView从AIChatView中拆分出来,Cursor也认为应当拆分,以提升后续的代码可维护性,创建了新的MessageView文件,但又突然创建了脚本,想用脚本修改项目文件,被我叫停了
15、发现Cursor在拆分文件时经常出现类似的问题,在创建新文件后都需要将新文件添加到项目文件里,但有时Cursor会后退一步,不管新建的文件,而是选择在原有文件中恢复原本已拆分出去的功能,或者创建脚本,用脚本去修改项目文件(Cursor会先对项目文件做备份),当然可以叫停,让Cursor直接去修改项目文件
16、今天Cursor的Dashboard统计功能竟然正常了,可以看到从付费到现在的代码修改量,到目前为止已经编辑了50211行代码

DevLog:2025年8月13日

1、昨晚突发奇想,问ima能否将iOS应用的项目文件改造为Mac应用,可以是可以,但一些问题需要注意,比如使用Xcode的Apple Catalyst技术,可以自动生成适配macOS的版本,这种方式可以复用大部分iOS代码,但需处理平台差异,也就是框架的差异,macOS应用使用的是AppKit,当然也可以用AI IDE来转换,要求“将iOS项目迁移至macOS,替换UIKit为AppKit”
2、不过对于目前的NoteWith而言,如果要迁移到macOS上,需要将SwiftUI替换为AppKit,UIKit和SwiftUI是Apple提供的两大UI框架,前者比较传统,后者比较现代,但二者可以混用
3、先把NoteWith的项目文件复制一份,文件夹更名为NoteWith for Mac,之后让Cursor在此基础上进行改造,然后NoteWith后续就兼顾手机和平板,个人认为macOS的操作方式还是以键鼠为主,直接将平板端应用安装在Mac上,操作并不是很方便
4、指令:我需要将这个使用SwiftUI编写的iOS应用改造为Mac应用,保留现有的AI对话(模型切换、流式输出、收藏等)、备忘录(置顶、编辑等)、模型(添加、管理等)、数据统计、深色模式等等功能,但要适配Mac端的用户操作习惯
5、Cursor陆续进行了修改项目配置、修改info.plist、修改主应用文件、修改ContentView、修改AI对话列表视图、修改备忘录列表视图、修改设置视图、修改备忘录编辑视图(含移除UIKit的导入)、修改AI模型管理视图、修改回收站视图等操作,之后继续修复UIKit导致的错误、将MarkdownEditorView改为使用AppKit的NSTextView、去掉iOS特性的颜色和API(比如systemGray仅限iOS使用)、去掉在macOS上不可用的ActionSheet,终于可以构建成功
6、小结,将iOS SwiftUI应用改造为macos应用的过程中,涉及项目配置修改、主应用文件适配、视图层修改、系统服务适配、颜色和样式适配、交互方式适配等
7、虽然构建成功,但功能还是要挨个测试并让Cursor修复,在Xcode中启动应用测试,这可比测试iOS应用简单多了,直接打开就能用键鼠操作,之前在不支持触控的Mac上测试iOS应用的触控操作属实有点费劲
8、初步测试发现这些问题:1.设置界面切换深色模式时,应用没有切到深色模式 2.AI模型管理界面,预置的模型和新添加的模型都无法编辑、删除 3.设置界面AI模型数量统计不正确 4.备忘录列表,创建新备忘录后只能编辑标题,不能编辑内容,先让Cursor修复一波
9、然后是对深色模式进行优化,现在不仅显示效果差,在切换到其它应用时外观设置还会丢失,Cursor优化了多个视图的深色模式显示效果、列表的空状态提示等,深色模式切换已基本可用
10、接下来是第二波修改,主要针对AI对话界面:1.提问的字体比回答的字体大很多,需要取一个居中值,让提问和回答内容字体大小一致 2.发送按钮比输入栏高很多,需要取一个居中值,让输入栏高度和发送按钮高度一致,同步优化下AI对话界面和备忘录界面的搜索栏输入框高度 3.长按消息弹出的弹窗上方有一个无用的按钮,可以删掉,修改过程中再次遇到了字体大小被MarkdownRenderer强制设置的问题,Cursor修改了这个文件,使其能够接受自定义的字体大小参数
11、第三波修改主要围绕应用的外观,可能是因为目前的应用沿用了大量的iOS代码,在应用的外观上有些别扭,比如图标按钮比较大但文字按钮比较小;搜索栏高度合适但有内边距,不够简洁;设置界面的数据统计功能三个横条的高度和AI模型管理、回收站、外观设置的三个横条相比偏窄等等,让Cursor统一优化下,并且让Cursor看看还有没有其它地方可以修改,让应用界面比较现代一些
12、Cursor创建了更现代化的设计系统,统一按钮样式、搜索栏样式和设置界面的布局,并对多个视图和按钮样式进行优化,之后修复一些几处小问题,测试发现界面上稍微有些改善,一些按钮不像之前那样局促了
13、继续测试并优化体验,特别是改为用键鼠操作后,那些曾经需要触控才能实现的操作现在都要改成用键鼠操作,比如AI对话条目右侧增加置顶和删除按钮,并且优化一下左侧的导航栏,去掉文字、增大图标,然后增加AI对话的删除/恢复机制,给AI对话双方增加头像标识
14、因为在AI对话列表中创建新对话时标题被遮挡,但多次修改后仍然被遮挡,且搜索栏样式较丑,决定将搜索按钮放在左侧导航栏,点击弹出搜索窗口,可在一个入口搜索AI对话和备忘录内容,Cursor在修改时自动创建了新文件SearchWindowView,去掉了AI对话列表和备忘录列表顶部的搜索栏,并且修改了搜索逻辑
15、搜索窗口做的还可以,但即使没有了搜索栏,在创建新的AI对话时标题还是会被遮挡,让Cursor将AI搜索列表页和备忘录页对比一下看看,为什么会有遮挡的情况,Cursor表示AI对话列表和备忘录列表的功能差异较大(反正就是想表达直接对比没有多大意义,也不会带来什么改善),后来添加了滚动监听,检测到状态变化时自动滚动到列表顶部,也算是解决了问题
16、然后优化备忘录界面,备忘录内容无法修改的问题依然存在,而且新创建的备忘录也会被部分遮挡,让Cursor结合DEBUG信息修正无法修改的问题,并参考AI对话列表的处理方式来处理新建备忘录被遮挡的问题,增加条目右侧的修改、置顶、删除按钮(Cursor在修改的同时移除了原有的收藏按钮),让AI对话列表和备忘录列表都能显示一行预览内容,目前AI对话列表只显示标题,尽量让两个列表的样式一致
17、目前AI对话列表和备忘录列表都已支持标题+置顶标识、Markdown渲染的内容预览(最后一条AI回答)、时间、操作按钮(编辑、置顶、删除),对比后发现置顶备忘录的标题左侧还缺一个置顶标识(pin.fill),也让Cursor加上了,至此两个列表样式基本一致
18、然后统一了AI对话回收站和备忘录回收站的样式和功能,现在都有恢复、永久删除、清空三个按钮了
19、功能修复至此告一段落,让Cursor删除多余的项目文件备份和脚本,接下来要重点处理备忘录的编辑功能
20、备忘录的编辑功能目前还无法正常工作,我不再需要切换编辑和预览状态,从列表中点击备忘录条目即可进行编辑,即使简化了需求也没有解决问题,于是询问Cursor有没有其它编辑器可以替换它,Cursor认为当前使用的NSTextView存在布局约束冲突、状态同步复杂、进程间通信稳定性、配置复杂等问题,并且推荐了“简化版TextEditor+工具栏”的替换方案,认为这种方案稳定性高、功能足够、易于维护,且符合macOS的设计规范,用户体验好,接受了Cursor的建议,很快替换完成
21、在编辑备忘录时,一旦选中文字并点击格式按钮切换格式,所有内容都会被应用格式,而不是只针对被选中的文字,并且无法用command+z撤销修改,还有,既然导航栏多次修改后依然没有去掉折叠/展开按钮,干脆就加回功能文字:AI对话、备忘录、搜索、设置
22、备忘录的编辑功能还是不能正常使用,先让Cursor将其替换为富文本编辑器试试,如果可以的话,就将备忘录功能与AI对话功能分离,类似ima的“笔记”,然后增加一个知识库模块,收藏的AI回答内容进入知识库,不需要对收藏的内容进行编辑
23、Cursor在修改备忘录编辑功能时表示将NSTextview替换成了SwiftUI原生的TextEditor,但前面好像已经换成了TextEditor,虽然现在可以使用了,但前面Cursor到底有没有替换编辑器呢?
24、总之,在将NoteWith迁移到macOS上之后,先修复功能上的BUG,之后再扩展一些功能,接下来先增加知识库模块,收藏的AI回答的内容放到知识库里,不放到备忘录了
25、这段时间Cursor创建了多个project.pbxproj的备份文件和脚本文件,测试基本稳定后再让它删掉这些文件,而且我发现创建了新对话后就容易出现这种问题:不直接修改项目文件,而是用脚本修改,构建完成后尝试打开应用等等