Complete solution to build ready for distribution and "auto update" installers of your app for OS X, Windows and Linux.
- Native application dependencies compilation (only if two-package.json project layout used).
- Auto Update ready application packaging.
- Code Signing on a CI server or development machine.
- Build version management.
- Publishing artifacts to GitHub Releases.
electron-packager, appdmg and windows-installer are used under the hood.
Real project example — onshape-desktop-shell.
Configuration
In short
- Ensure that required fields are specified in the application
package.json
:
Standard name
, description
, version
and author
.
Custom build
field must be specified:
"build":
This object will be used as a source of electron-packager options. You can specify any other options here.
-
Create directory
build
in the root of the project and put yourbackground.png
(OS X DMG background),icon.icns
(OS X app icon) andicon.ico
(Windows app icon). Linux icon set will be generated automatically on the fly from the OS Xicns
file. -
Add scripts to the development
package.json
:"scripts":And then you can run
npm run pack
ornpm run dist
(to package in a distributable format (e.g. DMG, windows installer, NuGet package)). -
Install required system packages.
iconUrl
Please note — local icon file url is not accepted, must be https/http.
- If you don't plan to build windows installer, you can omit it.
- If your project repository is public on GitHub, it will be
https://raw.githubusercontent.com/${info.user}/${info.project}/master/build/icon.ico
by default.
Distributable Format Configuration
In the development package.json
custom build
field can be specified to customize distributable format:
"build":
As you can see, you need to customize OS X options only if you want to provide custom x, y
.
Don't customize paths to background and icon, — just follow conventions (if you don't want to use build
as directory of resources — please create issue to ask ability to customize it).
See OS X options and Windows options.
Auto Update
electron-builder
produces all required artifacts:
.dmg
: OS X installer, required for OS X user to initial install.-mac.zip
: required for Squirrel.Mac..exe
and-x64.exe
: Windows installer, required for Windows user to initial install. Please note — your app must handle Squirrel.Windows events. See real example..full-nupkg
: required for Squirrel.Windows.-amd64.deb
and-i386.deb
: Linux Debian package. Please note — by default the most effective xz compression format used.
You need to deploy somewhere releases/downloads server.
In general, there is a possibility to setup it as a service for all (it is boring to setup own if cloud service is possible). May be it will be soon (feel free to file an issue to track progress). It is safe since you should sign your app in any case (so, even if server will be compromised, users will not be affected because OS X will just block unsigned/unidentified app).
Code signing
OS X and Windows code singing is supported.
On a development machine set environment variable CSC_NAME
to your identity (recommended). Or pass --sign
parameter.
export CSC_NAME="Developer ID Application: Your Name (code)"
Travis, AppVeyor and other CI servers
To sign app on build server:
- Export certificate. Strong password must be used. Consider to not use special characters (for bash) because “values are not escaped when your builds are executed”.
- Upload
*.p12
file (e.g. on Google Drive). - Set (Travis or AppVeyor)
CSC_LINK
andCSC_KEY_PASSWORD
environment variables:
travis encrypt "CSC_LINK='https://drive.google.com/uc?export=download&id=***'" --add
travis encrypt 'CSC_KEY_PASSWORD=beAwareAboutBashEscaping!!!' --add
Build Version Management
CFBundleVersion
(OS X) and FileVersion
(Windows) will be set automatically to version
.build_number
on CI server (Travis, AppVeyor and CircleCI supported).
CLI usage
Execute node_modules/.bin/build --help
to get actual CLI usage guide.
In most cases you should not explicitly pass flags, so, we don't want to promote it here (npm lifecycle is supported and script name is taken in account).
Want more — please file issue.
Programmatic usage
See node_modules/electron-builder/out/electron-builder.d.ts
. Typings is supported.
Old API (< 2.8)
Old API is deprecated, but not dropped. You can use it as before. Please note — new API by default produces Squirrel.Windows installer, set target
to build NSIS:
build --target=nsis