DevLog:2025年8月17日

1、今天重点优化备忘录相关功能,首先我发现备忘录列表里显示的备忘录内容不会随修改更新,比如备忘录里明明有文字,列表里却显示“空内容”,另外需要把备忘录标题下面的“文本编辑器”和右侧的字数统计去掉,因为界面右下角已经有字数统计了
2、修正这一问题后,发现又看不到支持深度思考的模型的思考过程了,并且在AI回答时,界面也不会自动向下滚动,可能是昨天将MessageView从AIChatView中拆分出来之后又有部分功能丢失了?先把这部分功能加回来,然后优化一下输出时的卡顿问题
3、继续优化备忘录,测试时发现了“列表顺序会随着点击发生变化,而不是只有修改内容时才会变化”和“光标自动跳转到结尾”的问题,在修改过程中,我发现虽然目前用的TextEditor是纯文本编辑器,但当前仍然有用到NSAttributedString来进行富文本处理,其实现在不需要处理富文本了,于是让Cursor去掉了富文本相关的代码
4、发现部分备忘录内容可以正常显示,部分不能,Cursor排查后发现Note模型有两个内容字段,一是markdownContent的纯文本内容,二是attrbutedContent的富文本内容,Cursor修改后改为二者均可正常显示,且优先使用前者,如果前者为空则使用后者
5、在修正备忘录问题的过程中,让Cursor去掉了知识库相关功能,暂时没有想好知识库该怎么用,而且知识库目前的存储也是以备忘录的形式存储的,和备忘录有些重合,先优化备忘录模块,后面再考虑更加其它功能吧
6、然后又修正了AI对话删除之后同时存在于列表和回收站的问题,修正了AI对话右上角无法切换模型的问题,奇怪的是之前我明明记得有一个AIModelSelectorView文件,啥时候消失了?
7、在让Cursor美化AIModelSelectorView时,美化有些过度了,并且再次出现了macOS不支持的SystemGray颜色,仍然时从iOS迁移至macOS的后遗症
8、结合当前应用的功能,让Cursor更新README,同时更新了应用的版本号为0.1,涉及info.plist和project.pbxproj两个文件
9、还在纠结数据的存储方式,因为UserDefaults主要用于存储一些配置相关的数据,在存储大小、性能、数据完整性、扩展性上均有限制,Cursor建议在数据量增长后迁移到Core Data或SQLite,比如数据大小超过5MB时,但因为对话内容中有大量的Markdown渲染,还有备忘录功能,数据可能很快就超过5MB了
10、决定先把目前的0.1备份一下,然后把数据存储机制改成Core Data,并且不需要迁移已有数据
11、Cursor表示要完成这一迁移,需要如下步骤 1.首先创建Core Data模型文件 2.创建Core Data管理器 3.更新数据模型以使用Core Data 4.更新DataManager以使用Core Data 5.更新相关的ViewModels,接下来当然又是修改项目文件、修复编译错误的漫长过程,待完成后再挨个测试功能
12、在修复编译错误的过程中,Cursor为了能更快解决编译错误竟然删除了五个视图文件,我拒绝,让它重新创建这五个文件,然后修正错误,因为担心后面还会再删除其它文件导致应用功能大量缺失
13、累计修复了:类型定义问题、可选值处理、方法签名修复、ScrollViewReader问题、Core Data关系处理、视图组件修复,以及几处警告,终于可以成功构建了
14、接下来测试功能,一打开App天都塌了,缺失了大量功能,接下来逐个修复,
1.备忘录界面没有创建备忘录的按钮 2.去掉预置模型中的所有模型,让用户自己添加,并且在添加模型界面增加Tavily密钥字段 3.AI模型管理界面无法关闭或返回 4.整体布局也很奇怪
15、Cursor还是将应用改成了三栏式布局,之后恢复设置功能,其中包含统一管理模型、数据统计、切换深色浅色模式、管理回收站等功能,并且提出优先让Cursor使用已有的文件和代码
16、然后调整了关于、模型管理功能(既然已经没有预置模型,那就不再需要每次打开应用时都删除了)、调整搜索功能(在导航栏里添加搜索按钮,点击弹出搜索弹窗,去掉备忘录界面的搜索按钮),仍然要求优先用已有的代码,目前已经恢复了应用的布局,今后再恢复各个功能

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的备份文件和脚本文件,测试基本稳定后再让它删掉这些文件,而且我发现创建了新对话后就容易出现这种问题:不直接修改项目文件,而是用脚本修改,构建完成后尝试打开应用等等

