首页 > 解决方案 > 电子 - MAC 保持在码头

问题描述

有没有办法将我开发的 Electron 应用程序保留在 Dock 中?我的目标是让用户下载 .app 文件,启动它(它会自动执行),然后在他们关闭它后在 MAC“保持在 Dock”上。我知道这可以使用dockutil 来完成,但我需要一种在应用程序中执行此操作的方法。

标签: macoselectron

解决方案


我在 macOS 10.11.6 (El Capitan) 上有一些工作代码,它将当前应用程序永久添加到 Dock,但不幸的是我真的不知道如何检查图标是否已经在 Dock 中,所以再次运行代码每次都会添加一个新的。

另请注意,杀死 Dock 是更新它所必需的,但这可能会在它消失几秒钟时让用户感到不安......

无论如何,这里是代码,可以用作起始基础:

const electron = require ('electron');
const app = electron.app || electron.remote.app;
const path = require ('path');
const url = require ('url');
const { spawnSync } = require ('child_process');
let packagePath = path.join (app.getPath ('exe'), '..', '..', '..');
let packageURL = url.format ({ protocol: 'file', slashes: true, pathname: packagePath });
let entry = `<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>${packageURL}</string><key>_CFURLStringType</key><integer>15</integer></dict></dict></dict>`;
let defaults = spawnSync ('defaults', [ 'write', 'com.apple.dock', 'persistent-apps', '-array-add', entry ], { encoding: 'utf8' });
if (!defaults.error)
{
    let killall = spawnSync ('killall', [ 'Dock' ], { encoding: 'utf8' });
}

推荐阅读