Как выйти из приложения и вернуться на главный экран в iOS 8 с помощью программирования Swift

Я пытаюсь программно вернуться на главный экран приложения iOS8 с помощью Swift. Я хочу продолжить приложение, работающее в фоновом режиме. Есть идеи, как это сделать?

Заранее спасибо за помощь.

Ответ 1

Когда приложение запускается, система вызывает функцию UIApplicationMain; среди других задач эта функция создает одноэлементный объект UIApplication. После этого вы получаете доступ к объекту, вызывая метод класса sharedApplication.

Чтобы изящно выйти (библиотека разработчиков iOS явно предупреждает вас не использовать exit (0), поскольку это регистрируется как сбой), вы можете использовать:

UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)

Например, мое приложение выходит, когда пользователь встряхивает устройство. Итак, в ViewController.swift:

override func motionEnded(motion: UIEventSubtype,
    withEvent event: UIEvent?) {

        if motion == .MotionShake{

            //Comment: to terminate app, do not use exit(0) bc that is logged as a crash.

            UIControl().sendAction(Selector("suspend"), to: UIApplication.sharedApplication(), forEvent: nil)
        }}

Ответ 2

Swift 4:

UIControl().sendAction(#selector(NSXPCConnection.suspend),
                       to: UIApplication.shared, for: nil)

Ответ 3

Для этого вы должны использовать следующий код

import Darwin
exit(0)

Ответ 4

Чтобы заставить приложение зайти в фоновый режим, вы можете законно запустить на передний план другое приложение, такое как Safari, через URL-адрес.

См.: Как открыть URL-адрес в Swift3

UIApplication.shared.open() (и более старый openURL) - это документально открытый API.

Если вы установили ключ plits для выключения на приостановление, открытие другого приложения через URL-адрес также убьет ваше приложение. Использование этого ключа - это документированное правовое использование ключей приложения, доступных для любого приложения для "законного" использования.

Кроме того, если ваше приложение по какой-то невежливой причине продолжает выделять и загрязнять большие объемы памяти в фоновом режиме, не реагируя на предупреждения о памяти, ОС, скорее всего, убьет его.

Ответ 5

Невозможно "программно вернуться на главный экран", кроме сбоев, выхода из вашей программы или вызова неофициального API. Apple не приветствует. Плюс к этому также относятся Руководство по человеческому интерфейсу.