昨晚在家发版APP的时候遇到了一个小bug,在这里记录一下。
场景还原:
昨晚在家更新了app新的版本: 2.1.10,然后运行的时候居然提示了有新的版本可供下载,看了一眼release note,发现这个release note是2.1.9版本的。代码如下:
NSString *url = S(@"http://itunes.apple.com/cn/lookup?id=%@", kAppstoreID);
[sessionManager GET:url parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:&error];
if (json) {
NSArray *array = [json objectForKey:@"results"];
if (array.count > 0) {
NSDictionary *dict = [array objectAtIndex :0];
NSString *itunesVersion = [array objectAtIndexSafely:0][@"version"];
NSString *strVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
CGFloat version = [block_self floatValueFromItunesAppVersionString:strVersion];
if ([block_self floatValueFromItunesAppVersionString:itunesVersion] > version){
block_self.appstoreUrl = [array objectAtIndexSafely:0][@"trackViewUrl"];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"亲,又有新版本了,去看看吧"
message:dict[@"releaseNotes"]
delegate:block_self
cancelButtonTitle:@"立刻升级"
otherButtonTitles:@"取消", nil];
[alert show];
}
}
}
} failure:^(NSURLSessionDataTask *task, NSError *error) {
}];
这里的请求用的是itunes自带的请求,返回的信息中包括APP的基本信息,大小,分类,版本信息等,这里正是获得版本号,然后与本地info.plist中的CFBundleShortVersionString进行比较,如果当前info.plist中的版本较低则提醒用户更新。
错误原因:
错误原因也很简单,这里比较两个字符串方式存在问题,使得"2.1.9" 大于了 "2.1.10",因此重新处理一下比较函数即可。