iOS开发 如何重启自己的app ios代码重启app_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


iOS开发 如何重启自己的app ios代码重启app_如何在不同开发语言中使用绑定变量_02


  • 工程取名为 RelaunchDemo,勾选 Use Storyboards


iOS开发 如何重启自己的app ios代码重启app_如何在不同开发语言中使用绑定变量_03


2. 添加重启接口

重启的原理很简单,就是在 app 退出前使用方法 NSWorkspace.shared.launchApplication 异步新启动一个 App 实例。

2.1 公共变量标记是否重启

为了保证重启操作和退出的区分,需要使用一个公共变量来标记 app 是否需要重启,如果需要重启再进行退出前的特殊操作。将这一变量定义在 AppDelegate.swift 中,这里注意的是要定义在 AppDelegate 类外,放在文件代码 import Cocoa 后即可:


var toRelaunch = false


只是标记,所以定义为 Bool 类型,初始化默认值为 false

2.2 App 退出前的特殊处理

app 退出前的处理可以在文件 AppDelegate.swiftAppDelegate 类的 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 的中央,这样就完成了按钮的添加:


iOS开发 如何重启自己的app ios代码重启app_重启_04


3.2 绑定 Action

下一步绑定 Action 实现点击行为。

  • 点击 View Controller ,然后按下组合键 Option + Command + 回车 就会调出辅助编辑器
  • 按住 Ctrl 键的同时,鼠标左键点中按钮不放,拖动至打开的辅助编辑器中的 View Controller 类中,出现 Insert Action or Outlet 提示的时候松手,出现弹窗
  • 在弹窗中选择 Action ,name 取为 toRelaunchApp,点击 connect 就会在 View Controller 类中添加方法 toRelaunchApp
  • 在方法中调用 relaunchApp 接口即可完成按钮对应的 Action

具体操作参考下面视频:


iOS开发 如何重启自己的app ios代码重启app_App_05

绑定按钮的Actionhttps://www.zhihu.com/video/1080435118656684032

3.3 查看效果

点击 Xcode 左上角的运行按钮或按下组合键 Command + r 就会启动 App,在出现的窗口中就会看到我们添加的按钮,点击它就会发现 App 进行了重启,大功告成!

下载此 Demo:

RelaunchDemopichome-1254392422.cos.ap-chengdu.myqcloud.com

参考

Cocoa 怎样重新启动app (application relaunching)blog.csdn.net NSWorkspace | Apple Developer Documentationdeveloper.apple.com


iOS开发 如何重启自己的app ios代码重启app_iOS开发 如何重启自己的app_06