从Web到桌面:CC-Viewer Electron打包、macOS代码签名与公证的完整实践

发布时间:2026/10/16 2:38:48
从Web到桌面:CC-Viewer Electron打包、macOS代码签名与公证的完整实践
【免费下载链接】cc-viewerA request monitoring system for Claude Code that captures and visualizes all API requests and responses in real time. Helps developers monitor their Context for reviewing and debugging during Vibe Coding.项目地址https://gitcode.com/gh_mirrors/cc/cc-viewer点击查看免费下载CC-Viewercc-viewer是一款面向 Claude Code 的请求监控系统能实时捕获并可视化所有 API 请求与响应帮助开发者在 Vibe Coding 过程中审查与调试上下文。它原生形态是 Web 应用而本文带你走通CC-Viewer Electron 打包全流程如何把 Web 应用装进桌面壳、如何用 electron-builder 产出安装包以及macOS 代码签名与公证Notarization的最快配置方法。桌面版架构Web 应用如何装进 ElectronCC-Viewer 桌面端采用「npm 包载荷 Electron 外壳」的组合架构核心思路只有一条载荷payloadpackages/app即发布到 npm 的完整应用server、前端 dist、CLI、拦截器等外壳shellapps/electron/electron/ 下的 main.js 负责窗口与进程管理。外壳采用多标签架构BaseWindow顶部是标签栏每个标签是一个独立的WebContentsView各自fork(tab-worker.js)启动一套隔离的代理 服务 PTY。主进程通过探测../server/server.js是否存在来区分「打包布局」与「开发布局」这让同一份外壳代码在仓库内开发和打包产物里都能正确工作。一键打包assemble-app.mjs 如何拼装 stage 目录在pnpm run electron:build背后assemble-app.mjs 会先执行 Web 端构建再从零重建apps/electron/stage暂存目录共 5 步触发packages/app的 assemble 脚本把 Web 前端产物复制到位校验server、cli.js、dist等 8 个载荷输入齐全缺任何一个都会立即报错而不是打出残缺包清空并重建stage把载荷与electron/外壳并排放入由 stage-manifest.mjs 生成stage/package.json——版本号取自 npm 包main指向electron/main.js运行时依赖完整继承自ccv/electron并显式拒绝workspace:协议出现在打包产物中把ccv/core以真实文件形式 vendor 进stage/node_modules因为0.0.0版本永远无法从注册表解析。这一步保证了桌面包与 npm 包版本严格一致也保证了electron/与server/的相对位置不变——这正是外壳 rootDir 探测所依赖的布局契约。electron-builder.yml关键配置一眼看懂electron-builder.yml 是打包配置的核心几个值得注意的点配置项值作用directories.appstage打包源是拼装后的暂存目录directories.outputelectron-dist产物输出到apps/electron/electron-dist/asarfalse不压缩为 asar方便直接定位原生模块npmRebuildtrue自动对node-pty等原生模块做平台重建mac.targetdmgzip同时产出安装盘与签名用 ziphardenedRuntimetrue启用强化运行时公证的前置条件notarizetrue使用内置公证提交、等待、装订票据一次完成macOS 部分还声明了 entitlements.mac.plist 权限清单为 Electron 这类应用开了 JIT、无符号可执行内存、库验证豁免、网络客户端/服务器与用户选定文件读写等开关——每一项在文件注释里都有中文说明是学习 Electron 权限声明的好范本。macOS 代码签名证书与环境变量配置签名前需要一张Developer ID Application证书然后通过环境变量交给 electron-builder。项目提供了体检脚本 check-sign-config.sh会依次检查证书、环境变量与证书文件环境变量必需说明CSC_LINK✅.p12证书文件路径CSC_KEY_PASSWORD✅.p12证书密码APPLE_ID公证需要Apple ID 邮箱APPLE_APP_SPECIFIC_PASSWORD公证需要App 专用密码APPLE_TEAM_ID公证需要你的 Team ID运行检查pnpm run electron:check-sign输出会明确告诉你哪些项已就绪、缺什么避免签名时才发现配置不全。公证 Notarization为什么必须「一次到位」公证Notarization是 macOS Gatekeeper 放行未进 Mac App Store 应用的关键环节。CC-Viewer 的做法非常克制只依赖 electron-builder 的内置公证配置里仅一行notarize: true由它在签名后自动检测APPLE_*凭据、提交应用、等待 Apple 审批并装订票据staple。配套的 notarization-config.test.js 用测试锁死了这条纪律断言配置中存在notarize: true断言不允许出现afterSign钩子断言不引入第二套electron/notarize实现。这样做的价值在于重复提交公证会导致 Apple 端报错而契约测试让「单一公证入口」成为不可被无意破坏的规则。签名 公证由 mac-sign.sh 编排先校验CSC_LINK/CSC_KEY_PASSWORD是否齐全缺失立即退出再检测公证三件套——齐全则签名后自动公证缺省则降级为「仅签名不公证」并给出明确提示。最后执行pnpm run electron:sign # 等价于 build electron-builder --macWindows 与 Linux 产物同样由同一份配置产出NSIS 安装包可自选安装目录与 AppImage。验证与分发产物在哪里构建完成后所有安装包位于apps/electron/electron-dist/。验证签名是否生效可以用codesign -dv --verbose4 CC Viewer.app spctl -a -vvv CC Viewer.app另外值得一提的是仓库自带的 cc-viewer.rb Homebrew 公式它为 CLI 版安装了一个自定义 shell 包装器强绑 Homebrew 的 node 而不是 PATH 中的 node——因为node-pty原生绑定跨 Node 大版本会 ABI 失配。这个细节解释了为什么打包时必须开启npmRebuild。常见问题速查只想签名不想公证不设置APPLE_*三个变量即可脚本会自动降级并提示。构建报原生模块错误检查npmRebuild: true是否被改动并保持 package.json 中electron与electron-builder版本配套。想本地调试桌面壳直接pnpm run electron:dev外壳会自动识别仓库开发布局。从 Web 到桌面CC-Viewer 用「拼装暂存目录 单一打包配置 契约测试」把 Electron 打包、macOS 代码签名与公证收敛成一条可重复、可验证的流水线——这正是开源项目桌面分发值得借鉴的工程实践。赞分享【免费下载链接】cc-viewerA request monitoring system for Claude Code that captures and visualizes all API requests and responses in real time. Helps developers monitor their Context for reviewing and debugging during Vibe Coding.项目地址https://gitcode.com/gh_mirrors/cc/cc-viewer点击查看免费下载相关推荐OpenResearch macOS 桌面版分发指南从签名、公证到 DMG 打包与自更新全解析OpenResearch macOS 桌面版分发指南从签名、公证到 DMG 打包与自更新全解析 导读 OpenResearch orx 不仅是一个终端 C人工智能AI Agent深度研究科研Tribler macOS 构建指南从源码到 DMG 安装包的完整流程含代码签名与公证Tribler macOS 构建指南从源码到 DMG 安装包的完整流程含代码签名与公证 本指南面向需要在 macOS 上从源码构建 Tribler 桌面客网络音视频密码学Gyroflow 视频防抖完整指南如何用陀螺仪数据让晃动画面变稳定Gyroflow 视频防抖完整指南如何用陀螺仪数据让晃动画面变稳定 Gyroflow 是一款开源的视频防抖软件它读取相机自己记录的陀螺仪数据逐帧补偿镜头晃音视频视频处理桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考