我可以在电子中使用OSX原生API吗?

时间:2016-01-08 06:06:39

标签: macos cross-platform electron

有没有办法使用Electron来使用OSX Native API。假设我想使用System Configuration Framework,有没有办法利用原生OSX API的强大功能?

由于

3 个答案:

答案 0 :(得分:10)

我意识到这是一个迟到的答案,但你有一些选择:

  • native node modules允许您使用V8编写C ++和ObjectiveC(或Swift)并将API公开给node.js。这为您提供了很大的灵活性和强大功能,但需要最多的时间来开发。

  • NodObjC是一个本机节点模块,允许您与ObjC运行时进行交互。我从来没有使用它,但它似乎是一个可靠的项目,并会简化你想要做的任何事情。与此类似的另一个选项是node-ffi。您引用的框架看起来像是一个ObjC API,因此不确定它是否适用于您的特定用例。

  • 对于简单的内容,您可以使用node-applescript。我只玩了一点点AppleScript,但我对你可以做的一些事情感到惊讶。例如,您可以使用它将应用设置为在登录时启动(请参阅node-auto-launch)。虽然与上述相比有限,但如果它能达到你想要的效果,那就更简单了,不需要编译,这很好。请注意,这将使用引擎盖下的child_process来生成一个用于运行AppleScript的新进程。这可能会对您尝试执行的任何操作产生一些影响。

  • 如果是OSX API,您也可以使用节点child_process模块 你正在尝试使用一个良好的CLI。这里的好处是简单性,缺点是你可能需要将它输出的字符串解析成有意义的数据结构,这在我的经验中可能是中等难度的。

答案 1 :(得分:1)

您还可以使用ffi直接从javascript调用本机库。

答案 2 :(得分:0)

您还可以使用child_process的exec函数从您的电子应用程序执行脚本或终端命令。

您还可以轻松查看应用运行的平台:

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")
        }
      });