DevLog:2025年8月8日

1、NoteWith默认模型的切换还是存在问题,正确的逻辑应该是:我将模型B设置为默认模型时,模型A自动取消默认模型状态,反之亦然,但现在我将模型B设置为默认模型时,模型A仍然还是默认模型;并且我将模型B设置为默认模型时,新建AI对话后自动使用模型B,多次修改后无果,决定先简化一下模型的选择和切换逻辑
2、简化内容包括:去掉“默认模型”和“当前模型”相关设置,在模型设置中不需要这两个功能,也不需要设置这两种状态,在创建新对话时,直接用AI模型列表里的第一个就行
3、测试发现Cursor直接把AI对话界面右上角的模型切换功能也给去掉了,还得加回来,在加回这个功能的过程中,我询问Cursor“你看下是否需要单独的视图文件来管理这个功能”,Cursor的确创建了一个单独的ModelSelectorView文件,但在将这个文件添加到项目文件的过程中,Cursor又突然说项目文件被损坏了,并且决定不创建单独文件,改为在AIChatView中直接内联定义ModelSelectorView,并且又恢复了昨天备份的一版项目文件,再次更新引用,感觉有点绕圈了,为什么之前可以直接修改项目文件,现在不行了呢?而且它这样恢复备份之后,我还得关掉Xcode,重新打开项目所在文件夹,好在测试后实现了我的需求
4、模型管理相关功能已经基本OK了,接下来就是思考内容的流式输出,在ChatWith上花了很多时间想完善这个功能,但一直没能达成,先跟Cursor明确下需求,针对支持深度思考的大模型,目前的应用是否会对思考内容进行流式输出?我需要看到支持深度思考的模型的思考过程,先流式输出思考内容,再流式输出回答内容,且思考内容和回答内容在样式上要有所区别,思考内容要支持折叠和展开
5、Cursor表示目前已经有部分功能支持了 ,但需要完善流式输出逻辑,更好地处理思考内容和回答内容的分离,并且优化UI交互(思考内容的折叠和展开),修改完成后测试,发现即使用的是DeepSeek-R1(深度求索官方的API)也不会出现思考过程,另外还有两个影响使用的问题1.在同一个对话里多次对话后,AI的输出就会变得特别卡,我再提出新问题时也会变卡 2.目前的markdown渲染也不是很完善,比如回答内容里有python代码时就无法正常渲染,可以看下截图,是不是还要再完善下MarkdownRenderer
6、Cursor认为可能是历史消息过多导致内存占用过大、每次发送消息时都加载全部历史记录、流式输出时的状态更新过于频繁,优化了AIViewModel、AIService中的历史消息处理,之后完善MarkdownRenderer,以支持代码块、语法高亮和图表,修改完成后连续回答多个问题之后应用还是会卡顿,对代码块的渲染效果也不是很好,另外还发现,在切换一个对话的模型之后,其它对话的模型也都会随之切换,我需要在每个对话中保存对模型的选择,比如在对话1中选择模型A,对话2中可以选择模型B,对话3中选择模型C,应该互不影响
7、Cursor认为卡顿是因为每次流式更新时都在主线程更新UI,并且频繁的状态更新导致界面卡顿,继续优化了AIViewModel中的流式更新逻辑,关于模型的选择,需要在每个对话中独立保存模型选择,修改之后前者略有改善,后者已经搞定
8、继续优化一下模型选择器的触控区域:点击AI对话界面右上角选择模型时,选择模型时,需要加大触控选取的范围,我需要点击整行时都可以选择对应的模型,现在只有点击文字区域时才会选择对应的模型,Cursor修改成了整个模型行都是可点击区域,并且认为这更符合iOS用户习惯
9、昨晚GPT-5刚发布,今天早上打开Cursor就提示已支持,并且可以免费使用,但我没有试用
10、突发奇想,问Cursor能否通过Tavily实现联网搜索,竟然可以,快速创建了一个Tavily搜索服务TavilySearchService,并且在AIConfig中添加Tavily API密钥配置,修改AIService集成Tavily搜索功能,Cursor表示需要在对话过程中输入搜索、查找、最新、新闻、今天、现在、实时、当前、最新消息、最近、近期等关键词才能触发联网搜索,并且会将搜索结果作为上下文提供给AI,但目前会自动获取前3个最相关结果
11、以后再测试集成Tavily搜索的效果如何,再看看要不要增加搜索结果数量,要不要调整填写Tavily API的位置等等
12、发现这两天Cursor明显变慢了,经常在修改过程中等待很长时间

