Electron中文手册
  • 文档概述
  • 开发指南目录
  • 构建说明(Linux)
  • 构建说明(macOS)
  • 构建说明(Windows)
  • 构建系统概述
  • 编码规范
  • 在 macOS 中调试
  • 在 Windows 中调试
  • 在C ++代码中使用clang-format
  • 在调试器中设置符号服务器
  • 源代码目录结构
  • Chrome升级清单
  • Chromium 开发指南
  • V8 开发指南
  • 教程目录
    • 关于 Electron
    • Electron 版本说明
    • API弃用说明
    • 快速入门
    • 支持的平台
    • 桌面环境集成
    • 系统通知
    • 离屏渲染
    • 在线/离线事件检测
    • 多线程
    • REPL
    • 键盘快捷键
    • DevTools扩展
    • 使用原生模块
    • 使用 Pepper Flash 插件
    • 使用 Selenium 和 WebDriver
    • 使用 Widevine CDM 插件
    • 应用分发
    • 应用打包
    • 主进程调试
    • 使用 node-inspector 进行主进程调试
    • 使用 VSCode 进行主进程调试
    • Mac App Store应用提交指南
    • Windows App Store应用提交指南
    • 安全,本地功能和你的责任
    • Headless CI Systems 测试
  • API接口目录
    • API接口之公用接口
      • 应用语言
      • 开发概要
      • 专业术语
      • 常见问题
      • 环境变量
      • 快捷键字符串
      • 命令行
      • 客户端请求
      • 剪贴板
      • <File> H5 File文件操作
      • 无框窗口
      • <window.open> window.open打开新窗口或打开时传递消息
      • 沙盒选项
    • API接口之主进程接口
      • 整体控制
      • 全局快捷键
      • 图标创建与应用
      • 屏幕
      • 窗口
      • 菜单
      • 菜单项
      • 系统托盘
      • 网页内容
      • 从主进程到渲染进程的异步通信
      • 对话框
      • 创建和控制视图
      • 会话
      • 会话,缓存和代理等控制
      • 页面请求
      • HTTP/HTTPS请求处理
      • 协议的注册和处理
      • 使用系统默认应用程序管理文件或URL
      • 下载项管理
      • 进程控制
      • Chromium原生网络库
      • 获取系统首选项
      • 电源状态
      • 节能管理
      • 调试工具
      • 奔溃报告
      • 性能数据收集
      • 自动更新
      • TouchBar触摸条
      • TouchBar触摸条按钮
      • TouchBar触摸条拾色器
      • TouchBar触摸条分组
      • TouchBar触摸条scrubber
      • TouchBar触摸条分段控件
      • TouchBar触摸条label标签
      • TouchBar触摸条弹出框
      • TouchBar触摸条滑块
      • TouchBar触摸条间隔符
    • API接口之渲染进程接口
      • 页面渲染
      • <webview> webview标签
      • 渲染进程与主进程通信
      • 从渲染进程到主进程的异步通信
      • 子窗口
      • 捕获桌面资源
  • 结构列表
    • 蓝牙设备对象
    • 证书对象
    • 证书主体对象
    • Cookie对象
    • 崩溃报告对象
    • 桌面捕获源对象
    • 显示器对象
    • 打印机信息对象
    • 文件过滤器对象
    • 最近使用的项目
    • 常用列表项
    • CPU使用率对象即程序占用的CPU资源
    • IO值对象
    • 内存信息对象
    • 进程内存信息对象
    • 内存使用详细信息
    • Mime类型缓冲区
    • 矩形对象
    • 删除客户端证书对象
    • 删除密码对象
    • Scrubber项对象
    • 分段控制对象
    • 快捷方式对象
    • 任务对象
    • 缩略图工具栏按钮对象
    • 上传blob对象
    • 上传数据对象
    • 上传文件系统对象
    • 上传文件对象
    • 上传原始数据对象
Powered by GitBook
On this page
  • 如何提交您的应用程序
  • 获得证书
  • 获得 Team ID
  • 软件签名
  • 上传应用
  • 检查并提交你的应用
  • MAS 构建限制
  • 附加权利
  • Electron使用的加密算法

Was this helpful?

  1. 教程目录

Mac App Store应用提交指南

Previous使用 VSCode 进行主进程调试NextWindows App Store应用提交指南

Last updated 4 years ago

Was this helpful?

如何提交应用至Mac App Store 和 MAS 构建的限制.

注意: 提交应用到MAS,你需要付费加入.

如何提交您的应用程序

以下介绍了如何将应用提交至MAS,但并不确保应用一定被Apple审核通过, 你需要详阅Apple的,了解MAS的详尽要求.

获得证书

要将您的应用程序提交到Mac App Store,您首先必须从Apple获取证书。这里有个可供参考.

获得 Team ID

在软件签名之前,您需要知道开发者账户的 Team ID,请登录 并点击侧边栏的Membership,您的Team ID显示在团队名称下的 Membership Information里。

软件签名

完成准备工作后,您可以按照打包应用并进行签名.

首先,你需要在软件包内的 Info.plist 中增添一项 ElectronTeamID:

<plist version="1.0">
<dict>
  ...
  <key>ElectronTeamID</key>
  <string>TEAM_ID</string>
</dict>
</plist>

然后,准备两个名为 child.plist和 parent.plist的授权文件.

child.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.inherit</key>
    <true/>
  </dict>
