Share Extension で QR コードをスキャンしたいのですが、以下のコードは通常の iOS アプリケーションで正しく実行できます。
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (error != nil) {
NSLog(@"no camera");
return;
}
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
self.session = [[AVCaptureSession alloc] init];
[self.session addInput:input];
[self.session addOutput:output];
output.metadataObjectTypes = [NSArray arrayWithObject:AVMetadataObjectTypeQRCode];
self.preview = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
CGRect rect = CGRectMake(50, 50, 300, 600);
self.preview.frame = rect;
[self.view.layer insertSublayer:self.preview atIndex:0];
[self setRuntimeErrorHandlingObserver:[[NSNotificationCenter defaultCenter] addObserverForName:AVCaptureSessionRuntimeErrorNotification object:[self session] queue:nil usingBlock:^(NSNotification *note) {
NSLog(@"session runtime error: %@", note);
}]];
[self.session startRunning];
しかし、Share Extension でこのコードを実行すると、エラー メッセージが表示されます。
NSConcreteNotification 0x174244a70 {name = AVCaptureSessionRuntimeErrorNotification; object = <AVCaptureSession: 0x17400a280 [AVCaptureSessionPresetHigh]>; userInfo = {
AVCaptureSessionErrorKey = "Error Domain=AVFoundationErrorDomain Code=-11837 \"Cannot Use (null)\" UserInfo=0x174262500 {NSLocalizedDescription=Cannot Use (null), NSLocalizedFailureReason=(null) may not be used by an app running in the background.}";}}
これは、共有拡張機能がバックグラウンドで実行されているということですか? 他に修正する方法はありますか?