DevLog:2025年7月29日

1、今天的目标是把DoitWith的分组功能加回来,目标是:
1.点击右上角的“+”可以选择创建新Todo、创建新分组
2.创建新Todo时可以选择分组
3.点击左上角“Edit”后,每条Todo右侧的删除按钮左边增加一个编辑按钮,点击弹出编辑界面,类似添加Todo界面,可以选择这条Todo的分组、设置截止日期和重复频率
4.设置中增加分组管理功能,可以删除分组,确认后即删除
2、决定让Cursor分步操作,先实现上面和1和2,Cursor增加了分组颜色设置等细节优化,但存在这些问题:新创建的分组不会出现在Todo列表里,我的需求是 即使目前已有的分组下都没有Todo,也要呈现在Todo列表里;另外新创建的Todo也没有出现在Todo列表里,检查一下是怎么回事;还有,创建完分组或Todo后,ActionSelectionView能否自动消失?目前还需要手动点一下取消才会消失
3、让Cursor修正这些问题之后,继续优化,发现点击左上角“Edit”时,只有General分组下的Todo支持拖动排序,其它分组下的Todo同样需要支持拖动排序,另外设置页面的TODO统计,数字也不对,是不是只统计了General分组下的Todo?然后去掉设置中的Reset to Default Data按钮和功能,我不需要
4、Cursor快速修复了上述问题,发现给Cursor的需求要尽量具体到某个按钮的某个功能,还有就是在付费之后Cursor的效率有明显的提升
5、继续修复一些小问题:点击左上角“Edit”后,我需要暂时隐藏掉Todo条目最左侧的圆圈,可能会让人误解这是多选按钮;另外现在每条Todo在点击完成后都无法撤销,我需要在再次点击时撤销完成状态
6、Cursor快速修复了上述问题,继续测试后发现还有问题,从回收站中恢复的Todo条目,不会回到原本所属的分组,而是到了General分组里,继续让Cursor修复问题,Cursor甚至还给出了“如果原来的分组被删除了,恢复的Todo会添加到General分组作为降级处理”的额外方案
7、从2-6的需求全部完成,接下来继续增加编辑Todo、管理分组的功能,先增加编辑Todo的功能,需求是:点击左上角“Edit”后,每条Todo右侧的删除按钮左边增加一个编辑按钮,点击弹出编辑界面(类似添加Todo的界面)可以在编辑界面修改这条Todo的标题、描述,设置截止日期和重复频率
8、Cursor在修改后仍然存在一些问题,一是编辑、删除、拖动排序三个按钮离的有点近,可以稍微拉大一点间距,防止误触,二是点击编辑按钮弹出了“删除”的弹窗,没有进入编辑界面,关于间距的修复,由于编辑、删除按钮和拖动按钮不属于同一个组件,无法调整边距,在尝试两次后撤销了间距调整操作,第二个问题已经修复完成,但存在首次打开Todo编辑界面立即消失,需要再次打开才能编辑Todo的问题,继续让Cursor修复,多次修改未果,点击编辑按钮会弹出删除的弹窗
9、决定换一种交互形式,去掉每条Todo右侧的编辑和删除按钮,改成长按每条Todo弹出菜单,菜单里包含编辑Todo、删除两个功能,点击编辑Todo进入编辑界面,点击删除弹出弹窗,确认后即删除(Cursor认为这样更加简洁,且符合iOS的设计规范)
10、实现这一需求后,发现首次长按Todo条目、编辑Todo时会弹出一个空白页面,再次编辑Todo时才会弹出完整的编辑界面,继续让Cursor检查并修正该问题,多次修改后解决
11、我发现即使不点击左上角的Edit按钮,也能通过长按和拖动来调整Todo的顺序,可以让Cursor去掉左上角的按钮,以及点击按钮后界面的变化相关代码,但要保留拖动调整Todo顺序的功能,Cursor边修改边检查/修复问题,涉及了TodoView.swift、TodoRowView.swift、GroupTodoRowView三个文件
12、接下来继续优化应用,主要针对分组管理:一是在Todo界面搜索栏下方添加几个按钮,按钮上显示分组的名字,点击可以直达该分组所在位置,创建新分组时自动在添加新按钮(Cursor说这叫“分组导航按钮”);二是需要在设置中增加管理分组功能,可以在这里删除分组,删除后该分组内的Todo自动移动到General分组,先增加第一个功能,增加分组导航栏
13、接下来让Cursor实现管理分组功能,Cursor创建了一个新的GroupManagementView视图来管理分组,可以在设置-管理分组中统一查看分组颜色标识、分组名称、分组内的Todo数量,也能点击删除,删除时会有确认对话框,并告知删除后的Todo会移动到General分组里
14、下一步优化搜索功能,目前的搜索框不是很好用,搜不到部分Todo条目,Cursor对搜索功能进行了优化,输入关键词即可在全部Todo内搜索,快速定位到搜索结果,但是有一个问题:在搜索到不在General分组内的Todo时,会同时显示搜索结果和“No Results”的提示,继续让Cursor优化,解决了这个小问题
15、之后让Cursor修改创建分组和Todo界面的英文,改成中文,Cursor还自动同步检查了编辑Todo界面,之后再让Cursor把设置界面的一些英文改成中文,模拟器测试OK,然后让Cursor结合当前应用的功能刷新了一下README
16、检查一下目前的文件中有没有深色模式相关的代码,Cursor检查后发现的确存在深色模式相关代码,但设置界面中没有对应的选项,于是开始修复,涉及了主应用入口、设置、SplashView、RecycleBinView等文件,并且发现存在两个设置文件SettingsView和SettingView,检查后删掉了SettingsView,测试深色模式可正常启用
17、DoitWith先到这里,回到NoteWith,在Xcode模拟器中运行时出现三处被弃用的语法警告,先让Cursor处理一下,之后对NoteWith的功能进行测试
18、首先是备忘录相关功能,点击创建备忘录按钮或右上角加号后,添加内容并保存,并没有出现在备忘录列表里,需要检查一下原因,多次修改后仍然无果,决定先让Cursor把数据存储方式从Core Data改回UserDefaults,这样可以简化数据管理,避免Core Data的复杂性
19、Cursor删除了8个涉及Core Data的文件,并清理其它文件中对Core Data的引用,创建了一个新的简化项目文件,移除所有Core Data相关的引用(已经自动备份了当前的项目文件),之后果然能够正常保存备忘录了,Cursor还是厉害,Core Data等以后比较熟悉了再切换吧,现在先用着UserDefaults
20、目前格式设置按钮在备忘录详情页标题下方,但选中文字时弹出的剪切、复制等按钮就会把格式设置按钮挡住,继续让Cursor修改:需要把格式设置按钮全都挪到备忘录详情页底部、字数统计栏上方,并且增加删除线、设置文字颜色按钮;删掉右侧的“清空内容”按钮;目前工具栏中的“A”图标对应的是什么功能?点击之后会卡死
21、Cursor在修改之后,格式设置功能还是有问题,决定让Cursor修改这些:备忘录详情的格式设置还是有问题,选中文字后,可以设置格式,但再次点击格式按钮后不会取消格式;另外在备忘录列表页,在某条备忘录的空白位置点击就会被标记星号,我的需求是只有点击到星号时才会被标记星号;还有,移除备忘录详情页标题旁边的分享和删除按钮,我暂时不需要;在设置中添加一个回收站功能,管理我删除的备忘录,可以在回收站中恢复已删除的备忘录,这些需求均被Cursor快速完成
22、继续测试并让Cursor优化AI对话页,测试发现在AI对话页面点击创建AI对话按钮和右上角的加号之后,都只会创建新对话,但不直接打开新对话,点击对话列表中的条目也无法打开;另外在设置中填上API密钥、API地址、模型名称后点击右上角保存,不会提示已保存,也不会返回到其它界面,让Cursor一并检查、修复完成,创建新对话后对以弹窗形式打开对话,且对话内容互相独立,设置模型信息之后点击保存会提示已保存,至此NoteWith的基本功能已经OK
23、然后让Cursor删掉了设置页的版本号、项目主页等不重要的信息,以后再继续测试、优化,包括AI对话和备忘录TAB调换顺序,增加深色模式,优化设置界面的交互逻辑(把AI模型相关的设置改成弹窗),“设置”改成“我的”等等

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

