Tôi có một ứng dụng Mac OSX khởi chạy một tệp thực thi có trong/Contents/Resources. Ứng dụng này không có ý định được phát hành trên App Store và vì vậy tôi chưa bật sandbox.Khởi chạy thực thi với NSTask - Sự cố Sandboxing?
Mã khởi động:
toolPath = [[[NSBundle mainBundle] pathForResource:@"myexecutable" ofType:@""] copy];
task = [[NSTask alloc] init];
[task setLaunchPath: toolPath];
pipe = [[NSPipe alloc] init];
[task setArguments:[NSArray arrayWithObjects:@"-someArg", someVariable, nil]];
file = [[NSFileHandle alloc] initWithFileDescriptor:[pipe fileHandleForReading].fileDescriptor];
[task setStandardOutput: stderrPipe];
[task launch];
Vấn đề là - tất cả điều này hoạt động tốt khi chạy trong Xcode. Nó cũng hoạt động tốt khi xuất ứng dụng sang máy tính để bàn và chạy nó.
Tuy nhiên, nếu tôi nén ứng dụng, tải nó lên máy chủ web và sau đó tải xuống trên cùng một máy tính (hoặc thả hộp thư đến một máy Mac khác), tác vụ không còn khởi chạy nữa! Tôi không nhận được lỗi trong bảng điều khiển hệ thống hoặc bất cứ điều gì.
Tôi đã nghiên cứu một số vấn đề này và thấy rằng OSX sẽ đánh dấu một ứng dụng mới là quyền được cho phép đặc biệt "cách ly". Vì vậy, tôi nghiên cứu sự khác biệt giữa các ứng dụng tải về và ứng dụng xuất khẩu:
Quyền về thực thi sau khi xuất khẩu ứng dụng của tôi từ Xcode:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
Tại thời điểm này, các ứng dụng hoạt động tốt và thực thi được khởi động từ một bên trong ứng dụng.
Và sau khi nén ứng dụng, tải lên máy chủ, tải về, giải nén và mở ứng dụng và chấp nhận "Ứng dụng này được tải về từ internet" đối thoại:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
com.apple.quarantine 26
Tại thời điểm này không có gì xảy ra khi tôi đẩy nút trong ứng dụng của tôi.
Nếu tôi sau đó chạy xattr -rd com.apple.quarantine
trên toàn bộ ứng dụng, các thông báo kiểm dịch được lấy ra:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
nhưng thực thi là vẫn không được tung ra!
Tại thời điểm này bây giờ tôi có các điều khoản sau đây trên ứng dụng máy tính để bàn của tôi:
/Contents/MacOS:
-rwxr-xr-x 1 Username staff 407728 21 Jul 16:31 appName
/Contents/Resources:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
Và trên tải ứng dụng tôi đã sử dụng xattr -rd trên:
/Nội dung/MacOS:
-rwxr-xr-x 1 Username staff 407728 21 Jul 16:31 appName
/Contents/Resources:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
Ứng dụng đầu tiên hoạt động tốt và điều thứ hai không bao giờ ra mắt thực thi. Cái quái gì đang xảy ra thế? Đó là cùng một ứng dụng, trên cùng một máy tính, với các quyền tương tự, nhưng ứng dụng đã tải xuống không hoạt động.
Sự cố này xuất hiện trên tất cả các phiên bản OSX trên các máy tính khác nhau.
thx !!!! đã giúp –
không có quy trình con, ứng dụng chính bị lỗi coz của sự cố này – Swati
cảm ơn bạn! Tôi đã sử dụng NSTask và thêm quyền sử dụng App Sandbox = NO đã lưu tôi. – iOSDec