0

我的一位用户报告说,当他们从我的应用程序导出文件时,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];
4

2 回答 2

2

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

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

  • 你上面的代码是在主线程中运行的吗?

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

  • 让用户向您发送他的数据,然后尝试使用该数据进行复制。

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

  • 为该用户提供注释掉附件功能或注释掉各种其他部分的构建,以至少查明导致冻结的原因。

  • 与 CaptureRecord 库集成,该库可以录制用户体验的视频,因此您可以实际看到他所看到的内容。它保存了一个视频,然后他可以将其发送给您。可以让您更好地了解正在发生的事情。

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

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

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

希望这可以帮助

于 2012-11-07T00:29:51.843 回答
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];
于 2012-11-06T23:04:26.277 回答