我有一個啓動位於/ Contents/Resources中的可執行文件的Mac OSX應用程序。 該應用程序不打算在App Store上發佈,因此我沒有打開沙盒。使用NSTask啓動可執行文件 - 沙盒問題?
的啓動代碼:
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];
的關鍵是 - 這一切都在Xcode中運行時工作正常。 將應用程序導出到桌面並運行時,它也可以正常工作。
但是,如果我拉鍊的應用,將其上傳到網絡服務器,然後下載它在同一臺計算機上(或它收存箱到另一臺Mac),任務不再啓動!我在系統控制檯或任何東西中都沒有出現錯誤。
我研究了一些關於這個問題,並發現OSX將迎來一個新的一個應用是「隔離」特別許可權。於是我研究了下載的應用程序和導出的應用之間的區別:從Xcode中導出我的應用程序後
上的可執行權限:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
此時程序工作正常,可執行從啓動按鈕內的應用程序。
而且荏苒應用,上傳到服務器後,下載,解壓縮,並打開應用程序並接受對話「這個應用程序是從互聯網下載」:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
com.apple.quarantine 26
此時沒事的時候我把情況發生我的應用程序中的按鈕。
如果我再運行對整個應用xattr -rd com.apple.quarantine
,檢疫通知被刪除:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
但可執行文件是仍然沒有開通!
在這一點上,我現在對我的桌面應用程序具有以下權限:
/內容/ MacOS的:
-rwxr-xr-x 1 Username staff 407728 21 Jul 16:31 appName
/內容/資源:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
而且在下載應用程序,它我用XATTR -rd:
/內容/ MacOS的:
-rwxr-xr-x 1 Username staff 407728 21 Jul 16:31 appName
/內容/資源:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
第一應用工作正常,第二個從未啓動該可執行文件。到底他媽發生了什麼?這是同一臺電腦上具有相同權限的應用程序,但下載的應用程序不起作用。
此問題出現在不同計算機上的所有OSX版本中。
thx !!!!這有助於 –
無子過程,主要應用程序得到崩潰這個問題因爲 – Swati
謝謝!我使用NSTask並添加App Sandbox = NO權限救了我。 – iOSDec