當我們使用iPhone時,所下載的APP時常會因為修改BUG、增加功能而需要更新,每次更新過后都會發(fā)現(xiàn),當?shù)谝淮未蜷_APP時會有一個版本新特性來簡單展示本次更新的內(nèi)容。根據(jù)此需求來討論下如何在iOS開發(fā)中實現(xiàn)這一功能。
問題相關
首先,考慮到是版本更新的問題,因此可以想到可以通過比較兩次的版本號,通過判斷得出APP是不是第一次打開,是否需要展示當前版本的新特性界面。
其次,版本號資源在Info.plist文件中,可以以SourceCode的方式打開,其中有一個是CFBundleVersion的字段,CFBundleVersion就是用來表示版本號。
代碼思路
- 在第一次打開APP時,將版本號存入用戶偏好設置中。
- 當再一次打開APP時,取出上次存入的版本號,與當前的版本號進行比較,如果是一樣,則說明版本與上一次是一致的,不需要新特性引導,如果不一樣,說明版本不同,需要打開新特性界面進行引導。
具體代碼
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = NO;
self.window = [[UIWindow alloc] init];
self.window.frame = [UIScreen mainScreen].bounds;
NSString *versionKey = @"CFBundleVersion";
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *lastVersion = [defaults objectForKey:versionKey];//從用戶偏好設置中獲取上一次版本號
NSString *currentVersion = [NSBundle mainBundle].infoDictionary[versionKey];//獲取當前版本號
if ([currentVersion isEqualToString:lastVersion]) {
self.window.rootViewController = [[GUTabBarController alloc] init];
}else{
self.window.rootViewController = [[GUNewFeatureController alloc] init];
[defaults setObject:currentVersion forKey:versionKey];//將當前版本號存儲到偏好設置中
[defaults synchronize];//立刻同步
}
[self.window makeKeyAndVisible];
return YES;
}