DevLog:2025年7月15日

1、结合Cursor昨天给的建议,对NoteWith做一些功能和性能方面的优化,给Cursor的指令如下:
结合你上面的建议和我的需求,对当前版本做如下优化:
1.备忘录本身的功能优化:增加更多格式设置(选中文字后底部弹出格式设置按钮,点击即可应用格式)、备忘录详情页底部增加常驻的字数统计功能,可通过iOS系统分享面板分享备忘录至其它应用
2.备忘录和AI会话列表页采用分页加载或懒加载,以优化性能
3.采用本地缓存机制Core Data,并将数据存储操作放到后台线程
4.完善网络、存储等异常场景的错误处理,并给予用户友好提示
5.设置界面填写大模型API地址时,无需填写/chat/completions,防止造成重复路径
2、这次耗费的时间比较长,可能是由于需求数量较多,且中途Cursor为应用添加了旧数据迁移机制,但我反馈不需要改机制,因为应用还未上线,之后Cursor有一处频繁出现的错误时Xcode工程结构问题,无法通过代码自动修复,需要在Xcode中手动操作
3、但我这时并未按Cursor的提示手动操作,一直让Cursor帮我处理,多次让Cursor处理并夹杂一些不知道是否正确的手动操作之后,错误越积越多,已达20条,在Xcode中导出错误提示后复制给Cursor,分析原因可能是:
1.自动生成的 NSManagedObject 子类文件重复
你很可能有两份同名的 Core Data 实体类文件,比如:
一份在 Xcode 自动生成的(通常在 .xcdatamodeld 旁边的 “Generated” 文件夹或你指定的目录)
另一份是你之前手写的,或者你把自动生成的文件又拖进了项目,导致重复引用
2.文件被多次添加到 Target
有时候同一个文件被多次添加到 Target(比如拖进项目时勾选了 Copy if needed),也会导致重复编译。
4、Cursor给出的解决办法是,删除所有手写的NSmanagedObject子类,在Finder和Xcode中都检查并删除,只保留自动生成的文件,检查Xcode工程文件引用,删掉多余的文件,完成这两步之后,错误减少至11条。
5、实际操作中我好像把手写的和自动生成的文件搞混了,于是都删掉,再重新生成NSmanagedObject子类
6、之后还是反复出现“Invalid redeclaration”错误,Cursor提示我可能是有重复的文件,或者把同样的文件在Compile Sources列表中添加了两次,但我多次检查并没有重复文件,也没有重复添加,不停的让我检查.xcdatamodeld的Codegen设置,要求每个实体的Codegen设为Manual/None,删除DerivedData,重新打开Xcode,Clean Build Folder,检查Compile Sources,确认每个实体相关的Swift文件只出现一次
7、觉得造成今天这种错误反复出现的原因,可能是我要求切换存储模式为Core Data
8、将目前的项目文件给到Trae,使用新的Doubao-Seed-1.6模型,但直接让Trae检查项目时没有检查出当前的问题,提供错误截图之后,才对重复声明进行修正,这次貌似有点作用,错误消失了一部分,继续让Trae来修正试试,这时思考过程突然变成了英文(可能是公司网络状况不好?但现在大家都下班了,应该不至于啊)
9、Trae修改之后,又跳出来更多错误,没能帮我解决问题
10、怀疑可能是Cursor在处理我今天早上的第三条需求时,添加了数据迁移机制导致的这些问题,于是问Cursor:有没有可能是数据迁移机制导致的今天这些问题?去掉旧数据迁移机制,直接让应用以Core Data来存储数据,是否能解决?Cursor给出了相当于是肯定的答复:去掉旧的数据迁移机制,只用 Core Data 存储数据,确实能解决你遇到的大部分“重复声明”“编译冲突”等问题。只要保证项目里只有一套 Core Data 实体类和数据访问逻辑,相关配置正确,问题基本都能解决。
11、让Cursor去掉了旧的数据迁移机制,只用Core Data存储数据,经过多次且涉及多个文件的修正之后提示构建成功,看来今天这些问题就是由于Cursor在修改存储模式时添加了数据迁移机制导致的
12、接下来优化细节并处理警告,AI对话列表中没有对话时,将“没有找到匹配的AI对话”修改为“还没有AI对话”,将备忘录列表页的“创建第一个备忘录”改成“创建备忘录”,并且处理一下六处警告:/Users/jinlei.wu/Documents/GitHub/NoteWith/NoteWith/Services/CoreDataManager.swift:56:49 Conditional cast from ‘NSManagedObjectID’ to ‘NSManagedObjectID’ always succeeds
13、Cursor提示:所有objectID as? NSManagedObjectID的无意义强转已去除,直接使用note.objectID或session.objectID,这样可以彻底消除你提到的“Conditional cast from ‘NSManagedObjectID’ to ‘NSManagedObjectID’ always succeeds”警告。
14、基本全部搞定了今天一开始的需求,后续在模拟器中测试一下实际使用的体验,进一步优化

DevLog:2025年7月14日

