我的程序使用NSTask执行一个小的Unix Unix子程序。它通过使用
获取路径来实现 NSString * path = [[NSBundle mainBundle] pathForAuxiliaryExecutable:@"appName"];
然后将该路径移至
[task setLaunchPath: path];
几乎所有时间都很棒。但我偶尔会收到崩溃报告,其中'path`为零。不是说子程序崩溃了,操作系统找不到它了吗?
怎么会发生这种情况?我认为这是第一次宇宙射线,但现在发生了大约四次。所有关于这一个可执行文件(到目前为止)。
仅供参考,该程序已经过代码签名,但在Mac Store外部发布。这是用Xcode 7构建的;相关的构建阶段是Copy Executables
,我在其中复制和代码签名五个这样的可执行文件。当我查看构建的程序时,这五个程序都在MacOS中;程序中的其他任何地方都没有重复项。失败的是176K大小。
答案 0 :(得分:0)
此方法返回适用于现代应用程序的路径 框架捆绑。此方法可能不会返回非标准路径 捆绑格式或一些较旧的捆绑包格式。
因此,它可能会返回nil
。我建议在使用之前通过nil
检查来保护自己免于崩溃:
NSString *path = [[NSBundle mainBundle] pathForAuxiliaryExecutable:@"appName"];
if (path == nil) {
NSLog("Executable does not exists");
} else {
[task setLaunchPath: path];
}