2015-05-21 12 views
8

Tôi đang làm việc với Ionic có giao diện dòng lệnh. Tôi muốn tạo một ứng dụng Mac nhỏ giúp thực thi các lệnh nhất định.Sử dụng NSTask để thực thi các lệnh xây dựng ion - đường dẫn khởi chạy không thể truy cập

Trong thiết bị đầu cuối I cd Users/me/Desktop/Repos/ionic-project/myApp Sau khi thay đổi, tôi sẽ sử dụng 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]; 

Nhưng điều này mang lại cho tôi 'thư mục hoạt động không tồn tại'. Tôi đã đọc khá một số chủ đề ở đây trên SO. Whats sai lầm của tôi?


EDIT:

Cảm ơn Christik cho câu trả lời chi tiết. Tôi hiện có mã này:

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

[task launch]; 

Bây giờ tôi nhận được lỗi sau: env: node: No such file or directory. Tôi đoán điều này xuất phát từ một vấn đề, không tìm thấy node.js (ionic được xây dựng trên đỉnh của nút). Tôi đã tìm thấy sự cố this - liên kết tượng trưng bị thiếu với tên đúng có thể là nguyên nhân. Nhưng thiết lập các liên kết tượng trưng cho nút đã không giúp đỡ. Bất kỳ ý tưởng?


EDIT2: Tôi đã cung cấp cho Christik câu trả lời đúng, mặc dù cuối cùng tôi không thể làm cho nó hoạt động. Tôi vẫn đang điều tra. Có lẽ đó là cài đặt nút thats sai.


EDIT3: tôi thấy một số bài viết đó nói rằng nó có thể là tốt hơn, nếu nút được cài đặt lại bởi homebrew từ homebrew cài đặt nó mà không sudo. bình luận ngắn: không giúp

Trả lời

3

Nếu bạn muốn sử dụng để khởi động bashionic, lệnh tương đương mà bạn sẽ cần phải thực hiện là /bin/bash -c ionic run, do đó bạn sẽ cần phải thay đổi như sau:

  1. loại bỏ các cd hàng đầu từ currentDirectoryPath (đó có thể là một lỗi đánh máy từ một bản sao + dán từ thiết bị đầu cuối) và thêm một / hàng đầu để có một đường dẫn tuyệt đối
  2. thay đổi arguments để @[@"-c",@"ionic",@"run"], như mỗi đối số để NSTask nên đại diện cho một mục của mảng.

Nếu bạn gặp sự cố với /usr/bin/bash do một số công cụ khác không được tìm thấy, bạn có thể thử sử dụng /bin/sh.

Cập nhật Như Aditya Vaidyam chỉ ra here bạn cũng có thể cần phải thiết lập các biến môi trường (đặc biệt là PATH một), để mô phỏng các điều kiện tương tự như đối với các thiết bị đầu cuối. Nếu bạn muốn tìm ra biến môi trường nào được đặt, chỉ cần chạy lệnh env.

+0

Cảm ơn câu trả lời, nhưng như được mô tả ở trên, tôi vẫn gặp sự cố.Tôi sẽ đặt một tiền thưởng ;-) – brainray

+0

@brainray: danh sách đối số '@ [@" - c ", @" ionic "," run "]' dành cho @ "/ bin/sh" thực thi. Đối với ionic bạn cần phải pas chỉ '@ [@" run "]', xin lỗi nếu tôi không rõ ràng về điều đó. – Cristik

+0

Cảm ơn bạn đã chú ý :-) Nhưng ngay cả chỉ với '@ [@" run "]' làm đối số, nó sẽ cho 'env: node: Không có tệp hoặc thư mục nào'. Tôi đoán là có một cái gì đó để di với cài đặt ion – brainray

3

Trên đầu những gì Cristik đề xuất, bạn cần thêm vào environment variables (tức là PATH), vị trí của node.js, trừ khi nó đã có trong/usr/bin/hoặc như vậy.

Các vấn đề liên quan