网站动态logo怎么做,南宁建站有哪些公司,品牌广告设计制作公司网站源码,企业网站开发计划iOS开发-检查版本更新与强制更新控制。
在开发中经常遇到需要检查版本#xff0c;检查版本及请求appstoreLookUrl查看版本号与当前的版本号进行比对#xff0c;看是否需要更新。强制更新控制#xff0c;是将获取到当前版本号传给服务端#xff0c;服务端判断当前的版本是否…iOS开发-检查版本更新与强制更新控制。
在开发中经常遇到需要检查版本检查版本及请求appstoreLookUrl查看版本号与当前的版本号进行比对看是否需要更新。强制更新控制是将获取到当前版本号传给服务端服务端判断当前的版本是否需要强制升级。
一、app升级检查
发送请求系统NSURLConnection sendAsynchronousRequest
代码如下
SDVersionManager.h
#import Foundation/Foundation.hinterface SDVersionManager : NSObjectNSCodingproperty (nonatomic,strong) NSString *lastVersionCode; //版本codeproperty (nonatomic,strong) NSString *lastVersion; //保存最新的版本lastVersionproperty (nonatomic,strong) NSString *versionNotes; //版本更新的记录releaseNotes (instancetype)sharedInstance;/**检测版本更新如果有新版本提醒用户更新提醒一次param needUpdate 需要更新的回调param failure 不需要更新*/(void)checkAppVersion:(void (^) (void))needUpdatefailure:(void (^) (void))failure;end#pragma mark - SDVersionManagerDBinterface SDVersionManagerDB : NSObject (instancetype)sharedInstance;/**获取自定义对象UpdatedVersion实体反序列化操作return UpdatedVersion 实体*/
- (SDVersionManager *)loadLastVersion;/**保存自定义对象序列号param version UpdatedVersion实体return 是否保存成功*/
- (BOOL)saveLastVersion:(SDVersionManager *)version;endSDVersionManager.m
#import SDVersionManager.h
#import SDContextManager.h#define kDataFileVersion UpdatedVersion
#define kDocumentPath NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]class SDVersionManagerDB;
implementation SDVersionManager
/**单例模式使用 dispatch_once_t if不是线程安全的return 实例对象*/(instancetype)sharedInstance
{static SDVersionManager *_sharedInstance nil;static dispatch_once_t onceToken;dispatch_once(onceToken, ^{_sharedInstance [[SDVersionManagerDB sharedInstance] loadLastVersion];if (_sharedInstance nil) {_sharedInstance [[SDVersionManager alloc] init];_sharedInstance.lastVersion [[[NSBundle mainBundle] infoDictionary] objectForKey:CFBundleVersion];}});return _sharedInstance;
}- (void)encodeWithCoder:(NSCoder *)aCoder {[aCoder encodeObject:_lastVersionCode forKey:NSStringFromSelector(selector(lastVersionCode))];[aCoder encodeObject:_lastVersion forKey:NSStringFromSelector(selector(lastVersion))];[aCoder encodeObject:_versionNotes forKey:NSStringFromSelector(selector(versionNotes))];
}- (id)initWithCoder:(NSCoder *)aDecoder {if (self [super init]) {_lastVersionCode [aDecoder decodeObjectForKey:NSStringFromSelector(selector(lastVersionCode))];_lastVersion [aDecoder decodeObjectForKey:NSStringFromSelector(selector(lastVersion))];_versionNotes [aDecoder decodeObjectForKey:NSStringFromSelector(selector(versionNotes))];}return self;
}/**检测版本更新如果有新版本提醒用户更新提醒一次param needUpdate 需要更新的回调param failure 不需要更新*/(void)checkAppVersion:(void (^) (void))needUpdatefailure:(void (^) (void))failure {NSURL *appstoreUrl [NSURL URLWithString:[SDContextManager shareInstance].appstoreLookUrl];NSURLRequest *request [NSURLRequest requestWithURL:appstoreUrl];NSString *currentVersion [[[NSBundle mainBundle] infoDictionary] objectForKey:CFBundleShortVersionString];NSString *bundleCurrentVersion [[[NSBundle mainBundle] infoDictionary] objectForKey:CFBundleVersion];__weak typeof(currentVersion) weakCurrentVersion currentVersion;__weak typeof(bundleCurrentVersion) weakBundleCurrentVersion bundleCurrentVersion;[NSURLConnection sendAsynchronousRequest:requestqueue:[NSOperationQueue mainQueue]completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {if (!connectionError) {NSDictionary *dic [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:connectionError];NSArray *results [dic objectForKey:results];if ([results count] 0) {NSDictionary *resultValue [results objectAtIndex:0];NSString *versionStr [resultValue objectForKey:version];NSString *version [[resultValue objectForKey:version] stringByReplacingOccurrencesOfString:. withString:];NSString *note [resultValue objectForKey:releaseNotes];NSString *curVersion [weakCurrentVersion stringByReplacingOccurrencesOfString:. withString:];NSString *curBundleVersion [weakBundleCurrentVersion stringByReplacingOccurrencesOfString:. withString:];[SDVersionManager sharedInstance].versionNotes note;if ([curVersion integerValue] [version integerValue]) {//当前版本比appstore上低NSString *alastVerstion [SDVersionManager sharedInstance].lastVersion;if (alastVerstion version ([alastVerstion integerValue] [version integerValue])) {[SDVersionManager sharedInstance].lastVersion version;[SDVersionManager sharedInstance].lastVersionCode versionStr;if (needUpdate) {needUpdate();}} else {if (failure) {failure();}}} else if ([curVersion integerValue] [version integerValue]) {//当前版本比appstore上相同[SDVersionManager sharedInstance].lastVersion version;[SDVersionManager sharedInstance].lastVersionCode versionStr;if (failure) {failure();}} else if ([curVersion integerValue] [version integerValue]) {//当前版本比appstore上高[SDVersionManager sharedInstance].lastVersion version;[SDVersionManager sharedInstance].lastVersionCode versionStr;if (failure) {failure();}}[[SDVersionManagerDB sharedInstance] saveLastVersion:[SDVersionManager sharedInstance]];}} else {if (failure) {failure();}}}];
}end#pragma mark - SDVersionManagerDBimplementation SDVersionManagerDB (instancetype)sharedInstance {static SDVersionManagerDB *_sharedInstance nil;static dispatch_once_t onceToken;dispatch_once(onceToken, ^{_sharedInstance [[SDVersionManagerDB alloc] init];});return _sharedInstance;
}/**获取自定义对象UpdatedVersion实体反序列化操作return UpdatedVersion 实体*/
- (SDVersionManager *)loadLastVersion {NSString *dataFile [NSString stringWithFormat:%/%, kDocumentPath, kDataFileVersion];try{SDVersionManager *version (SDVersionManager *)[NSKeyedUnarchiver unarchiveObjectWithFile:dataFile];if (version) {return version;}}catch (NSException *e){}return nil;
}/**保存自定义对象序列化param version UpdatedVersion实体return 是否保存成功*/
- (BOOL)saveLastVersion:(SDVersionManager *)version {NSData *data [NSKeyedArchiver archivedDataWithRootObject:version];NSString *dataFile [NSString stringWithFormat:%/%, kDocumentPath, kDataFileVersion];return [data writeToFile:dataFile atomically:YES];
}end二、强制升级控制
强制更新控制是将获取到当前版本号传给服务端服务端判断当前的版本是否需要强制升级。
这块暂时就不写请求服务端的代码了。
三、小结
iOS开发-检查版本更新与强制更新控制。
在开发中经常遇到需要检查版本检查版本及请求appstoreLookUrl查看版本号与当前的版本号进行比对看是否需要更新。强制更新控制是将获取到当前版本号传给服务端服务端判断当前的版本是否需要强制升级。
学习记录每天不停进步。