ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Open-Science macOS打包:DMG签名与公证完全指南

Open-Science macOS打包:DMG签名与公证完全指南 Open-Science macOS打包DMG签名与公证完全指南【免费下载链接】open-scienceAIPOCH Open-Science is an open-source, local-first, model-agnostic AI research workbench for macOS, Windows, and Linux, with scientific agents, Python/R notebooks, data connectors, and reproducible provenance.项目地址: https://gitcode.com/GitHub_Trending/open/open-scienceOpen-Science 是一款开源、本地优先、模型无关的 AI 科研工作台支持 Python/R 笔记本与可复现实验溯源。在 macOS 上分发它必须跨过 Apple 的三道关卡代码签名 → 公证Notarization→ 装订Stapling。本文带你用最小认知成本看懂这套流程在 Open-Science 项目中是如何落地配置的即使你没写过 macOS 打包脚本也能照着思路迁移到自己的 Electron 项目里 为什么 macOS 打包必须签名 公证很多新手第一次拿到别人发来的 .dmg 安装包双击就报错应用已损坏无法打开。这不是包坏了而是 macOS 的Gatekeeper门禁在拦截从网络下载的文件会被打上隔离标记quarantine系统只信任签名有效且经过公证的应用。Open-Science 的官方发布构建走的是完整链路签名用 Apple Developer ID 证书对 .app 与外层 DMG 签名公证把 DMG 提交给 Apple 公证服务通过全部安全扫描拿到公证票据装订把票据钉回安装包让离线用户也能通过 Gatekeeper 校验。设计目标在 docs/PRD.md 中写得很直白官方发布构建用 Developer ID 签名并经 Apple 公证下载的发布版打开时不再出现 Gatekeeper 提示。一个配置文件的 DMG 安装界面mac 与 dmg 两节所有打包参数集中在 electron-builder.yml。macOS 部分只有两节新手只要看懂这几个键就够了 mac节electron-builder.ymlicon: build/icon.icon—— 用 Icon Composer 图标包同时生成新系统的 Assets.car 与传统 ICNS 回退minimumSystemVersion: 12.0.0—— 只要求 macOS 12 起可运行entitlementsInherit—— 让所有子组件继承同一份权限清单notarize: false—— 注意故意关闭内置公证因为项目把它拆到了独立的 CI 任务里原因见下文。dmg节electron-builder.ymlbackground: build/dmg-background.png与icon: build/icon.icns—— 决定挂载后看到的安装界面contents—— 精确摆好三个元素应用本体、指向应用程序文件夹的快捷方式、LICENSE 文件sign: true——稳定版要求外层 DMG 也带主签名不只是内部 .app夜间构建会在 CI 中覆盖为false。上面这张图就是挂载 DMG 后用户看到的真实背景源自 build/dmg-background.png。另外第 16 行的afterPack: build/adhoc-sign.cjselectron-builder.yml是整个流程最巧妙的钩子下一节展开讲。Ad-hoc 签名钩子告别应用已损坏如果你没有或暂时不配Apple Developer ID 证书electron-builder 会完全跳过签名。结果只剩 Electron 主二进制上的链接期签名、没有密封资源区codesign --verify直接报错。此时下载来的副本被 Gatekeeper 判定为损坏——这个错误无法通过右键打开绕过用户只能干瞪眼。项目用 build/adhoc-sign.cjs 优雅解决了它在打包阶段afterPack用codesign --force --deep --sign -做深度临时ad-hoc签名build/adhoc-sign.cjs生成一份自洽有效的签名先单独签好内嵌的 micromamba 二进制——嵌套代码必须先于外层包签名build/adhoc-sign.cjs携带权限清单 build/entitlements.mac.plist其中allow-jit、disable-library-validation等条目正是 Python 运行时所必需。效果没有 Developer ID 时Gatekeeper 显示的是可绕过的未识别开发者提示右键 → 打开或执行xattr -dr com.apple.quarantine清除隔离标记而不是无解的已损坏。将来一旦配置了真实证书electron-builder 的正式签名会自动覆盖这份 ad-hoc 签名零维护成本。CI 中的 Developer ID 签名证书怎么进来真正的签名发生在 CI。.github/workflows/build.yml 为 macOS arm64 与 x64 各起一台对应架构的构建机避免 Rosetta 隐患然后通过两个 Secrets 注入证书MAC_CSC_LINKbase64 编码的 .p12 证书MAC_CSC_KEY_PASSWORD密码若 Secrets 未配置构建不失败打印提示并退回 ad-hoc 签名.github/workflows/build.yml——这让社区构建也能持续出包。证书会被解码进专用钥匙串keychain并通过CSC_KEYCHAIN环境变量显式传给 electron-builder随后unset CSC_LINK并设置CSC_IDENTITY_AUTO_DISCOVERYfalse.github/workflows/build.yml避免证书材料泄露到其他步骤。公证为什么单独拆成一条工作流公证可能耗时数分钟如果卡在构建矩阵里一次 Apple 服务抖动就会拖垮整条流水线。因此 Open-Science 把它拆成解耦、可重跑的 .github/workflows/notarize-mac.yml构建只负责签名公证任务独立提交、装订并重新发布产物。核心流程.github/workflows/notarize-mac.yml只有 5 步建议记住步骤命令要点1. 门禁检查APPLE_API_KEY_P8_BASE64无密钥则整体跳过发布照常成功2. 提交xcrun notarytool submit先--no-wait拿到提交 ID再wait --timeout 15m3. 判定解析status见下表三种结局4. 装订xcrun stapler staplevalidateDMG 直接装订zip 解包后装订 .app 再重打包5. 冒烟scripts/macos-package-smoke.mjs --gatekeeper装订改变了字节最终包必须再验证一遍 Gatekeeper 评估三种判定结果的处理是新手最容易踩坑的地方.github/workflows/notarize-mac.ymlAccepted✅ → 装订票据继续发布Invalid / Rejected❌ → 真正的坏包立刻打印notarytool log逐条原因直接失败15 分钟超时⏳ →这不是拒绝只是 Apple 慢。日志里保留提交 ID 和notarytool info id命令稍后重跑本任务即可重新检查并装订无需重新构建。zip 包不重复提交——它与 DMG 内是同一个已签名的 .app票据从 DMG 提交时已生成只需装订并重打包.github/workflows/notarize-mac.yml。新手常见问题速查清单 应用已损坏无法打开你拿到的是未经完整公证的副本右键 → 打开或执行xattr -dr com.apple.quarantine /Applications/Open\ Science.app。无法识别的开发者说明只有 ad-hoc 签名自构建版本属预期行为按上面方式绕过即可。公证超时了怎么办不要慌用日志里的提交 ID 执行notarytool info查询真实状态变 Accepted 后重跑公证任务。装订后自动更新校验失败装订会改变 zip 字节必须重新计算 sha512 并生成新的更新源文件——项目已在公证任务中自动完成.github/workflows/notarize-mac.yml。总结Open-Science 的 macOS 打包给出了一个值得抄作业的工程范式配置集中electron-builder.yml、降级优雅无证书自动 ad-hoc构建永不中断、公证解耦独立可重跑、超时不等于失败、装订后必再冒烟。掌握签名 → 公证 → 装订这条主线你就能在任何 Electron 项目里复刻出同样可靠的 macOS 发布流水线 ✨【免费下载链接】open-scienceAIPOCH Open-Science is an open-source, local-first, model-agnostic AI research workbench for macOS, Windows, and Linux, with scientific agents, Python/R notebooks, data connectors, and reproducible provenance.项目地址: https://gitcode.com/GitHub_Trending/open/open-science创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表