私のアプリは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];
}
}
}