Как программно завершить приложение в iOS 12

У меня проблема. Я поставил свой iPhone 6 на iOS 12 beta 1, и поэтому метод закрытия моего приложения при нажатии всплывающей кнопки не работает на iOS 12, но работает на iOS 11.4.1.

Это метод, который я использовал:

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

В iOS 11 приложение закрывается правильно, в iOS 12 приложение не закрывается, просто ничего не делает при нажатии на всплывающую кнопку.

Я знаю, что это Swift 4.2, и когда я катался на новостях и модификациях, я не видел что-то вроде ссылки с новым методом, чтобы правильно закрыть приложение.

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


person Louis Legout    schedule 11.06.2018    source источник
comment
Вы можете позвонить exit, если я правильно помню   -  person Paulw11    schedule 11.06.2018
comment
exit() должно работать, но это совсем не рекомендуется. Просто оставьте человека на экране приветствия/входа, если он не принимает условия.   -  person diegotrevisan    schedule 11.06.2018
comment
выход устарел, потому что выход выглядит как сбой   -  person Louis Legout    schedule 11.06.2018
comment
Технически завершение работы приложения само по себе является сбоем независимо от того, как вы это сделаете, и это, вероятно, приведет к тому, что ваше приложение будет отклонено Apple.   -  person vacawama    schedule 11.06.2018
comment
даже выход() используется в Obj-C, а не в Swift... Я потерялся, мне нужно, потому что, если приложение не закрывается, когда кто-то пытается обойти условия... Это сложно, я получаю данные лица, которые принимают и не согласны с условиями, если кто-то работает в обход, я не смогу проверить это из этого выхода.   -  person Louis Legout    schedule 11.06.2018
comment
@LouisLegout Ну, вам придется очистить эти данные, если пользователь отклонит условия.   -  person diegotrevisan    schedule 11.06.2018
comment
Вам не разрешено вызывать exit(). Это запрещено в документе Apple HIG. Что делать, если ваш пользователь не принимает вариант? Не волнуйтесь, вам также не разрешено отображать экран лицензии при запуске. Такая ситуация никогда не произойдет в принятом приложении.   -  person Shayne    schedule 06.06.2019


Ответы (3)


Вы можете вызвать метод exit

exit(-1)

или вы можете использовать NSXPCConnection.suspend

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

Кроме того, Apple не рекомендует принудительно завершать работу вашего приложения. Неважно, как вы это сделаете.

Проверьте этот пост.

person U. Benlice    schedule 11.06.2018
comment
не работает UIControl :'( на iOS12 было применено много изменений - person Louis Legout; 11.06.2018
comment
выход не работает, и даже он будет работать, я никогда не буду его использовать, и UIControl не работает :( - person Louis Legout; 11.06.2018
comment
@LouisLegout, можете ли вы добавить свойство «UIApplicationExitsOnSuspend» в «true» в свой plist и попробовать еще раз? Если он по-прежнему не работает, то это проблема iOS 12, и мы узнаем об этом со временем. - person U. Benlice; 11.06.2018
comment
Вместо выхода из приложения попробуйте смоделировать сценарий перезапуска: stackoverflow.com/a/52278301/3359372 - person Mohsin Khubaib Ahmed; 26.08.2020

Попробуйте этот код:

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
    UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
     DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
      exit(0)
     }
}

Это будет ждать 1 секунду, а закрытие приложения займет 0,5 секунды. Вы можете затемнить дисплей перед этим фрагментом кода.

person ishwardgret    schedule 26.09.2018
comment
Кто-то загрузил приложение в AppStore с этим кодом? Apple отклонит мое приложение за это? - person aviza; 07.01.2020
comment
Вместо выхода из приложения попробуйте смоделировать сценарий перезапуска: stackoverflow.com/a/52278301/3359372 - person Mohsin Khubaib Ahmed; 26.08.2020

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

// Create an array and "index out of range"
[0][1]
person JsW    schedule 12.07.2021