Swift - 判断应用是否是第一次启动(或当前版本是否第一次启动)
1 实现原理
- 不存在则说明是第一次运行,我们便把根视图控制器改成引导页,并保存这个特定的键值(Bool 类型即可)。
- 已存在则说明之前已运行过该应用,那么就显示默认视图。
- 不同则说明新版本第一次启动。
- 相同则说明新版本之前已经启动过。
2 样例代码
extension UserDefaults {
//应用第一次启动
static func isFirstLaunch() -> Bool {
let hasBeenLaunched = "hasBeenLaunched"
let isFirstLaunch = !UserDefaults.standard.bool(forKey: hasBeenLaunched)
if isFirstLaunch {
UserDefaults.standard.set(true, forKey: hasBeenLaunched)
UserDefaults.standard.synchronize()
}
return isFirstLaunch
}
//当前版本第一次启动
static func isFirstLaunchOfNewVersion() -> Bool {
//主程序版本号
let infoDictionary = Bundle.main.infoDictionary!
let majorVersion = infoDictionary["CFBundleShortVersionString"] as! String
//上次启动的版本号
let hasBeenLaunchedOfNewVersion = "hasBeenLaunchedOfNewVersion"
let lastLaunchVersion = UserDefaults.standard.string(forKey:
hasBeenLaunchedOfNewVersion)
//版本号比较
let isFirstLaunchOfNewVersion = majorVersion != lastLaunchVersion
if isFirstLaunchOfNewVersion {
UserDefaults.standard.set(majorVersion, forKey:
hasBeenLaunchedOfNewVersion)
UserDefaults.standard.synchronize()
}
return isFirstLaunchOfNewVersion
}
}
(2)在 AppDelegate.swift 中调用上面的扩展方法进行判断,并执行相应逻辑。
import UIKit @UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? //程序启动
func application(_ application: UIApplication, didFinishLaunchingWithOptions
launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { //判断当前版本是否第一次启动
if UserDefaults.isFirstLaunchOfNewVersion() {
//显示新功能介绍页
print("当前版本第一次启动")
let introductionViewController = IntroductionViewController()
self.window!.rootViewController = introductionViewController
} //判断是否第一次启动(两个都是第一次则以这个为准)
if UserDefaults.isFirstLaunch() {
//显示新手指导页
print("应用第一次启动")
let guideViewController = GuideViewController()
self.window!.rootViewController = guideViewController
} return true
} func applicationWillResignActive(_ application: UIApplication) {
} func applicationDidEnterBackground(_ application: UIApplication) {
} func applicationWillEnterForeground(_ application: UIApplication) {
} func applicationDidBecomeActive(_ application: UIApplication) {
} func applicationWillTerminate(_ application: UIApplication) {
}
}
Swift - 判断应用是否是第一次启动(或当前版本是否第一次启动)的更多相关文章
- 解决:阿里云ECS上启动tomcat后,第一次访问时间特别长
Re在ECS上启动tomcat后,第一次访问时间特别长 2017-04-25 10:16:04 INFO com.world.socket.ServerSocketListener 25- ...
- 通过从代码层面分析Linux内核启动来探知操作系统的启动过程
通过从代码层面分析Linux内核启动来探知操作系统的启动过程 前言说明 本篇为网易云课堂Linux内核分析课程的第三周作业,我将围绕Linux 3.18的内核中的start_kernel到init进程 ...
- init进程 && 解析Android启动脚本init.rc && 修改它使不启动android && init.rc中启动一个sh文件
Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径:system/core/init,编译 ...
- Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7)
http://blog.chinaunix.net/uid-20543672-id-3157283.html Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3 ...
- UEFI启动视频详解:启动分析+N项操作实例
============================================================= ※※※※最给力的视频解说※※※※ 2011hiboy全部共享资料:立刻去 ...
- Tomcat8源码笔记(七)组件启动Server Service Engine Host启动
一.Tomcat启动的入口 Tomcat初始化简单流程前面博客介绍了一遍,组件除了StandardHost都有博客,欢迎大家指文中错误.Tomcat启动类是Bootstrap,而启动容器启动入口位于 ...
- tomcat 1)启动时不识别执行启动命令 2)启动报错 3)关闭不了,用myEclipse启动时显示jvm_bind,端口占用
- 使用servers 启动项目时 ,一直处于启动中, 最后出现无法的问题。
使用eclipse 中的servers 配置了一个server 来启动项目, 发现无法启动 排除法: 去掉项目配置,单独启动该server ,发现可以启动, 说明是项目出现问题 但是项目并没有报错, ...
- Chorme中启动阿里旺旺误点取消启动并记住选择,如何更改。
今天在Chorme中启动阿里旺旺误点取消启动并记住选择,然后如何也点不开了.从网上找到了一种解决方法: 找到路径 C:\Users\\AppData\Local\Google\Chrome\Use ...
随机推荐
- Activity 经历如下3个阶段
Activity 经历如下3个阶段 开始Activity: 在这个阶段依次执行3个生命周期的方法,分别是onCreate onStart onResume 三个方法. Activity重新获取焦点:o ...
- Nginx服务器之负载均衡策略
http://www.cnblogs.com/1214804270hacker/p/9325150.html
- [Bayesian] “我是bayesian我怕谁”系列 - Exact Inference
要整理这部分内容,一开始我是拒绝的.欣赏贝叶斯的人本就不多,这部分过后恐怕就要成为“从入门到放弃”系列. 但,这部分是基础,不管是Professor Daphne Koller,还是统计学习经典,都有 ...
- java序列化/反序列化之xstream、protobuf、protostuff 的比较与使用例子
目录 背景 测试 环境 工具 说明 结果 结论 xstream简单教程 准备 代码 protobuf简单教程 快速入门 下载.exe编译器 编写.proto文件 利用编译器编译.proto文件生成ja ...
- c#事件Unity与.Net对比
今天在看Unity3d的书,发现上面的调用事件比较特殊,比如说按钮事件 该方法写在OnGUI方法中if(GUILayout.Button("按钮1")) { //执行事件的处理 } ...
- PyCharm使用Github管理代码
本篇文章主要写一下如何通过pycharm客户端来上传下载代码. 安装Git 在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可. 安 ...
- VMware按装ISO
破解码 vmware12 5A02H-AU243-TZJ49-GTC7K-3C61N vmware14CG54H-D8D0H-H8DHY-C6X7X-N2KG6 创建虚拟机 也可以选第三个直接选择Ce ...
- 【Java并发编程二】同步容器和并发容器
一.同步容器 在Java中,同步容器包括两个部分,一个是vector和HashTable,查看vector.HashTable的实现代码,可以看到这些容器实现线程安全的方式就是将它们的状态封装起来,并 ...
- windos或linux中 which命令 查看当前要执行的命令所在的路径
whereis 用来查看一个命令或者文件所在的绝对路径,而 which 用来查看当前要执行的命令所在的路径. 下面举个例子来说明.加入你的linux系统上装了多个版本的java.如果你直接在命令行敲命 ...
- Cufon在渲染网页字体你不知道的事
清单 1. 无效的 font-family 字体指定 <style> .introduction { font-family:'Baroque Script';} </style&g ...