如何在iOS 12中以编程方式终止应用程序

16

我有一个问题。我将我的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版本,在我阅读了相关新闻和修改内容后,并没有看到类似于关闭应用程序的新方法链接。
我需要这个功能,因为我希望在用户不接受条款和条件时可以关闭应用程序。

1
如果我没记错的话,你可以调用 exit - Paulw11
6
exit()可以起作用,但是不推荐使用。如果用户不接受条款,请将其留在欢迎/登录界面。 - diegotrevisan
退出被弃用,因为退出似乎是一个崩溃的表现。 - Louis Legout
即使在Obj-C中使用exit(),在Swift中也不会使用...我迷失了,因为如果应用程序在有人试图绕过条款和条件时不退出...这很复杂,我获取同意和不同意条款和条件的人的数据,如果有人试图绕过,我将无法检查退出之外的内容。 - Louis Legout
1
@LouisLegout 如果用户拒绝条款,您将不得不清洗那些数据。 - diegotrevisan
显示剩余2条评论
3个回答

22

你可以调用exit方法

exit(-1)

或者你可以使用NSXPCConnection.suspend

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

此外,苹果不建议强制终止你的应用程序。你如何做并不重要。

请查看这篇帖子。


不起作用的UIControl :'( 在iOS12上进行了许多更改。 - Louis Legout
退出不起作用,即使它能够工作,我也永远不会使用它,UIControl也不起作用 :( - Louis Legout
@LouisLegout 你能在你的 plist 中添加 'UIApplicationExitsOnSuspend' 属性并再次尝试吗?如果仍然无法工作,那么这可能是 iOS 12 的问题,我们会随着时间的推移而了解这个问题。 - U. Benlice
尝试模拟重启场景,而不是退出应用程序:https://dev59.com/yFQK5IYBdhLWcg3wMNIV#52278301 - Mohsin Khubaib Ahmed

21

试试这段代码:

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秒才能关闭。在此代码片段之前,您可以调暗显示屏。


3
有人使用这段代码上传了一个应用到App Store吗?苹果会因为我这样做而拒绝我的应用吗? - aviza
尝试模拟重新启动的情况,而不是退出应用程序:https://dev59.com/yFQK5IYBdhLWcg3wMNIV#52278301 - Mohsin Khubaib Ahmed

4

如果你不介意触发崩溃错误,那么这可能是终止你的应用程序最简单的方法。

// Create an array and "index out of range"
[0][1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接