1

私のアプリはiPhone 5Sでクラッシュし、他のデバイスではクラッシュせず、 startRecordingToOutputFileURL:recordingDelegate で発生した例外を指しています:

   Date/Time:           2013-11-01 13:18:03.672 -0400
   OS Version:          iOS 7.0.3 (11B511)
   Report Version:      104

   Exception Type:  EXC_CRASH (SIGABRT)
   Exception Codes: 0x0000000000000000, 0x0000000000000000
   Triggered by Thread:  0

    Last Exception Backtrace:
    0   CoreFoundation                  0x2f164e83 __exceptionPreprocess + 131
    1   libobjc.A.dylib                 0x394c56c7 objc_exception_throw + 38
    2   AVFoundation                    0x2e0679b9 -[AVCaptureMovieFileOutput startRecordingToOutputFileURL:recordingDelegate:] + 512

私はテストする iPhone 5S を持っていませんし、この目的のためだけに入手したくありません。そして、nil file URL、nil delegate などの明らかなエラーをチェックしましたが、どれもヒットしませんでした。

これをデバッグするにはどうすればよいですか?リモート テストを行って、ベータ テスターのデバイスからログを抽出する可能性はありますか? ほとんどのログ抽出アプリが iOS 7 で動作しないことを確認しました。

編集:AVCaptureDeviceのセットアップ方法と関係があると強く疑っています。これが私のコードです。正しく実行しているかどうかを指摘してください。

デバイス入力の設定方法は次のとおりです。

    AVCaptureDeviceFormat *bestFormat = nil;

    CMVideoDimensions bestDimensions = {0.f, 0.f};
    CMVideoDimensions dimensions;

    NSInteger width = [self videoTrackWidth];
    NSInteger height = [self videoTrackHeight];

    NSInteger fps = [[self currentFPSFromSettings] integerValue];

    if (fps > 30) {
        [self configureCameraForHighFrameRate:device]; //No crash if this path is executed
    } else {
    /* crashes only if this path is executed */
        for ( AVCaptureDeviceFormat *format in [device formats] ) {
            CMFormatDescriptionRef formatDesc = [format formatDescription];
            dimensions = CMVideoFormatDescriptionGetDimensions(formatDesc);

            if (dimensions.width >= width && dimensions.height >= height) {
                for ( AVFrameRateRange *range in format.videoSupportedFrameRateRanges ) {
                    if (range.maxFrameRate >= fps) {
                        bestDimensions = dimensions;
                        bestFormat = format;
                        MPLog(@" -- Max FPS = %f", range.maxFrameRate);
                        break;
                    }
                }
            }
        }

        if (!bestFormat) {
            bestFormat = [[device formats] lastObject];
        }

        if ( bestFormat ) {
            if ( [device lockForConfiguration:NULL] == YES ) {
                device.activeFormat = bestFormat;
                MPLog(@"Device Max Zoom = %f", bestFormat.videoMaxZoomFactor);
                self.maxZoomSupportedByDevice = bestFormat.videoMaxZoomFactor;
                [device unlockForConfiguration];
            }
        }
    }
4

2 に答える 2

0

同じ問題がありました。AVCaptureSession の作成時に、iPhone 5s でアプリがクラッシュしていました。iTunes Connect で自分のビルドを確認すると、サポートされているアーキテクチャの下に armv7 しかないことがわかりました。おそらく最初にアーカイブを作成したとき、iPhone 5c を Xcode に接続していましたが、電話を接続せずに再度作成すると、armv7 と arm64 の両方をサポートする新しいビルドが作成されます。同じコードが iPhone 5s でも機能するようになりました。

于 2014-09-22T16:30:56.507 に答える