macOS Electron应用提交App Store失败,报退出码173问题咨询
解决Mac App Store Electron应用因收据验证失败(错误码173)被拒的问题
我之前也碰到过一模一样的情况,哪怕没有内购(IAP),Mac App Store上架的应用必须通过系统的应用收据验证——这是苹果的强制要求,和有没有内购完全无关。错误码173正是系统层面收据验证失败的典型表现,下面是一步步的排查和解决方法:
一、先明确核心原因
Mac App Store分发的应用,系统会在启动时自动检查应用收据(不是内购收据,是应用本身的购买/下载收据)。如果验证不通过,系统就会直接终止应用,并提示“已损坏,无法打开”,这和你有没有自己做验证逻辑无关。
二、具体排查和修复步骤
1. 检查Electron打包配置(重点!)
如果你用的是electron-builder这类主流打包工具,确保以下配置正确:
- 启用
hardenedRuntime(硬运行时):这是现在Mac App Store上架的必备要求 - 配置正确的
entitlements和entitlementsInherit文件,确保包含必要的权限:
示例entitlements.plist内容:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <!-- 沙箱权限(如果你的应用使用沙箱) --> <key>com.apple.security.app-sandbox</key> <true/> <!-- 允许网络请求(用于验证收据) --> <key>com.apple.security.network.client</key> <true/> <!-- 允许读取收据文件 --> <key>com.apple.security.files.user-selected.read-only</key> <true/> </dict> </plist> - 确保打包时指定了正确的Apple Developer签名身份,并且完成了公证(notarization)
2. 添加基础的收据验证逻辑
哪怕你不需要处理内购,也要在主进程中添加简单的收据检查逻辑,确保应用能配合系统的验证流程:
const { app, dialog } = require('electron'); const fs = require('fs'); const path = require('path'); app.on('ready', async () => { // 检查系统收据文件是否存在 const receiptPath = path.join(app.getPath('appData'), '../Receipts/com.yourcompany.yourapp.storekit'); if (!fs.existsSync(receiptPath)) { console.error('应用收据文件不存在'); // 不要直接退出应用,而是提示用户尝试重新下载或联系支持 dialog.showErrorBox('启动失败', '无法验证应用收据,请尝试重新下载应用或联系客服'); } // 可选:实现基础的收据验证逻辑(参考苹果的Receipt Validation Programming Guide) // 你可以自己解析收据文件,或者用第三方库简化流程 });
3. 按照苹果的要求复现问题
苹果提到的QA1778是关键,一定要用和提交审核完全一致的包来测试:
- 创建一个干净的测试环境(比如新建macOS用户、用虚拟机)
- 登录你的App Store开发者账号,安装提交的包
- 查看控制台日志(Console.app),除了错误码173,找更详细的失败原因(比如签名不匹配、网络无法连接验证服务器等)
4. 验证签名和公证状态
用终端命令检查打包后的应用:
- 检查签名详情:
codesign -dv --verbose=4 /path/to/your/app.app,确认Entitlements配置正确 - 检查公证状态:
spctl -a -v /path/to/your/app.app,确保输出显示accepted
三、为什么之前的版本能成功?
大概率是苹果的审核标准收紧了,或者你这次打包时修改了配置(比如升级了electron-builder版本,默认配置变化;或者新增了沙箱但没配全权限),导致之前的验证逻辑现在不满足要求了。
内容的提问来源于stack exchange,提问作者Rubycon
相关产品推荐
相关产品推荐

