DevLog:2025年9月9日

1、继续昨天的修改,昨天为了实现对表格较好的渲染效果,拆分出了UnifiedMarkdownView,用于渲染普通文本,表格和代码块都已有专用的文件来渲染,但UnifiedMarkdownView使用了简单的Text组件,丢失了Markdown渲染效果,还是需要换成NSTextView,以实现良好的Markdown渲染效果、文字选择、右键菜单等功能
2、为了实现除表格和代码块之外的文本内容的渲染效果,Cursor创建了新的文件MarkdownTextView,至此明确了组件的职责,MarkdownTextView专门渲染普通文本,TableView专门渲染表格内容,CodeBlockView专门渲染代码块内容,UnifiedMarkdownView统一协调各个组件
3、接下来又是漫长的添加调试信息、定位问题的过程,在此过程中出现了应用卡死、文本不显示等问题,一直没能实现用NSTextView来渲染AI问答的文本内容,目前还是用的Text,可以正常显示文本、选择并复制文本,但没能搞定用AttributedString来解析Markdown,暂时搁置
4、先修改表格的样式,发现目前的表格第二行显示了一堆分隔符,而非正常的表格内容,而且Cursor给表格增加了最大高度限制和滚动功能,我也用不到,让Cursor修改下,Cursor创建了MarkdownTableCell组件来渲染表格单元格,但导致了应用卡死,在恢复到简单的Text组件后暂时不会卡死了,但表格里还是混合了Markdown语法标记,尤其是加粗标记
5、先保存粗体处理试试看,目前测试过的两个表格,都是粗体字比较常见,没想到只想使用这一个功能,也会导致应用卡死,只能先撤销了这一步修改,接下来准备试试Cursor建议的第三方Markdown库,比如SwiftUI-Markdown或MarkdownUI,如果可以的话,应该可以搞定AI对话中的文本、表格,以及备忘录的Markdown渲染

DevLog:2025年9月8日

1、上周在修改NoteWith时,通过调试信息发现目前AI对话并不是真正的流式输出,而是在完整回答后模拟流式输出,Cursor建议使用真正的流式API,实现增量渲染(只渲染新增部分),并且缓存已渲染的组件,避免重复解析,今天先修改这个问题
2、在修改过程中,遇到了AI回答内容不完整显示(但调试信息里是完整的)、问题只有一行时下方有一行空白、流式输出内容的汉字显示为乱码等问题,最终实现了真正的流式API调用,通过修改AIService,新增streamAIModel方法,实现了流式响应和实时解析数据,AI一开始生成内容就立即显示,用户能更快看到回答开始,使用起来更流畅了,并且测试发现思考过程也可流式输出
3、至于汉字显示为乱码,是因为之前的逐字节处理流式数据,但UTF-8编码的中文字符,一个字符能占用2-4个字节,这就会导致中文字符被截断,从而显示为乱码
4、有意思的是Cursor竟然从我发送的全是乱码的AI回答内容中看出了我真实的问题,并在修改代码后问我“关于您提到的OpenRouter vs Anthropic官方API的对比,这是一个很好的技术选择问题。如果您需要进一步的建议或想要实现特定的API集成,请告诉我!”
5、用百度云千帆的DeepSeek-R1-250528写了一个斜体字Markdown语法正则表达式,试试看能否解决备忘录预览界面斜体字无法正常渲染的问题,测试发现没能解决,斜体字依然无法显示为斜体
6、AI回答内容中的表格一直无法正常渲染,特别像是仅仅把表格中的文字复制出来,根本不像个表格,于是询问Cursor能否用类似CodeBlocksView的形式,创建一个单独的文件来渲染AI回答内容中的表格?Cursor创建表格渲染组件,包含表格解析器TableParser、表格视图TableView、表格渲染视图MarkdownWithTablesView
7、创建新文件之后,经历了多次测试和修改,仍然无法正常渲染,包括看不见我提出的问题,看不见AI回答中的文本内容(基本上除了表格之外,其它的对话内容都看不到,但深度思考内容和参考链接区域没有受影响)等等,多次添加调试信息、反馈调试信息后仍然无果,决定发起一个新的Cursor对话再试试
8、看了一眼Cursor网站的DashBoard,出现了“Analytics are currently degraded and showing incomplete data. We’re working on resolving this issue. You can subscribe to updates here.”这样的提示,看来Cursor终于发现了数据统计功能的问题
9、询问Cursor发现当前AI问答内容全都是在使用新创建的MarkdownWithTablesView来渲染,和我理解的不一样,我希望的是在AI回答中有表格时使用MarkdownWithTablesView来渲染表格,在AI回答中有代码块时,使用MarkdownWithCodeBlocksView来渲染代码块,于是让Cursor创建了一个新的组件UnifiedMarkdownView来统一处理文本内容,并修改MessageView来使用分离的渲染逻辑,这样避免了功能冲突,可以看到AI问答中表格以外的其它内容了
10、但UnifiedMarkdownView对普通文本的渲染使用了简单的Text组件,丢失了Markdown渲染效果,后续还是要换成NSTextView,以实现良好的Markdown渲染效果、文字选择、右键菜单等功能,明天再完善UnifiedMarkdownView

