Фоновая выборка iOS при запуске приложения вызывает черный экран

Я успешно использую фоновую загрузку в разрабатываемом мной приложении для iOS, но заметил странную ошибку, которую не могу устранить.

Первоначальный симптом заключался в том, что иногда, когда я запускал приложение, отображалось изображение запуска, а затем заменялось черным экраном. Если я нажму кнопку «Домой», а затем снова открою приложение, все будет хорошо, и приложение будет работать, как задумано. Я также заметил, что это происходит только в том случае, если я какое-то время не использовал приложение. Добавив кучу журналов, я понял, что черный экран при запуске возникает только в том случае, если ОС запускает фоновую выборку при запуске. Кажется, что если выборка не выполнялась какое-то время, а затем вы запускаете приложение, iOS запускает «фоновую» выборку в вашем запущенном в данный момент приложении. Ошибка возникает только в этой ситуации.

Я немного погуглил, и мне показалось, что одна из причин такого поведения может заключаться в том, что вы запускаете анимацию не в тот момент жизненного цикла приложения. Я провел аудит своего приложения и не нашел многого. Я также нашел это сообщение о переполнении стека, в котором описывается аналогичная проблема, за исключением того, что мое приложение не падает, и я ничего не делаю с фоновыми потоками в моей реализации application:performFetchWithCompletionHandler:.

Я подумал, что следующим шагом будет создание минимального тестового примера, который все еще вызывает проблему. Итак, используя Xcode 6.1, я создал пустое приложение с одним представлением (Swift). Затем я проделал небольшую работу, чтобы добавить фоновую загрузку:

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

    import UIKit
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
        func application(application: UIApplication,
            didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
                application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum);
                return true
        }
    
        func application(application: UIApplication!,
            performFetchWithCompletionHandler completionHandler: ((UIBackgroundFetchResult) -> Void)!) {
                completionHandler(UIBackgroundFetchResult.NewData);
        }
    }
    

Я не вносил никаких других изменений, а затем запустил приложение на устройстве. Чтобы ситуация возникла, я запустил несколько команд Simulate Background Fetch из Xcode, остановил приложение внутри Xcode, а затем подождал некоторое время (около 10 минут). Затем я перезапустил приложение из Xcode и испытал то же самое поведение, что и в моем реальном приложении.

На данный момент у меня возникают проблемы с тем, чтобы не сделать вывод, что это какая-то ошибка в SDK. Кто-нибудь еще видел эту ситуацию? Есть ли обходной путь для этого?


person johntvolk    schedule 26.11.2014    source источник
comment
вы узнали что-нибудь по этому вопросу? Я вижу что-то очень похожее   -  person vinnybad    schedule 04.05.2015
comment
Я не смог найти решения проблемы. В нашем случае фоновая загрузка была не нужна, поэтому мы решили просто удалить ее из приложения. :-(   -  person johntvolk    schedule 07.05.2015
comment
У меня такая же проблема. Проклятие   -  person Utku Dalmaz    schedule 25.07.2018