vivo X100 Ultra半年使用体验:安卓应用生态有多混乱?

这些年我陆续换过多次手机,早期曾经用过小米1、三星Galaxy Note 2、LG G4,以及一段时间的金立S5.1,是当时比较有代表性的几款安卓手机。系统方面除了手机原本的系统之外,也给三星刷过锤子和阿里云OS等不同的系统,后来也是不想再折腾了才转投苹果阵营,陆续用过了iPhone 7、iPhone XS、iPhone 12、iPhone 15 Pro Max四代iPhone。

但苹果这几年的更新的确乏善可陈,还有一些存在多年的问题一直没能改掉,所以逐渐有了再试试现在的安卓手机的想法。关于vivo X100 Ultra和OriginOS 5的使用体验,我会拆分成几篇来写,都放在一篇里实在太长了。

其实这些应用生态方面问题,在我以前用安卓手机时就有,到现在仍然没有得到很好的解决,且这些问题并非局限于这款机型,应该说安卓系统的手机都存在这些问题。

第一,应用获取渠道很分散

先说应用安装环节,系统自带的应用商店会出于多种原因不提供某些应用的下载,还需要其它应用商店的补充。而且即使安装多个应用商店,也不能保证能下到所有自己想用的应用,因为有些应用只在自己的官网提供下载。