</plist>

parent.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.application-groups</key>
    <string>TEAM_ID.your.bundle.id</string>
  </dict>
</plist>

把 上面的 TEAM_ID改成你自己的 Team ID, 把 your.bundle.id改成应用的Bundle ID,然后使用以下脚本签名应用:

#!/bin/bash

# 应用名称
APP="YourApp"
# 应用路径
APP_PATH="/path/to/YourApp.app"
# 生成安装包路径
RESULT_PATH="~/Desktop/$APP.pkg"
# 开发者应用签名证书
APP_KEY="3rd Party Mac Developer Application: Company Name (APPIDENTITY)"
INSTALLER_KEY="3rd Party Mac Developer Installer: Company Name (APPIDENTITY)"
# 授权文件路径
CHILD_PLIST="/path/to/child.plist"
PARENT_PLIST="/path/to/parent.plist"

FRAMEWORKS_PATH="$APP_PATH/Contents/Frameworks"

codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Electron Framework"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libnode.dylib"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper.app/Contents/MacOS/$APP Helper"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper.app/"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper EH.app/Contents/MacOS/$APP Helper EH"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper EH.app/"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper NP.app/Contents/MacOS/$APP Helper NP"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper NP.app/"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$APP_PATH/Contents/MacOS/$APP"
codesign -s "$APP_KEY" -f --entitlements "$PARENT_PLIST" "$APP_PATH"

productbuild --component "$APP_PATH" /Applications --sign "$INSTALLER_KEY" "$RESULT_PATH"

签名原生模块

应用程序中的原生模块也需要签名。如果使用electron-osx-sign,请确保在参数列表中包含已生成二进制文件的路径:

electron-osx-sign YourApp.app YourApp.app/Contents/Resources/app/node_modules/nativemodule/build/release/nativemodule

还要注意,原生模块可能产生的中间文件不包括在内(因为它们也需要被签名)。

8.1.0及更高版本已默认忽略这些文件。

上传应用

检查并提交你的应用

MAS 构建限制

为了满足应用程序沙箱的所有要求,MAS构建中已禁用以下模块:

  • crashReporter

  • autoUpdater

并且下面的行为也改变了:

  • 某些机器的视频采集功能可能无效.

  • 某些辅助功能可能无效.

  • 应用无法检测 DNS 变化.

附加权利

根据应用使用的 Electron API,你可能需要在 parent.plist 文件添加附加授权,以便能够从应用程序的Mac App Store构建中使用这些API。

网络访问

启用传出的网络连接,允许你的应用程序连接到服务器:

<key>com.apple.security.network.client</key>
<true/>

启用传入的网络连接,让你的应用程序打开网络 socket 监听:

<key>com.apple.security.network.server</key>
<true/>

dialog.showOpenDialog

<key>com.apple.security.files.user-selected.read-only</key>
<true/>

dialog.showSaveDialog

<key>com.apple.security.files.user-selected.read-write</key>
<true/>

Electron使用的加密算法

根据您所在的国家和地区,Mac App Store可能需要记录应用程序中使用的加密算法,甚至要求您提交美国加密注册(ERN)批准的副本。

Electron 使用下列加密算法:

  • ECDSA - ANS X9.62–2005

  • ECDH - ANS X9.63–2001

  • IDEA - "On the Design and Security of Block Ciphers" book by X. Lai

如果你是 macOS 下的应用沙箱使用新手,应当仔细阅读 Apple 的这边 了解一些基础,然后在授权文件 (entitlements files) 内添加你的应用所需密钥。

除了手动签名你的应用,你也可以选择使用 模块来完成此工作。

如果你使用 8.1.0 之前的版本,则需在构建步骤中添加来忽略这些文件。

签名完成后,您可以使用Application Loader将其上传到iTunes Connect进行处理,确保您在上传之前已创建了.

最后, 你可以.

在登录时启动应用程序的 API 会被禁用。详见

另外,也由于应用沙箱的使用,应用可以访问的资源也被严格限制,更多请详细阅读了解更多信息.

详阅更多细节:

详阅更多细节:

详阅更多细节:

AES - , ,

HMAC -

HKDF -

PBKDF2 -

RSA -

SHA -

Blowfish -

CAST - ,

DES -

DH -

DSA -

EC -

MD2 -

MD4 -

MD5 -

MDC2 -

RC2 -

RC4 -

RC5 -

RIPEMD -

关于如何获得ERN批准,您可以参考文章:.

开发者计划
提交指南
现成指南
Apple开发者中心
应用程序分发
启用应用程序沙箱
electron-osx-sign
electron-packager
electron-packager
创建记录
检查并提交你的应用
这里
App Sandboxing
启用网络访问文档
启用用户选择的文件访问文档
启用用户选择的文件访问文档
NIST SP 800-38A
NIST SP 800-38D
RFC 3394
FIPS 198-1
NIST SP 800-56C
RFC 2898
RFC 3447
FIPS 180-4
https://www.schneier.com/cryptography/blowfish/
RFC 2144
RFC 2612
FIPS 46-3
RFC 2631
ANSI X9.30
SEC 1
RFC 1319
RFC 6150
RFC 1321
ISO/IEC 10118-2
RFC 2268
RFC 4345
http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf
ISO/IEC 10118-3
如何合法地向Apple App Store提交加密的应用程序 (或如何获得ERN)