如何在iOS 8中使用Swift编程退出应用程序并返回主屏幕

gojuced7  于 2023-06-21  发布在  Swift
关注(0)|答案(6)|浏览(410)

我尝试使用Swift在iOS8应用程序中以编程方式返回主屏幕。我想继续在后台运行的应用程序虽然。有什么办法吗?
先谢谢你的帮助。

tf7tbtn2

tf7tbtn21#

当一个app启动时,系统调用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)
        }}
lsmepo6l

lsmepo6l2#

Swift 4:

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

编辑:值得一提的是,在iOS 12中有一个错误,如果应用程序在发送暂停操作后从后台返回,则会阻止网络连接。

r8uurelv

r8uurelv3#

为此,您应该使用以下代码

import Darwin
exit(0)
rkkpypqq

rkkpypqq4#

要强制您的应用进入后台,您可以合法地通过URL将另一个应用(如Safari)启动到前台。
参见:how to open an URL in Swift3
UIApplication.shared.open() (and the older openURL) are a documented public APIs.
如果您设置了exits-on-suspend plist密钥,通过URL打开另一个应用也会杀死您的应用。此密钥的使用是app plist密钥的记录合法使用,可供任何app“合法”使用。
此外,如果您的应用程序出于某种不礼貌的原因,继续在后台分配和污染大量内存,而不响应内存警告,操作系统很可能会杀死它。

3pmvbmvn

3pmvbmvn5#

如何设置info.plist?
您可以在info.plist中使用编辑器设置“Application doesn't run in background”true。
或者用代码编辑器添加这几行。

<key>UIApplicationExitsOnSuspend</key>
    <true/>
1u4esq0p

1u4esq0p6#

除了崩溃、退出你的程序或调用非官方的API,没有办法“以编程方式返回主屏幕”。苹果也不欢迎。此外,人机界面指南也涵盖了这一点。
更新:
也许苹果现在对此有不同的立场,但否决并没有使iOS8不那么真实。在这里,有人甚至引用了苹果的话:https://stackoverflow.com/a/5362887/33165
另见现已过时的Technical Q&A from Apple

相关问题