Presenton Mac App Store 打包实操:证书、Profile 到 MAS 构建脚本全打通
Presenton Mac App Store 打包实操证书、Profile 到 MAS 构建脚本全打通【免费下载链接】presentonOpen-Source AI Presentation Generator and API (Gamma, Canva, Beautiful AI, Decktopus, Presentations AI Alternative)项目地址: https://gitcode.com/GitHub_Trending/pr/presenton把 Presenton 的 Electron 客户端推进 Mac App Store 审核最容易翻车的不是前端或后端代码而是签名链一个带-beta后缀的版本号、一个还躺在仓库里的占位 profile、一次钥匙串私钥授权弹窗——任何一环没接好electron-builder都会在半路停下来报错。这篇按Apple 侧一次性准备 → 沙盒权限 → 构建跑通 → 产物与自测的顺序带你把 Presenton Mac App Store 打包从证书申请做到.pkg上传涉及的脚本、环境变量、报错对照表都落在仓库真实文件里。三种打包目标先认对门牌Presenton 在 macOS 上把打包拆成三种目标全部由环境变量PRESENTON_MAC_TARGET驱动你在 npm 脚本里不用手动设它。选错目标产物就装不上对应的分发渠道目标值分发场景对应 npm 脚本dmg绕开 App Store 的直接下载npm run build:all:mac:signedmas-dev已注册 Mac 上的沙盒内测npm run build:all:mas-devmas提交 Mac App Store 审核npm run build:all:mas所有打包逻辑集中在 electron/build.js 里。文件开头有两个常量值得先记住APP_ID是com.presenton.presenton即应用标识Bundle IDTEAM_ID是S6W5C54KL6会写进mac.extendInfo.ElectronTeamID字段。这两个值是后面证书与 Profile 配置的锚点换成你自己的团队就得同步改它们。一次性搞定 Apple 的四件套签名链的原料分四份前两份是证书第三份是 App ID第四份是两份 profile。开发链路只用到前三份里的开发证书提交链路则要把分发那一套备齐。开发用一张 Apple Development 证书在 Xcode →Settings→Accounts→ 你的团队 →Manage Certificates→→Apple Development生成。它只服务于mas-dev目标和本地沙盒测试。分发用两张证书缺一不可同样是上面的入口选Apple Distribution。这里有个坑mas分发构建实际要匹配两张证书。electron/build.js 的resolveMasSigningIdentities会同时找——应用证书名字匹配Apple Distribution或3rd Party Mac Developer Application安装器证书名字匹配3rd Party Mac Developer Installer两者缺一构建直接抛错并列出钥匙串里现有的身份。App ID 与 Bundle IDApple Developer Portal →Certificates, Identifiers Profiles→Identifiers→App IDs建一个与com.presenton.presenton匹配的 macOS App ID。若你用别的 ID得回头改 electron/build.js 里的APP_ID。两份 Profile 的落位与验证Portal →Profiles→里各建一个 macOS profile下载后放进electron/build/用途Profile 类型关联证书落位文件名备选文件名MAS 开发mas-devmacOS App DevelopmentApple Developmentbuild/AppleDevelopment.provisionprofileAppleDev.provisionprofile/AppDev.provisionprofileMAS 分发masMac App StoreApple Distributionbuild/MacAppStore.provisionprofileAppDistri.provisionprofile下载后立刻验证能否解码别等构建时才发现问题cd electron # -D 表示 decode检查 profile 是否为合法 DER 编码 security cms -D -i build/AppleDevelopment.provisionprofile security cms -D -i build/MacAppStore.provisionprofile两点提醒Profile 通常按年过期过期要重新生成并替换本地文件真实 profile不要提交进 git仓库里的MacAppStore.provisionprofile.replace_me占位文件就是为此留的位。沙盒权限清单entitlements 开了哪些口子MAS 强制启用 App SandboxPresenton 的主进程权限写在 electron/build/entitlements.mas.plist。每一项对应一个具体的运行能力权限 key打开的能力com.apple.security.app-sandbox启用 App SandboxMAS 硬性要求com.apple.security.application-groups值为S6W5C54KL6.com.presenton.presenton让应用与组件共享容器com.apple.security.cs.allow-jit允许 JIT 编译Electron 渲染进程依赖此项com.apple.security.network.client发起出站网络连接com.apple.security.network.server监听本地端口支撑内置 Next.js / FastAPI 本地服务com.apple.security.files.user-selected.read-write读写用户主动选定的文件导入文档、导出 PPTXcom.apple.security.files.downloads.read-write读写下载目录辅助进程与内置二进制走 electron/build/entitlements.mas.inherit.plist只声明沙盒加com.apple.security.inherit表示继承主进程的能力边界不额外开洞。一条命令跑通构建所有命令都在electron/目录下执行。第一次用先跑初始化脚本它会串起npm install、FastAPI 的uv sync、Next.js 依赖安装以及导出运行时和 ImageMagick 的准备# 首次初始化完成前后端依赖与运行时准备 npm run setup:env完整构建推荐会重建 Next.js、FastAPI、导出运行时再打包适合从零开始或改动较大时# MAS 开发只能在开发 profile 注册的 Mac 上运行 PRESENTON_MAS_DEV_IDENTITYApple Development: Your Name (TEAMID) \ npm run build:all:mas-dev # MAS 分发用于上传 App Store Connect PRESENTON_MAS_DISTRIBUTION_IDENTITYApple Distribution: Your Org (TEAMID) \ PRESENTON_APP_STORE_VERSION1.0.0 \ npm run build:all:mas只重打包资源已构建好跑过build:all后只想再走一遍 electron-builder 打包阶段用dist:*系列PRESENTON_MAS_DEV_IDENTITYApple Development: Your Name (TEAMID) \ npm run dist:mac:mas-dev PRESENTON_MAS_DISTRIBUTION_IDENTITYApple Distribution: Your Org (TEAMID) \ PRESENTON_APP_STORE_VERSION1.0.0 \ npm run dist:mac:mas注意dist:*脚本依赖 electron/build.js 的资源就绪校验。它会逐一检查 FastAPI 二进制、LLM 模型元数据、Next.js standalone server、导出任务 runner、export-core 包以及导出用的 sharp 运行时任何一项缺失都会在打包前报错避免打出启动不了内置服务的坏包。不走 App Store 的 DMG只想要一份签名并公证notarize的 macOS 磁盘映像、跳过 App Store 审核时# 走 Developer ID Application 证书需要 Apple 公证凭据 npm run build:all:mac:signed这条路径用的不是 MAS 证书而是 Developer ID 证书完整的证书准备与 notarytool 凭据存储见 macOS 直接分发指南。版本号为什么-beta后缀会让 mas 直接报错当前 electron/package.json 的版本形如0.9.11-beta带-beta后缀。mas目标要求 App Store 版本号严格是三段点分整数于是 electron/build.js 的getAppStoreBundleShortVersion做了两级回退优先读PRESENTON_APP_STORE_VERSION必须匹配/^\d\.\d\.\d$/没设时尝试从 package 版本里截x.y.z前缀截不出来比如版本根本不是语义化就抛Cannot derive an App Store version from package version。build 号由getAppStoreBundleVersion读PRESENTON_APP_STORE_BUILD匹配/^\d(\.\d){0,2}$/1~3 段如42或1.0.1没设则回退到短版本号。所以带 beta 后缀的包构建mas时这两个变量基本是必填# 版本号必须是三段整数build 号可省略默认取短版本号 export PRESENTON_APP_STORE_VERSION1.0.0 export PRESENTON_APP_STORE_BUILD42其余环境变量集中在这里配命令时对着查变量生效目标含义PRESENTON_MAC_TARGET脚本注入mas-dev/mas配合上述脚本时别手动设PRESENTON_MAS_DEV_IDENTITYmas-dev开发签名身份如Apple Development: 名字 (TEAMID)PRESENTON_MAS_DISTRIBUTION_IDENTITYmas分发身份如Apple Distribution: 组织 (TEAMID)PRESENTON_MAS_IDENTITYmas上一项的别名CSC_NAME两者上面专属变量都没设时的回退PRESENTON_APP_STORE_VERSIONmas商店版本号x.y.zpackage 版本带后缀时必填PRESENTON_APP_STORE_BUILDmas商店 build 号默认取短版本号PRESENTON_CODESIGN_TIMESTAMPmas设1恢复 codesign 时间戳默认走--timestampnonePRESENTON_CODESIGN_TIMESTAMP_RETRIESmas时间戳失败重试次数默认 4后两个时间戳开关解释一下本地 MAS 打包默认加--timestampnone是为了不依赖 Apple 时间戳服务无网或受限网络下不挂起真要时间戳就把PRESENTON_CODESIGN_TIMESTAMP设为1重试次数用PRESENTON_CODESIGN_TIMESTAMP_RETRIES调。产物落点与上传入口所有产物统一输出到electron/dist/具体子目录随架构arm64/x64变化典型布局electron/dist/ mas-dev-arm64/ # mas-dev未签名或开发签名的 .app mas-arm64/ # mas分发签名的 .app Presenton-version.pkg # 用于上传 App Store Connect 的 MAS 安装包 Presenton-version.dmg # 签名并公证的直接分发 DMG把mas构建产出的.pkg传进 App Store Connect就进入审核与发布流程。build.js 在打包前替你拦下的三个坑这几处是 electron/build.js 里最有工程价值的部分理解它们能少踩很多隐性错误资源就绪校验。collectMissingBundleResources把上面dist:*提到的五项资源列成清单打包前后各查一遍afterPack阶段还会再确认一次装进.app的副本缺项就列出路径并停手。签名身份解析。mas-dev的身份直接取PRESENTON_MAS_DEV_IDENTITY没设回退CSC_NAME。mas更复杂resolveMasSigningIdentities会跑security find-identity -v读全钥匙串身份身份限定词依次从PRESENTON_MAS_DISTRIBUTION_IDENTITY、PRESENTON_MAS_IDENTITY、CSC_NAME取最后自动发现匹配的证书对。它还会拒绝把 Apple Development 这类开发身份用于分发构建防止你拿错证书打分发包。codesign 预检与平台限制。分发构建启动前assertCodesignCanUseIdentity会拿一个临时文件用选中的分发身份实际签一次超时通常是 macOS 在等钥匙串/私钥授权就给出解锁登录钥匙串并允许 codesign 访问私钥的明确提示。另外resolveProvisioningProfile在非 darwin 平台会直接抛MAS builds must be run on macOS——Apple 签名工具只在 macOS 上可用这条没有绕过办法。图标与 .icns默认 macOS 图标来自electron/resources/ui/assets/images/presenton_short_filled.png。想给 App Store 打包换正式.icns把它放到electron/build/icon.icns并同步改 electron/build.js 里mac配置下的icon字段当前指向build/icon.icns。生成图标集用的源 PNG 在electron/build/icon.iconset/目录里。内测沙盒的四条红线MAS 签名应用必须用 MAS 目标构建mas或mas-dev普通 DMG 构建的沙盒兼容性并不等价mas-dev构建只能跑在开发 profile 注册的 Mac 上适合做 TestFlight 式的内测mas分发构建通常本地起不来它是给 App Store Connect 处理和发布用的mas-dev签名用--timestampnone本地签名不依赖网络时间戳服务器无网也不会挂起。报错对照表报错原因与解法Missing MAS development/distribution provisioning profile把对应目标的.provisionprofile放进electron/build/脚本会按候选文件名逐一匹配macOS 提示 profile 无法解码could not decode从 Developer Portal 重新下载替换真实 profile 不要提交 gitCannot derive an App Store version from package version设PRESENTON_APP_STORE_VERSION为三段整数如1.0.0MAS builds must be run on macOS在装了 Xcode 命令行工具的 Mac 上构建xcode-select --install.app 内 FastAPI / 导出二进制不可执行afterPack钩子已对 FastAPI 二进制chmod 755并剪掉与目标架构不符的 prebuild 目录签名仍失败时检查 entitlements 是否放行Contents/Resources/app/resources/下的辅助程序参考macOS 开发 README全部 macOS 构建目标的快速参考macOS 直接分发指南Developer ID 证书、公证与 DMG 验证流程【免费下载链接】presentonOpen-Source AI Presentation Generator and API (Gamma, Canva, Beautiful AI, Decktopus, Presentations AI Alternative)项目地址: https://gitcode.com/GitHub_Trending/pr/presenton创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →