20

在我的应用程序中,我使用 card.io 来扫描信用卡。它在 iOS 9 中运行良好。在 iOS 10 中,应用程序崩溃了,我在 xcode 8 beta 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>

我也尝试重置位置和隐私,但在尝试请求媒体访问时应用程序仍然崩溃。

任何想法为什么会发生这种情况?

4

3 回答 3

27

我将"Privacy - Camera Usage Description" 密钥添加到我的 info.plist 文件中,它现在可以工作了。

于 2016-07-13T16:12:20.830 回答
11

iOS 10您必须声明对任何用户私有数据类型的访问。您可以通过将使用密钥添加到应用程序的Info.plist. 有关更多信息,请找到以下相同的屏幕截图。

您需要将Privacy - Camera Usage Description键添加到您应用的 Info.plist 及其使用信息中。

欲了解更多信息,请查看以下 GIF。

动图

或者,如果您想通过 info.plist 添加,则需要添加NSCameraUsageDescription键。

只需在 info.plist 中复制并粘贴以下字符串即可。

<key>NSCameraUsageDescription</key>
<string>Take the photo</string>

请找到下面的 GIF 以获取更多信息。

动图

有关更多信息,请查看链接

于 2016-09-20T10:40:52.927 回答
8

iOS 10继续执行隐私政策并实施了新的隐私规则。我们应该记住在我们的下一个项目中实施它们。

对于您的问题,您需要将以下行添加到info.plist

<!--  Camera -->
<key>NSCameraUsageDescription</key>
<string><Your description goes here></string>

以下是其余的隐私规则:

<!--  Photo Library -->
<key>NSPhotoLibraryUsageDescription</key>
<string><Your description goes here></string>

<!--  Camera -->
<key>NSCameraUsageDescription</key>
<string><Your description goes here></string>

<!--  Microphone -->
<key>NSMicrophoneUsageDescription</key>
<string><Your description goes here></string>

<!--  Location -->
<key>NSLocationUsageDescription</key>
<string><Your description goes here></string>

<!--  Location When In Use -->
<key>NSLocationWhenInUseUsageDescription</key>
<string><Your description goes here></string>

<!--  Location Always -->
<key>NSLocationAlwaysUsageDescription</key>
<string><Your description goes here></string>

<!--  Calendars -->
<key>NSCalendarsUsageDescription</key>
<string><Your description goes here></string>

<!-- ⏰ Reminders -->
<key>NSRemindersUsageDescription</key>
<string><Your description goes here></string>

<!--  Motion -->
<key>NSMotionUsageDescription</key>
<string><Your description goes here></string>

<!--  Health Update -->
<key>NSHealthUpdateUsageDescription</key>
<string><Your description goes here></string>

<!--  Health Share -->
<key>NSHealthShareUsageDescription</key>
<string><Your description goes here></string>

<!-- ᛒ Bluetooth Peripheral -->
<key>NSBluetoothPeripheralUsageDescription</key>
<string><Your description goes here></string>

<!--  Media Library -->
<key>NSAppleMusicUsageDescription</key>
<string><Your description goes here></string>

希望这可以帮助。:)

于 2016-09-22T07:06:14.487 回答