一个两个iPhone的故事 - 一个崩溃,一个不

时间:2012-11-06 22:55:11

标签: iphone objective-c ios

我的用户报告说,当他们从我的应用程序导出文件时,会出现MailComposer,然后冻结。此时,他们必须完全关闭应用程序。他们报告说等一个小时没有用。此用户正在使用运行iOS 6.0.1的iPhone 4.

因此,我将从App Store下载的相同版本的应用程序启动到运行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];

2 个答案:

答案 0 :(得分:2)

有趣的问题。如果它没有崩溃并且只是在某个屏幕上停顿,那么你可能会在某个地方出现无限循环。

以下是我要探索的一些途径(但大多数假设用户愿意付出很多努力来帮助您调试此问题,这可能不太可能):

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

  • 尝试更小或更简单的数据文件,您可能能够隔离导致此问题的某些类型的数据。

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

  • 让用户成为您的Beta版测试人员之一。您必须获取他的UDID并将其添加到您的配置文件中。我建议使用TestFlight轻松地为beta测试人员提供测试版本。它们允许您从用户的会话中查看崩溃日志和其他有用的统计信息。您还可以设置“检查点”以查看用户在冻结前的距离。

  • 为该用户提供一个构建,其中附件功能被注释掉,或者其他各个部分被注释掉,以至少找出导致冻结的原因。

  • 与CaptureRecord库集成,可以对您的用户体验进行视频录制,让您可以真正看到他所看到的内容。它保存了一个视频,然后他可以发送给您。可以给你一个更好的线索,了解发生了什么。

  • 如果他们有Mac,他们可以安装Xcode,只是为了使用Organizer进行控制台输出,他们可以发送给你。否则,请参阅下一个想法。

  • 在测试版本中,实现可以保存到设备上的文本文件的应用内控制台。然后可以使用iExplorer获取它,由用户读取,然后通过电子邮件发送或以其他方式发送给您。基本上,在NSLog周围实现一个包装器,它还将所有输出保存到文本文件或字符串,并将其保存到磁盘,或者至少可以显示给用户。这将模拟您在Xcode中的控制台输出。您可能需要一个管理界面才能打开/关闭它,因为它可能会降低您的应用程序速度。确保您的应用程序中有足够的调试输出。如果它是一个无限循环,你会看到一条线永远重复。否则,您至少可以在冻结之前查看最后一行代码。

  • 确保实现所有邮件编辑器委托的功能,并至少将它们记录到控制台输出。

希望这有帮助

答案 1 :(得分:0)

听起来像我的应用程序的问题。该应用程序将屏幕截图附加到电子邮件。有时候他们会崩溃,有时却没有。它取决于设备分辨率和图像的最终尺寸。你可能会有类似的事情发生。你还没有充分说明你在使用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];