1、今天对NoteWith做一些优化,包括:
1.去掉启动页面的图标,只留应用名和下面的文字就行
2.在模拟器中打开应用时,进入启动页前会有一两秒的白屏,需要去掉,打开应用直接进入启动页
3.在模拟器中运行应用时会有警告,需要修正一下:
/Users/jinlei.wu/Documents/GitHub/NoteWith/NoteWith/ViewModels/AIViewModel.swift:86:21 Capture of ‘self’ with non-sendable type ‘AIViewModel’ in a ‘@Sendable’ closure
2、修正后经Cursor构建和模拟器测试,上述优化均已完成,但还是感觉启动速度有些慢,继续让Cursor优化:感觉应用启动有点慢,虽然现在启动时没有白屏了,但还需要在蓝屏状态下等一两秒才会出现应用明和副标题
3、Cursor检测了当前的启动流程,发现SplashView会显示2秒钟,Cursor对这个问题进行了修正,并通过异步加载数据来减少启动时间,告诉我启动页显示时间由2秒缩短为0.5-1.2秒,并加入了淡入淡出动画,在启动时异步加载数据,主界面准备好后立刻切换,最大程度减少等待,Xcode模拟器测试发现冷启动时仍然会先蓝屏再显示标题和副标题,继续让Cursor优化
4、Cursor指出这是由于当前的启动页SplashView并没有在应用一启动时就立刻渲染,而是先显示了LaunchScreen,然后才切换到SwiftUI的SplashView,Cursor在修改中表示更好的方法是完全移除LaunchScreen配置,让应用直接进入SwiftUI,修改后构建测试成功,Cursor告诉我现在应用冷启动时会立即显示标题和副标题,无蓝屏过渡,直接显示内容,并且会快速进入主界面,数据加载完后立即切换,Xcode测试发现现在启动页面一闪而过,虽然给人一种快速进入应用的感觉,但不利于让用户记住这款应用的名字,决定将启动页面显示时长固定为1秒钟
5、Cursor快速修改,包括:简化启动逻辑,固定显示时间,清理不再使用的代码,但实际测试发现在冷启动时依然会先白屏,然后再显示启动页,不像ChatWith那样可以直接进入启动页,直接问Cursor:现在冷启动时还是会先白屏一下再进入启动页,为啥不能像ChatWith那样启动应用就直接显示启动页呢?
6、Cursor好像理解了我的问题(涉及两个项目之间的对比),并表示需要创建并配置Laucn Screen Storyboard文件,并对PBXFileReference等进行修改
7、Cursor一通操作之后又删除了刚刚创建的LauchScreen.storyboard文件,构建测试成功,再次用Xcode模拟器测试,好像没有任何的变化,应用启动时的表现又回到了今天最初的状态,可能是因为应用在启动时的数据加载要比ChatWith多吗?
8、直接问Cursor这个问题,Cursor表示NoteWith的确需要在启动时加载更多内容,并给出建议,比如将部分数据加载延迟到用户首次访问时,或者进行异步初始化,将数据加载移到后台线程,或者分页加载等等
9、参考Cursor的建议:延迟加载AI会话历史页面,当用户访问该页面时再行加载,以缩短启动时间,Cursor对多个文件进行了修改,将AI对话数据加载从初始化中分离,实现了备忘录数据和AI配置的立即加载,且仅在用户访问AI对话页面时加载AI会话历史,再次进行构建测试,提示成功
10、Xcode测试,好像启动速度的确比之前快了一点点,白屏时间缩短了一些,继续优化:把AI配置也改成延迟加载吧,和AI会话历史一样,仅在用户访问AI对话页面时再行加载。但我忽略了一点,用户在访问AI配置时当然也需要加载配置,但Cursor发现了这个问题,并且进行了同步修改,还是很智能的
11、Cursor总结,现在在启动应用时只加载备忘录数据,访问A对话页面时会加载AI会话历史和AI配置,访问设置页面时加载AI配置,实现了启动性能的提升和按需加载,减少启动时的内存占用,Xcode模拟器测试发现相比上一次修改没有特别明显的变化,后面等真机测试,积累一些数据之后再看看启动性能如何吧
12、用Cursor分别打开NoteWith和ChatWith,并询问同一个问题:你对目前这版应用有什么完善功能、优化性能的建议吗?
13、Cursor对当前版本的NoteWith的功能和性能方面的建议:
基于你目前对NoteWith的启动性能和数据延迟加载优化,整体架构已经非常合理,用户体验也有明显提升。以下是一些进一步完善功能和优化性能的建议,供你参考:
一、功能完善建议
多端同步与云备份
支持 iCloud 或第三方云服务(如 Dropbox、OneDrive)同步备忘录和AI会话,防止数据丢失,方便多设备协作。
搜索与筛选功能
在备忘录和AI会话列表中增加全文搜索、标签筛选、时间排序等功能,提升内容管理效率。
多主题/深色模式自定义
支持更多主题色彩和自定义深浅模式,提升个性化体验。
AI助手能力扩展
增加AI助手的多轮对话记忆、上下文理解、语音输入/输出等功能,提升智能化水平。
数据导入导出
支持导入/导出备忘录和AI会话为常见格式(如txt、markdown、csv),方便迁移和备份。
快捷操作与小组件
支持iOS主屏幕小组件、Siri快捷指令,提升便捷性。
二、性能优化建议
数据分页与懒加载
对于备忘录、AI会话等大数据量列表,采用分页加载或无限滚动,避免一次性加载全部数据。
本地缓存与异步存储
采用本地缓存机制(如 NSCache、Core Data),并将数据存储操作放到后台线程,避免主线程阻塞。
图片与多媒体资源优化
若后续支持图片、音频等多媒体内容,需考虑资源压缩、懒加载和缓存,减少内存占用。
启动流程进一步精简
检查启动流程中是否还有可以异步处理的逻辑,确保主线程尽快渲染首屏。
内存泄漏与资源释放
定期使用 Xcode Instruments 检查内存泄漏,确保大对象及时释放,避免长时间运行后内存膨胀。
三、代码结构与可维护性建议
模块解耦与协议抽象
通过协议(Protocol)和依赖注入解耦各模块,便于单元测试和后续扩展。
单元测试与UI自动化测试
增加关键功能的单元测试和UI自动化测试,提升代码质量和发布稳定性。
错误处理与用户提示
完善网络、存储等异常场景的错误处理,并给予用户友好提示。
如果你有具体想扩展的方向(如AI能力、协作功能、数据安全等),可以进一步细化需求,我可以帮你详细设计实现方案!
14、Cursor对当前版本的ChatWith的功能和性能方面的建议:
非常感谢你的信任!基于你目前的ChatWith应用(多会话AI对话、收藏、会话置顶、API配置、数据本地化、原生SwiftUI等),我有以下功能完善和性能优化建议,供你参考:
一、功能完善建议
消息搜索功能
支持在所有会话或当前会话内全文搜索历史消息,提升信息检索效率。
多模型/多API切换
支持在不同会话中选择不同的模型或API(如GPT-3.5、GPT-4、Claude等),满足多样化需求。
消息多选与批量操作
支持批量收藏、删除、导出消息,提升管理效率。
导出与分享
支持将会话导出为文本、Markdown或PDF,便于归档和分享。
自定义主题/暗色模式
增加主题切换,适配不同用户的视觉偏好。
消息撤回与编辑
支持用户撤回或编辑已发送的消息(本地层面)。
快捷指令/预设Prompt
提供常用Prompt模板,用户可一键插入,提升效率。
多端同步(iCloud/云端)
支持iCloud同步,实现多设备无缝切换。
更丰富的消息类型
支持图片、代码块、表格等富文本消息,提升交互体验。
消息上下文管理
支持设置会话上下文长度、历史消息截断策略,优化大模型调用成本。
二、性能优化建议
异步加载与懒加载
对长会话消息列表采用懒加载,避免一次性渲染全部消息导致卡顿。
本地缓存与数据归档
对历史会话、收藏等数据做分批加载和归档,减少内存占用。
UI渲染优化
使用LazyVStack、@ViewBuilder等SwiftUI高效渲染方式,避免不必要的重绘。
API请求超时与重试机制
增加网络请求的超时、重试和错误恢复机制,提升稳定性。
内存泄漏检测
定期用Instruments等工具检查内存泄漏,优化数据结构和引用关系。
启动速度优化
精简启动流程,异步加载非核心数据,提升冷启动体验。
三、用户体验提升
新手引导与帮助中心
增加首次启动引导页、FAQ或内置帮助,降低上手门槛。
交互动画与反馈
适当增加发送、收藏等操作的动画和提示,提升操作愉悦感。
无障碍适配
适配VoiceOver、动态字体等,提高可访问性。
如需对某一条建议详细展开(如实现思路、代码示例、UI设计等),请随时告诉我!
15、结合Cursor的建议,先对ChatWith进行优化:
结合你的建议,我需要为ChatWith增加如下功能:
1.增加消息搜索功能,搜索栏放在对话列表顶部,可以在所有会话的历史消息中进行搜索,无需保存搜索历史
2.对长会话消息列表采用懒加载,避免一次性渲染全部消息导致卡顿
3.使用SwiftUI高效渲染方式,避免不必要的重绘
4.在收藏消息时增加动画提示,提醒用户“收藏成功,可前往收藏页查看”
5.可长按收藏内容进行取消收藏、复制内容到剪贴板等操作,长按弹出的菜单提示“取消收藏”、“复制收藏”
Cursor对这些需求制定了实现方案,我要求“按你计划的步骤来开发吧,并且每步完成后都使用iPhone 16模拟器构建一下,先不用在模拟器中运行”,Curso开始逐条处理,中间需要多次确认,Cursor很快处理完成并提示构建成功
16、在Xcode模拟器中添加模型测试对话,提示服务器错误:HTTP 404,并且还有两处可以优化:新建对话的顶部不需要“已加载全部消息”的提示,优化一下会话列表的样式,可以改成无边框的卡片式风格,继续让Cursor修改,修改的效果也不是很理想,全部对话列表页的样式太丑了,目前每个卡片的长度是只比标题长一点儿吗?我需要即使标题特别短,卡片边缘也能到达屏幕左右两侧,另外,设置页面的API路径,有没有自动添加/chat/completions?继续让Cursor修改
17、404问题已解决了一部分,目前使用模型时需要在设置中填写不带/chat/completions的API路径,如https://api.deepseek.com/v1/,Cursor解释说实际请求的API路径时“你设置的baseURL+/chat/completions”,设置页面只需填写基础URL,不要带/chat/completions
18、经测试DeepSeek官方的API(API地址是https://api.deepseek.com/v1/)和火山引擎的API(增加了联网搜索能力之后的“应用”,API地址是https://ark.cn-beijing.volces.com/api/v3/bots/)均可正常使用,但OpenRouter的模型仍然会报错404,即使API路径只填写了https://openrouter.ai/api/v1/
19、今天用Cursor修改代码时,在构建测试环节多次出现“看起来没有iPhone 15模拟器,让我使用可用的iPhone 16模拟器来构建”的提示,需要等待iPhone 15模拟器无法进行测试,并多确认一次用iPhone 16模拟器测试(甚至后来还出现了一次用iPhone 14模拟器进行测试),可能是我的Xcode里没有安装iPhone 15的模拟器,但我没有找到从哪里设置Cursor默认的模拟器,且测试过程中还出现了Cursor自动启动模拟器、安装并启动应用的情况
20、这段时间用Cursor一直用的是默认模式,没有手动切换过模型,感觉也基本够用了,可能我的应用功能比较简单吧

DevLog:2025年7月11日

1、用Cursor将AINOTE应用的名字修改成NoteWith,并且在启动页的NoteWith下面增加一行小字“any AI LLM you like.”,将项目文件中出现的AINOTE字样也全部修改为NoteWith
2、Cursor快速修改了应用名称,甚至还同步修改了README文件中的描述,之后添加启动页面视图,用于显示应用名称和副标题,并测试编译是否正常,提示构建成功
3、继续修改部分文件夹和文件名字,并修正项目结构和路径引用等错误,Cursor总结如下:
1.主目录、工程文件夹、所有子目录、Xcode工程target、分组、路径、README、脚本等全部已改为NoteWith。
2.Xcode工程文件(project.pbxproj)所有引用、分组、target、产物名、路径等全部同步为NoteWith。
4、之后前往Xcode用模拟器测试该项目,模拟器运行成功,在GitHub里创建了一个本地库并且把项目文件都挪进去,这下ChatWith和NoteWith两个项目都放到GitHub本地库了,后面再尝试使用GitHub管理项目
5、模拟器测试NoteWith,发现有几个可以优化的细节:
1.备忘录页面,去掉顶部的“仅显示收藏”和“清空搜索”功能,不需要记录搜索历史
2.AI对话界面,去掉底部的清空对话、设置按钮,像备忘录页面那样在右上角增加一个加号,用于开启新对话
3.设置页面,去掉设置AI回复的最大长度(最大令牌数)功能和底部的预设配置选项,设置页面底部增加一个“关于NoteWith”,链接到README文件
让Cursor对这些细节进行调整和优化
6、Cursor今天好像不是很勤快,处理速度有些慢,说完“请稍等,我马上开始”之后就没动静了,再催一次之后才会继续,你不催,它就等,你一催它也能立刻开始
7、处理过程中,会话页面添加加号后Cursor告知目前的设计是点击后清空当前对话,开启新对话,但我的设想不是这样,我进一步明确需求:对话界面右上角的加号,点击后不要清空当前对话,可以直接弹出新对话窗口,并保留之前的对话,在新对话窗口左上角设置返回按钮,返回后可以查看之前的对话记录,Cursor进一步跟我明确了一些细节,比如返回后看到一个会话列表,需要为每个会话命名,以会话的第一个问题作为标题,且在会话列表中显示最后一次对话的时间,这次的改动貌似有点大,需要新增会话数据结构、支持多会话管理、新增会话列表视图、支持会话切换和新建等等,继续让Cursor修改
8、修改完之后询问Cursor目前的代码有没有什么问题和可以优化的地方,Cursor给出7条建议,包含AIService依然依赖旧的aiMessages、AIChatView新建会话按钮不会自动跳转到新会话、会话标题与时间显示优化等等,让Cursor对上述问题全部进行依次优化,之后进行构建测试提示构建成功
9、但用Xcode模拟器测试时发现存在两个错误:
Command SwiftCompile failed with a nonzero exit code
/Users/jinlei.wu/Documents/GitHub/NoteWith/NoteWith/ContentView.swift:41:21 Cannot find ‘AIChatSessionListView’ in scope
反馈给Cursor进行排查和修改,Cursor在修改后,告知如果还有类似“找不到类型/视图的报错,可以尝试清理构建缓存(Product>Clean Build Folder),然后重新编译”
但仍然存在错误,这次是3个:
Command SwiftCompile failed with a nonzero exit code
/Users/jinlei.wu/Documents/GitHub/NoteWith/NoteWith/ContentView.swift:2:8 File ‘ContentView.swift’ is part of module ‘NoteWith’; ignoring import
/Users/jinlei.wu/Documents/GitHub/NoteWith/NoteWith/ContentView.swift:3:8 No such module ‘NoteWith.Views.AIChatSessionListView’
10、原因在于AIChatSessionListView.swift文件确实存在在NoteWith/Views/目录下,但在Xcode中看不到这个文件,需要手动把这个文件添加到Xcode工程,找到这个文件并且拖拽到Xcode左侧栏的对应文件夹下,之后再构建就正常了
11、Cursor向我解释:Xcode工程的文件结构和磁盘物理文件夹是两套系统,在Finder里新建/复制的文件,不会自动出现在Xcode工程中,必须手动添加,只有Xcode工程中出现的文件,才会被编译、识别和引用
12、接下来继续优化应用,Cursor给目前应用的设置界面添加了数据管理功能,包括“清空所有备忘录”、“清空AI对话历史”、“重置所有设置”三个功能,但实际使用时基本不会用到,我都让Cursor给去掉了,另外在AI对话列表界面,最后一次对话的时间改为具体的日期和时间,而不是几分几秒前,Cursor按需求快速进行修正,Xcode模拟器测试成功
13、然后统一了备忘录列表页和AI对话列表页的显示样式,比如在AI对话列表页顶部添加搜索栏,AI对话列表的样式与备忘录列表样式保持一致等,直接开启Xcode模拟器进行测试发现会报错,Cursor分析问题在于:
你在 AIChatSessionListView.swift 里,把 .navigationTitle(“会话列表”) 用在了 VStack 或 if 语句后面,而不是直接用在 NavigationView 或 List 上。
.navigationTitle 只能用于 NavigationView 里的直接内容(如 List、ScrollView、VStack),不能用在条件语句或嵌套结构的外层。
并且给出了推荐写法,我还是让Cursor直接帮我修复了,测试构建成功,只有一处不影响功能的警告,当然也是继续让Cursor给修正,然后Xcode模拟器测试也已正常
14、回想起前几天ChatApp(现已更名ChatWith)在Xcode中测试时提示缺少Content和Preview文件夹,在指定路径手动创建文件夹后就可以正常构建,想让Cursor解决这个问题,但多次测试、修改之后,仍然需要这两个空文件夹存在于指定路径,但Xcode里好像看不到这俩文件夹,不知道怎么回事,Cursor表示:这两个文件夹如果Xcode项目结构里有引用,建议保留(哪怕是空的),如果确定用不到,可以在Xcode中移除引用后再删除
15、给ChatWith的启动界面添加了一个橙色背景,Cursor一开始给我改成了偏土色,后来在Color Hex网站试了一个稍微满意些的橙色(NoteWith的启动界面背景是稍浅的蓝色,且启动界面的文字、样式基本一致,这样会有种系列感)
16、今后任何修改都先在Cursor中进行构建测试,没有问题了再去Xcode中用模拟器测试
17、今后每周在功能补充和优化结束之后,都让Cursor基于应用现有功能更新一下README文件
18、本周对ChatWith和NoteWith的改动很大,涉及应用名称修改、功能增补、界面优化等等
19、为了完成今天这些需求,和Cursor说了十多次“好的继续”,基本上每完成一步就要说一次,还出现了两次可能存在网络问题的提示,是因为这个时间很多人都在用Cursor吗?还是因为公司网络状况不好?
20、猜测前几天在Trae中使用Claude Sonnet 4时多次出现文件被截断的问题,可能是由于触发了Claude Sonnet 4的输出字数限制?

DevLog:2025年7月10日

1、今天仍然是让Cursor优化应用,先让Cursor把应用的名字修改一下,改成ChatWith,并且在启动页的ChatWith下面增加一行小字any AI LLM you like.Cursor很快处理完成,检查应用后发现存在一行永远不会执行的死代码,也让Cursor给处理掉了,Xcode模拟器测试也已成功,之后让Cursor把所有的ChatApp(最先跟Trae描述应用需求后自动生成的名字)都改成了ChatWith,包括文件和文件夹的名字
2、其它需求后面再陆续,主要是界面的优化,以及开发者账户的完善,为真机测试做准备
在文字输入框左侧增加加号,点击可选择相册中的图片并发送给AI
发送按钮改成更简洁的向上的箭头
设置页底部增加关于,链接到README
在苹果开发者网站创建Certificate和Provisioning Profile,用于真机测试
3、下载了桌面版GitHub,创建了本地仓库,后续可以把项目搬到GitHub上,一是备份,二可以试试怎样用GitHub管理项目,在网页版GitHub里创建的仓库上传文件不是很方便
4、远期规划
数据存储在iCloud,并通过iCloud在多设备间同步
了解下怎样给应用添加图标
探索下怎样用AI快速开发鸿蒙版应用,先下载了最新的DevEco Studio

DevLog:2025年7月9日

1、继续让Cursor优化应用,主要是按钮位置和交互逻辑,需求如下:
1.在模拟器中运行发现收藏夹在会话列表顶部,但是和上边缘之间没有边距,比较难看
2.AI对话界面没有返回至会话列表的按钮,需要改为“通过下滑对话界面和点击返回按钮返回至会话列表”
3.设置按钮放在打开新对话按钮的旁边吧,用图标表示,不用放在每个对话界面的右上角了
2、提交需求后Cursor快速修改代码并进行构建测试、修复问题,并提示构建成功
3、继续在Xcode中测试,发现上述优化已经基本更新完成,只有收藏按钮略丑,后面再继续优化
4、下一步继续优化界面和交互逻辑,包括:默认以对话中的第一个问题作为对话标题、允许用户长按修改对话标题、删除对话、置顶对话,并且将对话、收藏作为应用底部的两个tab。Cursor在询问几个细节问题之后开始分解任务,并对应用进行分步骤优化
5、其中涉及对话数据结构的存储问题,包含本地数组、UserDefaults、CoreData三种形式,Cursor建议短期内可以先用UserDefaults,如果数据量大、需要复杂查询的话,以后再切换成CoreData
6、修改结束,让Cursor检查后提示可以正常构建,之后在Xcode中用模拟器测试,发现对话列表顶部仍然有收藏夹,然后对话页面顶部的“会话列表”需要改成“全部对话”,继续让Cursor修改,之后测试提示构建成功,仅有一处不影响运行的警告,也让Cursor修改了
7、继续在Xcode中用模拟器测试,测试正常,已经基本达成需求,还有一处小细节需要优化,对话列表和顶部的“全部对话”中间离得太近,需要适当增加一些边距,继续让Cursor优化,然后在Xcode中继续测试,OK了,今天就先到这里

DevLog:2025年7月8日

1、在GitHub创建了AINOTE仓库,询问AI后发现需要使用终端命令、生成密钥、克隆仓库到本地等操作,以后再试
2、测试使用Cursor修改由Trae创建的项目,在Cursor中打开test_2,测试如下需求:
检查一下这个App有没有可以优化的地方
3、Cursor给出一些“优化和提升用户体验、代码质量的建议”,比如考虑支持快捷键、加载状态提示、细化错误提示、过滤输入内容、提升可维护性、支持长按复制消息内容等
4、进一步明确需求:
1.我需要给这个App增加对回车发送消息的支持
2.允许用户开启新对话,并随时返回查看过往的对话列表
3.支持长按消息复制、删除或收藏
4.增加一个集中管理收藏内容的地方,可以放在对话列表的最前面
5.细化错误提示
6.应用你建议中第4条里的1和3对代码可维护性进行优化
Cursor会对需求进行分解并列出详细的开发任务,可以选择优先实现某一项,也可以按顺序逐步进行,按顺序进行的话,每完成一项需要确认继续下一项
7、上述步骤完成后,提出“结合最新的应用特性,优化一下README”文件,Cursor对README进行了优化
8、之后由Cursor检查是否存在问题,在修正问题之后提示构建成功,之后在Xcode中测试,模拟器测试可以打开,但界面存在一些交互逻辑上的问题,后续再行调整

DevLog:2025年7月7日

1、开始测试Cursor,虽然是全英文界面,但在对话时完全可以直接使用中文,内置了一些模型,也可以自行添加兼容OpenAI的模型,创建文件夹test_c
2、提出需求“创建一个名为AINOTE的备忘录应用,内置富文本编辑器和AI对话功能,AI对话功能可使用兼容OpenAI的自定义大模型,可以将AI生成的内容收藏到备忘录中,该应用支持iOS设备”,Cursor会提示进一步明确、补充需求细项,让需求更具体,并且给出建议的技术栈、数据存储和同步方案等,之后给出项目结构、主要功能模块、关键技术点和开发计划,下一步即将生成项目初始化代码和主要模块的SwiftUI代码骨架
3、确认之后开始编写:按以下结构组织项目、创建主要的应用文件结构、创建数据模型、创建服务层、创建视图模型、创建主要的视图文件、创建备忘录列表视图、创建备忘录编辑视图、创建AI对话视图、创建设置视图、创建资源文件、创建README文件,之后开始修复代码中的问题、创建启动脚本帮助用户快速开始,chmod +x setup.sh 赋予可执行权限,之后便提示创建完成,到目前大概二十多分钟时间,并且支持iOS 17及以上
4、使用Xcode打开该项目时会提示
The project ‘AINOTE’ is damaged and cannot be opened. Examine the project file for invalid edits or unresolved source control conflicts.
Path: /Users/jinlei.wu/Desktop/test_c/AINOTE.xcodeproj
Exception: -[PBXGroup buildPhase]: unrecognized selector sent to instance 0x600003245ad0
Cursor猜测项目文件有问题,确认之后Cursor开始重新创建项目文件,配置Swift文件引用关系,之后提示可以正常使用
5、再次使用Xcode打开,Xcode提示存在3个小问题,但已经可以正常运行,且界面精致程度(再次吐槽Trae写的App竟然不会全屏)、功能丰富程度(仅对比AI对话界面)要优于Trae编的App
6、Xcode提示的三个小问题,交给Cursor修复:
Xcode提示这三个小问题,帮我修复一下
Desktop/test_c/AINOTE/Models/Note.swift:5:9 Immutable property will not be decoded because it is declared with an initial value which cannot be overwritten
Desktop/test_c/AINOTE/Models/AIMessage.swift:4:9 Immutable property will not be decoded because it is declared with an initial value which cannot be overwritten
Desktop/test_c/AINOTE/Views/AIChatView.swift:60:26 ‘onChange(of:perform:)’ was deprecated in iOS 17.0: Use ‘onChange’ with a two or zero parameter action closure instead.
Cursor会快速修复并验证,提示成功,代码符合最新的Swift和iOS开发标准
7、再次使用Xcode打开,已经没有任何错误提示,就目前这种简单的应用编写和测试结果来看,Cursor的确要比Trae更胜一筹,Cursor会进一步明确需求、快速修复问题,且修复成功率更高,不清楚是否是因为我在Trae中主要使用的是Claude Sonnet 4,后续再对比测试

DevLog:2025年7月4日

1、得知在开发和测试阶段完全不需要交688
2、继续让Trae解决前一天的问题,猜测可能需求有些复杂了,于是简化需求:简化一下这个App,只允许用户添加一个大模型的API,无需添加多个模型并在不同模型间切换
3、Trae快速对前一天的代码和文件进行删减,并进行构建,提示构建成功,放到Xcode中会提示Build Failed,再次在Trae测试后仍然提示构建成功,已经解决了之前的构建错误
4、于是用Xcode打开当前项目,提示构建失败,但看了下错误提示,是缺少了两个文件夹,在项目文件夹的指定位置创建文件夹后再试,构建成功!模拟器启动,已经可以打开App、打开设置界面了,但未测试能否添加模型、能否与AI对话
5、发现这个App在模拟器上不能全屏运行,界面上面和下面都有大黑边,复制一份项目文件夹(命名test_2),让Trae尝试修正不能全屏的问题,Trae经过调整后表示已经修正,且构建成功
6、使用Xcode打开之后,提示构建成功,但还是不能全屏,继续让Trae修正,Trae修正后构建成功,再次打开Xcode打开test_2,已经可以全屏显示,并且避开了顶部的灵动岛,但输入框和发送按钮太靠近底部边缘,继续让Trae修正,添加了底部边距之后界面基本OK了,不是很理解,明明Trae在编写App时iOS系统版本是18.5以上,为什么还会有这种应用不全屏的问题
7、另外使用Xcode打开时还出现了如下错误提示:
/Users/jinlei.wu/Desktop/test/ChatApp/ChatView.swift:38:22 ‘onChange(of:perform:)’ was deprecated in iOS 17.0: Use ‘onChange’ with a two or zero parameter action closure instead.
询问豆包后得知,这是 Xcode 针对 iOS 17 及以上版本的 SwiftUI 代码给出的警告,表明Trae使用的onChange(of:perform:)方法已经被弃用,需要改用新的语法,参考豆包的答复稍作修改,错误提示消失
8、注册并下载了另一个AI编程工具Cursor,以后再试,先继续用Trae调整test_2

DevLog:2025年7月3日

1、首次测试AI编程工具Trae,接入了OpenRouter平台的Claude Sonnet 4
2、在Trae中输入应用需求后,创建项目文件夹(命名test),AI快速编写了iOS App,但我并没有进行构建测试,也不清楚是否有问题,需求:生成一个使用SwiftUI编写的对话App,可以通过该App与OpenAI兼容格式的大模型对话
3、进一步丰富了应用需求:继续完善这个App,需要允许用户添加多个大模型,并且在聊天过程中可以随时切换大模型
4、但Trae貌似陷入了死循环,不停地出现构建失败、检查问题、修复问题、再构建失败的情况,将模型切换成DeepSeek-R1之后不能直接帮我修改问题,只会分析问题可能出现在哪儿
5、用Xcode打开当前项目,提示构建失败,没注意看错误提示是啥
6、使用Trae的过程中多次收到提示“模型思考次数已达上限,请输入“继续”后获得更多结果”,且多次出现文件被截断的问题
7、注册了Apple开发者账号并且交了688

Mac端vivo办公套件使用体验

前段时间入手了vivo X100 Ultra,趁正在熟悉新手机,我也使用了一段时间的vivo办公套件,给大家分享一下这款App的使用体验。说明一下,电脑是2024款MacBook Air,M3芯片,以下体验内容可能并不是很深入,仅供参考。

vivo办公套件整合了原子笔记(含笔记、待办、文档)、日历、相册、远控PC四大模块,并且实现了一些类似Mac和iPhone之间的互联功能,接下来一个一个说吧。

一、原子笔记

通过vivo办公套件,可以在电脑上同步查看并添加、修改原子笔记、待办、文档。

1、原子笔记

原子笔记功能中规中矩,除了一般的笔记应用都具备的分文件夹管理、格式设置、插入图片/表格之外,还支持插入录音、音频,以及查看笔记字数(苹果的备忘录一直都不支持)。在最近的新版本中,原子笔记还支持了图片转文字、录音转文本(记录会议发言、AI总结重点)等功能。

单独提一下原子笔记的AI写作功能“小V写作”,该功能可以对已有文字进行续写、润色、改写等等,也可以直接输入指令,或者创作指定类型的内容,比如朋友圈文案、小红书文案等。在笔记页面双击command键就可以调出小V写作,也可以在选中文字后的右键菜单里使用小V写作进行修改。目前小V写作还是免费的,手机端叫“AI创作”。

其实已经有很多工具有类似功能,比如WPS、腾讯文档、印象笔记,还有做的比较早的Notion。不过我个人不太习惯直接用AI输出内容,即使要用AI,也是用豆包、ChatGPT之类给文章初稿润色。

在用原子笔记写了几篇笔记后,我发现了它的几个问题,希望后续可以改进:
1)遇到了“冲突笔记”问题,提示多端冲突,但并未告知该如何处理,也不提示我到底是哪儿冲突了。在手机和电脑端都登录一次之后这个提示就自动消失了,并且自动创建了一个新的笔记,内容基本一致,但却出现了修改未能同步的情况。对于一款能够多端同步的笔记应用来说,这是一个很要命的问题;
2)在笔记间切换时,会自动跳回到笔记的最开头,不会记忆上次查看时的位置;
3)需要在设置-笔记中才能找到已经删除的文档,个人觉得不如直接放在主界面的笔记文件夹下用着方便;
4)在不同的设备上记录的文字内容,字体大小偶尔会不一样,我手机端和电脑端设置中的默认字号都是14号,但有部分文字内容不知道为啥变成了16号;
5)不支持导入笔记,通过其他App记录的笔记内容不能导入到vivo办公套件里,如果只有几条还好说,但数量多了想要迁移过来就非常麻烦。

