Подтвердить что ты не робот

Выход из приложения iOS 4.0

Перед тем, как iOS4.0 нажав кнопку "домой" на iPhone, выйдет из приложения, а Apple в своем руководстве, что программный выход из приложения не был принят.

теперь все изменилось в iOS4.0, нажав кнопку "Домой", вы поместили приложение в приостановленный режим (многозадачность).. и я думаю, что должен быть ясный способ для пользователя выйти из приложения, например кнопка выхода.

теперь ОК с яблоком? и как это можно сделать?

4b9b3361

Ответ 1

По-прежнему не следует этого делать.

У вас есть обработчики для разных этапов, так вот как вы должны это делать. Там нет смысла выходить вручную. Если вы перезапустите приложение, в идеале оно начнется с того места, где вы остановились, так что это либо возобновление, либо запуск и загрузка старого состояния.

Нет причин для выхода.

Edit

Так как это продолжает появляться снова: Руководства по интерфейсу iOS для iOS говорит: "Не выходите из программы". И мы видели много сообщений о приложениях, в которых в прошлом были вызовы exit().

Выход из строя, а не приостановка путем установки соответствующего ключа в файле Info.plist, конечно, прекрасен - но это не выделенный пользовательский интерфейс, а просто реализация программы выхода программы с помощью кнопки home.

Ответ 2

Вы можете установить ключ Info.plist UIApplicationExitsOnSuspend, чтобы убедиться, что приложение полностью завершено.

Ответ 3

Есть причина для программно вызванного exit().

Предположим, что у вас есть приложение voip, которое всегда запускается при загрузке и перезапускается при его уничтожении системой, например. когда происходит предупреждение о сохранении памяти. Обычно это предпочтительное поведение, потому что вам нужно работать в фоновом режиме, чтобы поддерживать ваши VoIP-сокеты voip.

Однако, если приложение поддерживает несколько режимов работы - например, a) работает в фоновом режиме с использованием TCP и b) не запускается в фоновом режиме, а запускается только после принятия уведомления PUSH -, если пользователь использует приложение в режиме b) он не считает, что приложение потребляет память, которая может быть использована для других приложений.

Итак, было бы неплохо, если бы приложение могло проверить начало, если оно было запущено на фоне, и пользователь хотел, чтобы приложение выполнялось в режиме b) и изящно exit(0), чтобы оно больше не перезапускалось автоматически.

Ответ 4

Также см. iOS Debugging Magic (Техническая нота TN2239):

Помните, что жизненный цикл приложения iOS находится под управлением пользователя, что означает, что приложения iOS не должны просто уходить. Ваша версия сборки должна только вызывать прерывание в обстоятельствах, в которых она все равно потерпела бы крах, а вызов прерывания предотвращает повреждение пользовательских данных или позволяет более легко диагностировать проблему.

В то время как на тему определения причины преждевременного выхода Понимание и анализ отчетов об ошибках приложений iPhone OS (Техническая нота TN2151) может быть интерес.

Извините за то, что вы немного отошли от темы, но это связано с ранними выходами и диагнозом.

Джефф

Ответ 5

У меня была настоящая проблема с этим. Существует большая точка при выходе из программы вручную или по электронной почте.

С предыдущей ОС iPhone мое приложение записывало свое состояние (первое использование или второе время вперед и т.д.) в plist, когда оно завершалось. Когда пользователь вернулся, он хотел показать разные вещи, читая plist. Кроме того, он хотел показать первый экран каждый раз, когда пользователь вернулся после выхода.

С приостановкой приложения в фоновом режиме с iPhone OS4 приложение возвращается туда, где оно остановилось (т.е. показывало тот же экран везде, где был пользователь) и никогда не меняет его состояние, потому что applicationWillTerminate теперь не вызывается.

Послушайте, это поведение, которое требуется в большинстве случаев (чтобы продолжить, когда вы выходите из приложения временно), должен быть способ выбора, т.е. приостановить его или выйти.

Поскольку настройка UIApplicationExitsOnSuspend = YES дает только один способ (т.е. он всегда заканчивается при нажатии HOME), это не решение, которое я ищу.

Я хочу, чтобы приложение узнало, как только целая цепочка шагов завершена, против просто приостановлена ​​последовательность и уйдет в нужный момент.

Чтобы сделать это, я должен быть в состоянии завершить приложение и выписать состояние после того, как он завершил всю последовательность. В другое время я просто хочу, чтобы приложение было приостановлено.

Если вы дважды нажмете кнопку HOME, вы увидите приостановленные приложения. Я могу удалить (закрыть) свое приложение, коснувшись его дольше и коснуться символа (-), который появляется, но это не так интуитивно для пользователей и слишком много шагов.

Другим вариантом является включение кнопки Quit в качестве одной из вкладок Nav в моем приложении, но это уродливо. Пока, мой единственный вариант, кажется, выбирает установку UIApplicationExitsOnSuspend = YES.

Ответ 6

Вы всегда можете использовать exit(1). Это исходный/принудительный выход с целым числом для кода/причины. Вы можете использовать его во время разработки, например, в режиме моделирования, когда вы просто хотите завершить работу; как в СЕЙЧАС.

Ответ 7

Вот шаги для ответа @Joost Schuur:

  • Откройте файл info.plist

  • Добавить ключ UIApplicationExitsOnSuspend или Выбрать приложение не работает в фоновом режиме

  • Установите новый ключ YES или заполните поле галочки

Точки останова в applicationWillResignActive и applicationWillTerminate покажут, что они работают.

Ответ 8

Ты не должен это делать. Когда пользователь хочет выйти из вашего приложения, он нажмет кнопку HOME.

Когда пользователь нажимает кнопку "домой", вы получаете уведомление UIApplicationWillResignActiveNotification. Используйте это уведомление, чтобы снести все ваши ресурсы.

В основном ваше приложение должно "скрываться в углу" (потреблять как можно меньше памяти), когда пользователь нажимает кнопку "домой". Однако есть компромисс, поскольку чем больше вы сбрасываете, тем больше времени требуется, чтобы приложение отображалось снова, когда пользователь переключается обратно (необходимо перезагрузить все ваши ресурсы).

Ответ 9

Вы можете сделать это:

@IBAction func yourButtonAcation(_ sender: Any) {

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

}

Ответ 10

Просто используйте метод ниже, чтобы изящно выйти с анимацией

   @IBAction func MinimizeOrKillApp(){            
        UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)
        //Comment if you want to minimise app
        Timer.scheduledTimer(withTimeInterval: 0.2, repeats: false) { (timer) in
            exit(0)
        }
    }

Output

Скачать образец кода

Это не рекомендуется, и ваше приложение будет отклонено😃. Мы все разработчики и знаем, как это одобрить от команды рецензентов

Вопрос разработчика Apple

Ответ 11

Вы можете поместить приложение программно в фоновом режиме с помощью этой частной команды:

(но ваше приложение будет отклонено, если вы его используете)

[[UIApplication sharedApplication] suspend];