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

1、目前在对话界面提交问题后应用还是会卡死,也没有“AI正在思考中”的状态提示,先让Cursor继续拆分ChatView,检查有无功能重复,如果与现有的单独文件有重复就保留单独文件,并且拆分ChatView中的部分功能为单独文件
2、Cursor拆分出了MessagefViews、ChatInputViews、ModelSelectorView、MessageDetailView四个文件,总计约200行,移除了所有重复的组件定义,提取的组件可以在其它地方复用,更易维护,ChatView现在是一个结构良好的主视图文件,进一步的拆分可能会增加不必要的复杂性
3、接下来继续测试功能,好像在和支持深度思考的模型对话时应用会卡死,且不输出回答内容,和不支持深度思考的模型对话时就能正常输出,但我现在不需要展示思考过程,直接给我展示AI的回答内容就行;另外,AI对话界面不能随着流式输出向下滚动;收藏时没有收藏成功的提示;收藏后的内容没有出现在收藏列表里,让Cursor检查下这几个问题
4、在让Cursor解决上述问题的同时,进一步优化MarkdownRenderer,以实现对表格的正确渲染,昨天测试了一个问题发现AI的回答中有表格,没能正确渲染,还是显示了大量的Markdown语法
5、发现在收藏列表页,点击收藏条目时不会打开,无法查看详情,而是会直接复制收藏的条目,看来可能在拆分文件后有部分功能失效了,继续修复
6、Cursor单个对话的Context Usage,难道是每天有限额,第二天自动重置?
7、再优化一些细节:去掉收藏列表长按菜单中的“查看详情”,直接点击就可以查看详情了, 不需要额外的按钮;现在AI回答内容和收藏内容都不能选取文字并复制,需要添加这个功能;还有对话列表向上滑动时底部会出现大片空白,我需要像收藏列表那样向上滑动时到最后一条就停止,不要出现大片空白;收藏夹列表右上角也添加设置图标,点击可打开设置界面
7、多次修改对话列表页底部的大片空白问题,在让Cursor添加调试信息后,发现可能存在重复计数的情况,将DEBUG信息截图发给Cursor并修复后解决了问题,并且还找回了之前不知道什么原因被删除的历史对话,没想到竟有意外收获
8、之后去掉了Cursor为了便于调试给对话列表和收藏列表添加的底色,并且在设置里添加了数据统计功能,可以查看对话数量和收藏数量,然后再优化三个细节:AI对话界面右上角显示的模型名称字体有点小,可以和左上角的“返回”字号保持一致;另外每次打开新对话时都使用默认模型,不用在设置中对模型进行选择了
9、接下来解决查看收藏相关的问题,比如:每次打开应用后,第一次打开一条我想要看的收藏时,弹窗是空白的,再打开另一条就可以正常看到内容;收藏列表貌似不是按收藏时间倒序;新收藏的内容不会立刻出现在收藏列表里;在对话中点击已收藏的内容并“取消收藏”时,不会取消收藏,多次修改后收藏和取消收藏功能均已正常
10、还有一个问题:目前的ChatWith用StoryBoard作为启动页面,NoteWith和DoitWith则是用SplashView作为启动页,这两种形式有啥区别?Cursor表示使用前者的场景有:简单的品牌展示、快速启动需求、不需要复杂动画、团队习惯Interface Builder;使用后者的场景有:需要启动动画、需要初始化逻辑(网络检查、数据加载等)、需要用户交互、需要动态内容、偏好代码管理,于是果断选择切换成SplashView,并且要求了ChatWith用40号加粗白色、副标题用title3、颜色用.white.opacity(0.8),和NoteWith、DoitWith保持一致
11、测试发现虽然可以正常启动,但我不清楚目前用的是SplashView.swift还是LaunchScreen.storyboard,Cursor检查时发现之前的LaunchScreen.storyboard还是没有删干净,除了文件本身外,还涉及了Info.plist、project.pbxproj中这个文件的引用,虽然这些地方都被Cursor修改了,但应用出现了不全屏显示的问题,清理Build Folder、重置模拟器之后,应用依然不能全屏显示,可能还是受到了早期代码的影响?
12、这次Cursor甚至创建了一个单独的全屏管理器FullScreenManager.swift,在多个生命周期点设置全屏,并在ChatWithApp、ContentView、SplashView、Info.plist中采用了多层全屏配置
UIScreen.main.bounds显示的是(0.0, 0.0, 320.0, 480.0),貌似是iPhone4的尺寸,后来还采用了硬编码的iPhone 16尺寸,依然没有解决问题,但我觉得应该没有这么复杂
13、之后把DoitWith的SplashView文件发给Cursor,对比了下有没有影响是否全屏的东西,也让Cursor重点检查下创建比较早的文件,看看有没有影响是否全屏的东西,毕竟这款应用刚由Trae创建时也存在不能全屏的问题,但还是没有解决问题
14、先让Cursor清理了多余的强制全屏的文件和代码,包括刚刚创建的FullScreenManager,之后在Cursor中开启新对话,决定让claude-4-sonnet来检查下为何应用不能全屏,并且要求只解决不能全屏显示的问题,不要修改其它功能,但这个模型在国内无法正常使用,即使架了梯子也不行
15、继续用Auto模式在新对话中检查不能全屏的问题,按照建议修改了下也没能全屏,然后在Trae中切换到Claude-4-Sonnet模型,继续检查不能全屏的问题,虽然没有直接解决问题,但它帮我发现了目前项目文件夹里有两个SplashView.swift,于是询问Cursor哪个是多余的,Cursor建议删除根目录中的SplashView.swift,保留Views文件夹中的同名文件,并修改项目配置,确保正确引用,但即使删除了根目录中的文件,并修改了引用,应用依然不能全屏

