有没有一种方法可以使用Electron来使用OSX本地API?假设我想要使用System Configuration Framework,是否有一种方式可以利用本地OSX API的功能?
谢谢
有没有一种方法可以使用Electron来使用OSX本地API?假设我想要使用System Configuration Framework,是否有一种方式可以利用本地OSX API的功能?
谢谢
我知道我的回答有点晚了,但你有几种选择:
本地的 Node 模块 允许你使用 C++ 和 ObjectiveC(或 Swift)编写代码,并使用 V8 将其作为 API 暴露给 Node.js。这样做非常灵活和强大,但需要最多的开发时间。
NodObjC 是一个本地的 Node 模块,允许你与 ObjC 运行时进行交互。我从未使用过它,但它看起来是一个很不错的项目,可以简化你所要做的任何事情。另一个类似的选项是 node-ffi。不过要注意,你提到的那个框架看起来像是 ObjC 的 API,不确定是否适用于你特定的用例。
对于一些简单的事情,你可以使用 node-applescript。我只是稍微尝试了一下 applescript,但我惊讶于它能做到的一些事情。例如,你可以使用它来设置你的应用程序在登录时启动(参见 node-auto-launch)。虽然与上述选项相比有限制,但如果它可以达到你想要的效果,那么这个方法更为简单,而且不需要编译,这很好。请注意,这将使用 child_process 在后台生成一个新进程来运行 applescript。可能需要考虑一些因素。
如果 OSX API 有一个很好的 CLI,你也可以只使用 Node 的 child_process 模块。这样做的好处是简单易懂,缺点是你可能需要将它输出的字符串解析为有意义的数据结构,这在我的经验中可能会有些困难。
你还可以使用child_process
的exec函数在你的Electron应用程序中执行脚本或终端命令。
你也可以轻松地检查你的应用程序运行在哪个平台上:
var isWin = /^win/.test(process.platform);
if(isWin){
//windows
}else{
//macos
}
在构建完成后,您还可以执行使用Swift中的OSX本机API的OSX应用程序所创建的脚本:
exec(path.join(__dirname, './build-scripts/Network -agr1 ' + value1 + ' -agr2 ' + value2),
function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log("Fail to execute script"+ error);
} else {
console.log("ok")
}
});
process.platform
只能返回以下值:darwin
、freebsd
、linux
、sunos
或 win32
。因此,检查是否为 Windows 就像这样简单:process.platform === 'win32'
。请参见 https://nodejs.org/api/process.html#process_process_platform。 - ccnokes