2、待办

接下来说待办。可以添加事项,设置提醒时间、重复频率、提醒方式等。我在用iPhone时一直在待办事项App中记录重要事项,并且设置了定时提醒,有些是每个月提醒一次(比如还信用卡),有些三个月提醒一次(比如交房租),有些则是一年提醒一次(比如居住证签注),但原子笔记这个待办好像不能三个月提醒一次,还是有持续优化的空间。在待办中添加的事项也会同步到OriginOS的日历中,并且可以在vivo办公套件的日历中查看。

3、文档

再简单说下文档。在电脑端、手机端都可以新建文档,电脑端可以导入本地文档,手机端可以导入其它应用中的文档,比如在微信中接收到比较重要的文档,可以选择用vivo文档打开,就会直接保存到vivo的文档里,方便集中管理。并且可以对文档进行一些编辑操作,比如转图片、转格式、修改文档内容等等。这里支持的文件类型包括PDF、DOC、XLS、PPT和TXT,日常办公基本够用了。

这里需要注意的是,电脑端上传和新建的文档会直接同步到手机端,但手机端上传和新建的文档默认不会同步到电脑端,需要在设置中将自动同步的文档范围改为“全部文档”。并且这些文档会占用云存储空间,如果确实有需求可以购买。

二、日历

如上文所说,待办事项会自动添加到日历中,并且实现手机和电脑端的同步。另外还可以在电脑上添加日程、设置类型、添加备注等,并且会自动同步到手机端的日历上,便于我们记录重要的工作生活相关事项。