这段时间我在手机上安装了多个应用商店,分工如下:

vivo应用商店:国内常用的应用基本都能下载到,安装和更新也方便,不需要频繁手动确认;

Google Play:可以下载大部分国外应用和一些国内应用的国际版(或者说纯净版),且安装和更新不需要手动确认,但仍有部分国外应用会受限于区域,不提供下载(比如谷歌的Gemini、任天堂的Nintendo Today),还需要切换区域;

APK Pure:补足Google Play缺少的或因区域限制不提供的应用,缺点在于但APK Pure应用本身广告太多,很容易误点,且混杂了一些山寨应用,更建议去它官网下载应用的APK文件,再传到手机里安装;

应用宝、豌豆荚:两个老牌的三方应用商店,和vivo应用商店配合,能搞定所有国内常用的应用了(但豌豆荚被Google Play提示“此应用企图绕过Android的安全保护措施”,我已经把它删掉了)。

此外,还有一些应用不会上架任何应用商店,需要去官网甚至GitHub下载。

与之相比,虽然iOS上仅能通过App Store下载应用,但只要有外区ID,基本上各种应用都能下载到,真正做到了一个应用商店搞定所有需求,安装环节基本不存在碎片化问题。

第二,应用更新渠道也很分散,且版本成迷

用习惯了iPhone之后,需要更新应用时就会很自然地在App Store里更新(当然大部分时候都会自动更新,很少去手动检查更新)。但在OriginOS,或者说是绝大部分安卓系统魔改版上,仍然存在一些应用更新方面的乱象,具体来说:

vivo应用商店、Google Play、APKPure、豌豆荚、应用宝五个应用商店都可以更新应用,但提示有新版本的应用都不一样。比如在Google Play已经更新了所有应用,vivo应用商店仅检测到一款应用需要更新时,APK Pure仍有39款应用需要更新,应用宝提示有25款,豌豆荚提示有6款,到底谁更准呢?

部分应用在不同应用商店提供的版本不完全一样,比如在国内应用商店下载的DeepSeek,在Google Play中会提示“该应用并非来自Google Play,因此应用体验可能会有所不同,可以通过原始安装渠道更新该应用,也可以通过Google Play重新安装。”针对不同的区域推出不同版本也是正常的,苹果的App Store也这么干。但如果都是面向国内用户的应用,还会在不同应用商店提供不同版本,就很让人纠结。

部分应用自己可以更新,在检测到新版本时就会提示,可以自己下载更新,再手动确认安装,但也不是所有的应用都可以自己检测并下载更新。还有些应用在某个应用商店提示有新版本,在应用内检测更新却提示无更新。

有些应用即使刚刚从某个应用商店下载安装,首次打开时就会提示有新版本,怎么,我下载的不是最新版本?

一些系统自带的应用,比如钱包、vivo健康、蓝心小V,有新版本时应用商店里不会提示,反而要在应用内的设置中更新,进一步加剧了应用的碎片化。至少应该保证这些自有应用都统一在vivo的应用商店里更新吧?

还有一点,Google Play的保护机制可以检测设备中应用的风险情况,我安装的应用里,可灵AI和豌豆荚都被提示“此应用企图绕过Android的安全保护措施。”提示豌豆荚有风险我能理解,可灵AI为啥也会遇到这种问题?

第三,应用设计很不统一,缺少iPhone上的一致感

比如,iOS上的应用操作方式一致,比如在屏幕顶部点一下,列表页就能回到最顶端。OriginOS 5有部分界面支持该操作,比如相册中的照片列表、系统设置、通讯录、通话记录等等,也有部分三方应用支持,但是点击触发的位置、动画效果、回到顶端的速度等等都有一些差异。即使都是系统自带的应用,在动画效果上也有明显的区别。还有有一些应用还不支持该操作,比如百度贴吧。

比如,一些应用对当前版本的安卓支持不够好,可能是基于之前版本的安卓开发的?有些应用好不容易搞到了APK文件却因为版本问题无法安装,或安装之后打开会闪退,无法使用。还有某些应用中会出现比较早期的UI元素,与其它应用和系统本身的设计格格不入。

再比如,应用图标的设计风格在有些界面极度不一致,在vivo X100 Ultra上查看文件时选择“用其他应用打开”,会出现这种”诡异“的画面,圆角图标、直角图标、圆形图标等等各种图标混在一起,甚至圆角图标的圆角也都不一样,真的是毫无美感。

这么说吧,iOS上的每个应用都按照苹果的想法来设计,而在安卓上,每个应用都各有各的想法。

从最近几年各个手机厂商推出的新系统版本来看,安卓手机厂商们已经在努力追赶苹果了。但这个过程肯定没有那么快,尤其是应用生态混乱这种长久以来的积弊,并没有那么快能改善,从头开始构建应用生态的成本既不是一家公司能够承担,也不是存量用户能够忍受的。

关于这段时间使用vivo X100 Ultra的其它体验,接下来几篇再谈。

最初发布于2025年4月14日

iOS 14测试版深度体验:更透明的隐私设置和全新的APP资源库

苹果在6月首次以线上的形式举办了WWDC大会,正如往年的WWDC大会一样,例行更新了iOS、macOS等操作系统。iOS 14的众多新功能相信让很多人都跃跃欲试,笔者也是其中之一。于是下载了测试版的描述文件,在自己的主力机(iPhone Xs)上安装了iOS 14测试版。

