iOS7 microphone Permisison

iOS7 から, どうやら マイク使用時にPermissionが必要になるみたいです。GPSデータと同じように, ダイアログでの確認になるそうですが,
このPermissionがないと, マイクを使用すると…. 落ちます。

iOS6ではこのコードは無視されます。当然iOS7 SDKでコンパイルしないといけません。requestRecordPermission というメソッドが存在しないからです。

#import <AVFoundation/AVAudioSession.h>

ヘッダーがいります。

if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)])
{
        [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL allowed){
            NSLog(@"Allow microphone use? %d", allowed);
            if ( !allowed ) {
                 // If not enabled microphone, here is
            }
        }];
}

一度認証されるとダイアログは登場しません。
そのままブロックコードの方へやってきます。ので, 必要なところピンポイントに実装するとよいでしょう。
ブロックコード内で処理を書きます。UIをdisabledしたりなんとかするのもこの中でできます。

設定

ダイアログはアプリケーションの最初の起動時にしか出てきません。
設定を変更するだけであれば, “設定” -> “プライバシー” -> “マイク” で設定を変更できます
このデータは別の場所に保存されているので, アプリケーションを削除しても残ります。
この設定を完全に削除する場合は
“設定” -> “リセット” -> “位置情報とプライバシーをリセット” で設定をリセットします。

ブロックコード内でのUIの変更

このpermissionのコードを, viewDidLoadとか, そのたぐいのライフサイクルのメソッドに実装し,
UIの変更などをブロックコード内に入れると, メインスレッドで実行していないので落ちるかもしくは実行速度が落ちます。
stackoverflow参考
そこでmainスレッドでやりましょう

dispatch_async(dispatch_get_main_queue(),^{
      // Here is UI codes                    
});

Ref

stackoverflow