// Copyright 2016-present 650 Industries. All rights reserved. #import #import #import #import @implementation EXBareCodeCameraRequester + (NSString *)permissionType { return @"camera"; } - (NSDictionary *)getPermissions { AVAuthorizationStatus systemStatus; EXPermissionStatus status; NSString *cameraUsageDescription = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSCameraUsageDescription"]; if (!cameraUsageDescription) { EXFatal(EXErrorWithMessage(@"This app is missing 'NSCameraUsageDescription', so video services will fail. Add this entry to your bundle's Info.plist.")); systemStatus = AVAuthorizationStatusDenied; } else { systemStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; } switch (systemStatus) { case AVAuthorizationStatusAuthorized: status = EXPermissionStatusGranted; break; case AVAuthorizationStatusDenied: case AVAuthorizationStatusRestricted: status = EXPermissionStatusDenied; break; case AVAuthorizationStatusNotDetermined: status = EXPermissionStatusUndetermined; break; } return @{ @"status": @(status) }; } - (void)requestPermissionsWithResolver:(EXPromiseResolveBlock)resolve rejecter:(EXPromiseRejectBlock)reject { EX_WEAKIFY(self) [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { EX_STRONGIFY(self) resolve([self getPermissions]); }]; } @end