下载APP 编程狮,随时随地学编程
返回 首页

Electron 中文文档

Electron 向Mac App Store 应用提交向导

自从 v0.34.0, Electron 就允许提交应用包到 Mac App Store(MAS) . 这个向导提供的信息有 : 如何提交应用和 MAS 构建的限制.

注意: 从 v0.36.0,当应用成为沙箱之后,会有一个 bug 阻止 GPU 进程开启 , 所以在这个 bug 修复之前,建议使用 v0.35.x .更多查看 issue #3871 .

注意: 提交应用到 Mac App Store 需要参加 Apple DeveloperProgram , 这需要花钱.

如何提交

下面步骤介绍了一个简单的提交应用到商店方法.然而,这些步骤不能保证你的应用被 Apple 接受;你仍然需要阅读 Apple 的 Submitting Your App 关于如何满足 Mac App Store 要求的向导.

获得证书

为了提交应用到商店,首先需要从 Apple 获得一个证书.可以遵循 existing guides.

App 签名

获得证书之后,你可以使用 Application Distribution 打包你的应用, 然后前往提交你的应用.这个步骤基本上和其他程序一样,但是这 key 一个个的标识 Electron 的每个依赖.

首先,你需要准备2个授权文件 .

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/>
  </dict>
</plist>

然后使用下面的脚本标识你的应用 :

#!/bin/bash

# Name of your app.
APP="YourApp"
# The path of you app to sign.
APP_PATH="/path/to/YouApp.app"
# The path to the location you want to put the signed package.
RESULT_PATH="~/Desktop/$APP.pkg"
# The name of certificates you requested.
APP_KEY="3rd Party Mac Developer Application: Company Name (APPIDENTITY)"
INSTALLER_KEY="3rd Party Mac Developer Installer: Company Name (APPIDENTITY)"

FRAMEWORKS_PATH="$APP_PATH/Contents/Frameworks"

codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper.app/"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper EH.app/"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper NP.app/"
if [ -d "$FRAMEWORKS_PATH/Squirrel.framework/Versions/A" ]; then
  # Signing a non-MAS build.
  codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/Mantle.framework/Versions/A"
  codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/ReactiveCocoa.framework/Versions/A"
  codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/Squirrel.framework/Versions/A"
fi
codesign -fs "$APP_KEY" --entitlements parent.plist "$APP_PATH"

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

如果你是 OS X 下的应用沙箱使用新手,应当仔细阅读 Apple 的 Enabling App Sandbox 来有一点基础,然后向授权文件添加你的应用需要的许可 keys .

上传你的应用并检查提交

在签名应用之后,可以使用应用 Loader 来上传到 iTunes 链接处理 , 确保在上传之前你已经 created a record. 然后你能 submit your app for review.

MAS构建限制

为了让你的应用沙箱满足所有条件,在 MAS 构建的时候,下面的模块被禁用了 :

  • crashReporter
  • autoUpdater

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

  • 一些机子的视频采集功能无效.
  • 某些特征不可访问.
  • Apps 不可识别 DNS 改变.

也由于应用沙箱的使用方法,应用可以访问的资源被严格限制了 ; 阅读更多信息 App Sandboxing .

Electron 使用的加密算法

取决于你所在地方的国家和地区 , Mac App Store 或许需要记录你应用的加密算法 , 甚至要求你提交一个 U.S 加密注册(ERN) 许可的复印件.

Electron 使用下列加密算法:

如何获取 ERN 许可, 可看这篇文章: How to legallysubmit an app to Apple’s App Store when it uses encryption (or how to obtain anERN).
目录

Electron 教程

Electron 教程简介
Electron 快速入门
Electron 桌面环境集成
Electron 在线/离线事件探测
Electron 进程
Electron 支持的 Chrome 命令行开关
Electron 环境变量
Electron 支持的平台
Electron 应用部署
Electron 向Mac App Store 应用提交向导
Electron 应用打包
Electron 使用原生模块
Electron 主进程调试
Electron 使用 Selenium 和 WebDriver
Electron DevTools扩展
Electron 使用 Pepper Flash 插件
Electron 使用 Widevine CDM 插件
Electron 术语表
Electron 离屏渲染
Electron 交互式解释器 (REPL)
Electron 自动更新功能autoUpdater

Electron API

Electron DOM File对象
Electron DOM <webview> 标签
Electron window.open 函数

在主进程内可用的模块

Electron app 模块
Electron autoUpdater 模块
Electron BrowserWindow 模块
Electron contentTracing 模块
Electron dialog 模块
Electron global-shortcut 模块
Electron ipcMain 模块
Electron menu 模块
Electron MenuItem 模块
Electron powerMonitor 模块
Electron powerSaveBlocker 模块
Electron protocol 模块
Electron session 模块
Electron webContents 模块
Electron Tray 模块
Electron Locales

在渲染进程(网页)内可用的模块

Electron desktopCapturer 模块
Electron ipcRenderer 模块
Electron remote 模块
Electron webFrame 模块

两种进程都可用的模块

Electron clipboard 模块
Electron crashReporter 模块
Electron nativeImage 模块
Electron screen 模块
Electron shell 模块

Electron 开发

Electron 编码规范
Electron 源码目录结构
Electron 和 NW.js (原名 node-webkit) 在技术上的差异
Electron 构建系统概览
Electron 构建步骤 (OS X)
Electron 构建步骤 (Windows)
Electron 构建步骤 (Linux)
Electron 在调试中使用 Symbol Server
Electron 常见问题
Electron 版本管理
Windows商店指南
Electron Headless CI Systems 测试 (Travis CI, Jenkins)
Electron 文档风格指南

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }