我的程序使用 NSTask 执行一个小的 c Unix 子程序。它通过获得一条路径来实现NSString * path = [[NSBundle mainBundle] pathForAuxiliaryExecutable:@"appName"];
然后将该路径交给[task setLaunchPath: path];
几乎一直都很好用。但是我偶尔会收到崩溃报告,其中“path”为零。不是说子程序崩溃了,操作系统找不到它吗?
这怎么会发生?我第一次以为是宇宙射线,但现在已经发生了大约四次。全部都在这个可执行文件上(到目前为止)。
仅供引用,该程序是代码签名的,但在 Mac 商店之外分发。这是用 Xcode 7 构建的;相关的构建阶段是 Copy Executables
,我在其中复制五个这样的可执行文件并对其进行代码签名。当我查看构建的程序时,这五个程序都位于 MacOS 中;程序中的其他任何地方都没有任何重复项。失败的一个是 176K 大小。
最佳答案
每 Apple Documentation :
因此,它可能会返回 nil
。我建议在使用之前通过 nil
检查来保护自己免受崩溃:
NSString *path = [[NSBundle mainBundle] pathForAuxiliaryExecutable:@"appName"];
if (path == nil) {
NSLog("Executable does not exists");
} else {
[task setLaunchPath: path];
}
关于objective-c - pathForAuxiliaryExecutable 有时如何为零?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33195204/