DevLog:2025年8月29日

1、首先让Cursor把深度思考内容的底色换成浅灰色,目前的颜色在AI对话界面中略显突兀,因为提问和回答内容都改成了白色
2、需要继续优化AI回答内容的Markdown渲染效果,渲染后的内容能否不以空格替代语法占的位置?比如加粗的文字前后都有两个空格,Cursor表示在Markdown样式应用的过程中,代码使用了NSColor.clear来隐藏语法标记,但这只是让语法标记变透明,并未真正移除它们占用的空间,需要用字符串替换来真正移除语法标记
3、但测试发现使用字符串替换的效果不好,回答内容被截断,且原本使用了同一个Markdown语法的内容,部分文字有渲染效果,部分没有,尝试用属性应用而不是字符串替换,一顿操作之后,又回到了之前的效果,渲染后的内容还是以空格替代了语法标记占的位置,又是一个悬而未决的问题
4、如果改用SwiftUI的Text来渲染AI对话内容,会失去文本选择功能、失去右键菜单、文本搜索等高级文本交互功能,Markdown渲染也会有限制,还是继续保持目前的NSTextView吧
5、发现在AI对话列表中点击右键修改标题时会弹出弹窗,可以在弹窗里输入新标题,但弹窗上方一直有一个空的icon,之前也修改过多次,但删不掉,于是要求改成点击右键修改标题,直接在对话标题位置修改、回车确认,修改过程中发现AIChatSessionListView和AIChatView在功能上有一些重叠,Cursor分析后发现AIChatSessionListView没有被使用,AIChatView中包含了了会话列表和聊天功能,于是决定把会话列表相关功能从AIChatView中迁移到AIChatSessionListView里,这样更便于后续对聊天功能和列表功能进行分别管理,然后修正了导航栏消失、部分界面变成四栏布局等问题
6、接下来需要统一一下AI对话列表和AI对话之间、备忘录列表和备忘录详情之间的分割线样式、底色样式,选中样式,以及拖动调整比例的功能,在实现这一需求的过程中,将ContentView中有关AI对话列表功能完全移动到了AIChatSessionListView中,这下ContentView就只专注于导航和界面切换了,减少了跨组件的状态传递,符合单一职责原则
7、然后统一了两个列表的默认宽度(最小200、理想300、默认300、最大400)和样式(首次打开和切换时不选中任何一条内容、每个条目都不需要用圆角,翻译一下,正确的说法应该是移除自动选中和圆角设计)
8、发现在Views/Notes/Components文件夹下有两个文件,SearchBarView和EmptyStateView,但不知道这两个文件现在还有没有用,这是之前使用UserDefaults来存储数据时,Cursor拆分的组件,现在NotesListView里已经有了重复的组件,SearchBarView用于在备忘录中搜索内容,EmptyStateView是空状态显示组件,Cursor建议删掉这两个文件,我觉得目前这俩文件好像也没啥用了,甚至这两个文件都没有被项目文件引用,删完之后项目结构更加整洁了
9、AI对话和备忘录列表修改告一段落之后,我又开始看待办事项分组列表,询问Cursor后发现这个列表不是单独的文件,是TodoListView文件的中的一个组件,并且备忘录界面使用了HSplitView,可调节宽度,待办事项界面使用了HStack,固定布局,虽然备忘录分组管理的功能完整,但界面布局和AI对话、备忘录列表不一致,还是决定以后要改成一致的

DevLog:2025年8月28日

