commit
c3f343e6c4
9 changed files with 617 additions and 0 deletions
|
@ -242,6 +242,7 @@ var webContents = win.webContents;
|
|||
* `result` Object
|
||||
* `requestId` Integer
|
||||
* `finalUpdate` Boolean - 标识是否还有更多的值可以查看.
|
||||
* `activeMatchOrdinal` Integer (可选) - 活动匹配位置
|
||||
* `matches` Integer (可选) - 匹配数量.
|
||||
* `selectionArea` Object (可选) - 协调首个匹配位置.
|
||||
|
||||
|
|
|
@ -528,6 +528,7 @@ webview.addEventListener('console-message', function(e) {
|
|||
* `result` Object
|
||||
* `requestId` Integer
|
||||
* `finalUpdate` Boolean - 指明下面是否还有更多的回应.
|
||||
* `activeMatchOrdinal` Integer (可选) - 活动匹配位置
|
||||
* `matches` Integer (optional) - 匹配数量.
|
||||
* `selectionArea` Object (optional) - 整合第一个匹配域.
|
||||
|
||||
|
|
123
docs-translations/zh-CN/development/build-instructions-linux.md
Normal file
123
docs-translations/zh-CN/development/build-instructions-linux.md
Normal file
|
@ -0,0 +1,123 @@
|
|||
# Build Instructions (Linux)
|
||||
|
||||
遵循下面的引导,在 Linux 上构建 Electron .
|
||||
|
||||
## Prerequisites
|
||||
|
||||
* Python 2.7.x. 一些发行版如 CentOS 仍然使用 Python 2.6.x ,所以或许需要 check 你的 Python 版本,使用 `python -V`.
|
||||
* Node.js v0.12.x. 有很多方法来安装 Node. 可以从 [Node.js](http://nodejs.org)下载原文件并且编译它 .也可以作为一个标准的用户在 home 目录下安装 node .或者尝试使用仓库 [NodeSource](https://nodesource.com/blog/nodejs-v012-iojs-and-the-nodesource-linux-repositories).
|
||||
* Clang 3.4 或更新的版本.
|
||||
* GTK+开发头文件和libnotify.
|
||||
|
||||
在 Ubuntu, 安装下面的库 :
|
||||
|
||||
```bash
|
||||
$ sudo apt-get install build-essential clang libdbus-1-dev libgtk2.0-dev \
|
||||
libnotify-dev libgnome-keyring-dev libgconf2-dev \
|
||||
libasound2-dev libcap-dev libcups2-dev libxtst-dev \
|
||||
libxss1 libnss3-dev gcc-multilib g++-multilib
|
||||
```
|
||||
|
||||
在 Fedora, 安装下面的库 :
|
||||
|
||||
```bash
|
||||
$ sudo yum install clang dbus-devel gtk2-devel libnotify-devel libgnome-keyring-devel \
|
||||
xorg-x11-server-utils libcap-devel cups-devel libXtst-devel \
|
||||
alsa-lib-devel libXrandr-devel GConf2-devel nss-devel
|
||||
```
|
||||
|
||||
其它版本的也许提供了相似的包来安装,通过包管理器,例如 pacman.
|
||||
或一个可以编译源文件的.
|
||||
|
||||
## 使用虚拟机
|
||||
|
||||
如果在虚拟机上构建 Electron,你需要一个固定大小的设备,至少需要 25 gigabytes .
|
||||
|
||||
## 获取代码
|
||||
|
||||
```bash
|
||||
$ git clone https://github.com/atom/electron.git
|
||||
```
|
||||
|
||||
## Bootstrapping
|
||||
|
||||
bootstrap 脚本也是必要下载的构建依赖,来创建项目文件.需要使用 Python 2.7.x 来让脚本成功执行.正确下载文件会花费较长的时间.
|
||||
注意我们使用的是 `ninja` 来构建 Electron,所以没有生成 `Makefile` 项目.
|
||||
|
||||
```bash
|
||||
$ cd electron
|
||||
$ ./script/bootstrap.py -v
|
||||
```
|
||||
|
||||
### 交叉编译
|
||||
|
||||
如果想创建一个 `arm` target ,应当还要下载下面的依赖 :
|
||||
|
||||
```bash
|
||||
$ sudo apt-get install libc6-dev-armhf-cross linux-libc-dev-armhf-cross \
|
||||
g++-arm-linux-gnueabihf
|
||||
```
|
||||
|
||||
为了编译 `arm` 或 `ia32` targets, 你应当为 `bootstrap.py` 脚本使用
|
||||
`--target_arch` 参数:
|
||||
|
||||
```bash
|
||||
$ ./script/bootstrap.py -v --target_arch=arm
|
||||
```
|
||||
|
||||
## 构建
|
||||
|
||||
创建 `Release` 、 `Debug` target:
|
||||
|
||||
```bash
|
||||
$ ./script/build.py
|
||||
```
|
||||
|
||||
这个脚本也许会在目录 `out/R` 下创建一个巨大的可执行的 Electron . 文件大小或许会超过 1.3 gigabytes. 原因是 Release target 二进制文件包含了 调试符号 .运行 `create-dist.py` 脚本来减小文件的 size :
|
||||
|
||||
```bash
|
||||
$ ./script/create-dist.py
|
||||
```
|
||||
这会在 `dist` 目录下创建一个有大量小文件的工作空间. 运行 create-dist.py 脚本之后, 或许你想删除仍然在 `out/R` 下的 1.3+ gigabyte 二进制文件.
|
||||
|
||||
可以只创建 `Debug` target:
|
||||
|
||||
```bash
|
||||
$ ./script/build.py -c D
|
||||
```
|
||||
|
||||
创建完毕, 可以在 `out/D`下面找到 `electron`.
|
||||
|
||||
## Cleaning
|
||||
|
||||
删除构建文件 :
|
||||
|
||||
```bash
|
||||
$ ./script/clean.py
|
||||
```
|
||||
|
||||
## 解决问题
|
||||
|
||||
确保你已经安装了所有的依赖 .
|
||||
|
||||
### Error While Loading Shared Libraries: libtinfo.so.5
|
||||
|
||||
预构建的 `clang` 会尝试链接到 `libtinfo.so.5`. 取决于 host 架构, 适当的使用 `libncurses`:
|
||||
|
||||
```bash
|
||||
$ sudo ln -s /usr/lib/libncurses.so.5 /usr/lib/libtinfo.so.5
|
||||
```
|
||||
|
||||
## Tests
|
||||
|
||||
测试你的修改是否符合项目代码风格,使用:
|
||||
|
||||
```bash
|
||||
$ ./script/cpplint.py
|
||||
```
|
||||
|
||||
测试有效性使用:
|
||||
|
||||
```bash
|
||||
$ ./script/test.py
|
||||
```
|
|
@ -0,0 +1,62 @@
|
|||
# Build Instructions (OS X)
|
||||
|
||||
遵循下面的引导,在 OS X 上构建 Electron .
|
||||
|
||||
## 前提
|
||||
|
||||
* OS X >= 10.8
|
||||
* [Xcode](https://developer.apple.com/technologies/tools/) >= 5.1
|
||||
* [node.js](http://nodejs.org) (外部)
|
||||
|
||||
如果你通过 Homebrew 使用 Python 下载,需要安装下面的 Python 模块:
|
||||
|
||||
* pyobjc
|
||||
|
||||
## 获取代码
|
||||
|
||||
```bash
|
||||
$ git clone https://github.com/atom/electron.git
|
||||
```
|
||||
|
||||
## Bootstrapping
|
||||
|
||||
bootstrap 脚本也是必要下载的构建依赖,来创建项目文件.注意我们使用的是 `ninja` 来构建 Electron,所以没有生成 Xcode 项目.
|
||||
|
||||
```bash
|
||||
$ cd electron
|
||||
$ ./script/bootstrap.py -v
|
||||
```
|
||||
|
||||
## 构建
|
||||
|
||||
创建 `Release` 、 `Debug` target:
|
||||
|
||||
```bash
|
||||
$ ./script/build.py
|
||||
```
|
||||
|
||||
可以只创建 `Debug` target:
|
||||
|
||||
```bash
|
||||
$ ./script/build.py -c D
|
||||
```
|
||||
|
||||
创建完毕, 可以在 `out/D` 下面找到 `Electron.app`.
|
||||
|
||||
## 32位支持
|
||||
|
||||
在 OS X 上,构建 Electron 只支持 64位的,不支持 32位的 .
|
||||
|
||||
## 测试
|
||||
|
||||
测试你的修改是否符合项目代码风格,使用:
|
||||
|
||||
```bash
|
||||
$ ./script/cpplint.py
|
||||
```
|
||||
|
||||
测试有效性使用:
|
||||
|
||||
```bash
|
||||
$ ./script/test.py
|
||||
```
|
|
@ -0,0 +1,136 @@
|
|||
# Build Instructions (Windows)
|
||||
|
||||
遵循下面的引导,在 Windows 上构建 Electron .
|
||||
|
||||
## 前提
|
||||
|
||||
* Windows 7 / Server 2008 R2 or higher
|
||||
* Visual Studio 2013 with Update 4 - [download VS 2013 Community Edition for
|
||||
free](https://www.visualstudio.com/news/vs2013-community-vs).
|
||||
* [Python 2.7](http://www.python.org/download/releases/2.7/)
|
||||
* [Node.js](http://nodejs.org/download/)
|
||||
* [Git](http://git-scm.com)
|
||||
|
||||
如果你现在还没有安装 Windows , [modern.ie](https://www.modern.ie/en-us/virtualization-tools#downloads) 有一个 timebombed 版本的 Windows ,你可以用它来构建 Electron.
|
||||
|
||||
构建 Electron 完全的依赖于命令行,并且不可通过 Visual Studio.
|
||||
可以使用任何的编辑器来开发 Electron ,未来会支持 Visual Studio.
|
||||
|
||||
**注意:** 虽然 Visual Studio 不是用来构建的,但是它仍然
|
||||
**必须的** ,因为我们需要它提供的构建工具栏.
|
||||
|
||||
**注意:** Visual Studio 2015 不可用. 请确定使用 MSVS
|
||||
**2013**.
|
||||
|
||||
## 获取代码
|
||||
|
||||
```powershell
|
||||
$ git clone https://github.com/atom/electron.git
|
||||
```
|
||||
|
||||
## Bootstrapping
|
||||
|
||||
bootstrap 脚本也是必要下载的构建依赖,来创建项目文件.注意我们使用的是 `ninja` 来构建 Electron,所以没有生成 Visual Studio 项目.
|
||||
|
||||
```powershell
|
||||
$ cd electron
|
||||
$ python script\bootstrap.py -v
|
||||
```
|
||||
|
||||
## 构建
|
||||
|
||||
创建 `Release` 、 `Debug` target:
|
||||
|
||||
```powershell
|
||||
$ python script\build.py
|
||||
```
|
||||
|
||||
可以只创建 `Debug` target:
|
||||
|
||||
```powershell
|
||||
$ python script\build.py -c D
|
||||
```
|
||||
|
||||
创建完毕, 可以在 `out/D`(debug target) 或 `out\R` (release target) 下面找到 `electron.exe`.
|
||||
|
||||
## 64bit Build
|
||||
|
||||
为了构建64位的 target,在运行 bootstrap 脚本的时候需要使用 `--target_arch=x64` :
|
||||
|
||||
```powershell
|
||||
$ python script\bootstrap.py -v --target_arch=x64
|
||||
```
|
||||
|
||||
其他构建步骤完全相同.
|
||||
|
||||
## Tests
|
||||
|
||||
测试你的修改是否符合项目代码风格,使用:
|
||||
|
||||
```powershell
|
||||
$ python script\cpplint.py
|
||||
```
|
||||
|
||||
测试有效性使用:
|
||||
|
||||
```powershell
|
||||
$ python script\test.py
|
||||
```
|
||||
在构建 debug 时为 Tests包含原生模块 (例如 `runas`) 将不会执行(详情 [#2558](https://github.com/atom/electron/issues/2558)), 但是它们在构建 release 会起效.
|
||||
|
||||
运行 release 构建使用 :
|
||||
|
||||
```powershell
|
||||
$ python script\test.py -R
|
||||
```
|
||||
|
||||
## 解决问题
|
||||
|
||||
### Command xxxx not found
|
||||
|
||||
如果你遇到了一个错误,类似 `Command xxxx not found`, 可以尝试使用 `VS2012 Command Prompt` 控制台来执行构建脚本 .
|
||||
|
||||
### Fatal internal compiler error: C1001
|
||||
|
||||
确保你已经安装了 Visual Studio 的最新安装包 .
|
||||
|
||||
### Assertion failed: ((handle))->activecnt >= 0
|
||||
|
||||
如果在 Cygwin 下构建的,你可能会看到 `bootstrap.py` 失败并且附带下面错误 :
|
||||
|
||||
```
|
||||
Assertion failed: ((handle))->activecnt >= 0, file src\win\pipe.c, line 1430
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "script/bootstrap.py", line 87, in <module>
|
||||
sys.exit(main())
|
||||
File "script/bootstrap.py", line 22, in main
|
||||
update_node_modules('.')
|
||||
File "script/bootstrap.py", line 56, in update_node_modules
|
||||
execute([NPM, 'install'])
|
||||
File "/home/zcbenz/codes/raven/script/lib/util.py", line 118, in execute
|
||||
raise e
|
||||
subprocess.CalledProcessError: Command '['npm.cmd', 'install']' returned non-zero exit status 3
|
||||
```
|
||||
|
||||
这是由同时使用 Cygwin Python 和 Win32 Node 造成的 bug.解决办法就是使用 Win32 Python 执行 bootstrap 脚本 (假定你已经在目录 `C:\Python27` 下安装了 Python):
|
||||
|
||||
```powershell
|
||||
$ /cygdrive/c/Python27/python.exe script/bootstrap.py
|
||||
```
|
||||
|
||||
### LNK1181: cannot open input file 'kernel32.lib'
|
||||
|
||||
重新安装 32位的 Node.js.
|
||||
|
||||
### Error: ENOENT, stat 'C:\Users\USERNAME\AppData\Roaming\npm'
|
||||
|
||||
简单创建目录 [应该可以解决问题](http://stackoverflow.com/a/25095327/102704):
|
||||
|
||||
```powershell
|
||||
$ mkdir ~\AppData\Roaming\npm
|
||||
```
|
||||
|
||||
### node-gyp is not recognized as an internal or external command
|
||||
|
||||
如果你使用 Git Bash 来构建,或许会遇到这个错误,可以使用 PowerShell 或 VS2012 Command Prompt 来代替 .
|
42
docs-translations/zh-CN/development/build-system-overview.md
Normal file
42
docs-translations/zh-CN/development/build-system-overview.md
Normal file
|
@ -0,0 +1,42 @@
|
|||
# Build System Overview
|
||||
|
||||
Electron 使用 `gyp` 来生成项目 ,使用 `ninja` 来构建项目. 项目配置可以在 `.gyp` 和 `.gypi` 文件中找到.
|
||||
|
||||
## Gyp 文件
|
||||
|
||||
下面的 `gyp` 文件包含了构建 Electron 的主要规则 :
|
||||
|
||||
* `atom.gyp` 定义了 Electron 它自己是怎样被构建的.
|
||||
* `common.gypi` 调整 node 的构建配置,来让它结合 Chromium 一起构建.
|
||||
* `vendor/brightray/brightray.gyp` 定义了 `brightray` 是如何被构建的,并且包含了默认配置来连接到 Chromium.
|
||||
* `vendor/brightray/brightray.gypi` 包含了常用的创建配置.
|
||||
|
||||
## 创建组件
|
||||
|
||||
在 Chromium 还是一个相当大的项目的时候,最后链接阶段会花了好几分钟,这让开发变得很困难. 为了解决这个困难,Chromium 引入了 "component build" ,这让每个创建的组建都是分隔开的共享库,让链接更快,但是这浪费了文件大小和性能.
|
||||
|
||||
在 Electron 中,我们采用了一个非常相似的方法 : 在创建 `Debug` , 二进制文件会被链接进入一个 Chromium 组件的共享版本库来达到快速链接; 在创建 `Release`, 二进制文件会被链接进入一个静态版本库, 所以我们可以有最小的二进制文件size和最佳的体验.
|
||||
|
||||
## Minimal Bootstrapping
|
||||
|
||||
在运行 bootstrap 脚本的时候,所有的 Chromium 预编译二进制文件会被下载.默认静态库和共享库会被下载,并且项目的最后大小会在 800MB 到 2GB 之间,这取决于平台类型.
|
||||
|
||||
默认,`libchromiumcontent` 是从 Amazon Web Services 上下载下来的.如果设置了 `LIBCHROMIUMCONTENT_MIRROR` 环境变量,bootstrap脚本会从这里下载下来. [`libchromiumcontent-qiniu-mirror`](https://github.com/hokein/libchromiumcontent-qiniu-mirror) 是 `libchromiumcontent` 的映射.如果你不能连接 AWS,你可以切换下载路径:`export LIBCHROMIUMCONTENT_MIRROR=http://7xk3d2.dl1.z0.glb.clouddn.com/`
|
||||
如果只是想快速搭建一个 Electron 的测试或开发环境,可以通过 `--dev` 参数只下载共享版本库:
|
||||
|
||||
```bash
|
||||
$ ./script/bootstrap.py --dev
|
||||
$ ./script/build.py -c D
|
||||
```
|
||||
|
||||
## Two-Phase Project Generation
|
||||
|
||||
在 `Release` 和 `Debug` 构建的时候后,Electron 链接了不同配置的库 .然而 `gyp`不支持为不同的配置文件进行不同的链接设置.
|
||||
|
||||
为了规避这个问题,Electron 在运行 `gyp` 的时候,使用了一个 `gyp` 的变量 `libchromiumcontent_component`来控制应该使用哪个链接设置,并且只生成一个目标.
|
||||
|
||||
## Target Names
|
||||
|
||||
与大多数的项目不同,它们使用 `Release` 和 `Debug` 作为目标名字,而 Electron 使用使用的是 `R` 和 `D`.这是因为如果只定义了一个 `Release` 或 `Debug` 构建配置,`gyp` 会随机崩溃,并且在同一时候,Electron 只生成一个目标,如上所述.
|
||||
|
||||
这只对开发者可用,如果想重新构建 Electron ,将不会成功.
|
|
@ -0,0 +1,38 @@
|
|||
# Setting Up Symbol Server in Debugger
|
||||
|
||||
调试 symbols 让你有更好的调试 sessions. 它们有可执行的动态库的函数信息,并且提供信息来获得洁净的呼叫栈. 一个 Symbol 服务器允许调试器自动加载正确的 symbols, 二进制文件 和 资源文件,不用再去强制用户下载巨大的调试文件. 服务器函数类似
|
||||
[Microsoft's symbol server](http://support.microsoft.com/kb/311503) ,所以这里的记录可用.
|
||||
|
||||
注意,因为公众版本的 Electron 构建是最优化的,调试不一定一直简单.调试器将不会给显示出所有变量内容,并且因为内联,尾调用,和其它编译器优化,执行路径会看起来很怪异 . 唯一的解决办法是搭建一个不优化的本地构建.
|
||||
|
||||
Electron 使用的官方 symbol 服务器地址为
|
||||
`http://54.249.141.255:8086/atom-shell/symbols` .
|
||||
你不能直接访问这个路径,必须将其添加到你的调试工具的 symbol 路径上.在下面的例子中,使用了一个本地缓存目录来避免重复从服务器获取 PDB. 在你的电脑上使用一个恰当的缓存目录来代替 `c:\code\symbols` .
|
||||
|
||||
## Using the Symbol Server in Windbg
|
||||
|
||||
Windbg symbol 路径被配制为一个限制带星号字符的字符串. 要只使用 Electron 的 symbol 服务器, 将下列记录添加到你的 symbol 路径 (__注意:__ 如果你愿意使用一个不同的地点来下载 symbols,你可以在你的电脑中使用任何可写的目录来代替 `c:\code\symbols`):
|
||||
|
||||
```
|
||||
SRV*c:\code\symbols\*http://54.249.141.255:8086/atom-shell/symbols
|
||||
```
|
||||
|
||||
使用 Windbg 菜单或通过输入 `.sympath` 命令,在环境中设置一个 `_NT_SYMBOL_PATH` 字符串.如果你也想从微软的 symbol 服务器获得 symbols ,你应当首先将它们先列出来 :
|
||||
|
||||
```
|
||||
SRV*c:\code\symbols\*http://msdl.microsoft.com/download/symbols;SRV*c:\code\symbols\*http://54.249.141.255:8086/atom-shell/symbols
|
||||
```
|
||||
|
||||
## 在 Visual Studio 中使用 symbol 服务器
|
||||
|
||||
<img src='http://mdn.mozillademos.org/files/733/symbol-server-vc8express-menu.jpg'>
|
||||
<img src='http://mdn.mozillademos.org/files/2497/2005_options.gif'>
|
||||
|
||||
## Troubleshooting: Symbols will not load
|
||||
|
||||
在 Windbg 中输入下列命令,打印出未什么 symbols 没有加载 :
|
||||
|
||||
```
|
||||
> !sym noisy
|
||||
> .reload /f chromiumcontent.dll
|
||||
```
|
|
@ -0,0 +1,147 @@
|
|||
# Mac App Store 应用提交向导
|
||||
|
||||
自从 v0.34.0, Electron 就允许提交应用包到 Mac App Store
|
||||
(MAS) . 这个向导提供的信息有 : 如何提交应用和 MAS 构建的限制.
|
||||
|
||||
__注意:__ 从 v0.36.0,当应用成为沙箱之后,会有一个 bug 阻止 GPU 进程开启 , 所以在这个 bug 修复之前,建议使用 v0.35.x .更多查看 [issue #3871][issue-3871] .
|
||||
|
||||
__注意:__ 提交应用到 Mac App Store 需要参加 [Apple Developer
|
||||
Program][developer-program] , 这需要花钱.
|
||||
|
||||
## 如何提交
|
||||
|
||||
下面步骤介绍了一个简单的提交应用到商店方法.然而,这些步骤不能保证你的应用被 Apple 接受;你仍然需要阅读 Apple 的 [Submitting Your App][submitting-your-app] 关于如何满足 Mac App Store 要求的向导.
|
||||
|
||||
### 获得证书
|
||||
|
||||
为了提交应用到商店,首先需要从 Apple 获得一个证书.可以遵循 [existing guides][nwjs-guide].
|
||||
|
||||
### App 签名
|
||||
|
||||
获得证书之后,你可以使用 [Application Distribution](application-distribution.md) 打包你的应用, 然后前往提交你的应用.这个步骤基本上和其他程序一样,但是这 key 一个个的标识 Electron 的每个依赖.
|
||||
|
||||
首先,你需要准备2个授权文件 .
|
||||
|
||||
`child.plist`:
|
||||
|
||||
```xml
|
||||
<?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
|
||||
<?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>
|
||||
```
|
||||
|
||||
然后使用下面的脚本标识你的应用 :
|
||||
|
||||
```bash
|
||||
#!/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][enable-app-sandbox] 来有一点基础,然后向授权文件添加你的应用需要的许可 keys .
|
||||
|
||||
### 上传你的应用并检查提交
|
||||
|
||||
在签名应用之后,可以使用应用 Loader 来上传到 iTunes 链接处理 , 确保在上传之前你已经 [created a record][create-record]. 然后你能 [submit your app for review][submit-for-review].
|
||||
|
||||
## MAS构建限制
|
||||
|
||||
为了让你的应用沙箱满足所有条件,在 MAS 构建的时候,下面的模块被禁用了 :
|
||||
|
||||
* `crashReporter`
|
||||
* `autoUpdater`
|
||||
|
||||
并且下面的行为也改变了:
|
||||
|
||||
* 一些机子的视频采集功能无效.
|
||||
* 某些特征不可访问.
|
||||
* Apps 不可识别 DNS 改变.
|
||||
|
||||
也由于应用沙箱的使用方法,应用可以访问的资源被严格限制了 ; 阅读更多信息 [App Sandboxing][app-sandboxing] .
|
||||
|
||||
## Electron 使用的加密算法
|
||||
|
||||
取决于你所在地方的国家和地区 , Mac App Store 或许需要记录你应用的加密算法 , 甚至要求你提交一个 U.S 加密注册(ERN) 许可的复印件.
|
||||
|
||||
Electron 使用下列加密算法:
|
||||
|
||||
* AES - [NIST SP 800-38A](http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf), [NIST SP 800-38D](http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf), [RFC 3394](http://www.ietf.org/rfc/rfc3394.txt)
|
||||
* HMAC - [FIPS 198-1](http://csrc.nist.gov/publications/fips/fips198-1/FIPS-198-1_final.pdf)
|
||||
* ECDSA - ANS X9.62–2005
|
||||
* ECDH - ANS X9.63–2001
|
||||
* HKDF - [NIST SP 800-56C](http://csrc.nist.gov/publications/nistpubs/800-56C/SP-800-56C.pdf)
|
||||
* PBKDF2 - [RFC 2898](https://tools.ietf.org/html/rfc2898)
|
||||
* RSA - [RFC 3447](http://www.ietf.org/rfc/rfc3447)
|
||||
* SHA - [FIPS 180-4](http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf)
|
||||
* Blowfish - https://www.schneier.com/cryptography/blowfish/
|
||||
* CAST - [RFC 2144](https://tools.ietf.org/html/rfc2144), [RFC 2612](https://tools.ietf.org/html/rfc2612)
|
||||
* DES - [FIPS 46-3](http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf)
|
||||
* DH - [RFC 2631](https://tools.ietf.org/html/rfc2631)
|
||||
* DSA - [ANSI X9.30](http://webstore.ansi.org/RecordDetail.aspx?sku=ANSI+X9.30-1%3A1997)
|
||||
* EC - [SEC 1](http://www.secg.org/sec1-v2.pdf)
|
||||
* IDEA - "On the Design and Security of Block Ciphers" book by X. Lai
|
||||
* MD2 - [RFC 1319](http://tools.ietf.org/html/rfc1319)
|
||||
* MD4 - [RFC 6150](https://tools.ietf.org/html/rfc6150)
|
||||
* MD5 - [RFC 1321](https://tools.ietf.org/html/rfc1321)
|
||||
* MDC2 - [ISO/IEC 10118-2](https://www.openssl.org/docs/manmaster/crypto/mdc2.html)
|
||||
* RC2 - [RFC 2268](https://tools.ietf.org/html/rfc2268)
|
||||
* RC4 - [RFC 4345](https://tools.ietf.org/html/rfc4345)
|
||||
* RC5 - http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf
|
||||
* RIPEMD - [ISO/IEC 10118-3](http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC%2010118-3:2004)
|
||||
|
||||
如何获取 ERN 许可, 可看这篇文章: [How to legally
|
||||
submit an app to Apple’s App Store when it uses encryption (or how to obtain an
|
||||
ERN)][ern-tutorial].
|
||||
|
||||
[developer-program]: https://developer.apple.com/support/compare-memberships/
|
||||
[submitting-your-app]: https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppDistributionGuide/SubmittingYourApp/SubmittingYourApp.html
|
||||
[nwjs-guide]: https://github.com/nwjs/nw.js/wiki/Mac-App-Store-%28MAS%29-Submission-Guideline#first-steps
|
||||
[enable-app-sandbox]: https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingAppSandbox.html
|
||||
[create-record]: https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/CreatingiTunesConnectRecord.html
|
||||
[submit-for-review]: https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/SubmittingTheApp.html
|
||||
[app-sandboxing]: https://developer.apple.com/app-sandboxing/
|
||||
[issue-3871]: https://github.com/atom/electron/issues/3871
|
||||
[ern-tutorial]: https://carouselapps.com/2015/12/15/legally-submit-app-apples-app-store-uses-encryption-obtain-ern/
|
|
@ -0,0 +1,67 @@
|
|||
# 使用 Widevine CDM 插件
|
||||
|
||||
在 Electron ,你可以使用 Widevine CDM 插件装载 Chrome 浏览器 .
|
||||
|
||||
## 获取插件
|
||||
|
||||
Electron 没有为 Widevine CDM 插件 配制许可 reasons, 为了获得它,首先需要安装官方的 chrome 浏览器,这匹配了体系架构和 Electron 构建使用的 chrome 版本 .
|
||||
|
||||
__注意:__ Chrome 浏览器的主要版本必须和 Electron 使用的版本一样,否则插件不会有效,虽然 `navigator.plugins` 会显示你已经安装了它 .
|
||||
|
||||
### Windows & OS X
|
||||
|
||||
在 Chrome 浏览器中打开 `chrome://components/` ,找到 `WidevineCdm` 并且确定它更新到最新版本,然后你可以从 `APP_DATA/Google/Chrome/WidevineCDM/VERSION/_platform_specific/PLATFORM_ARCH/` 路径找到所有的插件二进制文件 .
|
||||
|
||||
`APP_DATA` 是系统存放数据的地方,在 Windows 上它是
|
||||
`%LOCALAPPDATA%`, 在 OS X 上它是 `~/Library/Application Support`. `VERSION` 是
|
||||
Widevine CDM 插件的版本字符串, 类似 `1.4.8.866`. `PLATFORM` 是 `mac` 或
|
||||
`win`. `ARCH` 是 `x86` 或 `x64`.
|
||||
|
||||
在 Windows,必要的二进制文件是 `widevinecdm.dll` and
|
||||
`widevinecdmadapter.dll`, 在 OS X ,它们是 `libwidevinecdm.dylib` 和
|
||||
`widevinecdmadapter.plugin`. 你可以将它们复制到任何你喜欢的地方,但是它们必须要放在一起.
|
||||
|
||||
### Linux
|
||||
|
||||
在 Linux ,Chrome 浏览器将插件的二进制文件装载在一起 , 你可以在 `/opt/google/chrome` 下找到,文件名是 `libwidevinecdm.so` 和
|
||||
`libwidevinecdmadapter.so`.
|
||||
|
||||
## 使用插件
|
||||
|
||||
在获得了插件文件后,你可以使用 `--widevine-cdm-path` 命令行开关来将 `widevinecdmadapter` 的路径传递给 Electron , 插件版本使用 `--widevine-cdm-version` 开关.
|
||||
|
||||
__注意:__ 虽然只有 `widevinecdmadapter` 的二进制文件传递给了 Electron, `widevinecdm` 二进制文件应当放在它的旁边.
|
||||
|
||||
必须在 `app` 模块的 `ready` 事件触发之前使用命令行开关,并且 page 使用的插件必须激活.
|
||||
|
||||
示例代码 :
|
||||
|
||||
```javascript
|
||||
// You have to pass the filename of `widevinecdmadapter` here, it is
|
||||
// * `widevinecdmadapter.plugin` on OS X,
|
||||
// * `libwidevinecdmadapter.so` on Linux,
|
||||
// * `widevinecdmadapter.dll` on Windows.
|
||||
app.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevinecdmadapter.plugin');
|
||||
// The version of plugin can be got from `chrome://plugins` page in Chrome.
|
||||
app.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866');
|
||||
|
||||
var mainWindow = null;
|
||||
app.on('ready', function() {
|
||||
mainWindow = new BrowserWindow({
|
||||
webPreferences: {
|
||||
// The `plugins` have to be enabled.
|
||||
plugins: true
|
||||
}
|
||||
})
|
||||
});
|
||||
```
|
||||
|
||||
## 验证插件
|
||||
|
||||
为了验证插件是否工作,你可以使用下面的方法 :
|
||||
|
||||
* 打开开发者工具查看是否 `navigator.plugins` 包含了 Widevine
|
||||
CDM 插件.
|
||||
* 打开 `https://shaka-player-demo.appspot.com/` 加载一个使用
|
||||
`Widevine` 的 manifest.
|
||||
* 打开 http://www.dash-player.com/demo/drm-test-area/, 检查是否界面输出 `bitdash uses Widevine in your browser`, 然后播放 video.
|
Loading…
Reference in a new issue