DevLog:2025年8月20日

1、今天主要测试和优化备忘录功能,以及设置模块,首先设置界面目前有一个“设置概览”页,包括了数据统计和快速操作(导出数据、重置设置),但我不需要重置设置功能,且已经有单独的“数据管理”界面,决定让Cursor去掉“设置概览”,点击导航栏的“设置”时,默认打开AI模型管理,之后又修改了外观模式切换功能的样式,改成了三行,点击切换
2、然后来看备忘录功能,首先经过了多次修改之后,印象中备忘录应该是集成了TextEditor,但这个纯文本编辑器功能太过简单,且不能修改格式,进一步跟Cursor确认下:目前的备忘录功能,采用了哪个编辑器?是纯文本还是富文本?能否使用富文本编辑器?你推荐用怎样的方案?
3、Cursor推荐使用Markdown编辑器,优势在于:可以保持纯文本存储,数据兼容性好,支持丰富的格式化功能,且已有Markdown渲染基础设施(MarkdownRenderer),可以通过Markdown语法实现富文本效果,文件体积小,性能好,实现方式是:编辑时显示Markdown语法,预览时渲染为富文本,支持实时切换预览
4、同时Cursor还给到了具体的实施建议:添加编辑/预览切换、集成现有的Markdown渲染、语法高亮、工具栏,决定让Cursor按此建议实施,再结合测试情况调整,我不太想要编辑/预览切换按钮,比较符合直觉的方式应该是打开时就是预览,点击一下自动切换到编辑模式,先看看Cursor改的怎么样
5、Cursor基于NSTextView创建了自定义的CustomMarkdownEditor组件,换掉了原有的TextEditor,并且增加了Markdown工具栏、语法高亮功能等,支持字数统计、自动保存,测试发现打开一条备忘录后编辑器中看不到备忘录的内容,且出现了大量的“Modifying state during view update, this will cause undefined behavior”的提示,Cursor表示这是由于自定义编辑器实现中的状态管理问题导致的
6、在修复过程中,没想到Cursor直接删掉了刚刚创建的CustomMarkdownEditor,又改回了TextEditor,但的确可以看到其中的内容、可以切换编辑/预览状态,也可以保存修改了,并且也能应用MarkdownRenderer实现对Markdown语法的渲染,但针对粗体、斜体、行内代码三种Markdown语法,仍然缺乏对应的渲染机制,于是提示Cursor优化MarkdownRenderer
7、多次修改MarkdownRenderer等文件,希望能够实现对粗体、斜体、行内代码的正常渲染,但依然有问题,原因应该还是AI对话和备忘录模块都在使用的MarkdownRenderer和MarkdownWithCodeBlocksView等文件的问题,继续让Cursor修改,特别是最后卡在了斜体的渲染上,我发现NoteWith在备忘录和Markdown渲染上,混用了SwiftUI的Text和AttributedString,以及NSTextViewWrapper和NSAttributedString,这会让应用变复杂,于是要求只用NSTextView和NSAttributedString,目前的方案是编辑器是TextEditor,渲染器是NSTextView和NSAttributedString
8、多次修改后依然无法正常显示斜体和粗斜体,其它格式都可以正常渲染和显示,到底问题出在哪儿了?询问Cursor有没有必要将TextEditor替换成NSTextView?这样是否能简化Markdown语法的渲染?Cursor分析后表示目前使用的方案是编辑模式使用SwiftUI TextEditor,预览模式使用MarkdownWithCodeBlocksView自定义渲染,渲染管道使用了NSAttributedString+NSTextViewWrapper,这一方案编辑体验好,预览功能独立,不影响编辑,但需要解决复杂的字体属性传递问题,且编辑和预览体验不一致,如果将TextEditor替换为NSTextView,可以统一渲染系统,减少复杂性,可以实现实时预览(所见即所得),以及更好的字体属性控制,缺点在于编辑体验可能变差,需要处理光标位置、选择范围等复杂逻辑,且可能影响性能,但我个人更偏向所见即所得的编辑体验,比较符合直觉
9、Cursor在进行上述分析的同时,也建议再用颜色+背景+字体的测试方法来确定下颜色属性、北京属性和字体属性是否能正确应用,测试发现问题可能出在斜体字体的创建上(感觉这么长时间的测试好像白测了),我再给Cursor一个机会,但斜体依然不能正常显示,决定将TextEditor切换为NSTextView
10、切换之后,使用了统一的渲染架构,编辑和预览使用相同的底层技术,且Cursor表示NSTextView在macOS上性能更好,未来可以轻松添加富文本编辑功能,先试试看吧
11、首先就有一个大BUG,编辑视图看不到备忘录的内容,更别提编辑了,但预览视图可以看到,有没有必要使用编辑和预览两种视图?Cursor先通过设置textView.delegate导致文本变化无法正确同步的问题,但仍然看不到其中的内容,决定让Cursor改成所见即所得的编辑方式,但修改后编辑器都点不开,简化了一些功能后也依然无法正常使用,Cursor在修复时推测可能是文字颜色或字体渲染问题,继续添加调试信息来定位问题
12、Cursor在设置编辑器的初始尺寸之后,解决了看不到备忘录内容的问题,目前备忘录内容可打开,可编辑,可保存,可以看到光标,后续再测试其它格式设置按钮
13、今日剩余其它功能规划:1.给AI模型添加界面增加一个测试按钮,添加新模型时先试一下能不能正常响应 2.可以选择AI对话内容中的部分文字并进行复制等操作 3.完善设置中增加导入/导出功能,支持将外部内容导入到备忘录,支持将备忘录导出成txt或md

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