1、本周着实有点忙,这两天一行未改,先继续修正AI对话内容显示不全的问题,现在只显示一行或者几行,需要滑动才能看到全文,Cursor认为这是一些文本显示组件没有正确设置高度约束导致的
2、还没测试,有点纠结为什么每次新打开一个Cursor对话,就会在修改后尝试直接启动应用,每次都需要我跟它强调下不要直接打开应用,构建下看看有没有编译错误就行,然后在Cursor设置的Rules&Memories中发现了它可以根据过往对话内容学习我的偏好,并且列出了我的这项要求“The user prefers that the assistant not open the application automatically”,果断同意
3、查看已保存的记忆时,发现其中还有一条“用户要求每次构建时,默认使用iPhone 16模拟器,除非用户单独指定其它机型”,稍微修改了下,增加了“在构建iOS应用时”
4、继续测试,发现仍未解决,Cursor继续修改了文本容器的配置、文本视图的垂直调整大小设置等等, 但未解决问题,Cursor再次提出要用Swift的Text组件来替换NSTextView,在确认不会影响备忘录(只修改MarkdownWithCodeBlocksView,不修改备忘录使用的渲染组件)之后,我同意了替换
5、现在AI问答的内容可以完整显示了,但无法选择回答的内容了,且有部分Markdown语法的渲染效果不太好,比如链接不能点击直接打开、同时应用加粗和标题语法的内容仍然会看到语法标记等等,于是让Cursor检查一下还有没有其它的语法渲染效果可以优化一下
6、Swift的Text无法实现文本选择,还是回到了NSTextView,然后AI问答内容又不正常显示了,所有的AI问答内容都只能看到一行,继续修改,多次修改后终于可以同时实现问答内容全部显示、文本选择和Markdown渲染了,发现在和Cursor对话时,问题描述要尽量详细,并且每次修改后有什么变化都要一起告诉它,便于它判断上一步的修改方法是否正确,让下一步的修改更有针对性
7、虽然达成了上述目标,但用户消息和AI消息的一直有白色的底色,多次修改也去不了,于是换个思路,将用户消息和AI消息的浅绿、浅蓝底色统一为NSTextView的默认底色,再调整了间距等细节
8、今天到此为止了,明天继续优化Markdown渲染效果,看能否去掉隐藏的Markdown语法占据的位置,现在回答内容里的空格有点多,然后把默认行间距调整为1.2倍,现在排版有些太紧巴了
9、另外吐槽一下,最近遇到Connection Failed提示的次数有点多

DevLog:2025年8月25日

1、接下来优化文字选择相关功能,我的目标是可以选择AI对话内容中的部分文字,测试发现目前的NoteWith在选择AI对话内容的部分文字时,无法同时选择掺杂了了不同Markdown语法的内容,比如同一行文字里如果既有加粗的文字也有普通文本,就无法选择,如果这一行文字只有H3或者普通文本,就可以选择
2、Cursor理解了我的需求,但没完全理解,它还在延续上周对备忘录功能的修改,表示当前的WYSIWYG Markdown编辑器通过隐藏Markdown语法标记(将颜色设置为透明)来实现视觉效果,这回导致文本选择问题,因为不同的Markdown语法被分割成了不同的文本片段,于是Cursor主要修改了NoteEditView文件,改进了文本视图配置、添加文本存储代理、实现NSTextStorageDelegate、改进选择范围处理,测试发现备忘录中的内容的确可以跨行、跨语法选择了
3、但其实我是想让Cursor处理AI对话中文字内容无法跨Markdown语法选择的问题,在和Cursor明确后,它修改了MarkdownWithCodeBlocksView(其中使用NSTextViewWrapper来渲染各种Markdown元素),创建了新的ImprovedMarkdownTextView(实际名字是OptimizedMarkdownTextView),使用单个NSTextView来渲染整个文本内容,并删除旧的MarkdownLineView结构,修改过程中甚至还直接删掉了整个MarkdownWithCodeBlocksView,因为Cursor觉得它太复杂了?
4、Cursor重新创建了MarkdownWithCodeBlocksView,让整个Markdown内容在一个NSTextView中,但实测发现AI对话内容无法正常渲染,且应用非常卡顿,在不同对话间切换时甚至会卡死,原因可能是过多的调试输出、复杂的正则表达式处理、频繁的文本存储更新、重复的样式应用等,之后测试时发现AI回答内容无法正常渲染,有的看不到任何回答,有的会显示在一个小框里,没有展开显示,不过现在已经可以跨语法选择了,还是有成果的
5、截了多张AI回答以小框显示的图给Cursor之后,它判断可能是NSTextView的高度没有正确设置,需要让NSTextView能够根据内容自动调整高度,修改一轮之后问题依然存在,甚至还差一点就给我替换成SwiftUI的Text视图,赶紧拦住,后面重开一个对话再修改这个问题吧

DevLog:2025年8月21日

