2015-09-01 05:10:29 +03:00
|
|
|
|
# Application Distribution
|
2014-05-04 14:32:12 +04:00
|
|
|
|
|
2015-09-01 05:10:29 +03:00
|
|
|
|
To distribute your app with Electron, the folder containing your app should be
|
2016-06-18 16:26:26 +03:00
|
|
|
|
named `app` and placed under Electron's resources directory (on macOS it is
|
2015-09-01 05:10:29 +03:00
|
|
|
|
`Electron.app/Contents/Resources/` and on Linux and Windows it is `resources/`),
|
|
|
|
|
like this:
|
2014-05-04 14:32:12 +04:00
|
|
|
|
|
2016-06-18 16:26:26 +03:00
|
|
|
|
On macOS:
|
2014-05-04 14:32:12 +04:00
|
|
|
|
|
|
|
|
|
```text
|
2015-04-16 06:31:12 +03:00
|
|
|
|
electron/Electron.app/Contents/Resources/app/
|
2014-05-04 14:32:12 +04:00
|
|
|
|
├── package.json
|
|
|
|
|
├── main.js
|
|
|
|
|
└── index.html
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
On Windows and Linux:
|
|
|
|
|
|
|
|
|
|
```text
|
2015-04-16 06:31:12 +03:00
|
|
|
|
electron/resources/app
|
2014-05-04 14:32:12 +04:00
|
|
|
|
├── package.json
|
|
|
|
|
├── main.js
|
|
|
|
|
└── index.html
|
|
|
|
|
```
|
|
|
|
|
|
2015-04-17 06:59:40 +03:00
|
|
|
|
Then execute `Electron.app` (or `electron` on Linux, `electron.exe` on Windows),
|
2015-09-01 05:10:29 +03:00
|
|
|
|
and Electron will start as your app. The `electron` directory will then be
|
|
|
|
|
your distribution to deliver to final users.
|
2014-05-04 14:32:12 +04:00
|
|
|
|
|
2015-09-01 05:10:29 +03:00
|
|
|
|
## Packaging Your App into a File
|
2014-12-29 21:46:15 +03:00
|
|
|
|
|
2015-09-01 05:10:29 +03:00
|
|
|
|
Apart from shipping your app by copying all of its source files, you can also
|
2016-05-06 20:09:24 +03:00
|
|
|
|
package your app into an [asar](https://github.com/electron/asar) archive to avoid
|
2014-12-29 21:46:15 +03:00
|
|
|
|
exposing your app's source code to users.
|
|
|
|
|
|
|
|
|
|
To use an `asar` archive to replace the `app` folder, you need to rename the
|
2015-04-16 06:31:12 +03:00
|
|
|
|
archive to `app.asar`, and put it under Electron's resources directory like
|
2015-10-14 13:28:27 +03:00
|
|
|
|
below, and Electron will then try to read the archive and start from it.
|
2014-12-29 21:46:15 +03:00
|
|
|
|
|
2016-06-18 16:26:26 +03:00
|
|
|
|
On macOS:
|
2014-12-29 21:46:15 +03:00
|
|
|
|
|
|
|
|
|
```text
|
2015-04-16 06:31:12 +03:00
|
|
|
|
electron/Electron.app/Contents/Resources/
|
2014-12-29 21:46:15 +03:00
|
|
|
|
└── app.asar
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
On Windows and Linux:
|
|
|
|
|
|
|
|
|
|
```text
|
2015-04-16 06:31:12 +03:00
|
|
|
|
electron/resources/
|
2014-12-29 21:46:15 +03:00
|
|
|
|
└── app.asar
|
|
|
|
|
```
|
2014-12-08 08:38:29 +03:00
|
|
|
|
|
2014-12-29 21:46:15 +03:00
|
|
|
|
More details can be found in [Application packaging](application-packaging.md).
|
|
|
|
|
|
2015-09-01 05:10:29 +03:00
|
|
|
|
## Rebranding with Downloaded Binaries
|
2014-12-29 21:46:15 +03:00
|
|
|
|
|
2015-04-16 06:31:12 +03:00
|
|
|
|
After bundling your app into Electron, you will want to rebrand Electron
|
2014-12-29 23:12:04 +03:00
|
|
|
|
before distributing it to users.
|
2014-09-29 17:34:54 +04:00
|
|
|
|
|
2014-12-29 23:12:04 +03:00
|
|
|
|
### Windows
|
2014-09-29 17:34:54 +04:00
|
|
|
|
|
2015-04-17 06:59:40 +03:00
|
|
|
|
You can rename `electron.exe` to any name you like, and edit its icon and other
|
2016-02-05 00:29:32 +03:00
|
|
|
|
information with tools like [rcedit](https://github.com/atom/rcedit).
|
2014-12-29 23:12:04 +03:00
|
|
|
|
|
2016-06-18 16:26:26 +03:00
|
|
|
|
### macOS
|
2014-12-29 21:46:15 +03:00
|
|
|
|
|
2015-04-17 06:59:40 +03:00
|
|
|
|
You can rename `Electron.app` to any name you want, and you also have to rename
|
|
|
|
|
the `CFBundleDisplayName`, `CFBundleIdentifier` and `CFBundleName` fields in
|
|
|
|
|
following files:
|
2014-12-29 21:46:15 +03:00
|
|
|
|
|
2015-04-16 06:31:12 +03:00
|
|
|
|
* `Electron.app/Contents/Info.plist`
|
2015-04-17 06:59:40 +03:00
|
|
|
|
* `Electron.app/Contents/Frameworks/Electron Helper.app/Contents/Info.plist`
|
|
|
|
|
|
|
|
|
|
You can also rename the helper app to avoid showing `Electron Helper` in the
|
|
|
|
|
Activity Monitor, but make sure you have renamed the helper app's executable
|
|
|
|
|
file's name.
|
|
|
|
|
|
|
|
|
|
The structure of a renamed app would be like:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
MyApp.app/Contents
|
|
|
|
|
├── Info.plist
|
|
|
|
|
├── MacOS/
|
|
|
|
|
│ └── MyApp
|
|
|
|
|
└── Frameworks/
|
|
|
|
|
├── MyApp Helper EH.app
|
|
|
|
|
| ├── Info.plist
|
|
|
|
|
| └── MacOS/
|
|
|
|
|
| └── MyApp Helper EH
|
|
|
|
|
├── MyApp Helper NP.app
|
|
|
|
|
| ├── Info.plist
|
|
|
|
|
| └── MacOS/
|
|
|
|
|
| └── MyApp Helper NP
|
|
|
|
|
└── MyApp Helper.app
|
|
|
|
|
├── Info.plist
|
|
|
|
|
└── MacOS/
|
|
|
|
|
└── MyApp Helper
|
|
|
|
|
```
|
2014-12-29 21:46:15 +03:00
|
|
|
|
|
2014-12-29 23:12:04 +03:00
|
|
|
|
### Linux
|
2014-12-29 21:46:15 +03:00
|
|
|
|
|
2015-04-17 06:59:40 +03:00
|
|
|
|
You can rename the `electron` executable to any name you like.
|
2014-12-29 23:12:04 +03:00
|
|
|
|
|
2016-05-30 04:37:02 +03:00
|
|
|
|
## Packaging Tools
|
|
|
|
|
|
|
|
|
|
Apart from packaging your app manually, you can also choose to use third party
|
|
|
|
|
packaging tools to do the work for you:
|
|
|
|
|
|
2016-07-11 14:05:02 +03:00
|
|
|
|
* [electron-builder](https://github.com/electron-userland/electron-builder)
|
|
|
|
|
* [electron-packager](https://github.com/electron-userland/electron-packager)
|
2016-05-30 04:37:02 +03:00
|
|
|
|
|
2015-09-01 05:10:29 +03:00
|
|
|
|
## Rebranding by Rebuilding Electron from Source
|
2014-12-29 23:12:04 +03:00
|
|
|
|
|
2015-04-17 06:59:40 +03:00
|
|
|
|
It is also possible to rebrand Electron by changing the product name and
|
2015-06-18 07:59:13 +03:00
|
|
|
|
building it from source. To do this you need to modify the `atom.gyp` file and
|
|
|
|
|
have a clean rebuild.
|
2014-12-29 23:12:04 +03:00
|
|
|
|
|
|
|
|
|
### grunt-build-atom-shell
|
|
|
|
|
|
2015-04-16 06:31:12 +03:00
|
|
|
|
Manually checking out Electron's code and rebuilding could be complicated, so
|
2014-12-29 23:12:04 +03:00
|
|
|
|
a Grunt task has been created that will handle this automatically:
|
|
|
|
|
[grunt-build-atom-shell](https://github.com/paulcbetts/grunt-build-atom-shell).
|
|
|
|
|
|
|
|
|
|
This task will automatically handle editing the `.gyp` file, building from
|
|
|
|
|
source, then rebuilding your app's native Node modules to match the new
|
|
|
|
|
executable name.
|
2016-01-07 15:32:57 +03:00
|
|
|
|
|
2016-05-28 00:00:04 +03:00
|
|
|
|
### Creating a Custom Electron Fork
|
|
|
|
|
|
|
|
|
|
Creating a custom fork of Electron is almost certainly not something you will
|
|
|
|
|
need to do in order to build your app, even for "Production Level" applications.
|
|
|
|
|
Using a tool such as `electron-packager` or `electron-builder` will allow you to
|
|
|
|
|
"Rebrand" Electron without having to do these steps.
|
|
|
|
|
|
|
|
|
|
You need to fork Electron when you have custom C++ code that you have patched
|
|
|
|
|
directly into Electron, that either cannot be upstreamed, or has been rejected
|
|
|
|
|
from the official version. As maintainers of Electron, we very much would like
|
|
|
|
|
to make your scenario work, so please try as hard as you can to get your changes
|
|
|
|
|
into the official version of Electron, it will be much much easier on you, and
|
2016-05-28 00:01:38 +03:00
|
|
|
|
we appreciate your help.
|
2016-05-28 00:00:04 +03:00
|
|
|
|
|
2016-05-28 00:02:22 +03:00
|
|
|
|
#### Creating a Custom Release with surf-build
|
2016-05-28 00:00:04 +03:00
|
|
|
|
|
|
|
|
|
1. Install [Surf](https://github.com/surf-build/surf), via npm:
|
|
|
|
|
`npm install -g surf-build@latest`
|
|
|
|
|
|
2016-05-28 00:01:38 +03:00
|
|
|
|
2. Create a new S3 bucket and create the following empty directory structure:
|
2016-05-28 00:00:04 +03:00
|
|
|
|
|
|
|
|
|
```
|
2016-05-28 00:04:04 +03:00
|
|
|
|
- atom-shell/
|
|
|
|
|
- symbols/
|
|
|
|
|
- dist/
|
2016-05-28 00:00:04 +03:00
|
|
|
|
```
|
|
|
|
|
|
2016-05-28 00:01:38 +03:00
|
|
|
|
3. Set the following Environment Variables:
|
2016-05-28 00:00:04 +03:00
|
|
|
|
|
2016-05-28 00:00:26 +03:00
|
|
|
|
* `ELECTRON_GITHUB_TOKEN` - a token that can create releases on GitHub
|
2016-05-28 00:05:01 +03:00
|
|
|
|
* `ELECTRON_S3_ACCESS_KEY`, `ELECTRON_S3_BUCKET`, `ELECTRON_S3_SECRET_KEY` -
|
|
|
|
|
the place where you'll upload node.js headers as well as symbols
|
2016-05-28 00:00:04 +03:00
|
|
|
|
* `ELECTRON_RELEASE` - Set to `true` and the upload part will run, leave unset
|
|
|
|
|
and `surf-build` will just do CI-type checks, appropriate to run for every
|
|
|
|
|
pull request.
|
2016-05-28 00:34:23 +03:00
|
|
|
|
* `CI` - Set to `true` or else it will fail
|
2016-05-28 00:00:26 +03:00
|
|
|
|
* `GITHUB_TOKEN` - set it to the same as `ELECTRON_GITHUB_TOKEN`
|
2016-05-28 00:00:04 +03:00
|
|
|
|
* `SURF_TEMP` - set to `C:\Temp` on Windows to prevent path too long issues
|
|
|
|
|
* `TARGET_ARCH` - set to `ia32` or `x64`
|
|
|
|
|
|
2016-05-28 00:06:40 +03:00
|
|
|
|
4. In `script/upload.py`, you _must_ set `ELECTRON_REPO` to your fork (`MYORG/electron`),
|
2016-05-28 00:00:04 +03:00
|
|
|
|
especially if you are a contributor to Electron proper.
|
|
|
|
|
|
2016-05-28 00:01:38 +03:00
|
|
|
|
5. `surf-build -r https://github.com/MYORG/electron -s YOUR_COMMIT -n 'surf-PLATFORM-ARCH'`
|
2016-05-28 00:00:04 +03:00
|
|
|
|
|
2016-05-28 00:01:38 +03:00
|
|
|
|
6. Wait a very, very long time for the build to complete.
|