web-dev-qa-db-fra.com

Application de fermeture iOS 13 en arrière-plan: problème de flux audio

Je suis coincé dans la lecture audio en arrière-plan avec Swift 5 et Xcode 11.

L'activation du mode d'arrière-plan et le démarrage d'AVAudioSession ne fonctionnent plus et l'application continue de se fermer après quelques secondes lorsque vous quittez l'application.

Je reçois d'abord un échauffement, mais le flux commence:

Error acquiring assertion: <NSError: 0x2829830f0; domain: RBSAssertionErrorDomain; code: 2; reason: "Required client entitlement is missing"> {
userInfo = {
    RBSAssertionAttribute = <RBSLegacyAttribute: 0x1050a9040; requestedReason: MediaPlayback; reason: MediaPlayback; flags: PreventTaskSuspend | PreventTaskThrottleDown | WantsForegroundResourcePriority>;
}

Après quelques secondes en arrière-plan, il se ferme:

[ProcessSuspension] Background task expired while holding WebKit ProcessAssertion (isMainThread? 1).

Si je laisse l'application ouverte, l'audio s'arrête quand même:

[ProcessSuspension] 0x10dfc8848 - ProcessAssertion::processAssertionWasInvalidated()

Apple adore changer cela chaque année. Jusqu'à présent, quelqu'un a-t-il réussi à travailler sur iOS 13 et Xcode 11/Swift 5?

Merci!

MISE À JOUR : Je viens de découvrir ce problème affecte uniquement l'audio lu via WebViews. Je ne sais pas s'il s'agit d'un bogue sur iOS 13 ou si Apple coupe vraiment les WebViews du multitâche. J'ai donc changé mon application et l'audio est maintenant lu via l'AVPlayer. Audio en arrière-plan fonctionne à nouveau.

6
tomDev

mettez-vous du code pour reprendre la lecture audio en vous

func applicationDidEnterBackground(_ application: UIApplication) {


    do {
        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
        try AVAudioSession.sharedInstance().setActive(true)
    } catch {
        print(error)
    }

}

de plus, effectuez l'audio, la diffusion et l'image dans l'image à partir de vos capacités cibles

1
masoud