Skip to content

09 · 分发

怎么把它交到用户手里,以及为此要付出什么。

这一份跟 07 §6 的分工:那边讲流水线怎么搭(签名怎么配、 公证怎么开、站点怎么发),这边讲走哪条路、代价是什么

1. 三条路

路径门槛现状
GitHub Release(直接分发)Developer ID 证书 + 公证(99 美元/年)流水线已就绪,缺证书
Mac App Store上面那些 + App Sandbox 改造⛔ 有架构级冲突,见 §2
包管理器(Homebrew / winget / AUR)只需要一个稳定的 Release等第一个 release 之后再说

结论:先做直接分发。 它的门槛低一个量级,而且不受沙盒限制 —— 现有的文件访问模型原样能用。拿它收集真实用户反馈(M1 就欠着的那一步), 再谈商店。

2. Mac App Store:不是打磨问题,是架构冲突

MAS 强制 App Sandbox。而沙盒的文件访问模型是「用户在系统对话框里选中什么, 就只给什么,且不跨进程重启」,这跟当前实现有三处正面冲突:

2.1 会话恢复(ADR-0005 的核心卖点之一)

session.ts 存的是裸路径字符串folder: string | nulltabs: string[]), 下次启动直接拿去 open。沙盒里重启之后这些路径一律无权访问。

正确做法是存 security-scoped bookmarkdialog.showOpenDialog({ securityScopedBookmarks: true }) 拿到 bookmark blob, 随会话一起持久化,启动时 app.startAccessingSecurityScopedResource()。 Electron 有这套 API,但会话持久化那一层要重做

2.2 图片粘贴写 assets/ —— 这条绕不过去

用户走「打开文件」时,沙盒授予的作用域就是那一个文件,不包含它的父目录。 而 saveAttachment 要在 <文档目录>/assets/mkdir 再写文件 —— 直接被系统拒。

走「打开文件夹」那条路没问题(作用域是整棵子树),但单文件流程下这个功能在 MAS 版里是废的。要么改成每次弹保存对话框(难用),要么接受「单文件模式不支持 粘贴图片」。这是产品决策,不是能绕过去的工程问题。

2.3 文件监听

fs.watch 盯着已打开的文件,重启后同样丢作用域,得跟着 bookmark 一起恢复。

2.4 顺带澄清:path-guard 不是沙盒

main/path-guard.ts 那层白名单是我们自己的,防的是渲染进程被打穿之后去读 ~/.ssh/id_rsa(01 §5)。它不给我们任何系统权限。上了沙盒是在它旁边再加 一层 bookmark 的存取,不是替代。

好消息:PDF 导出(临时文件 + 隐藏窗口)、崩溃草稿(userData)、 shell.openExternal 都在容器内或走系统服务,沙盒下没问题。

2.5 审核层面的两个真实风险

  • 2.5.2「不得下载并执行代码」与 M5 插件系统直接冲突。 如果插件能从网上装, MAS 版就是违规的。这一条要现在就想清楚,因为它会影响插件 API 的设计: MAS 版可能只能允许打包进安装包的内置插件。晚发现代价很大。
  • 名字。 Mosu 与 Typora 同类目、名字接近,README 又明说借鉴了 它的交互范式。代码与资源是独立实现,但商标是另一回事(5.2.1 / 5.2.5)。 上架前值得做一次商标检索。

2.6 真要做的话,优先级

不是补功能,是把文件访问改成 bookmark 模型 —— 它会反过来改会话恢复、 文件树、附件三处的设计,越晚做越贵。

3. 定价

还没到定价的时候(见 §4),但把判断记下来,免得将来重新推一遍。

3.1 收费的账

Apple Developer Program 99 美元/年。小企业计划下分成 15%,0.99 美元那档到手 约 0.84 美元。

定价回本账号费需要卖
$0.99约 120 份/年
$14.99约 8 份/年

也就是说,若目标只是「别倒贴」,1 美元反而是风险更高的那个选择 —— 收费的固定成本(账号、审核、退款、差评、支持邮件)摊不平。

3.2 定价是产品说明书的一部分

对标是 Typora($14.99 一次买断,国区 ¥89)。标 1 美元,用户读到的不是「便宜」, 是「这东西大概只值 1 美元」—— 他会拿它跟贴纸包比,而不是跟 Typora 比。 1 美元是个既不像免费、也不像商品的价格,中间那块没有可站的地方。

3.3 MIT 开源 + 收费的张力

代码在 GitHub 上,MIT。在商店收费完全正当(卖的是签名、打包、开箱即用与后续 维护),但有两个后果:

  • 价格天花板被压低 —— 愿意付钱的是「懒得自己编译 + 想要更新」那批人;
  • MIT 允许别人原样上架。 真有人拿源码去交一个同名应用,商店未必拦得住。 这个风险跟定价无关,但要知道。

3.4 结论

先免费。真要收费再定 $9.99–$14.99 一次买断,理由不是「我们值这么多」, 而是低于这个数会让人怀疑。想降低门槛就做限时首发折扣,不要做低标价。 只想让人表达支持的话,商店允许「打赏」型 IAP,比把主应用标 1 美元干净得多。

4. 为什么现在还不该收费

版本 0.1.0,M1 就欠着的「找 5 个人各写一篇长文」到今天还没做过。 macOS 的 PDF 空白页追了七轮 CI 才定位(06 §3.3),而它只在一个平台、 只对中文文档发作 —— 这类缺陷在真实用户进来之后只会更多,区别是那时每一个都 带着一星评价和退款请求。

收钱会把「已知的粗糙」变成「用户觉得被骗了」。 README 里那种「不藏着掖着」 的坦白,在免费软件里是加分项,在付费软件里是减分项。

顺序应该是:直接分发(免费)→ 真实用户试用 → 自己愿意拿它当主力用一个月不想 切回去(M3 的验收标准原话)→ 再谈上架与定价。

MIT 许可发布。与 Typora 无关联,是一个独立实现。