Releases: whyluna/markpdf-studio
Releases · whyluna/markpdf-studio
Release list
MarkPDF 1.0.6
本版更新
- PDF 目录识别更完整:优先读取内嵌目录;没有内嵌目录时,从前 24 页的可点击目录页提取标题、层级和真实跳转位置。支持多页目录、仅页码可点击,以及标题/页码重复链接去重。提取在本地后台完成,不需要 AI,也不改写原 PDF。
- 目录加载与分栏同步:文档加载完成、切换分栏后及时刷新目录;兼容通过 GoTo 动作跳转的内嵌目录项。没有可用目录时显示明确提示。
- 修复跨行文本首次标注失效:点击工具条不会再误裁选区或移动按钮,下划线、高亮和删除线首次操作即可覆盖完整跨行选区。
扫描图片、没有链接的纯文字目录或位于前 24 页之外的目录暂不自动提取。
下载与安装
- macOS 15 Sequoia 及以上,支持 Apple Silicon 和 Intel。
- 版本
1.0.6,构建号104,通用二进制arm64 + x86_64。 - 打开
MarkPDF-1.0.6.dmg,将 MarkPDF 拖入 Applications。 - 继续使用 ad-hoc 签名,未进行 Developer ID 签名与公证;首次打开方式见 README。
- DMG SHA-256:
727426b14650a9f025f99f5dd600f319e7618fbbf0859ad7a4ceecfd3b75821b
验证
- 本批次 Swift 全量测试:651 通过、12 跳过、0 失败;最终目录/阅读状态专项复测 21/21 通过。
- Web 测试 95/95 通过。
- 真实文档目录提取核验:33、17、29 条;原生目录样本保留 170 条。
- Release 双架构构建、签名、DMG 镜像与挂载、版本及 Applications 链接校验通过。
MarkPDF 1.0.5
本版更新
- 统一 App 字体层级:16pt 面板标题、14pt 主内容、12pt 分区/控件/副文本、11pt 紧凑元数据,协调文件树、Markdown/PDF 目录、标注、反向链接与 AI 助手界面。
- Markdown 默认正文调整为 16pt、固定版心调整为 830pt;仅迁移仍使用旧默认值的安装,保留用户自定义设置。
- 修复全空表头 GFM 表格:兼容
| | |键值表写法,阅读态隐藏空表头,并正确处理部分空表头、空单元格和缺列。
下载与校验
- macOS 15 Sequoia 及以上
- 通用二进制:Apple Silicon (
arm64) + Intel (x86_64) - 当前采用 ad-hoc 签名,首次打开请右键应用并选择“打开”
MarkPDF-1.0.5.dmgSHA-256:b7fb8ad7d36d822f722a9310d98e1d02acdde18e86e028bdd4dc404489dcbbac
验证
- Web 编辑器:95 项测试通过
- Swift:645 项测试执行,12 项跳过,0 失败
- DMG 已完成镜像校验、实际挂载、版本/构建号、签名、双架构与 Applications 链接检查
MarkPDF 1.0.4
下载
- MarkPDF-1.0.4.dmg(14.5 MiB,通用二进制:
arm64 + x86_64) - SHA-256:
5f443b42034ea8fc03113e3212978920e68747b3e52c2e8083e8f0576eb4e294 - 当前采用 ad-hoc 签名、尚未公证;首次打开时请右键应用并选择“打开”
改进
- PDF 与 Markdown 侧边目录支持整行 hover 和点击,标题右侧空白区域也能跳转
- PDF 批注隐藏重复的原生气泡与下划线,颜色统一控制虚线框、连接线与卡片色条
- 点击正文批注虚线框可直接打开批注,并可在编辑框内更改颜色
- 批注卡片收窄并向页内缩进,避免越出 PDF 边缘
- 虚线框和连接线按
1.0 × PDF 缩放倍率绘制,最低保持一个物理像素(Retina 0.5pt)
验证
- Web:92 项测试通过
- Swift:643 项测试执行,12 项跳过,0 项失败
- DMG 已完成校验、挂载、版本、架构、签名、Applications 软链接及二进制哈希一致性检查
MarkPDF 1.0.3
下载
- MarkPDF-1.0.3.dmg(13.4 MB,通用二进制:
arm64 + x86_64) - SHA-256:
91366aa9d384142ef7d2b62c621cd141decb91739e72b2b909e534e06c50fe24 - 当前采用 ad-hoc 签名、尚未公证;首次打开时请右键应用并选择“打开”
视觉更新
- 全新 macOS 应用图标,以编辑器画布、文本、插入光标、AI 分栏和四角星表达“文本编辑 + AI 助手”
- 加粗文本、光标与分隔线并放大 AI 星标,提升 Dock 小尺寸下的识别度
验证
- Web:92 项测试通过
- Swift:639 项测试通过,12 项跳过,0 项失败
- DMG 已完成挂载、版本、架构、签名、Applications 软链接及二进制哈希校验
MarkPDF 1.0.2
下载
- MarkPDF-1.0.2.dmg(13.9 MB,arm64 + x86_64 通用二进制)
- SHA-256:
f12fe2351d17a1a1e90068ee832b72ffea328e8672152ce6aadc2f99a06fc64f - 当前为 ad-hoc 签名、未公证版本;首次打开请右键 MarkPDF.app →「打开」
修复
- AI 右侧栏拖拽与滚动稳定性:面板宽度按显示帧合并发布,拖动期间不再重复写偏好或重建整棵视图;接管 SwiftUI
List底层NSOutlineView的完整行高表并保持可见行锚点,滚动条长度/位置不再乱跳或回到顶部;长回复与代码块改用原生 TextKit 连续选择,松手后不再延迟重建 SelectionOverlay,拖完可立即滚动 - 后台/隐藏启动零窗口(存量):
open -g/ 启动器后台唤起会抑制 SwiftUI 初始建窗,此后激活 App(⌘Tab/启动器)永远无窗——现在激活与点 Dock 图标都会延迟探测补窗(恢复上次工作区现场),与 SwiftUI 可能的自建首窗互斥不撞双窗;Finder 双击文件到无窗口实例也从「静默丢弃」恢复为开窗(保留的 openWindow 动作 + open 事件转发双保险) - AI 面板「文档已变、按钮迟迟不切」:埋点实证应用链 0ms,延迟在整个会话转录的逐行 markdown 重新解析排版——历史消息内容未变即跳过重渲(Equatable 化),流式与卡片状态切换不再被长会话拖慢
- AI 把「图片加载失败」文案写进源码(存量疑点收口):自动保存链全通道排查排除(所有文档文本均取自编辑器内核 state.doc 或磁盘,此版本 CM6 剪贴板也只走文档文本)——确认唯一活体路径是模型侧,且写作提示词本身含该字面串充当「教唆源」;规则重写不再出现字面文本,并明令禁止把占位/错误文案写入文件
- AI 变更应用与撤销安全:新建使用原子排他创建,失败项目不再进入撤销清单;撤销前核验应用后内容,避免覆盖后续编辑或删除用户改过的新文件;写路径解析阻止符号链接逃逸,部分 diff 的局部行号偏移已修正
- AI 会话隔离与配置恢复:新会话丢弃当前线程未封存提案,审批结果按文档线程隔离;安全撤销检查点可随会话恢复;自定义 Provider 的动态账号重启后仍显示已配置
- PDF 标注兼容性:普通标注改写标准
/FReadOnly 位,不再误用 Widget/Ff;页边批注与正文指认不再持久化NoView,导出的 PDF 可在 Preview、Acrobat 等阅读器中正常显示和点击 - 写作模式误报“已提议修改”但没有审查卡:模型一次提交多处编辑时,单个
old_text模糊或失配不再丢弃其余有效修改,而是生成部分提案并跳过冲突项;工具失败改为红色失败状态,零提案提示会显示真实校验原因 - 应用 AI 修改后当前 Markdown 仍显示旧内容:Web 内核完成整文替换后立即同步 Native
EditorStore并落盘,不再依赖防抖的内容回传;审查卡完成、当前标签和磁盘状态现在同步收敛,无需切换文档触发刷新
MarkPDF 1.0.1
[1.0.1] - 2026-08-19
新增
- AI 写作(FR-AI.5/6):AI 助手新增「写作」模式——模型按本应用 Markdown 方言提案新建/修改文件与文件夹(Aider 式搜索替换块,唯一命中校验),提案绝不直接落盘;变更卡片逐变更段勾选(部分接受自动拼接)、全宽 diff 弹窗(红删绿增/绝对行号)、应用/拒绝/批级撤销(重启后仍可撤销与回看);应用后编辑器高亮改动行并跳到首处(Esc 淡出);卡片随会话持久化,重启后原样恢复
- 多文档 AI 并行:每个文档的 AI 会话完全独立——切标签不再取消在途运行,两个文档可同时提问/写作互不干扰;停止按钮只作用于当前文档线程
- 自定义 Provider:设置 → AI 新增「自定义 Provider」分区——任意添加 OpenAI 兼容或 Anthropic 端点,名称 / Base URL / 协议族 / 模型清单 / API Key 全部自行配置;与内置六家同权参与模型选择与自动回落
- 写作独立回复上限:AI 助手设置新增「写作上限(tokens)」(默认 16384),与问答上限分开——写大文件不再被问答额度截断
修复
- API Key「已配置却报未配置」:ad-hoc 签名每次构建二进制指纹变化,钥匙串条目 ACL 拒绝新二进制读明文(触发系统授权窗,取消即报未配置、重存无效)——Key 改存应用沙盒容器文件(0600,钥匙串只读兼容并自动迁移),重部署后零弹窗
- AI 面板卡片状态不刷新(应用/拒绝要点多次):变更状态机是聊天对象的子对象,其发布不触发面板重渲——补 objectWillChange 转发
- 应用修改永久转圈:应用链路内同步写编辑器 @published 与 SwiftUI 更新事务重入死锁(采样实锤)——高亮写入延迟 runloop、内核失败回调异步派发
- 符号链接目录下图片「加载失败」(存量回归):macOS 25.6 起
resolvingSymlinksInPath()对「存在的符号链接 + 不存在的尾段」不再解析链接段——退到最近存在祖先解析后拼回尾巴 - 粘贴的 BaseURL 带空白/换行报「无法解析」:请求构造层与输入框双层清洗(含多余尾斜杠)
变更
- AI 回复动作只留复制:插入光标/替换选区/存新笔记已由写作提案流取代;复制按钮改为圆形底衬+点击对勾反馈
- 输入框交互:回车发送、⌘↵ 在光标处换行(原 ⌘↵ 发送)
- 写工具与「检索工作区」开关解耦:检索开关回归纯隐私边界,写作走面板开关
- FR-AI.7 PDF 笔记流 / FR-AI.8 Token 用量统计:按用户决策取消(写作工具为工作区级,PDF 场景已可用)
MarkPDF 1.0.0
MarkPDF 1.0.0
2026-08-17
新增
- 标签拖拽重排全面重做(VSCode 式):拖起标签以同形等宽的幽灵卡片跟随鼠标(左上角对齐光标),悬浮竖线指示插入位置,松手动画归位——全程不用系统拖放会话,鼠标下永远不会再出现「+」拷贝徽标;组内重排、分栏跨栏移入(左右双向、按悬停位置插入)、拖到窗口右缘分栏/移入最右栏一整套手势直算落点
- 标签栏细滚动条:标签溢出可横向滚动时,栏底 3pt 专用条带内显示胶囊拇指(系统指示条无法调粗细,自绘实现),位置随滚动实时移动
- 关闭钮悬停反馈:鼠标移到「x」上变小手光标、图标提亮并出现圆角底衬点亮命中范围;图标与命中区放大(11pt 字号 / 18×18pt)
- 左侧边栏收起/展开按钮(工具栏导航位)
修复
- 拖动标签时标签栏被撑成大块下拉框 / 持续闪烁:让位间隙曾是布局子节点,逐帧增删把横向 ScrollView 内容高度反复伸缩——改为悬浮竖线后拖拽期间标签栏布局零变化,结构上根治
- 拖右侧面板时顶部工具栏跟着一起动:宽度/显隐状态整体迁入独立的 PanelLayoutStore,工具栏不再随拖拽逐帧重算;顺带消除拖拽期间每帧同步写 UserDefaults 的磁盘 IO
- 右侧面板拖到最窄再往右拖会整个消失:改为复刻检查器材质的自定义面板(280–360pt 钳制、持久化),拖拽永不触发收起,显隐只由工具栏按钮控制
- 标签标题两侧大片空白:
frame(maxWidth:)弹性框架贪满上限、标题居中悬浮——补fixedSize抱紧内容,短标题零空白、长标题定点截断;悬停不再改变标签宽度 - 左侧边栏拖拽漂移/震荡:两栏均为自管宽度面板,宽度由状态直接指定,无系统列宽协商
MarkPDF 0.1.8
MarkPDF 0.1.8
2026-08-17
修复
- 试卷/题库类 PDF 点击文字弹蓝框,划词选字、双击选词全部失效:题干+ABCD 选项这种行列对齐的排版会被 macOS 26 PDFKit 的「文档分析」误判为表单——点击即弹出带缩放手柄的蓝色选框并劫持后续鼠标操作,长按划词选不中、双击选不出词、无法施加高亮标注。现关闭该文档分析开关(私有 API,系统更新若移除此键会自动退回现状不影响运行),所有文字恢复原生选择行为:单击无蓝框、拖拽逐行贴合、双击正常选词、高亮/下划线/删除线照常可用
- AI 助手输入区上下拖动:改为系统 NSSplitView 原生分栏(同左右边栏手感);hosting
sizingOptions=[]防内容高度顶回布局、两栏 holdingPriority 相等防拖动时外框被改(整体移动/松手回位根因)、不对外报告固有尺寸 - AI 助手输入区占位符与光标不对齐:实测 TextEditor 光标行顶格 y=0 高 17pt、lineFragmentPadding=5,占位符去掉顶部 padding、只补 leading 5,与光标同行同列
MarkPDF 0.1.7
MarkPDF 0.1.7
新增
- 右侧面板改为系统检查器:可整栏收起/展开(工具栏右侧开关);宽度独立于左侧边栏——边栏收放、拖动都只影响正文,互不染指;限宽 240–360pt
- 左侧边栏分隔条加宽命中带:边栏右缘内嵌拖拽条,含中下部全高度悬停出左右箭头;按下事件重定向给系统拖动轨道,手感与右栏一致;列宽上限 360pt 封死「拖大布局崩坏」区间
- PDF 侧栏「目录」排首位并默认打开;从缩略图/标注段切回目录时回到当前阅读节
修复
- 输入法组字期按回车误关批注编辑框:拼音选字确认上屏的回车不再当成「提交并关闭」
- 切换标签页丢阅读位置/缩放:标签复用的视图其 coordinator 停在首个文档(「答案」的存档全写到「讲义」名下)→ parent 每轮跟随;防抖挂起的存档跨文档污染(新文档第 1 页覆盖旧存档)→ 切文档前先落定 + 落定闭包加目标闸;记录改用视口中心页
- 捏合缩放切标签后失效/弹回:PDFKit 原生 pinch 在文档重挂载后只瞬态预览不落 scaleFactor(数字冻结),响应链又被间歇吞事件——改窗口级事件通道接管(实测从不丢事件),就地直改 scaleFactor,脱离自适应防弹回
- 反复拖右侧面板概率闪退:显示周期内的 @published 写入让托管视图中途失效窗口约束(AppKit trap)——滚动/缩放/翻页/选区通知里的写入全部挪出显示周期
- 正文与右侧面板间的白色空隙收窄(标签拖放区 28→10pt)
- 安装:下载
MarkPDF-0.1.7.dmg,拖入「应用程序」替换旧版 - 要求:macOS 15+
- 自签名构建,首次打开如被 Gatekeeper 拦截:右键 → 打开
MarkPDF 0.1.6
MarkPDF 0.1.6
新增
- PDF 目录与 md 大纲跟随阅读位置:当前正在阅读/光标所在的小节以 accent 底高亮,并随翻页/光标移动自动滚到可见;PDF 侧栏「书签」段更名「目录」(用户书签保留在目录页内)
- 点选标注即可改色:点击已有高亮/下划线/删除线,虚线框旁的编辑条除删除外新增四色选择(与顶部色板同一套黄/绿/蓝/红),点一下即改、连续试色位置不跳
- 批注编辑框键位:回车保存并退出(等同点空白处),
⌘↵换行
修复
- PDF 目录列表向下滚动抽搐:滚动期 currentPage 持续发布导致递归大纲树每秒重建几十次 → 扁平化条目按文档缓存,换文档才重建
- md 大纲要点两次正文才跟随:嵌套 ObservableObject 的 @published 不冒泡,大纲改直接订阅 EditorStore;内核光标上报防抖 500→150ms,跟随延迟 ~1s 消失
- 数据安全(严重):标注写回可能把一份 PDF 的内容整份写进另一份文件。切标签/分栏时,视图侧的 URL 先更新、PDF 文档要等异步加载完才替换,这个空窗里的焦点认领会把「旧文档 + 新路径」登记成写回目标,随后写回就把 A 文档序列化进 B 文件(实测把「讲义答案」整份覆盖到「讲义」上,112 页原稿只剩 45 页答案内容,靠首次写回前留下的
.bak恢复)。现在写回目的地一律以document.documentURL(文档自带路径,唯一不会错配的事实来源)为准,落盘前再校验文档与目的地是否同一文件,不一致直接拒写并记录错误 - 部分页面点正文冒出蓝色方框且无法标注:这些页的批注留有 PDFKit 自动生成的 Popup 伴侣窗(128×64pt,压在正文上),它参与命中测试 → PDFView 给它画带手柄的选中框并吃掉那块区域的划词。根因是伴侣从磁盘加载回来的类名是基类
PDFAnnotation(不是PDFAnnotationPopup),按类判一直漏摘 → 改按子类型判,并连带摘除父标注挂着的伴侣 - 标注点不中(只能从右侧列表右键删除):点选改走 PDFView 的
mouseDown通道(PDFKit 自己的手势会吃掉标注上的点击),并把 PDF 自带的超链接/表单域/图形标注排除在点选之外——此前点目录跳转会冒出红虚线框 + 垃圾桶 - 每次标注动作后主线程卡 0.4~1.5 秒(新建批注要等一会儿才能打字、点色不跟手、关框后划词/滚动不跟手):主线程采样定位到大头是
PDFDocument.dataRepresentation()——PDFKit 写回会把每一页重新绘制一遍,其中约一半时间耗在嵌入字体按 glyph 名查找抛 C++ 异常的栈展开。改成主线程只把标注收成纯数据(毫秒级),后台串行队列自己开一份私有 PDF 副本、重放本应用标注后落盘(PDFKit 对象不能跨线程共享,故用主线程从不触碰的独立对象图)。写回同时做到:PDF 自带的超链接/表单域原样保留、反复写回不重复堆积、删除能落地;批注编辑期间的变更仍只标脏、交互结束统一写 - 点空白处退出空批注后,页面上的高亮/虚线/图标还赖约一秒:两处叠加——① 失效通知打在了
PDFView自己,而页面是画在它的内层documentView里的,标脏错了视图页面层就不会重画(要等滚动之类的下一次刷新);② 批注内容落定与空批注丢弃挂在popoverDidClose,它要等关闭动画走完才到。现在失效通知打到documentView(仍只涉及改动过的那几页,绘制只发生在可见区域),落定提前到popoverWillClose(didClose留作兜底,两者都先比对是否当前那个编辑框) - 使用批注即闪退:选区包围盒为
CGRect.null时页→视图变换会算出 NaN,AppKit 遇非法几何直接 trap → 面板定位加几何守卫;捏合比例加除零与有限性守卫 - PDF 里点目录跳转失效、鼠标不变小手:标注设只读后 PDFKit 不再接管超链接,改由自己识别 Link 并处理光标与跳转(页内目标 / GoTo / URL / 翻页命名动作)
- 用 × 关掉全部窗口后重开恢复的是更早的工作区:窗口清单在关窗与状态变化时即时发布,退出前冻结
- 分栏后在右栏打开文件会把右栏收掉:空组收起挪到标签就位之后执行(此前清场阶段就把刚分出来的空右组一并收起,文件落回左栏)
- 安装:下载
MarkPDF-0.1.6.dmg,拖入「应用程序」替换旧版 - 要求:macOS 15+
- 自签名构建,首次打开如被 Gatekeeper 拦截:右键 → 打开