我正在制作一个用于更改桌面图标的osx应用程序(类似于LiteIcons,但缺少我想要的功能)。我正在使用Electron(带有node.js和shell)来替换图标。
到目前为止,我有一个带有图标的文件夹,该图标的名称与我要更改其图标的应用程序的名称相同。因此,代码选择了每个文件,找到了应用程序并更改了图标(.icns文件)。
到目前为止,这是我的代码:
files.forEach(function (file, index) {
var file_path = path.join(dir + '/icons', file);
var application_name = path.basename(file_path, path.extname(file_path));
var app_path = '/Applications/'+ application_name + '.app';
if (fs.existsSync(app_path)) {
console.log('--', file);
var info_plist = plist.parse(fs.readFileSync( app_path + '/Contents/Info.plist', 'utf8'));
var icon_filename = info_plist.CFBundleIconFile;
if (!icon_filename.endsWith(".icns")) {
icon_filename += '.icns';
}
exec('echo read "\'icns\' (-16455)" \\"' + file_path + '\\"";" >> Icon.rsrc', {
cwd: app_path
}, function(error, stdout, stderr) {
console.log('hdo', error, stdout, stderr);
exec('Rez -a Icon.rsrc -o FileName.ext', {
cwd: app_path
}, function(error, stdout, stderr) {
exec('SetFile -a C FileName.ext', {
cwd: app_path
}, function(error, stdout, stderr) {
exec("Rez -a Icon.rsrc -o Icon$'\r'", {
cwd: app_path
}, function(error, stdout, stderr) {
exec("SetFile -a C .'", {
cwd: app_path
}, function(error, stdout, stderr) {});
});
});
});
});
/*** ----------- */
}
});
它在原子上起作用,但在Espresso上却没有。即使确实添加了文件,图标也不会改变。如果我尝试使用liteIcon对其进行更改,那么它将起作用,因此我的代码中的某些内容无法正常工作。