UIApplication 是什么?
UIApplication 是 UIKit 框架中代表整个 iOS 应用程序实例的一个类(单例模式)。它在程序启动时就被系统创建,生命周期贯穿整个 App 运行过程。
它的职责类似于操作系统与 App 之间的中介,主要用于:
监听应用状态(前台、后台、活跃等)。
管理 UI 生命周期。
调用系统功能(如打电话、发邮件、换图标、打开 URL)。
派发事件(触摸、摇晃等)。
管理窗口、状态栏、后台任务等。
访问UIApplication
UIApplication 是一个单例,系统会自动创建。访问方式如下:
let app = UIApplication.shared
这是使用它的唯一方式 —— 不能手动初始化它。
常用属性和方法
1、应用状态管理
UIApplication.shared.applicationState // .active / .inactive / .background
UIApplication.shared.isIdleTimerDisabled = true // 防止设备锁屏
UIApplication.shared.isStatusBarHidden = true // 控制状态栏隐藏(iOS 13 前)
2、生命周期代理
UIApplication.shared.delegate?.applicationDidEnterBackground(...)
UIApplication.shared.delegate?.applicationWillTerminate(...)
这些方法常见于 AppDelegate,但实际是从 UIApplication 调用的。
3、系统功能调用
UIApplication.shared.open(URL(string: "https://apple.com")!) // 打开链接
UIApplication.shared.setAlternateIconName("NewIcon") // 更换 App 图标
UIApplication.shared.registerForRemoteNotifications() // 注册远程推送
4、UI 控制入口
UIApplication.shared.windows // 获取所有窗口(包含多个 Scene)
UIApplication.shared.keyWindow // 当前激活窗口(iOS 13 后不建议)
UIApplication.shared.sendAction(...) // 派发 responder chain 事件
iOS Scene后的变化
iOS 13 引入了多 Scene,UIApplication 不再直接持有唯一的窗口,而是每个 Scene 有自己的窗口。
UIApplication.shared.connectedScenes
UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate
与 SwiftUI 的结合:
在 SwiftUI 中用 @main 标记的 App 会自动管理 UIApplication 与 Scene:
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
依然可以通过 UIApplication.shared 做系统操作,比如退出键盘、换图标等。
使用示例
1、关闭键盘
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
2、更换App图标
UIApplication.shared.setAlternateIconName("NewIcon") { error in
if let error = error {
print("图标更换失败:\(error)")
}
}
3、打开网页
if let url = URL(string: "https://apple.com") {
UIApplication.shared.open(url)
}
注意事项
1、UIApplication 是单例,不能自己创建或替换。
2、iOS 13+ 使用 Scene 后,需要注意不再用 keyWindow,而是 Scene 的 window。
3、某些属性如 statusBarHidden 在 iOS 13 后被废弃,使用 UIViewController 控制更安全。
总结
UIApplication 是 iOS 系统与 App 的桥梁,掌控着整个 App 的运行状态、生命周期、事件派发和系统交互,是 UIKit 和 SwiftUI 中系统功能的核心对象。
相关文章
1、SwiftUI更换应用图标:https://fangjunyu.com/2025/01/28/swiftui%e6%9b%b4%e6%8d%a2%e5%ba%94%e7%94%a8%e5%9b%be%e6%a0%87/
2、SwiftUI和iOS核心类UIViewController:https://fangjunyu.com/2025/05/19/swiftui%e5%92%8cios%e6%a0%b8%e5%bf%83%e7%b1%bbuiviewcontroller/