使用 NSTask 执行离子构建命令 - 无法访问启动路径

Using NSTask to execute ionic build commands - launch path not accessible

我正在使用具有命令行界面的 Ionic。我想创建一个小的 Mac 应用程序来帮助执行某些命令。

在我的航站楼 cd Users/me/Desktop/Repos/ionic-project/myApp 改变后我会例如ionic run

NSTask *task = [[NSTask alloc]init];

task.launchPath = @"/bin/bash";
task.currentDirectoryPath = @"cd Users/me/Desktop/Repos/ionic-tryouts/myApp";
task.arguments = @[@"ionic run"];

[task launch];

但这给了我“工作目录不存在”。 我已经在这里阅读了很多关于 SO 的主题。我的错误是什么?


编辑:

感谢 Christik 的详细解答。我现在有这个代码:

NSTask *task = [[NSTask alloc]init];
task.launchPath = @"/usr/local/bin/ionic";
task.currentDirectoryPath = @"/Users/me/ionic-tryouts/myApp";
task.arguments = @[@"run"];

[task launch];

现在我收到以下错误:env: node: No such file or directory。我猜这是一个问题,找不到 node.js(ionic 建立在节点之上)。我发现 this 问题 - 可能是缺少具有正确名称的符号链接。但是为节点设置符号链接没有帮助。有什么想法吗?


编辑2: 我给了克里斯蒂克正确的答案,尽管我最终无法让它发挥作用。我还在调查。可能是节点安装错误。


编辑3: 我看到一些帖子提到如果 node 由 homebrew 重新安装可能会更好,因为 homebrew 在没有 sudo 的情况下安装它。简评:没用

如果您想使用 bash 启动 ionic,您需要执行的等效命令是 /bin/bash -c ionic run,因此您需要更改以下内容:

  1. currentDirectoryPath中删除前导cd(这可能是从终端复制+粘贴的错字)并添加前导/以获得绝对路径
  2. arguments 更改为 @[@"-c",@"ionic",@"run"],因为 NSTask 的每个参数都应该表示数组的一个项目。

如果由于找不到其他工具而导致 /usr/bin/bash 出现问题,您可以尝试使用 /bin/sh

UpdateAditya Vaidyam pointed out 一样,您可能还需要设置环境变量(尤其是 PATH 一个),以模拟与终端。如果你想找出设置了哪些环境变量,只需运行 env命令。

除了 Cristik 建议的内容之外,您还需要将 node.js 的位置添加到 environment variables(即 PATH),除非它已经在 /usr/bin/ 左右。