ARTICLE DETAIL

资讯详情

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

Presenton Mac App Store 打包全解析:从 Apple 证书到可上传 .pkg 一次搞定

Presenton Mac App Store 打包全解析:从 Apple 证书到可上传 .pkg 一次搞定 Presenton Mac App Store 打包全解析从 Apple 证书到可上传 .pkg 一次搞定【免费下载链接】presentonOpen-Source AI Presentation Generator and API (Gamma, Canva, Beautiful AI, Decktopus, Presentations AI Alternative)项目地址: https://gitcode.com/GitHub_Trending/pr/presentonPresenton 是开源的 AI 演示文稿生成器桌面端为 Electron 壳内置 Next.js 前端与 FastAPI 后端。这篇 MAS 构建签名指南讲清四件事Apple 侧要准备哪些资产、App Sandbox 沙盒权限为什么长这样、electron/build.js的预检机制如何工作以及怎么跑出一条能直接上传 App Store Connect 的签名.pkg。做完能交付什么跑通npm run build:all:mas后你在electron/dist/里拿到一个分发签名的.app和用于提交的Presenton-version.pkg。.pkg交给 App Store Connect 处理审核发布都在商店侧完成。唯一硬前置必须在装有 Xcode 命令行工具的 Mac 上执行。build.js里resolveProvisioningProfile对非 darwin 平台直接抛出MAS development builds must be run on macOS because Apple signing tools are required.Linux 和 Windows 上这条流水线无法启动。前置条件Apple 资产与本地环境检查清单按缺什么 / 去哪拿 / 拿来干什么逐项过一遍五项都齐了再动手构建。缺什么去哪拿拿来干什么Apple Development 证书Xcode → Settings → Accounts → 你的团队 → Manage Certificates → 给mas-dev沙盒测试构建签名Apple Distribution 证书同上类型选 Apple Distribution给mas提交构建的应用签名3rd Party Mac Developer Installer 证书同上单独创建给mas构建的.pkg安装包签名App IDDeveloper Portal → Certificates, Identifiers Profiles → Identifiers → App IDs与代码里的 Bundle ID 对应两个 Provisioning ProfilePortal → Profiles → 分别给开发和分发构建放入electron/build/几个容易踩的坑MAS 分发构建需要的是证书对。resolveMasSigningIdentitiesbuild.js会同时要求应用证书Apple Distribution或3rd Party Mac Developer Application和安装包证书3rd Party Mac Developer Installer缺一即抛Missing MAS signing identity.并在错误信息里列出钥匙串现有身份。Bundle ID 是com.presenton.presentonTeam ID 是S6W5C54KL6分别定义在 build.js 顶部的APP_ID和TEAM_ID后者通过extendInfo.ElectronTeamID写进 Info.plist。Portal 里的 App ID 必须与代码一致若你想用自己的 ID改APP_ID属于本地操作以仓库实际为准。开发 Profile类型 macOS App Development绑定你的 App ID 与 Apple Development 证书下载后放入electron/build/AppleDevelopment.provisionprofile。build.js 还接受AppleDev.provisionprofile、AppDev.provisionprofile两个回退文件名。分发 Profile类型 Mac App Store绑定 App ID 与 Apple Distribution 证书放入electron/build/MacAppStore.provisionprofile回退候选AppDistri.provisionprofile。仓库里现成的MacAppStore.provisionprofile.replace_me是占位说明文件真实 profile 由你在本地下载放置真实 profile 已被 git 忽略不要提交。Profile 按年过期。拿到手先用解码命令验一下cd electron security cms -D -i build/AppleDevelopment.provisionprofile security cms -D -i build/MacAppStore.provisionprofile能打印出 plist 内容即有效。主进程为什么需要这份沙盒权限清单App Sandbox 是 MAS 的硬性要求权限声明在 entitlements.mas.plist逐项都有存在理由com.apple.security.app-sandbox打开沙盒没有这一项构建或审核直接失败com.apple.security.application-groups值为S6W5C54KL6.com.presenton.presenton应用主程序与各组件共享同一容器目录Electron 多进程架构必需com.apple.security.cs.allow-jit允许 JIT 编译。Chromium 渲染进程依赖 JIT缺了页面渲染会出问题com.apple.security.network.client与com.apple.security.network.server前者允许出网请求后者允许监听本地端口——Presenton 内置 Next.js 与 FastAPI 本地服务两条都要com.apple.security.files.user-selected.read-write读写用户主动选定的文件支撑导入文档、导出 PPTXcom.apple.security.files.downloads.read-write读写下载目录供导出产物落盘。辅助进程与内置二进制用的是 entitlements.mas.inherit.plist只有沙盒开关加com.apple.security.inherit意思是子进程继承主进程的权限边界不单独扩权。这份克制是审核友好的关键——只申请实际用到的权限。构建脚本在打包前做了什么预检理解build.js的预检顺序就能看懂绝大多数构建期报错。它先跑检查、后跑 electron-builderProfile 解码校验canDecodeProvisioningProfile优先用security cms -D -i试解失败回退openssl cms -inform DER -verify -noverify。占位文件或损坏文件会让构建带着明确错误退出而不是带病签名。平台限制非 darwin 平台在 profile 解析阶段就抛must be run on macOS错误。签名身份解析resolveMasSigningIdentities调用security find-identity -v读取全部有效身份按PRESENTON_MAS_DISTRIBUTION_IDENTITY→PRESENTON_MAS_IDENTITY→CSC_NAME的顺序取限定词都没有则自动发现。开发身份Apple Development前缀用于分发构建会被显式拒绝。codesign 预检assertCodesignCanUseIdentity用选中的分发身份在临时文件上实际签名一次30 秒超时。超时通常意味着钥匙串在等待私钥访问授权错误信息会直接提示解锁登录钥匙串。设PRESENTON_SKIP_CODESIGN_PREFLIGHT1可跳过build.js 末尾的触发逻辑。资源就绪检查assertSourceBundleResourcesReady逐一验证 FastAPI 二进制、LLM 模型元数据models.json、Next.js standalone server、导出任务 runner 与presenton/export-core包任何缺失都列出清单报错。目的是挡掉打包成功但启动不了内置服务的坏包。dist:*系列脚本走的是同一条检查。构建环境变量与命令怎么配环境变量变量作用PRESENTON_MAC_TARGET由 npm 脚本设置dmg/mas-dev/mas走脚本时别手动设PRESENTON_MAS_DEV_IDENTITYmas-dev签名身份形如Apple Development: Your Name (TEAMID)PRESENTON_MAS_DISTRIBUTION_IDENTITYmas分发身份形如Apple Distribution: Your Org (TEAMID)PRESENTON_MAS_IDENTITY上者的别名CSC_NAME两者都未设置时的回退PRESENTON_APP_STORE_VERSIONApp Store 版本号必须形如1.0.0三段点分整数PRESENTON_APP_STORE_BUILDbuild 号1~3 段点分整数如42未设默认取短版本号PRESENTON_CODESIGN_TIMESTAMP设为1恢复时间戳默认 MAS 本地打包用--timestampnone不依赖 Apple 时间戳服务PRESENTON_CODESIGN_TIMESTAMP_RETRIES时间戳失败重试次数默认 4版本号有硬校验PRESENTON_APP_STORE_VERSION不匹配/^\d\.\d\.\d$/直接报错。当前 package.json 版本为0.9.11-beta带-beta后缀mas构建时该变量必填。按场景执行首次先在electron/下跑npm run setup:env完成 npm 依赖、FastAPI 的 uv 环境、Next.js 依赖、导出运行时与 ImageMagick 准备。场景一完整构建。重建 Next.js、FastAPI 与导出运行时再打包推荐# 开发包只能在开发 Profile 注册的 Mac 上运行 PRESENTON_MAS_DEV_IDENTITYApple Development: Your Name (TEAMID) \ npm run build:all:mas-dev # 分发包上传 App Store Connect PRESENTON_MAS_DISTRIBUTION_IDENTITYApple Distribution: Your Org (TEAMID) \ PRESENTON_APP_STORE_VERSION1.0.0 \ npm run build:all:mas场景二仅重新打包。资源已构建好只重跑打包阶段耗时短得多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场景三不走商店的直发 DMG。需要 Developer ID Application 证书加公证凭据npm run build:all:mac:signed细节mas目标在 electron-builder 配置里type: distributionmas-dev是type: developmentmas-dev额外固定--timestampnone。打包后的afterPack钩子负责把.app内 FastAPI 二进制的权限设为 755并剪掉与目标架构不符的 prebuild 目录。产物长什么样怎么验证构建配置output: dist产物落在electron/dist/具体路径随架构arm64/x64变化典型布局electron/dist/ mas-dev-arm64/ # 开发签名 .app可本地运行 mas-arm64/ # 分发签名 .app交给商店处理 Presenton-version.pkg # MAS 安装包上传 App Store Connect Presenton-version.dmg # 直发路径的签名公证 DMG哪种能本地跑记一句话mas-dev能跑且仅限开发 Profile 注册的 Macmas分发版通常不能——它是为 App Store Connect 处理流程准备的本地启动没有意义。验证签名与沙盒权限codesign -dv --entitlements - electron/dist/mas-arm64/Presenton.app security cms -D -i electron/dist/Presenton-*.pkg 2/dev/null | head第一条应能打出 entitlements确认com.apple.security.app-sandbox为 true.pkg里嵌着签名后的.app抽查即可。图标方面build.js的mac.icon指向electron/build/icon.icns需要正式 Store 图标时在本地准备该文件即可以仓库实际为准。常见报错排查按报错原文 → 原因 → 解决三段过一遍Missing MAS development provisioning profile. Expected: ...→ 对应 Profile 文件不在electron/build/或其回退文件名下。→ 按清单下载并放到期望路径文件名以 build.js 候选列表为准。... but macOS could not decode it: ...→ 本地 profile 损坏或仓库占位文件没被真实文件替换。→ 回 Portal 重新下载只放本地不提交 git。Cannot derive an App Store version from package version ...→package.json版本带-beta后缀提取不出三段版本号。→ 设置PRESENTON_APP_STORE_VERSION1.0.0。MAS distribution builds must be run on macOS because Apple signing tools are required.→ 在无 Apple 签名工具的机器上执行。→ 换装有xcode-select --install的 Mac。Missing MAS signing identity.→ 应用证书与安装包证书没有同时存在于钥匙串。→ 补建缺失证书并安装错误信息末尾会列出当前可见身份。... points to a development identity (Apple Development: ...). MAS distribution builds require Apple Distribution or 3rd Party Mac Developer Application.→ 把开发身份传给了mas构建。→ 换分发身份或确认PRESENTON_MAS_DISTRIBUTION_IDENTITY指向的是 Distribution 证书。codesign 预检超时Could not complete MAS signing preflight...→ macOS 在等钥匙串/私钥访问授权弹窗。→ 解锁登录钥匙串并允许 codesign 访问私钥后重跑。Packaged app is missing required runtime resources.→ 跳过完整构建直接跑dist:*而resources/下缺 FastAPI 或 Next.js 产物。→ 先跑一次npm run build:all:mac:signed级别的完整构建再回到仅打包场景。另外两个非报错类问题Profile 过期后构建会突然报缺失或解码失败重新生成就行打包后的.app里 FastAPI 不可执行正常由afterPack钩子的 chmod 755 处理若签名仍失败检查 entitlements 是否允许沙盒应用执行Contents/Resources/app/resources/下的辅助程序。延伸阅读Mac App Store Setup仓库内的 MAS 配置原始文档Direct DistributionDeveloper ID 直发路径的证书、notarytool 公证与 DMG 验证macOS Dev README全部 macOS 构建目标的快速参考【免费下载链接】presentonOpen-Source AI Presentation Generator and API (Gamma, Canva, Beautiful AI, Decktopus, Presentations AI Alternative)项目地址: https://gitcode.com/GitHub_Trending/pr/presenton创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表