Electron DMG安装包发布

通过electron框架开发完了项目,最终是要发布出去的,在macOS上安装软件有很多方式,比较常见的是通过dmg格式的安装包文件,本文记录dmg发布和优化的一些问题;

工具配置

如果google一下制作dmg的方法会有很多,既可以用mac下的自盘管理工具,也可以通过appdmg等node程序;我们为了简单的傻瓜式,使用的是electron-forge,最终使用的是appdmg,只不过经过了几次封装,可以通过一些json配置来生成安装包。

如果通过模板工具创建electron工程,只需要简单几个命令:

npm install -g electron-forge
electron-forge init my-new-project
cd my-new-project
electron-forge start

如此你便跑起了最简单的一个项目。在创建好的electron项目默认会有以下配置package.json

{
  "make_targets": {
    "win32": [
      "squirrel"
    ],
    "darwin": [
      "zip"
    ],
    "linux": [
      "deb",
      "rpm"
    ]
  },
  "electronPackagerConfig": {},
  "electronWinstallerConfig": {
    "name": ""
  },
  "electronInstallerDebian": {},
  "electronInstallerRedhat": {},
  "github_repository": {
    "owner": "",
    "name": ""
  },
  "windowsStoreConfig": {
    "packageName": ""
  }
}

遇到的问题&解决方法

配置dmg输出文件

通过electron-forge make可以编译出安装包,但是你会发现out目录下并没有dmg文件;

为了得到dmg文件,我们需要修改下配置:

"electronInstallerDMG": {
      "background": "path/to/image.png",
      "icon": "path/to/icon.icns",
      "format": "ULFO"
}

这个配置实际上也只是包裹了一下,因此想明确知道含义,需要看文档了;

electron-installer-dmg

截取几个字段说明:

background - String
Path to the background for the DMG window. Background image should be of size 658 × 498.

icon - String
Path to the icon to use for the app in the DMG window.

这个库最终依赖的就是appdmg, 因此我们可以得到一个更好的示意说明:

dmg

配置背景图

默认情况下不需要配置任何上图里面的参数,就可以打出一个默认dmg,但是如果我们需要修改的话,就需要知道如果生成这几个文件。

background需要固定尺寸,如果适配的话可以做一份@2x图,并打包成tiff格式

tiffutil -cathidpicheck assets/background.png assets/background@2x.png -out assets/background.tiff

如何设置app图标

同前面配置的icon,你会发现,安装好的app图标并没有和预期一样?

这个icon他指代实际上并不是app的图标,而是镜像文件的图标。 应用图标需要在electronPackagerConfig节点配置一个icon,也需要是icns格式;icns格式这个网上很多转换工具;

"electronPackagerConfig":{
     "asar": true,
      "quiet": true,
      "protocol": "myapp://",
      "icon": "./images/myicon"
}

执行asar档案内的二进制文件

Node 中有一些可以执行程序的 API,如 child_process.exec,child_process.spawn 和 child_process.execFile 等, 但只有 execFile 可以执行 asar 包中的程序。

因为 exec 和 spawn 允许 command 替代 file 作为输入,而 command 是需要在 shell 下执行的. 目前没有 可靠的方法来判断 command 中是否在操作一个 asar 包中的文件,而且即便可以判断,我们依旧无法保证可以在无任何 副作用的情况下替换 command 中的文件路径。

参考

powered by Gitbook© 小文字 更新: 2019-04-22

results matching ""

    No results matching ""