一个iPhone的故事 - 一个崩溃,一个没有



我的用户报告说,当他们从我的应用中导出文件时,会出现邮件composer,然后冻结。那时,他们必须完全关闭该应用程序。他们报告说一个小时无济于事。该用户正在使用iPhone 4,运行iOS 6.0.1。

所以,我启动了从应用商店下载的同一版本的应用程序,转移到运行iOS 6.0.1的iPhone4。当我去导出文件时,一切正常,我能够导出曲目。

接下来,我向他发送了我导出的文件,以确保我们导出了同一文件。当他导入文件,然后试图导出该文件时,也会发生同样的事情。再次,当MailComposer屏幕出现时,他的手机会冻结。

我对如何调试这个问题感到不知所措。我该怎么办?

编辑2:用户报告删除和重新安装应用程序的用户纠正了问题。我仍然想知道潜在问题可能是什么。

编辑:这是我的代码:

MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
if (gpsFilePath) {
  [controller addAttachmentData:[NSData dataWithContentsOfFile:gpsFilePath] mimeType:@"text/gpx" fileName:[self cleanFileName]];
  [controller addAttachmentData:[NSData dataWithContentsOfFile:kmlFilePath] mimeType:@"text/kml" fileName:[self cleanKMLFileName]];
}
[controller setSubject:subject];
[controller setMessageBody:body isHTML:YES];   
[[MAP_APP_DELEGATE mainController] presentModalViewController:controller animated:YES];

有趣的问题。如果它不会崩溃,而只是在某个屏幕上停下来,您可能会在某个地方有一个无限的循环。

这是我会探索的一些途径(但是其中大多数假设用户愿意为帮助您调试此问题,这可能是不可能的):

  • 您的代码是否在主线程中运行?

  • 尝试较小或更简单的数据文件,您可能能够隔离引起这种情况的某些类型的数据。

  • 让用户向您发送他的数据,尝试使用它。

  • 让用户成为您的Beta测试人员之一。您必须将他的UDID添加到您的配置文件中。我建议使用TestFlight轻松将测试构建到您的Beta测试仪。它们允许您从用户的会话中查看崩溃日志和其他有用的统计信息。您还可以设置"检查点",以查看用户在冻结之前到达多远。

  • 在评论附件功能或评论其他各个部分的地方为该用户提供一个构建,以至少查明导致冻结的原因。

  • 与CaptureRecord库集成,该库可以为您的体验录制视频,因此您实际上可以看到他所看到的。它节省了一个视频,然后他可以发送给您。可以为您提供更好的线索。

  • 如果他们有Mac,则可以安装Xcode,只是将组织者使用可以发送给您的控制台输出。否则,请参见下一个想法。

  • 在您的测试构建中,实现一个可以保存到设备上文本文件的应用程序内置控制台。然后可以使用Iexplorer获取它,由用户阅读,然后通过电子邮件发送或以其他方式发送给您。基本上,在NSLOG周围实现包装器,该包装器还将所有输出保存到文本文件或字符串中,并将其保存到磁盘上,或者至少向用户显示。这将模拟您在XCode中将拥有的控制台输出。您可能需要一个管理接口才能打开/关闭它,因为它可能会减慢您的应用程序。确保您的应用程序中有大量的调试输出。如果是无限的循环,您会看到一行永远重复。否则,您至少可以查看冻结之前的最后一行代码是什么。

  • 确保实现所有邮件作曲家代表的功能,并至少将其记录到控制台输出。

希望这有帮助

听起来像我对应用程序遇到的问题。该应用程序将屏幕截图附加到电子邮件。有时他们坠毁了,有时没有。它取决于设备的分辨率和图像的产生尺寸。您可能会发生类似的事情。您对您对MailCompose的工作还没有足够的说法,但是我通过包装将图像传递给@autoreleasepool块中邮件作曲家的代码的位来解决我的问题。我的代码是这样的:

@autoreleasepool
{
    NSData *img = [self getImageFromChart:chartView];
    [mailController addAttachmentData:img mimeType:@"image/png" fileName:@"app1.png"];
    img = nil;
    img = [self getImageFromGrid:webView];
    [mailController addAttachmentData:img mimeType:@"image/png" fileName:@"app2.png"];
    img = nil;
}
[self presentModalViewController:mailController animated:YES];

最新更新