electron-forge
でmacOS
からwindows
向けのビルド(クロスコンパイル)を行う。
要約
electron-forge
のデフォルトコマンドでは、make
やpackage
は使用している端末依存。- コマンド末尾で
--arch
や--platform
を指定して、変更することができる。 - 指定できるアーキテクチャとプラットフォームは、最下部の参考を参照のこと。
デフォルトのyarn packageやyarn makeでは無理
electron-forge
で作るとデフォルトで、yarn package
やyarn make
が準備されているが、これを実行しても使用している環境のファイルしか出来上がらない。
せっかく作ったなら、windows
くらい対応したいものだ。
そこで色々試してみて、とりあえず出来たのでメモを残しておく。
まずは、packageから
make
すればpackage
も行われるので、必要ないかもしれないが、こちらは簡単にクロスコンパイルできた。
単純に、オプションを追加するだけ、all
で全てのアーキテクチャとプラットフォームの組み合わせでビルドできる。
{
...
"scripts": {
...
"package": "electron-forge package",
"package:all": "electron-forge package --arch=all --platform=all",
},
}
上記のように--arch
と--platform
にall
を指定するだけ。
しかし、結構な確率でパッケージングが途中で止まってしまう。確認すると、どれも一応完了しているようで原因がよくわからないので放置しておく…
makeは面倒
make
では、--arch
と--platform
でall
が指定できない。そのため明確に指定する必要がある。
package:all
のようにできないので、シェルで指定してもいいかもしれない。
$ yarn make --arch x64 --platform win32
$ yarn make --arch x64 --platform darwin
$ yarn make --arch arm64 --platform win32
などのように指定すればOK。
しかし、macOSでwindows向けをコンパイルすると、
✖ Making for target: squirrel - On platform: win32 - For arch: x64
An unhandled error has occurred inside Forge:
An error occured while making for target: squirrel
spawn mono ENOENT
Error: spawn mono ENOENT
このようなエラーが出ることがある。これは、mono
(Mono - WineHQ Wiki)という.NET framework
のクロスプラットフォーム実装がないため。
electron-forge
の公式ドキュメント(Squirrel.Windows - Electron Forge)を見ると、
Squirrel.Windows is a no-prompt, no-hassle, no-admin method of installingWindows applications and is therefore the most user friendly you can get. You can only build the Squirrel.Windows target on a Windows machine or on a macOS /Linux machine with mono and wine installed.
このように書いてある。実際Squirrel
なアプリをwindowsで実行すると、setupファイルからインストールのプロンプト画面を挟まずに、アプリのメイン画面が表示された。便利だが、2度目以降はsetupファイルは不要になることをユーザーに知らせる必要があるような気もする。
また引用にもある通り、macOS/Linux
マシンでは、mono
とwine
が必要になる。
今回のコンパイル環境は、macOSなので、
$ brew install wine mono
でコンパイル準備は整えられる。自分の場合は、mono
が足りなかったのでそれだけ追加インストールした。
環境ごとにpackage.json
のscripts
に指定すればいいかなと思う。
参考
electron-forge
はpackage
で内部的にelectron-packager
を使っているので、そのドキュメントが参考にできる。
- 指定可能な
arch
とplatform
以上。