カメラの使用を許可の設定が有効になるタイミングは・・・

うーん、またハマってしまった・・・

カメラの機能を使って QR を読み込もうとしてて、利用者に許可取らないとならないんだよね、info.plit に、以下の propety を追加:

Privecy - Camera Usage Description

そうすると、設定、プライバシー、カメラを選ぶとアプリ名が表示されるようになり、許可する・しないが設定できる・・・はず、と思ったらうまくいかない。

この設定ができるようになるのは、初回、カメラを使用しようとしたタイミングのため、アプリを build して起動しただけでユーザーに許可を得るような作りにはならない、もっと言うと、設定にも項目は追加されないのだ。

アプリで通知を伴う機能を実装すると、初回起動時にユーザーに許可を得るので、てっきりカメラもそうなんだと思ったら違う。カメラは起動時ではなく、カメラ機能を使おうとしたタイミングで許可を得る画面が出て、設定も追加されるのだ。

なんでそんなにタイミングにこだわるのかと言うと、カメラを起動する、しないの判定で、許可している場合はカメラ起動、許可していない場合は許可してくださいのメッセージを出す、という風に書いていたら、初回起動時は常に許可されていないので、許可してくださいのメッセージが出るものの、設定を見ても許可できない、ということになってしまい、結局カメラを起動できなくなるのです。

こういったことを回避するには、AVAuthorizationStatusNotDetermined (許可する、しないが未定義)という状態を検知したら、

[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {...}];

という面倒な処理を加える必要があると。

アプリを消して、もう一回 build したら、カメラを起動できなくなって、なんでなんでになり焦ったけど、こういうことかと。