カメラの使用を許可の設定が有効になるタイミングは・・・
うーん、またハマってしまった・・・
カメラの機能を使って QR を読み込もうとしてて、利用者に許可取らないとならないんだよね、info.plit に、以下の propety を追加:
Privecy - Camera Usage Description
そうすると、設定、プライバシー、カメラを選ぶとアプリ名が表示されるようになり、許可する・しないが設定できる・・・はず、と思ったらうまくいかない。
この設定ができるようになるのは、初回、カメラを使用しようとしたタイミングのため、アプリを build して起動しただけでユーザーに許可を得るような作りにはならない、もっと言うと、設定にも項目は追加されないのだ。
アプリで通知を伴う機能を実装すると、初回起動時にユーザーに許可を得るので、てっきりカメラもそうなんだと思ったら違う。カメラは起動時ではなく、カメラ機能を使おうとしたタイミングで許可を得る画面が出て、設定も追加されるのだ。
なんでそんなにタイミングにこだわるのかと言うと、カメラを起動する、しないの判定で、許可している場合はカメラ起動、許可していない場合は許可してくださいのメッセージを出す、という風に書いていたら、初回起動時は常に許可されていないので、許可してくださいのメッセージが出るものの、設定を見ても許可できない、ということになってしまい、結局カメラを起動できなくなるのです。
こういったことを回避するには、AVAuthorizationStatusNotDetermined (許可する、しないが未定義)という状態を検知したら、
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {...}];
という面倒な処理を加える必要があると。
アプリを消して、もう一回 build したら、カメラを起動できなくなって、なんでなんでになり焦ったけど、こういうことかと。