DevLog:2025年7月31日

1、询问了Cursor如果要增强NoteWith对iPad的兼容性,需要做哪些调整,Cursor表示不需要单独开发一个iPad版本,因为SwiftUI提供了很好的跨设备适配能力,可以先使用SwiftUI的响应式设计,之后再涉及iPad专用导航结构,最后再添加拖拽、分屏等高级功能,这样可以实现大部分业务逻辑和服务层代码的复用,只需要维护一套代码,功能更新同时适配两个平台,且用户体验一致
2、而且有这样一个兼容iPad的应用之后,就不用再开发单独的Mac版本,可利用Apple提供的Mac Catalyst技术,将iPad应用转换为Mac应用,无需重写代码,只需在Xcode中启动一个选项,即可保持与iPad版本相同的功能和界面:在Xcode项目设置中选择项目target、在”General”标签页勾选”Mac Catalyst”选项,选择”Mac”作为部署目标
3、发现自己的对NoteWith的设想和腾讯的ima.copilot有点像,决定体验一下ima,参考它来丰富NoteWith的功能,知识库功能更
4、下一步,优化AI问答页面的显示效果,需要支持流式输出,不要等回答完了再一次弹出全部回答内容,如果模型支持深度思考,同样也要以流式输出来展现思考过程,且思考内容与回答内容样式要有所区别,比如思考内容用灰色文字,可折叠/展开,回答内容用黑色文字
5、这个问题看来有点难度,Cursor尝试了多种不同的解决方案,但成功搞定了,之后继续优化,跟Cursor说,有几个小问题需要优化下:1.回答内容右侧的收藏图标,等回答结束后再出现,不要还没回答就出现 2.回答内容貌似不支持Markdown,需要添加对Markdown的支持 3.对话详情页需要跟着回答内容的流式输出自动向下滑动
6、Cursor创建了MarkdownRenderer.swift,并且让我手动添加到Xcode项目中,但模拟器测试发现还是不支持Markdown渲染,另外两个需求已经实现了,继续让Cursor修正,修正一次后发现目前会同时显示Markdown语法和渲染后的效果,继续让Cursor修正,再修正一次后发现如果有文字同时应用多个Markdown语法,会显示一种渲染效果+一种Markdown语法标记,不会只显示渲染效果,继续让Cursor针对集中常见的Markdown语法组合做优化,比如标题+加粗、列表+加粗、引用+加粗,终于解决了这一问题
7、Cursor给出了修改思路:先处理块级语法,再处理行内语法,使用循环处理确保所有标记都被移除,如果找不到结束标记,会移除开始标记,同时避免无限循环和语法错误
8、下一步对备忘录列表和备忘录界面进行优化,设置默认格式,默认采用苹方字体,字体大小默认和AI对话输出的无Markdown语法的字体大小一致,增加对齐方式的选择按钮,选中文字后可设置居中、居左、居右、两端对齐四种对齐方式
9、Cursor完成上述需求后,继续对对齐方式的设置按钮、默认行间距、默认字体大小进行优化,之后让Cursor处理设置对齐方式时DEBUG信息中出现大量错误信息和应用崩溃的问题,目前问题仍然存在
10、下一步在模拟器中测试下,是调整对齐方式时会频繁报错甚至崩溃,还是进行其它操作时会频繁报错,以更精确的定位问题,让Cursor修改