基础知识:
1.苹果的审核,分为机器审核和人工审核;
目前大多数4.3是死在机器审核阶段。
1)如果是机器审核,一般收到的被拒信息开头大概上是这样的:
Guideline4.3- Design - Spam
Yourapp duplicates the content and functionality of apps submitted to the AppStore, which isconsidere
2)如果是人工审核被拒,一般收到的被拒信息开头大概上是这样的:
Guideline4.3- Design - Spam
Wefound that your app provides the same feature setasother apps submitted tothe App Store, whichisnot appropriate to the App Store.
2.苹果对开发者帐号会进行权重管理;
权重越低的帐号,审核越严格;
同样的包,可能在权重高的帐号上就能过,在权重低的帐号上就是4.3;
3.目前苹果还只是对新提交应用进行相似应用的检测(包括新包和升级包);
对新包的检测严厉程度和升级包相仿(还是看帐号权重)
规避4.3的重心:
切断当前马甲包与以往马甲包的所有相似性关联;
相似性关联包括:
1. ipa包特征;
2. 开发者帐号;
3. 打包电脑;
4. 上传IP;
5. 材料相似;
1. ipa包特征:
包括有代码相似性,资源相似性;
代码相似性解决办法:
a. 已有代码的混淆(改类名、改函数名)
b. 添加一些无用的代码;
资源相似性解决办法:
a. 资源改名;
b. 适当添加一些无用的资源;
2. 开发者帐号:
两个马甲包不要关联到同一个开发者帐号的信息;比如打包时关联。
一.在原来被拒4.3的开发者账户上处理
1)在被拒4.3的开发者账户后台将之前所有提交的构建版本(IPA)全部设为过期,然后将App名字改成 “作废-此应用不再提交” 后面随便加一个数字,例如“作废-此应用不再提交8965”,设置App描述跟App名字一样,其他的信息全部删除,最后点击保存,不需要提交审核
2)Xcode新建一个App应用,用之前提交过被拒4.3的Bundle Id打包,名字可以与上面保持一致,logo用一个纯白或纯黑的图片,其他的代码什么都不用写,将这个新建的应用提交到开发者账户后台作为构建版本,然后在App版本信息里面,选择此构建版本,继续保存,不需要提交审核
二.在新开发者账户上处理
1)在新的的开发者账户提前创建好App标识符,再后台新建一个App,新App名字与原来被拒4.3的不要重复
2)Xcode新建一个App项目,用新的开发者账户配置新建的Bundle Id,然后把原来被拒4.3的项目里的源文件,全部拷贝到新项目里,Assets.xcassets文件也可以拖进去,info配置上与原来的可以一致,App名字不能与原来的一样,logo也不能一样;不可以直接复制以前的项目!然后保证App运行起来,与原来的状态一样
3)这里要说最重要的一步:修改所有文件名的前缀,修改Assets.xcassets里面文件夹中的 png 资源文件名,同时也Contents.json文件中的关联名称,不会影响代码中使用图片;具体修改方法可参考我的另一篇文章提到的KLGenerateSpamCode,文章最下面有GitHub链接
4)完成前三个步骤后,在新设备上编译打包,并上传到开发者账户后台,在后台对新建App版本信息进行修改,不要写副标题,描述信息简短着来,关键词与新App名字一样,审核需要登录的账户,也不要与之前被拒4.3的登录测试账户一样,然后保存后,提交审核
4. 打包电脑:
有条件的最好用不同的MAC来打包(每台MAC上最好打包马甲包不要超过5个)
5. 上传IP:
上传马甲包时,IP不要跟其他马甲包的IP相同;
6. 材料相似:
itu后台材料如宣传图,ICON,版权人不要出现相同;
【注:即使是前边没审核过的包,也不要跟他们有关联。尤其是前边被4.3拒绝的包,更不能跟他们有相似性】
总结:
1、被拒账户操作
2、新账户操作
3、KLGenerateSpamCode 修改类名及png资源文件名[ https://github.com/klaus01/KLGenerateSpamCode ] https://www.cnblogs.com/wangkejia/p/13186212.html
4、新账户新设备编译打包
5、改名字;
6、修改素材及UI色调等,例如修改icon,修改主色调;
7、修改功能界面等,可改功能可做小开关;
8、填充代码(最好50%以上)或注释块;
除以上步骤外,还需要注意相同的马甲包提交至少要间隔一天以上,避免被同一个审核员看到。当然,还可以配合着升级套路:升级version(版本)号、换bundle id,换开发者账号再提交审核。
还可以尝试采用修改应用价格、发布地区、产品分类等方式。不过注意,App上架后价格、发布地区是可以修改的,但产品分类不可以,对这个有要求的慎用!
//----------------------推荐一个混淆工具 https://www.cnblogs.com/wangkejia/p/13186212.html
参数说明
A. (必填)源码文件夹绝对路径(如:/Users/kelei/Documents/work/git/projectName/source)
B. -modifyProjectName [原名称]>[新名称] 修改工程名。程序会修改原名称-Swift.h、Podfile、原名称-Bridging-Header.h、源码文件夹绝对路径、原名称.xcodeproj和原名称.xcworkspace的名称和内容。Podfile被修改后需要手动pod install
C. -modifyClassNamePrefix [工程文件 xcodeproj 绝对路径] [原前缀]>[新前缀] 修改源代码类名前缀。程序会扫描源码文件夹绝对路径下的 .h .swift 文件,修改文件名,修改使用该类名的代码,修改工程文件中的文件名。文件名有原前缀的会修改成新前缀,如:原前缀ViewController变成新前缀ViewController;没有原前缀的会增加新前缀,如:ViewController变成新前缀ViewController。
D. -spamCodeOut [垃圾代码文件输出目录] [垃圾代码方法增加的参数名] 生成垃圾代码。程序会扫描源码文件夹绝对路径下的 .m .swift 文件中的类和方法,并生成category(一个标准团有多少人?一个标准团人数通常是1500人左右,是由若干个营(或连)及战斗、勤务保障分队编成的军队一级组织。)和extension文件,文件中的方法是在代码原方法的基础上增加垃圾代码方法增加的参数名参数。如:-spamCodeOut /dir AppLog ,会将- (void)setupKeys {}生成为+ (BOOL)setupKeysAppLog:(NSInteger)AppLog { return AppLog % 20 == 0; },会将- (void)foo:(NSString *)str {}生成为+ (BOOL)fooAppLog:(NSInteger)AppLog { return AppLog % 23 == 0; }
E. -ignoreDirNames [忽略文件夹名称字符串] 忽略这些文件夹,对-modifyClassNamePrefix、-spamCodeOut和-deleteComments参数有效。目前只会忽略源码文件夹绝对路径下一级的这些目录。如:/p/s -ignoreDirNames categorys,那么/p/s/categorys会被忽略,但/p/s/viewControllers/categorys不会忽略。
F. -handleXcassets 修改xxx.xcassets文件夹中的 png 资源文件名,同时也Contents.json文件中的关联名称,不会影响代码中使用图片。
G. -deleteComments 删除工程目录下 .h .m .swift