如何在ios应用程序中存储崩溃日志文件?

时间:2013-03-18 10:26:06

标签: ios objective-c ios6 crash-reports

假设我的应用程序崩溃意味着当时调用了applicationWillTerminate函数。在该功能中,我想将崩溃日志文件保存在Temporary目录中。 当应用程序在那时启动时,我想通过编码将崩溃报告文件从iOS设备上传到我的服务器位置。

我正在使用此代码保存崩溃日志文件。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);

但是这段代码可以在模拟器中使用。我可以在

中看到这个文件
/Users/UserNAme/Library/Application Support/iPhone Simulator/6.0/Applications/xxx-yyy-sss--eee/Documents/console.log

但我在ios设备中找不到此文件。

注意: 用于在ios设备中查找文件我正在使用iExplorer

2 个答案:

答案 0 :(得分:9)

很遗憾,您无法以编程方式获取设备上的崩溃日志。为了克服这个问题,有许多商业,准商业和开源解决方案。

特别是,HockeyApp(现在由Microsoft拥有)和crittercism提供商业解决方案。此外,TestFlightApp(尽管Apple购买)仍然通过其界面提供此类功能。

HockeyApp源代码也可在github上找到。

最后,这些系统中的大多数都使用名为plcrashreporter的底层崩溃捕获器,这是一个开源框架,可以在您的目录中放置几乎完全相同的iOS崩溃报告。

如果您想自己管理,我强烈建议plcrashreporter,否则托管和商业解决方案都可用,您应该查看它们并自行决定。

答案 1 :(得分:2)

另一个有用的选项(我们使用它)是Crashlytics.com,它是免费的,并且对报告有很多控制权(现在由twitter拥有,谨慎使用!)。