対応
playerView.player = nilplayerView.player = player
の実行タイミングを変更する
@objc func applicationWillResignActive(_ notification: NSNotification?) {
playerView.player = nil
}
@objc func applicationDidBecomeActive(_ notification: NSNotification?) {
playerView.player = player
}
経緯
- ユーザー「iOS14にアップデートしたらバックグラウンド再生がおかしい。なんとかしろ

」 - ワタクシ「
」
対応前
-
applicationDidEnterBackgroundでplayerView.player = nilしていた ※Appleさんの公開しているドキュメントの記載内容に従ったもの
調査
- 何もしてないのに動かなくなった ⇒ OSの仕様変わったな?
- バックグラウンドに行ったら一時停止 ⇒ layerにplayer設定したままの動作と同じだな?
検証
- 動画再生中、バックグラウンド移行前に、手動で
playerView.player = nilする - バックグラウンドへ移行する
⇒**「再生が継続された!」**
導き出される結論は…
「layer に player があるかどうかチェックしているタイミング変わったんじゃね?」
再検証
-
applicationDidEnterBackgroundより前に実行されるapplicationWillResignActiveでplayerView.player = nilするよう変更 -
applicationWillResignActiveに対となるのがapplicationDidBecomeActiveとなるため、そこでplayerView.player = playerするよう変更
⇒**「再生が継続された!」**
※iOS11-14、iPadOS13,14で動作することも確認しました
まとめ
- Appleさんのドキュメントのままに書いても動作しないため、OS不具合の可能性が高いです
- iOS 14.2 beta2 で、この不具合が修正されているとの噂です
その他
- iOS14がリリースされてしばらく経ちましたが、この対応方法を見かけなかったため記事を投稿します