Я пытаюсь программно вернуться на главный экран приложения iOS8 с помощью Swift. Я хочу продолжить приложение, работающее в фоновом режиме. Есть идеи, как это сделать?
Заранее спасибо за помощь.
Я пытаюсь программно вернуться на главный экран приложения iOS8 с помощью Swift. Я хочу продолжить приложение, работающее в фоновом режиме. Есть идеи, как это сделать?
Заранее спасибо за помощь.
Когда приложение запускается, система вызывает функцию 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)
}}
Swift 4:
UIControl().sendAction(#selector(NSXPCConnection.suspend),
to: UIApplication.shared, for: nil)
Для этого вы должны использовать следующий код
import Darwin exit(0)
Чтобы заставить приложение зайти в фоновый режим, вы можете законно запустить на передний план другое приложение, такое как Safari, через URL-адрес.
См.: Как открыть URL-адрес в Swift3
UIApplication.shared.open() (и более старый openURL) - это документально открытый API.
Если вы установили ключ plits для выключения на приостановление, открытие другого приложения через URL-адрес также убьет ваше приложение. Использование этого ключа - это документированное правовое использование ключей приложения, доступных для любого приложения для "законного" использования.
Кроме того, если ваше приложение по какой-то невежливой причине продолжает выделять и загрязнять большие объемы памяти в фоновом режиме, не реагируя на предупреждения о памяти, ОС, скорее всего, убьет его.
Невозможно "программно вернуться на главный экран", кроме сбоев, выхода из вашей программы или вызова неофициального API. Apple не приветствует. Плюс к этому также относятся Руководство по человеческому интерфейсу.