私のアプリでは、card.io を使用してクレジット カードをスキャンしています。iOS 9 では問題なく動作します。iOS 10 ではアプリがクラッシュし、大量のガベージ メッセージがスローされるため、xcode 8 ベータ 2 コンソールでクラッシュ ログが見つかりません。
そして、プライバシー - >設定をチェックして、アプリのカメラが無効になっているかどうかを確認しましたが、アプリがそのセクションにリストされていません.iOS 10は、アプリがカメラを使用する許可を与えていないようです.
次のコードを使用して許可を要求します。
-(BOOL)checkCameraPermissions{
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if(authStatus == AVAuthorizationStatusAuthorized)
{
// start card-io
return YES;
}
else if(authStatus == AVAuthorizationStatusNotDetermined)
{
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted)
{
if(granted)
{
//Start card-io
[self testIsNewCard];
}
}];
}
else if (authStatus == AVAuthorizationStatusRestricted)
{
//Alert
// Alert camera denied
UIAlertController *aCon=[UIAlertController alertControllerWithTitle:@"Camera denied" message:@"Camera cannot be used" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *ok =[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[aCon dismissViewControllerAnimated:YES completion:nil];
}];
[aCon addAction:ok];
[self presentViewController:aCon animated:YES completion:nil];
return NO;
}
return NO;
}
このコードを実行すると、authStatus が次のように返されます。AVAuthorizationStatusNotDetermined
ブロックに入った直後にアプリがクラッシュしましたrequestAccessForMediaType:AVMediaTypeVideo
コンソールに表示されるガベージ ログが非常に多く、クラッシュ メッセージを見つける手がかりがありません。
編集: xcode 8 で不要なログをすべて無効にするオプションを見つけました。ここに投稿された回答。しかし、バックトレースのデバッグを無効にした後でも、xcode はクラッシュ ログを表示しませんでした。
私のxcode8はこのメッセージを表示するだけで、アプリは終了します:
App[1124:226447] [access] <private>
場所とプライバシーのリセットも試しましたが、メディア アクセスを要求しようとするとアプリがクラッシュします。
なぜこれが起こっているのですか?