三、相册

vivo办公套件支持查看和管理手机端相册,可以直接从电脑往手机上导入照片和视频,可以删除照片、查看已删除的照片,但不像Mac端的“照片”App那样有丰富的编辑功能。

个人建议查看相册时的照片显示比例可以再丰富一些,只有三个档位,照片要么太大要么太小,建议再增加一两个档位。另外,电脑端相册跟手机端的同步好像有点问题,比如我手机端显示有9300+照片,电脑端显示只有8200多张,手机端相册的设置中已经开启了自动同步照片功能,且两端均显示同步成功,两个数字相差的1000张去哪儿了?我只有“相机”一个相册,已经允许同步,问题到底出在哪儿?

对了,如果你想在电脑端查看手机拍摄的所有视频的话,记得在设置中打开“同步200MB以上的视频”开关,默认是关闭的,可能是为了节省云存储空间?

四、远控PC

按照该功能模块界面的描述,它可以用vivo手机或平板远程控制电脑,输入设备代码和临时密码就可以了。当然需要先在电脑端开启屏幕录制、辅助功能、麦克风、完全磁盘访问的权限,并在手机和平板端安装“vivo远控PC”App。

但是,远控PC功能只支持vivo X Fold折叠屏手机和vivo平板,vivo X100、X200系列直板手机是不支持的,故未测试。

