github MrSibe/KnowNote v1.2.1
1.2.1

latest release: v1.2.2
5 hours ago

修复:macOS 启动即崩溃 / Fix: macOS crash on launch

Fixes the launch crash reported in #32 and #34.

根因 / Root cause

macOS 包在使用 Hardened Runtime 的同时只是 ad-hoc 签名,却缺少该组合下必需的 com.apple.security.cs.disable-library-validation entitlement。

Hardened Runtime 会强制所有被 dlopen() 加载的动态库与主进程的 Team ID 一致。主进程是 ad-hoc 签名(没有 Team ID),而包内三个第三方预编译原生模块同样没有 Team ID,于是加载 better_sqlite3.node 时被 dyld 拒绝,主进程在初始化数据库时直接崩溃:

code signature in [...] not valid for use in process:
mapping process and mapped file (non-platform) have different Team IDs

v1.2.0 新增的 anki-apkg-export 把新的原生加载链路带进了启动路径,因此问题在 1.2.0 集中爆发。该缺陷在 v1.1.1 就已存在。

对已发布的 v1.2.0 产物做过签名解析验证:包内全部 22 个 Mach-O 均为 flags=0x10002 (CS_RUNTIME|CS_ADHOC)TeamIdentifier 为空,嵌入的 entitlement 恰好只有旧的三个。

macOS 用户必读 / Required step for macOS users

本版本仍然没有 Developer ID 签名、未经过公证(目前没有 Apple Developer 账号)。首次启动前需要清除隔离标记:

sudo xattr -rd com.apple.quarantine /Applications/KnowNote.app

这一步是必须的。此前 #32 中提到的同类操作之所以无效,是因为当时失败的并不是 Gatekeeper 隔离检查,而是上面的库校验。

本次改动 / Changes

  • build/entitlements.mac.plist 增加 disable-library-validation(核心修复)
  • 显式声明 mac.entitlements / hardenedRuntime / gatekeeperAssess
  • asarUnpack 补全 **/*.node**/*.dylib
  • DMG 产物名补上 ${arch}(此前 arm64/x64 会静默互相覆盖)
  • 移除 npmmirror 的 electronDownload.mirror,保证签名可复现
  • CI:发布前校验 entitlement,发布后回读产物验证;产物先以 draft 发布,验证通过才对外可见

已知限制 / Known limitations

  • Intel Mac 暂不支持。 发布产物一直只有 arm64。在 Apple Silicon runner 上交叉构建会把 arm64 原生模块塞进 x64 包,因此未强行加入。
  • 无公证。 需要 Apple Developer 账号才能做到开箱即用。
  • #33 / #37 未修复。 embedding 失败与文档上传失败属于摄入链路的独立缺陷,仍然 open。

需要确认 / Please verify

本环境无法启动 macOS 应用,请 #32 / #34 的反馈者在本版本上确认一次。如仍有问题请重新开 issue 并附上崩溃日志。


Release artifacts

File 说明
knownote-1.2.1-arm64.dmg macOS (Apple Silicon),需执行上方 xattr 命令
KnowNote-1.2.1-arm64-mac.zip macOS 自动更新包
knownote-1.2.1-setup.exe Windows 安装包

Don't miss a new KnowNote release

NewReleases is sending notifications on new releases.