web-dev-qa-db-ja.com

iOS 13バックグラウンドでのアプリの終了:オーディオストリームの問題

Swift 5とXcode 11でバックグラウンドでオーディオを再生するのに行き詰まっています。

バックグラウンドモードを有効にしてAVAudioSessionを開始すると機能しなくなり、数秒後にアプリを終了するとアプリが閉じ続けます。

最初に資格を取得しますが、ストリームが開始します。

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>;
}

バックグラウンドで数秒後に閉じます:

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

アプリを開いたままにすると、オーディオが停止します。

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

Appleはこれを毎年変えるのが大好きです。これまでにiOS 13とXcode 11/Swift 5でこれを動作させている人はいますか?

ありがとう!

[〜#〜] update [〜#〜]:見つけたばかりこの問題はWebViewsで再生されるオーディオのみに影響します。これがiOS 13のバグなのか、Appleが実際にマルチタスクからWebViewを切断しているのか、私にはわからないので、アプリを変更し、オーディオがAVPlayerで再生されています。バックグラウンドオーディオ再び動作します。

6
tomDev

あなたはあなたに再開再生オーディオのためのコードを入れますかAppdelegate

func applicationDidEnterBackground(_ application: UIApplication) {


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

}

さらに、ターゲット機能からオーディオ、エアプレイ、およびピクチャーインピクチャーを作成します

1
masoud