五、连接手机

另外,Mac端的vivo办公套件可以连接手机,在登录相同的vivo账号,连接到同一个无线网络且解锁亮屏时,手机和电脑即可自动连接。可以实现通知接力、浏览器链接接力、图片接力、原子笔记接力、管理和备份手机端文件、手机投屏至电脑等操作,和iPhone与Mac的互联功能类似,但也有一些创新。

其中通知接力功能,可以将手机端的通知同步到电脑上,这样在工作时可以根据通知内容决定要不要拿起手机,也能提高一些工作的专注度。

建立连接后,在笔记中添加图片和视频时,也可以直接用手机拍照、扫描,直接添加手机中的照片和视频,还是非常方便的。

手机投屏至电脑类似华为的多屏协同,可以把手机端的文件拖拽到电脑、用电脑编辑手机端“文件管理”内的文件等等,开启投屏之后即使手机端熄屏也能在电脑上继续操作。

六、蓝心小V接入DeepSeek-R1

点击vivo办公套件界面右上角的蓝色图标可以启动蓝心小V直接对话。在最近的更新中,电脑端蓝心小V也接入了DeepSeek-R1,支持深度思考、联网搜索、查看引用链接,对话内容可以直接复制、插入到当前笔记、保存为新笔记,有需要的朋友们可以试试。

最后我还想说,希望vivo能把云服务功能整合进来,让保存和查看文件都更方便一些。

对上面这些内容,大家如果有疑问的可以评论或留言,毕竟我用这款手机的时间还不够长。也真心希望vivo办公套件能够修正其中的问题,越来越好用。

最初发布于2025年4月10日