笔者在7月8日更新至Developer Beta 2,之后陆续更新了Public Beta 3和Public Beta 4等版本。特别提示各位读者,测试版系统可能存在一些缺陷,需要谨慎一些,提前做好重要文件的备份。

经过这一个多月(从7月8日开始至本文发布)的体验,笔者发现iOS 14 Beta版相比iOS 13的主要变化有如下这些:

隐私/权限方面

1、在有程序使用摄像头(包括前置和后置)和麦克风时,屏幕右上角信号标志上方会有提示,官方称其为“摄录指示器”。比如在微信视频过程中(涉及视频),信号标志上方会显示小绿点;在电话过程中(涉及录音),信号标志上方会显示小黄点。这种极简的提示方式,相信会让用户更安心一些吧。笔者发现,在百度地图App运行时也会出现这种提示,可见它一直在调用麦克风……

2、系统会提示哪些App在读取剪贴板,比如我在微信聊天窗口中复制了一个网址,再打开Chrome浏览器,便会提示Chrome复制自剪贴板,打开能够读取剪贴板的App均有此提示。当不同App之间跳转时也会出现此提示,比如在饿了么点外卖,使用支付宝支付时便会有此提示。

3、在打开一些App时会收到这种提示:“XXX想要查找并连接到本地网络上的设备,此App将可发现和连接到您所用网络上的设备。”原因在于隐私设置中新增了“本地网络”,有些App会请求查找本地网络中的设备并与之通信。笔者安装的App比较多,涉及本地网络的App有外卖App、新闻资讯App和视频App、音乐App。笔者猜测,这些App是可以与iPad或HomePod进行连接?

4、当有App需要使用照片时,可以选择只允许访问选中的照片,比如你需要上传一张照片作为头像,可以只给App读取这张照片的权限。以前都会直接允许访问所有照片,在更新到iOS 14之后,可以进入设置-隐私-照片中修改具体每个App的照片权限。也就是说,我们可以不再将整个图库开放给App。

5、隐私-定位服务中的位置权限管理更加清晰,可以仅允许App使用大致位置,而非之前默认的精确位置。比如资讯App、视频App、音乐App,完全没有必要给到精确位置,毕竟它们获取用户的位置信息大多是为了更精准地投放广告。

App方面

1、新增“翻译”App,可以输入文本进行翻译,也可以输入语音进行翻译。在设置-翻译中打开“On-device mode”,可以使用设备端翻译,即离线翻译;横向时可以开启交谈模式,翻译对话内容。

2、原本只能在负一屏显示的屏幕小组件现在可选择不同的尺寸(小中大三种尺寸),并且可以拖动到应用列表里,外观也有一些调整。

3、新增App Clip功能,类似小程序,但目前还没有可用的App可供测试,需要等开发者们跟进(这一设置入口在Beta 4中消失了)。

4、最显著的变化,要数App资源库了,笔者来详细说一下这个新功能。

滑动到最右一屏即可查看App资源库,它将手机上安装的App进行了自动分类,手机自带的App同样会参与分类。注意,分类文件夹的名称是不能修改的。

目前的分类有建议(只显示四款建议的App)、最新添加(最近安装的一些App,但不知道何时能从最近添加中消失)、社交(社交App,如微信、微博、小红书等App)、参考与阅读(新闻、资讯、天气、阅读等App)、生活方式(购物、出行、外卖等App)、创意(修图、拍照等App)、实用工具(浏览器、快递等App)、娱乐(视频、音乐、直播等App)、效率(银行、办公、笔记等App)、健康与健身(健身类App)、游戏(游戏类App)和其他(目前这里只有“反馈助理”一款App)。

在不打开分类文件夹时,点击其中较大的图标(也就是最近经常使用的App),会直接打开App,点击较小的图标,会打开文件夹。App资源库中的图标大小和顺序会根据使用频率自动调整,且文件夹的顺序也会根据使用频率自动调整。

