オーディオ再生中にバックグラウンドに移行しても再生を続けるには?
Targetsから
Capabilities > Background Modes をONにして、
Audio, AirPlay and Picture in Picture をチェックします
(この設定によって、Info.plistに”Required Background Modes”キーが書き加えられます)
この設定をした上で、ソースコード上でAVAudioSessionのカテゴリを設定します。
AVAudioSessionのカテゴリとは、消音スイッチが入っているときに音楽再生するか?や、録音可能か?などの設定を定めるものです。
(AVAudioSessionプログラミングガイド(日本語・PDF))
バックグラウンド再生の場合には、 AVAudioSessionCategoryPlaybackにします。
/// バックグラウンドでも再生できるカテゴリに設定する let session = AVAudioSession.sharedInstance() do { try session.setCategory(AVAudioSessionCategoryPlayback) } catch { // エラー処理 fatalError("カテゴリ設定失敗") } // sessionのアクティブ化 do { try session.setActive(true) } catch { // audio session有効化失敗時の処理 // (ここではエラーとして停止している) fatalError("session有効化失敗") }
これで、音楽再生中にバックグラウンドに移行しても再生は続きます。
ただ、これで音楽を流し続けることはできるのですが、イヤホンやコントロールセンターからの操作を受け付けません。
そういった操作(リモートコントロールイベント)を受け付ける手順はこちらの記事をごらんください。
[iOS][Swift]リモートコントロールイベントに対応する | nackpan Blog
参考
Technical Q&A QA1668: Playing media while in the background using AV Foundation on iOS
「[iOS][Swift]バックグラウンドに移行してもオーディオ再生を続ける」への1件のフィードバック