pathForAuxiliaryExecutable有时候如何为零?

时间:2015-10-18 06:58:08

标签: objective-c cocoa

我的程序使用NSTask执行一个小的Unix Unix子程序。它通过使用

获取路径来实现

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

然后将该路径移至

[task setLaunchPath: path];

几乎所有时间都很棒。但我偶尔会收到崩溃报告,其中'path`为零。不是说子程序崩溃了,操作系统找不到它了吗?

怎么会发生这种情况?我认为这是第一次宇宙射线,但现在发生了大约四次。所有关于这一个可执行文件(到目前为止)。

仅供参考,该程序已经过代码签名,但在Mac Store外部发布。这是用Xcode 7构建的;相关的构建阶段是Copy Executables,我在其中复制和代码签名五个这样的可执行文件。当我查看构建的程序时,这五个程序都在MacOS中;程序中的其他任何地方都没有重复项。失败的是176K大小。

1 个答案:

答案 0 :(得分:0)

Apple Documentation

  

此方法返回适用于现代应用程序的路径   框架捆绑。此方法可能不会返回非标准路径   捆绑格式或一些较旧的捆绑包格式。

因此,它可能会返回nil。我建议在使用之前通过nil检查来保护自己免于崩溃:

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

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