另外,在App资源库界面下拉,可以看到按照字母顺序排列的所有App,可以搜索,也可以按字母顺序快速找到想用的App。

这样一来你经常使用的App就一目了然了,再也不用在主屏幕上频繁滚动以查找App了。现在手机存储空间越来越大,对很多用户来说安装数十款App已经是常事,那些不常用,但每次使用时都需要重新安装的App,可以不必删除了。

但是同时会产生一个新问题:我需要用的App究竟属于哪一类呢?从目前来看,有些App并不会按照我们自己的想象来归类。比如App Store被归类到了“娱乐”文件夹,百度知道被归类到了“生活方式”文件夹。而且,也不能按照自己的喜好来调整分类。

5、在主界面长按某个App进行移除(注意是移除不是删除)操作时,会再次提示你是要从主屏幕移除(Beta 4的提示文字变成了“移至App资源库”),还是删除。如果从主屏幕移除的话,这个App仍然是存在的,虽然主屏幕里没有,但在App资源库中可以找到它。

那么,移除图标后的第三方App,要怎样找回在主屏幕的图标呢?可以在App资源库中找到它,长按即可弹出菜单,重新添加到主屏幕。还可以在设置-主屏幕中设置新下载的App是添加到主屏幕和资源库,还是仅添加到资源库。

我们可以将常用的App放在主屏幕,移除不常用的App图标,在App资源库中也可以突出显示常用App。这样就可以快速、高效地找到常用App,并且减少频繁翻页查找App对时间的浪费。

其他新功能

1、App Store中每个App的详情页,集中展示App的评分、适用年龄、排行情况、开发者、语言和大小,一目了然。

2、相机App新增快录视频和连拍快照功能,按住快门可录制快速视频,向左拖动快门可拍摄连拍快照(貌似是iPhone11首先发布的功能)。而且照片有正方形/4:3/16:9三种比例可选。

3、新增“画中画”功能,视频能够以悬浮窗口的形式播放,在播放视频过程中如果切换到其他应用,视频窗口会悬浮在最前,并且可以随意拖动位置。目前测试,在谷歌浏览器中播放的部分视频可以支持悬浮窗,B站等第三方App尚不支持此功能。

4、使用手机过程中如果来了电话,不再像以前那样霸占全屏,而是以小窗口的形式出现在屏幕顶部,可以直接接听或拒接。

5、Siri不再是全屏,而是以一个图标的形式出现在屏幕下方居中的位置,至于Siri有没有像官方宣称的“更聪明”,暂时还没发现。

6、设置-辅助功能-触控,最下面可以设置“轻点背面”两下或三下可以执行的快捷操作,比如调低音量、调高音量、截屏、静音、锁屏、Siri等等。这个功能藏的比较深。实测在通过这种方式截屏时会有比较明显的延迟,不如音量上和电源键一起按的速度快,甚至有时手指放在手机背面不动,都能自动截图,希望可以改进。

7、新增NFC功能开关,如果确实用不到的话可以关闭NFC功能。

以上就是笔者在使用过程中发现的一些新变化,还有一些细微的修改,比如图标的改动,但这对使用体验几乎没有影响。

上述这些功能的更新,使iOS更加透明、更加人性化。清晰、细致且可把控的隐私设置,让用户的隐私信息能够得到更好的保护;而针对目前越来越普遍的安装App数量日渐增多的趋势,iOS也在做出一些颇具实用性的改变。还有就是安卓系统很早便具备的小组件、画中画等功能,终于来到了iOS系统,也进一步提升了iOS的易用性。

提示:如果遇到部分App闪退等小Bug,可以尝试先清一下后台任务,或者重启一下手机。

虽然暂未发现什么大的Bug,且经过四个Beta版的迭代,iOS 14正逐步趋于稳定,但毕竟现在仍然是Beta版,不建议大家在自己的主力机上使用这一版本。如果确实想要尝试,请先做好备份。正式版本预计会在今年秋季上线,也很快了,不想折腾的可以再等等。

最初发布于2020年8月12日