2015-10-18 70 views
4

我的程序使用NSTask執行一個小的c Unix子程序。它通過獲取的路徑與pathForAuxiliaryExecutable如何有時可以爲零?

NSString * path = [[NSBundle mainBundle] pathForAuxiliaryExecutable:@"appName"];

,然後交給該路徑來

[task setLaunchPath: path];

偉大工程幾乎所有的時間這樣做。但是我偶爾會收到崩潰報告,其中「路徑」爲零。不是子程序崩潰,操作系統找不到它?

這怎麼會發生?我認爲這是第一次宇宙射線,但現在發生了大約四次。所有這一個可執行文件(到目前爲止)。

僅供參考,該程序爲代碼簽名,但在Mac Store外部發布。這是用Xcode 7構建的;相關的構建階段是Copy Executables,其中我複製並代碼簽署了五個這樣的可執行文件。當我看着構建的程序時,這五個程序都坐在MacOS上;程序中沒有任何其他地方有重複。失敗的是176K大小。

回答

0

Apple Documentation

這個方法返回現代應用和 框架捆綁適當的路徑。此方法可能不會返回非標準 捆綁格式或某些較早捆綁格式的路徑。

因此,它可能會返回nil。使用它之前,我會建議從崩潰保護自己的nil檢查:

NSString *path = [[NSBundle mainBundle] pathForAuxiliaryExecutable:@"appName"]; 

if (path == nil) { 
    NSLog("Executable does not exists"); 
} else { 
    [task setLaunchPath: path]; 
} 
+0

我現在有這樣的檢查,因此它不再崩潰,但我需要找出原因pathForAuxiliaryExecutable零星失敗 – mackworth

+0

嗯,那會是投資時間和本地調試的問題。祝你好運! – Abhinav

+0

我很欣賞它,但成千上萬的人在運行程序(每天很多),只有幾次遇到這個問題,隔離起來會很有趣! – mackworth

相關問題