macOS 开发中实现 APP 的自重启 在日常使用某些 app 时,更改语言设置后 app 会提示「软体语言设置在重启后会生效」,有的软体也会提示是否立即重启,这说明我们能实现 app 的自重启,对吧!那么本文将介绍如何通过代码实现 app 的自重启。 实现平台 macOS 10.14.3 swift 4.2.1 xcode 10.1 1. 新建 Cocoa App 工程 这里以一个新的空工程为例,所以首先要新建一个 Cocoa App 工程。简单说一下这个过程: 打开 Xcode,按下快捷键 Shift + Command + N 就会触发新建工程的导航窗口 选择 macOS -> Cocoa App,点击 Next 工程取名为 RelaunchDemo,勾选 Use Storyboards 2. 添加重启介面 重启的原理很简单,就是在 app 退出前使用方法 NSWorkspace.shared.launchApplication 非同步新启动一个 App 实例。 2.1 公共变数标记是否重启 为了保证重启操作和退出的区分,需要使用一个公共变数来标记 app 是否需要重启,如果需要重启再进行退出前的特殊操作。将这一变数定义在 AppDelegate.swift 中,这里注意的是要定义在 AppDelegate 类外,放在文件代码 import Cocoa 后即可:var toRelaunch = false 只是标记,所以定义为 Bool 类型,初始化默认值为 false。 2.2 App 退出前的特殊处理 app 退出前的处理可以在文件 AppDelegate.swift 的 AppDelegate 类的 applicationWillTerminate 方法中实现,实现如下:if (toRelaunch) { NSWorkspace.shared.launchApplication(withBundleIdentifier: "top.smslit.RelaunchDemo", options: [NSWorkspace.LaunchOptions.async, NSWorkspace.LaunchOptions.newInstance], additionalEventParamDescriptor: nil, launchIdentifier: nil) } 这里要注意的是 withBundleIdentifier 要更改为您的 App 相应的 Bundle Identifier ,这个可以在工程配置信息的 General 中查看。程序启动选项使用的是: NSWorkspace.LaunchOptions.async:启动 app 并非同步返回结果 NSWorkspace.LaunchOptions.newInstance:生成新的实例对象 2.3 添加 APP 重启介面 重启的实现就是将 toRelaunch 设置为 true 后退出 App:// 重启 App func relaunchApp() { toRelaunch = true NSApplication.shared.terminate(true) } 其实,只要是在程序退出前将 toRelaunch 置为 true ,App正常退出的话就会重启 APP。 3. 使用按钮验证效果 为了看一下重启实现的效果,可以添加一个按钮,点击调用刚刚实现的重启方法 relaunchApp 就可以看到成果! 3.1 添加按钮 打开 Main.storyboard,按下 Shift + Command + l 组合键就会打开控制项库选择器,搜索框搜索 button,找到 Push Button,点击拖入 View Controller 的中央,这样就完成了按钮的添加: 3.2 绑定 Action 下一步绑定 Action 实现点击行为。 点击 View Controller ,然后按下组合键 Option + Command + 回车 就会调出辅助编辑器 按住 Ctrl 键的同时,滑鼠左键点中按钮不放,拖动至打开的辅助编辑器中的 View Controller 类中,出现 Insert Action or Outlet 提示的时候松手,出现弹窗 在弹窗中选择 Action ,name 取为 toRelaunchApp,点击 connect 就会在 View Controller 类中添加方法 toRelaunchApp 在方法中调用 relaunchApp 介面即可完成按钮对应的 Action 具体操作参考下面视频:00:23绑定按钮的Action 3.3 查看效果 点击 Xcode 左上角的运行按钮或按下组合键 Command + r 就会启动 App,在出现的窗口中就会看到我们添加的按钮,点击它就会发现 App 进行了重启,大功告成! 下载此 Demo: RelaunchDemo?pichome-1254392422.cos.ap-chengdu.myqcloud.com 参考 Cocoa 怎样重新启动app (application relaunching)?blog.csdn.netNSWorkspace | Apple Developer Documentation?developer.apple.com 博客原文:macOS 开发中实现 APP 的自重启?www.smslit.top 推荐阅读: 相关文章 {{#data}} {{title}} {{/data}}