У меня есть приложение, созданное в Xcode до iOS 13. Приложение не поддерживает несколько окон. Несмотря на то, что ранее мы испытывали странности с AppDelegate, со времени выхода iOS 13 кажется, что странностей стало больше, и я надеялся увидеть, испытывали ли другие что-то подобное.
В частности, если я войду в многозадачный режим (дважды нажмите на кнопку «Домой» на старых iPhone или проведу пальцем вверх от нижней части экрана и приостановим показ всех окон фонового приложения), а затем снова войду в мое приложение, кажется, что AppDelegate сработаетсоответствующим образом при отладке, но если оставить его собственным устройствам, музыка в моем приложении - которая обычно возвращается в applicationDidBecomeActive - не восстанавливается.
ОБНОВЛЕНО: это, в частности, похоже, связано с музыкой / звуком--iOS, кажется, берет любые плееры и устанавливает их в ноль, не позволяя мне остановить их. iOS также, кажется, игнорирует инструкции в AppDelegate для загрузки и воспроизведения музыки. Что за история здесь?
Я понимаю из этого поста: Методы делегирования приложения не вызываются в iOS 13 , поэтому важно либо не поддерживать несколько окон, либо управлять инструкциями, которые обычно называютсяв делегате приложения в новом делегате сцены;однако, это более важно, чем кажется, что я называю 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
...
}