We use AVPlayer from AVFoundation to play audio in our applications. The moment we send the application to back ground mode, audio stops playing.
To fix this, we will need to configure AVAudioSession properly. We start by importing AVFoundation in AppDelegate or our iOS Project.
import AVFoundation
Next, add the following code in application didFinishLaunchingWithOptions:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // enable playback category: this is required for background audio to function normally let audioSession = AVAudioSession.sharedInstance() try? audioSession.setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault) try? audioSession.setActive(true, with: []) return true }
Finally, enable Background Audio Mode in Project Settings.
Here is gist for the example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// https://hashaam.com/2017/06/15/configure-audio-session-for-background-audio-mode-ios-project/ | |
import UIKit | |
import AVFoundation | |
@UIApplicationMain | |
class AppDelegate: UIResponder, UIApplicationDelegate { | |
var window: UIWindow? | |
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { | |
// Override point for customization after application launch. | |
// enable playback category: this is required for background audio to function normally | |
let audioSession = AVAudioSession.sharedInstance() | |
try? audioSession.setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault) | |
try? audioSession.setActive(true, with: []) | |
return true | |
} | |
} |
One comment