最近上架更新版本的时候,又被拒了。哎,审核被拒次数多了,习惯了。日常查看反馈原因,有道翻译被拒内容。
一看邮件内容,我去,不得了啊。大致内容:您的应用程序使用itms-services URL计划安装一个应用程序。还说我的应用之后会被延期审核。
一脸懵逼,然后仔细回想:
1.猜想是不是因为程序里写了一个版本更新提示的原因呢?(之前在Appdelegate.m文件中写了一个对比当前版本与苹果商店最新版本的方法,若当前不是最新版本,则提示用户“有新的版本更新,请前往AppStore更新”,仅仅是一个提示而已,并不是热更新)这个理由连我自己都说服不了,果断排除。
2.猜想是不是项目中的屏蔽审核被发现了呢?(之前为了躲避IAP苹果内购的问题,在Appdelegate.m文件中写了一个检测当前时间是否为审核期间的方法,以此来决定支付页面是否要跳转IAP内购页面)这个方法是通过后台提供的一个接口实现的,于是赶紧浏览器访问了一下这个接口,发现是正常的,而且这个也与邮件描述不一致,所以也排除。
3.网上查找资料说:大概是由于引入某些第三方SDK时,SDK中带有类似的安装程序代码,建议排查所有的SDK,建议移除所有不用的SDK。于是,疯狂一顿查,最后废了好大劲,真的找到了,在即时通讯代码的一个getVersionInfo类方法中。
+ (void)getVersionInfo:(void (^)(BOOL, NSString *))completeBlock{
[RCDLoginAPI getVersionInfo:^(NSDictionary *versionInfo) {
if (versionInfo) {
BOOL isNeedUpdate = [[versionInfo objectForKey:@"isNeedUpdate"] boolValue];
NSString *finalURL = nil;
if (isNeedUpdate) {
//获取系统当前的时间戳
NSDate *dat = [NSDate dateWithTimeIntervalSinceNow:0];
NSTimeInterval now = [dat timeIntervalSince1970] * 1000;
NSString *timeString = [NSString stringWithFormat:@"%f", now];
//为html增加随机数,避免缓存。
NSString *applist = [versionInfo objectForKey:@"applist"];
applist = [NSString stringWithFormat:@"%@?%@", applist, timeString];
finalURL = [NSString stringWithFormat:@"itms-services://?action=download-manifest&url=%@", applist];
}
if (completeBlock) {
completeBlock(isNeedUpdate, finalURL);
}
}
}];
}
然后我想说:我就是个笨蛋,邮件里明明提出了itms-services这个违规关键字,我竟然没有想到去全局搜索一下。所以正确的做法是:直接在 “Find>Text>Containing”中搜索“itms-services”,即可直接锁定问题代码位置。
当然,为了保险起见,我还全局搜索了所有调用getVersionInfo方法的代码,并做了相应的屏蔽处理。
最后,我还有一个疑问:当时即时通讯功能刚刚完成,本次更新版本的时候,我还把即时通讯入口给屏蔽了,也就是说,我的安装包根本不可能执行到这句代码,那么苹果审核是怎么查到的呢?苹果审核已经这么强大了吗?已经可以检测到我程序内的代码了???