Presenton 上架 Mac App Store从开发者证书到 .pkg 的 6 步实操【免费下载链接】presentonOpen-Source AI Presentation Generator and API (Gamma, Canva, Beautiful AI, Decktopus, Presentations AI Alternative)项目地址: https://gitcode.com/GitHub_Trending/pr/presentonPresenton 是一个开源的 AI 演示文稿生成器这份指南针对它的 Electron 桌面端做 Mac App StoreMAS打包从申请 Apple 开发者证书、放置 provisioning profile到跑构建脚本、把.pkg上传 App Store Connect 的完整流水线。应用内嵌 Next.js 前端与 FastAPI 后端全部打进同一个 Electron 壳因此 MAS 构建必须在装有 Xcode 命令行工具的 macOS 上执行。最终产出两类东西可提交 App Store 的签名.pkg以及供注册设备内测的沙盒.app。一分钟搞清 dmg、mas-dev、mas 三套构建目标Presenton 在 macOS 上有三套构建目标全部由PRESENTON_MAC_TARGET环境变量驱动npm 脚本会自动设置不用手动 export。选错目标是后面所有麻烦的源头先看这张表构建目标分发去向签名证书类型是否过 App Store 审核对应 npm 脚本dmgGitHub Releases、官网等直接下载Developer ID Application不过改用 Apple 公证notarizationbuild:all:mac:signedmas-dev已注册在开发 profile 里的 MacApple Development不过用于沙盒内测build:all:mas-devmasApp Store Connect 上架Apple Distribution或 3rd Party Mac Developer Application 3rd Party Mac Developer Installer过build:all:mas几个贯穿全文的关键标识符都定义在electron/build.js里Bundle ID 是com.presenton.presentonAPP_ID常量Team ID 是S6W5C54KL6TEAM_ID常量并通过extendInfo.ElectronTeamID写进应用。如果你用自己的 Bundle IDApple 后台创建的 App ID 必须与build.js里的APP_ID保持一致否则证书、profile 全都对不上。动手前在 Apple 后台和仓库里备齐这几样东西Apple 后台要创建的清单按顺序在 Apple Developer 侧准备四样东西Apple Development 证书Xcode → Settings → Accounts → 你的团队 → Manage Certificates →→ 选 Apple Development。它服务于mas-dev构建和本地沙盒测试。Apple Distribution 证书同一路径改选 Apple Distribution。mas构建实际要两张证书应用证书Apple Distribution 或 3rd Party Mac Developer Application加上安装包证书3rd Party Mac Developer Installerbuild.js的身份解析逻辑会同时查找两者缺一张就直接抛错。App IDDeveloper Portal → Certificates, Identifiers Profiles → App IDs新建一个与com.presenton.presenton匹配的 macOS App ID。两个 Provisioning Profile在 Portal → Profiles 各建一个一个选 macOS App Development绑 Apple Development 证书一个选 Mac App Store绑 Apple Distribution 证书下载两份.provisionprofile文件备用。仓库里已经内置好的 MAS 文件electron/build/目录下已经提交了几份现成文件不用你碰entitlements.mas.plist主应用的沙盒能力声明管的是应用能做什么。其中三个 key 最关键——com.apple.security.app-sandbox是 MAS 硬性要求com.apple.security.network.client/network.server支撑内嵌的 Next.js 和 FastAPI 本地服务com.apple.security.cs.allow-jit允许 JIT 编译Electron 渲染进程离不了它。另外还开放了files.user-selected.read-write和files.downloads.read-write对应导入文档、导出 PPTX 这类用户主动选文件的操作。entitlements.mas.inherit.plist辅助进程与内置二进制继承主进程的能力边界只声明沙盒加com.apple.security.inherit。MacAppStore.provisionprofile.replace_me占位文件明确提示这里将来要放你的真实 profile。需要你自己放进去的 2 个 profile 文件把从 Portal 下载的两份 profile 存到electron/build/文件名要能被build.js找到mas-dev目标AppleDevelopment.provisionprofile也接受AppleDev.provisionprofile、AppDev.provisionprofile作为回退名。mas目标MacAppStore.provisionprofile也接受AppDistri.provisionprofile。放进仓库不等于万事大吉build.js在构建前会用security cms -D先解码校验 profile失败时再回退到openssl cms验证解码不了就以明确的错误退出而不是带着坏签名继续打包。下载完可以立刻手动验证一次cd electron security cms -D -i build/AppleDevelopment.provisionprofile security cms -D -i build/MacAppStore.provisionprofile能打印出 profile 内容就说明文件完好。Profile 通常按年过期过期后重新生成并替换本地文件即可真实 profile 不要提交进 git仓库里的replace_me占位文件就是为此设计的。环境变量与版本号你大概率会踩的 3 个坑⚠️ 坑 1beta 版本号让mas构建直接报错当前electron/package.json的版本是0.9.11-beta带-beta后缀。App Store 只接受x.y.z三段式版本号build.js的校验逻辑是优先读PRESENTON_APP_STORE_VERSION格式必须是三个点分整数1.0.0这类否则报 must be three period-separated integers没设置时尝试从 package 版本号截取数字前缀截不出来就抛 Cannot derive an App Store version from package version。解法是显式指定export PRESENTON_APP_STORE_VERSION1.0.0 export PRESENTON_APP_STORE_BUILD42PRESENTON_APP_STORE_BUILD是 build 号1~3 段点分整数42或1.0.1都合法不设时回退用短版本号。⚠️ 坑 2签名身份变量名对不上或者用错了证书两套目标的身份变量是分开的别混用mas-dev读PRESENTON_MAS_DEV_IDENTITYmas读PRESENTON_MAS_DISTRIBUTION_IDENTITY别名PRESENTON_MAS_IDENTITY两者都没设时回退到CSC_NAME再没有就自动从钥匙串发现。身份值形如Apple Development: Your Name (TEAMID)或Apple Distribution: Your Org (TEAMID)。另一个隐藏规则分发构建会拒绝Apple Development 这类开发身份校验逻辑发现你拿开发证书跑mas会直接报错。⚠️ 坑 3profile 过期、换机器后构建莫名其妙失败Profile 绑定了证书和注册设备mas-dev的 profile 只在注册了该 profile 的 Mac 上能跑换个没注册的机器就是起不来mas分发构建产物通常也无法在本地启动它是给 App Store Connect 处理用的。遇到以前能跑现在不能第一反应是去 Portal 重新下载 profile 替换electron/build/里的旧文件。两条构建路径挑一条走所有命令都在electron/目录下执行所有路径都共用同一个前提首次使用先跑npm run setup:env它一次性完成npm install、FastAPI 的uv sync、Next.js 依赖安装以及导出运行时和 ImageMagick 的准备。仓库没 clone 的话先git clone https://gitcode.com/GitHub_Trending/pr/presenton。如果你要从零构建完整应用build:all系列会重建 Next.js、FastAPI、导出运行时再打包是首次构建和正式发布的正路。开发内测跑这条PRESENTON_MAS_DEV_IDENTITYApple Development: Your Name (TEAMID) \ npm run build:all:mas-dev提交 App Store 跑这条注意带上版本号PRESENTON_MAS_DISTRIBUTION_IDENTITYApple Distribution: Your Org (TEAMID) \ PRESENTON_APP_STORE_VERSION1.0.0 \ npm run build:all:mas如果你只想重新打包资源FastAPI 二进制、Next.js standalone server、导出运行时已经构建好只想重跑 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打包前build.js会做资源就绪校验逐一检查 FastAPI 二进制、LLM 模型元数据、Next.js standalone server、导出任务 runner 与 export-core 包任何一项缺失都会报错退出避免产出装上去但启动不了内置服务的坏包。如果你不走 App Store、直接出 DMG只要一个签名并公证、绕过 App Store 审核的磁盘映像用 Developer ID 路径npm run build:all:mac:signed这条路径需要 Developer ID Application 证书和公证凭据具体的一次性配置见下文延伸阅读里的直接分发指南。 产物落在哪、怎么验证所有产物统一输出到electron/dist/具体路径随架构arm64/x64变化electron/dist/ mas-dev-arm64/ # 开发签名的 .appmas-dev注册设备上运行 mas-arm64/ # 分发签名的 .appmas Presenton-version.pkg # 上传 App Store Connect 的 MAS 安装包 Presenton-version.dmg # 签名并公证的直接分发 DMG上传指引一句话把mas构建产出的.pkg拖进 App Store Connect 就能进入审核与发布流程。至于签名身份构建脚本会自动读取钥匙串里的身份并先做一次 codesign 预检——如果预检超时说明 macOS 在等钥匙串/私钥授权解锁登录钥匙串并允许 codesign 访问对应私钥后重跑即可。图标与沙盒限制提醒MAS 签名应用必须用 MAS Electron 构建mas/mas-dev目标产出普通 DMG 构建不具备同等的沙盒兼容性。mas-dev构建只能在开发 profile 中注册的 Mac 上运行适合 TestFlight 式内测。mas-dev签名固定使用--timestampnone本地签名不依赖网络时间戳服务无网或受限网络下不会挂起需要恢复时间戳时设PRESENTON_CODESIGN_TIMESTAMP1PRESENTON_CODESIGN_TIMESTAMP_RETRIES控制重试次数默认 4。打包后签名失败时检查 entitlements 是否允许沙盒应用执行Contents/Resources/app/resources/下的辅助程序FastAPI 二进制的可执行权限由afterPack钩子自动设置。图标mac.icon指向electron/build/icon.icns仓库已内置生成图标集的源 PNG 在electron/build/icon.iconset/运行时默认图标是electron/resources/ui/assets/images/presenton_short_filled.png。遇到报错先查这里Missing MAS development/distribution provisioning profile原因对应目标找不到可用的 profile 文件。操作从 Developer Portal 下载并放入electron/build/文件名用AppleDevelopment.provisionprofile或MacAppStore.provisionprofile。macOS could not decode 某个 profile原因profile 文件损坏或放的是占位文件。操作去 Portal 重新下载该 profile 替换本地文件别把真实 profile 提交进 git。Cannot derive an App Store version from package version原因package 版本带-beta后缀且没有指定 Store 版本。操作设置PRESENTON_APP_STORE_VERSION为三段整数例如1.0.0。MAS builds must be run on macOS原因Apple 签名工具只能在 macOS 上运行你在非 Mac 环境执行了构建。操作换到装有 Xcode 命令行工具的 Mac 上跑xcode-select --install。延伸阅读macOS 开发快速参考全部 macOS 构建目标速查含npm run dev直跑、notarytool profilepresenton-notary的说明。macOS 直接分发指南Developer ID 证书、公证凭据存储、DMG 签名与 Gatekeeper 验证的完整流程。MAS 打包原始说明本指南的仓库内源文档证书与 profile 的细节以它为准。【免费下载链接】presentonOpen-Source AI Presentation Generator and API (Gamma, Canva, Beautiful AI, Decktopus, Presentations AI Alternative)项目地址: https://gitcode.com/GitHub_Trending/pr/presenton创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考