1、昨天把备忘录编辑功能由TextEditor换成了NSTextView,已经具备编辑、保存、选择、右键菜单等基础功能,今天继续测试并丰富备忘录编辑功能
2、测试发现目前备忘录未应用Markdown渲染,只显示了纯文本,未实现像Obsidian那种“所见即所得”的效果,Cursor表示需要将编辑器升级为支持实时Markdown渲染的WYSIWYG编辑器(不知道这个名字是啥意思),替换整个SimpleTextEditor为WYSIWYGMarkdownEditor
3、修改过程中发现又使用了NSColor.systemGray6这种iOS上才有的颜色,难道还是从iOS应用转为macOS应用的后遗症?
4、修改之后,部分Markdown语法已经实现了所见即所得的效果,比如标题1、标题2、标题3、有序列表、无需列表,但是粗体、斜体、行内代码三个语法虽然可以所见即所得,换行时渲染效果就会失效,而且编辑器内不支持通过快捷键command+Z实现撤销操作,Cursor先修复了撤销操作,然后通过改进样式应用逻辑来修复部分语法渲染失效的问题
5、编辑器出现了不能插入任何语法标记的问题,且刚刚insertMarkdown函数只是简单的在文本末尾添加内容,而不是在光标位置插入内容,Cursor进行了同步修改,自称可以实现在光标位置插入、包围格式智能光标、行级智能格式换行等等
6、再次测试,发现粗体、斜体、代码块这三个功能不好用,比如点击粗体按钮后,会在光标位置插入对应的Markdown语法,且光标在中间,但输入文字后,不会应用粗体效果,且部分文字会消失,斜体也是这样,代码块貌似不能正常闭合,会影响到后文的渲染,继续让Cursor修改
7、多次修改后,还出现了看不到备忘录内容的问题,Cursor创建了一个临时调试的简化版本,并增加调试信息来定位问题,粗体和斜体的正则表达式好像一直有问题,这几天一直在修复这个问题
8、在Cursor对编辑器进行“根本架构层面”的修改之后,文字可以正常输入、窗口可以随意调整、粗体也能正常渲染了,但我发现备忘录里应用Markdown语法后的内容,有的会同时显示语法标记和渲染效果,有的只显示渲染效果,Cursor更建议所有Markdown语法都隐藏标记,于是陆续隐藏了标题、列表、引用样式的语法标记,显示效果还可以,后面继续优化
9、接下来增加待办事项模块,在导航栏的“备忘录”下面增加“待办事项”,并由Cursor来设计一些待办事项相关功能,同时在搜索、数据统计、回收站中也增加待办事项相关功能,测试一下看看Cursor能够做到什么程度
10、Cursor创建了待办事项数据模型、在DataManager中添加待办事项管理功能、创建待办事项视图模型、创建待办事项主视图、创建添加待办事项视图、创建添加分组视图、创建待办事项详情视图,并更新导航栏、更新搜索功能、更新设置(数据统计、回收站),果然这次创建了很多新文件后,又没有更新项目文件就开始构建,甚至还想使用Xcode的命令行工具来添加文件,但明明可以直接修改项目文件,我叫停了使用脚本的操作,要求Cursor直接修改项目文件
11、然后再次构建测试,修复多个新文件中出现的macOS不支持的API,之后构建成功,据Cursor总结,目前已实现了完整的GRUD操作(创建、读取、更新、删除)、分组管理(支持自定义分组和颜色标识)、优先级系统(四个等级的优先级管理)、截止日期、智能分类(自动分类逾期、今日、其它待办)、搜索集成、数据统计、回收站及UI适配macOS
12、测试待办事项相关功能之前先让Cursor统计了下当前的代码量,目前整个NoteWith共有8292行Swift代码
13、开始测试并修复待办事项模块的问题,包括1.新建待办的界面显示不正常 2.新建分组的界面显示不正常,Cursor不仅修改了这两个视图,还修改了TodoDetailView,并设置了三个视图的固定窗口尺寸,显示不正常的原因在于,在macOS上,NavigationView和Form的组合可能会导致显示问题,改为VStack和ScrollView的自定义布局
14、之后在测试添加分组时,发现DEBUG信息中出现大量的颜色名称(Cursor创建的待办事项模块可以用不同颜色来区分分组),但这些颜色没有在应用的资源目录中定义,导致系统无法找到对应的颜色资源,Cursor修改了多个文件来解决颜色问题,使用了系统预定义颜色,并创建颜色转换函数
15、解决之后,测试待办事项添加、修改相关的功能,比如待办事项列表里看不到星期几,添加待办时可以精确到小时和分钟(其实我只需要精确到年月日),两个问题均已解决,今天就到这里了
16、怎么感觉现在这个NoteWith越来越像Notion了?原本我是在仿ima的

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