在前一段时间,苹果的审核标准有所变化:在程序中不能出现检测版本更新的入口。看到这个信息的时候以为在app中不能有检测更新或强制更新的功能,最后发现自己还是犯了望文生义的大错误。苹果建议采用系统的自动更新,但在系统的设置里可以把自动更新关掉。这就导致app有新版本,不能及时被用户更新,所以检测版本和版本更新的功能还是必不可少的。但是一定不要有检测更新的入口呦,如button之类的。否则被苹果给拒了就自能怪自己了。
开发人员都知道,apple的App有两种类型:企业版和store版。所以采用的更新方式自然也就有所不同。
1、appStore更新
(1)先介绍一下接口
检查app应用信息的接口:https://itunes.apple.com/lookup?id=1234567890(id为自己应用的Apple ID)
返回数据:其中version是最新的版本号,releaseNotes为新版本的更新内容;
<2>右键单击应用
<3>拷贝链接,粘贴就得到了
https://itunes.apple.com/cn/app/xin-dong-hui-yi-qing-se-zhi/id655913723?mt=8
(2)代码实现
在- (void)applicationDidBecomeActive:(UIApplication *)application方法里写更新,便于每次程序运行都提示,当然这个也是根据需求来的;
- (void)applicationDidBecomeActive:(UIApplication
//每次启动应用的时候检查更新
[selfchectVersionFromAppStore];
}
具体方法:
- (void)chectVersionFromAppStore
NSString *url = [[NSStringalloc]initWithFormat:@"https://itunes.apple.com/lookup?id=16666666"];
selfrequestURL:url];
- (void)requestURL:(NSString
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];
manager.requestSerializer = [AFHTTPRequestSerializerserializer];
GET:URLparameters:nilsuccess:^(AFHTTPRequestOperation *operation,id
NSDictionary *infoDic = [[NSBundlemainBundle]infoDictionary];
NSString *localVersion = [infoDicobjectForKey:@"CFBundleShortVersionString"];
NSDictionary *versionInfo = [[responseObjectobjectForKey:@"results"]firstObject];
NSString *serverVersion = [versionInfoobjectForKey:@"version"];
NSString *message = [versionInfoobjectForKey:@"releaseNotes"];
if ([selfcompareServerVersion:serverVersion withLocalVersion:localVersion])
/* UIAlertController实现
发现新版本" message:message preferredStyle:UIAlertControllerStyleAlert];
AppDelegate *delegate = [UIApplication sharedApplication].delegate;
[delegate.window.rootViewController presentViewController:AlertController animated:YES completion:nil];
UIAlertView *alertView = [[UIAlertViewalloc]initWithTitle:@"发现新版本"message:nildelegate:selfcancelButtonTitle:@"下载"otherButtonTitles:@"取消",nil];
NSDictionary *attrs =@{NSFontAttributeName : [UIFontsystemFontOfSize:17]};
CGSize size = [messageboundingRectWithSize:CGSizeMake(230,400)options:NSStringDrawingUsesLineFragmentOriginattributes:attrscontext:nil].size;
UITextView *textView = [[UITextViewalloc]initWithFrame:CGRectMake(0,0,200, size.height +10)];
editable =NO;
selectable =NO;
font = [UIFontsystemFontOfSize:15];
backgroundColor = [UIColorclearColor];
// iOS8以上系统,充满整个AlertView,需要调整边距
if ([selfIOS8])
UIEdgeInsets e =UIEdgeInsetsMake(0,20,0, 0);
setTextContainerInset:e];
setValue:textViewforKey:@"accessoryView"];
message =@"";
show];
failure:^(AFHTTPRequestOperation *operation,NSError
- (BOOL)IOS8
BOOL b =false;
NSString *ver = [[UIDevicecurrentDevice]systemVersion];
if (NSOrderedAscending != [vercompare:@"8.0"]) {
true;
return
* 比较服务器版本和本地程序版本。
@param sv 服务器版本
@param lv 本地版本
@return YES:更新(server version > local version), NO:不更新(数据异常或者server version <= local version)
- (BOOL)compareServerVersion:(NSString*)serverVersion withLocalVersion:(NSString*)localVersion
BOOL ret =NO;
if (serverVersion ==nil || [serverVersion isEqualToString:@""]) {
NSLog(@"Server version is empty.");
return
if (localVersion ==nil || [localVersion isEqualToString:@""]) {
NSLog(@"Local version is empty.");
return
NSArray *serComps = [serverVersioncomponentsSeparatedByString:@"."];
NSArray *locComps = [localVersioncomponentsSeparatedByString:@"."];
for (int index =0; index < serComps.count; index++) {
int numServer = [[serCompsobjectAtIndex:index] intValue];
int numLocal = -1;
if (locComps.count
objectAtIndex:index]intValue];
break;
elseif
break;
return
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
if (buttonIndex == alertView.cancelButtonIndex) {
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"https://itunes.apple.com/cn/app/zhi-dong-sheng-huo/id=853522946?mt=8"]];
}
2、服务器版本下载和更新
用此功能必须具备以下条件:
<1>苹果企业开发者账号和企业证书
<2>支持https的服务器,当然没有也可以(利用第三方的)
<3>下载页面(负责找到plist文件,并提供给用户良好的页面展示)
<4>plist文件(负责下载ipa包)
如果没有支持https的服务器,七牛云存储是个很好的代理,下来看看它的真面目吧。
进入七牛官网:http://www.qiniu.com,然后注册成为标准用户,就可以上传plist文件了
注册成功后,新建空间
点击存在的空间,进入空间,再点击内容管理,然后上传plist文件
查看自己空间的URL,配置在自己的html页面里:
到此,路已经走通,下面来看一下plist文件的结构
注意: bundle-identifier的Value中在bundleId后增加.fixios8是为了解决ios8刚出现的时候会安装成两个app的问题,后来问题没有了,所以以后直接写bundleId就ok了。
html的具体配置
代码的具体实现和appStore的实现类似,只不过版本信息是通过后台接口传过来。so,这里就不写了,参照上面的代码。