0

私のユーザーは、私のアプリからファイルをエクスポートすると、MailComposer が表示されてからフリーズすると報告しています。その時点で、アプリを完全にシャットダウンする必要があります。彼らは、1 時間待っても効果がないと報告しています。このユーザーは、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

興味深い問題。クラッシュせず、特定の画面で停止するだけの場合は、どこかに無限ループが発生している可能性があります。

ここに私が探求するいくつかの方法があります(しかし、これらのほとんどは、ユーザーがこの問題のデバッグを支援するために多大な努力を払うことをいとわないことを前提としていますが、これはありそうもないかもしれません):

  • 上記のコードはメインスレッドで実行されていますか?

  • より小さなまたはより単純なデータファイルを試してください。これを引き起こしている特定のタイプのデータを分離できる場合があります。

  • ユーザーに自分のデータを送信してもらい、それを使って再現してみてください。

  • ユーザーをベータテスターの1人にしてもらいます。彼のUDIDを取得して、プロビジョニングファイルに追加する必要があります。TestFlightを使用して、ベータテスターに​​テストビルドを簡単に提供することをお勧めします。これらを使用すると、ユーザーのセッションからクラッシュログやその他の有用な統計を表示できます。「チェックポイント」を設定して、ユーザーがフリーズするまでの距離を確認することもできます。

  • そのユーザーに、添付ファイル機能がコメント化されている、または他のさまざまな部分がコメント化されているビルドを提供して、少なくともフリーズの原因を特定します。

  • ユーザーエクスペリエンスのビデオ録画を作成できるCaptureRecordライブラリと統合して、ユーザーが実際に見ているものを確認できるようにします。それは彼があなたに送ることができるビデオを保存します。何が起こっているのかについて、より良い手がかりを与えることができます。

  • Macをお持ちの場合は、Xcodeをインストールして、送信可能なコンソール出力にオーガナイザーを使用できます。それ以外の場合は、次のアイデアを参照してください。

  • テストビルドで、デバイスのテキストファイルに保存できるアプリ内コンソールを実装します。次に、iExplorerを使用してフェッチし、ユーザーが読み取ってから、電子メールで送信するか、その他の方法で送信することができます。基本的に、NSLogのラッパーを実装します。これにより、すべての出力がテキストファイルまたは文字列に保存され、ディスクに保存されるか、少なくともユーザーに表示されます。これにより、Xcodeでのコンソール出力がエミュレートされます。アプリの速度が低下する可能性があるため、オン/オフを切り替えるには管理インターフェースが必要になる可能性があります。アプリに十分なデバッグ出力があることを確認してください。無限ループの場合は、1行が永遠に繰り返されるのがわかります。それ以外の場合は、少なくとも、フリーズ前のコードの最後の行を確認できます。

  • メールコンポーザーデリゲートのすべての機能を実装し、少なくともそれらをコンソール出力に記録してください。

お役に立てれば

于 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 に答える