Проблема с iOS 13: AppDelegate не запускает возврат фоновой музыки, несмотря на то, что не поддерживает несколько окон

У меня есть приложение, созданное в Xcode до iOS 13. Приложение не поддерживает несколько окон. Хотя мы и раньше сталкивались со странностями с AppDelegate, кажется, что с момента выпуска iOS 13 странностей стало больше, и я надеялся увидеть, испытывали ли другие нечто подобное.

В частности, если я вхожу в многозадачный режим (дважды нажмите кнопку «Домой» на старых iPhone или проведите пальцем вверх от нижней части экрана и приостановите отображение всех окон фоновых приложений), а затем повторно вхожу в свое приложение, AppDelegate, похоже, срабатывает соответствующим образом при отладке, но если оставленная на свое усмотрение музыка в моем приложении, которая обычно возвращается в applicationDidBecomeActive, не восстанавливается.

ОБНОВЛЕНО: похоже, это конкретно связано с музыкой / звуком - iOS, похоже, берет любых плееров и устанавливает их на ноль, не позволяя мне их останавливать. iOS также игнорирует инструкции в AppDelegate по загрузке и воспроизведению музыки. Что здесь за история?

Как я понял из этого сообщения: методы делегата приложения не вызываются в iOS 13 важно либо не поддерживать несколько окон, либо управлять инструкциями, которые традиционно вызываются в App Delegate в новом Scene Delegate; однако, является ли то, что я называю делегатом сцены, более важным, чем кажется? Есть ли другое объяснение такого поведения в iOS 13 или другой обходной путь, который я могу использовать?

Сводный код в AppDelegate:

func applicationDidBecomeActive(_ application: UIApplication)
{
...
// Check to see if there is secondary audio playing; if true, stop our audio and eliminate all queued up music
        if AVAudioSession.sharedInstance().secondaryAudioShouldBeSilencedHint
        {
            AssetsSounds.sharedInstance.bgmGamePlayer?.stop()
            AssetsSounds.sharedInstance.bgmGamePlayer = nil
            needToPlayGameMusic = false
            AssetsSounds.sharedInstance.bgmTitlePlayer?.stop()
            AssetsSounds.sharedInstance.bgmTitlePlayer = nil
            needToPlayTitleMusic = false
            ...
        }
        // if no secondary music, check to see if we need to restart any of the bgm players
        else if needToPlayGameMusic || needToPlayTitleMusic || needToPlayBonusLoop || needToPlayBonusLeadIn || needToPlayFiveMovesLeft
        {
            // play background music if it needs to be played
            if needToPlayTitleMusic
            {
                AssetsSounds.sharedInstance.bgmTitlePlayer?.play()
                needToPlayTitleMusic = false
            }

            // play game music if it needs to be played
            else if needToPlayGameMusic
            {
                AssetsSounds.sharedInstance.bgmGamePlayer?.play()
                needToPlayGameMusic = false
            }
            ...


    } // end else if
...
}

person Mike Pandolfini    schedule 20.10.2019    source источник
comment
вы проверили точки останова внутри applicationDidBecomeActive   -  person Pranavan SP    schedule 14.11.2019
comment
здесь нет всего кода, но активируете ли вы AVAudioSession где-нибудь при возврате из фона?   -  person Asperi    schedule 16.11.2019
comment
Да, если я установлю точку останова, все работает нормально. И нет, я не активирую сеанс повторно, но звук FX возвращается, и музыка воспроизводится, как только он запускается в приложении, так что, похоже, это не проблема.   -  person Mike Pandolfini    schedule 17.11.2019