【问题标题】:How to store crash log file inside the ios application?如何在 ios 应用程序中存储崩溃日志文件?
【发布时间】:2017-07-04 23:30:58
【问题描述】:

假设我的应用程序崩溃意味着当时调用了applicationWillTerminate 函数。在该函数中,我想将崩溃日志文件保存在临时目录中。 当应用程序当时启动时,我想通过编码将崩溃报告文件从 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

【问题讨论】:

    标签: ios objective-c ios6 crash-reports


    【解决方案1】:

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

    特别是HockeyApp(现在归微软所有)和crittercism 提供商业解决方案。此外,TestFlightApp(虽然被苹果公司购买)仍然通过其接口提供这种功能。

    HockeyApp 源代码也可以在github 上获得。

    最后,这些系统中的大多数都使用名为 plcrashreporter 的底层崩溃捕获器,它是一个开源框架,可将 iOS 崩溃报告的近乎精确的副本放置在您的目录中。

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

    【讨论】:

    • 当然我正在使用这个应用程序 TestFlightApp 用于开发人员和测试人员的测试目的。在这里,我只想将该崩溃文件发送到特定的邮件 ID。
    • 上面的答案仍然是正确的。如果您需要自己处理崩溃报告,您将不得不自己生成它。绝对没有办法突破沙箱并从设备内获取崩溃报告的操作系统版本。唯一的其他选择是手动将其从设备中取出,或者使用 iTunes 或 Xcode,但我的印象是您希望为现场放置的设备而不是开发设备执行此操作。此外,大多数托管解决方案可用于实时和测试应用程序。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2015-10-16
      • 2014-03-31
      相关资源
      最近更新 更多