【问题标题】:App crashes before debugger can connect在调试器可以连接之前应用程序崩溃
【发布时间】:2014-11-03 09:48:59
【问题描述】:

我有一个应用程序在调试器连接之前就崩溃了。 我在 main() 的第一行放置了一个断点。 (我在 main() 中添加了一个 NSLog 语句作为第一条语句,并在那里设置断点。

应用程序似乎已启动。带有一些 ui 元素的主屏幕在屏幕上变得可见。然后它消失了。

在设备上找不到崩溃日志。

Xcode 消息: 无法启动“appname” 进程启动失败:获取进程xyz的任务失败

当然启用了调试。

对于分析器 Instruments 也是如此。

代码签名工作正常,因此可以将应用部署到设备上。 (对于企业分发也是如此。应用会验证商店提交。)

它确实可以在模拟器上运行。

该应用程序过去运行良好。我正要为商店建造它。对于 iOS 8.1 的最终测试,我使用 SDK 8.1 升级到 Xcode 6.1。但是升级后并没有直接出现问题。它工作得很好。

然后它在为企业发行版构建发布时崩溃了。 AppStore 构建以同样的方式崩溃(根据 Apple 的说法,该应用程序当然被拒绝了。) 但它在调试模式下运行良好。 现在我正在尝试优化的编译器选项是否会产生影响,并且我试图在启用调试等的发布模式下构建,并最终导致调试构建崩溃。 (调试中没有优化)。

因此很可能是迁移到 Xcode 6.1 造成的,但问题可能只有在 Xcode 清理并重建项目以响应对代码优化的编译器设置的更改后才有效。

抱歉,文字太长了。我试图把所有可能重要的东西都放在里面。

【问题讨论】:

  • 发生故障时是否有任何有趣的日志被写入 syslog?
  • 我没有越狱设备,因此无法访问系统日志。也没有崩溃日志。

标签: ios xcode6.1


【解决方案1】:

原因很可能是 Crackify 和 iOS 8.1 不兼容。

因此,其他人可能会感兴趣,尽管我的问题以及这些症状可能非常特别。

AppDelegate didFinishLaunchingWithOptions 很早就有以下声明。

if ([Crackify isCracked] || [self isCertificateUnvalid])
   exit(173);

这样,设计得并不好。该应用程序只是终止,而不是向用户显示任何错误消息。因此,看起来好像应用程序已经崩溃了。但它没有崩溃,因此没有提供崩溃日志。

由于我尚不了解且可能与此错误无关的原因,我的调试器无法连接到已执行的应用程序。一旦克服了这一点(突然调试器工作而没有对任何与调试相关的设置进行任何更改),很快就发现了错误。

这是 Crackify:https://github.com/itruf/crackify 在 Crackify 中,正是这段代码片段导致了问题:

static NSString *str2 = @"ResourceRules.plist";
BOOL fileExists3 = [manager fileExistsAtPath:([NSString stringWithFormat:@"%@/%@", bundlePath, str2])];
if (!fileExists3) {
  return YES;
}

由于我没有进一步调查的原因,这里测试的文件显然不再存在于 iOS 8.1 中。

【讨论】:

  • iOS8 release notes 中有一个 Filesystem 部分指出“应用程序容器的文件系统布局已在磁盘上更改。与其依赖硬编码的目录结构,不如使用NSSearchPathForDirectoriesInDomains 函数或 NSFileManager 类的 URLForDirectory:inDomain:appropriateForURL:create:error: 方法。请参阅文件系统编程指南中的访问文件和目录"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 2012-07-08
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
相关资源
最近更新 更多