注:苹果审核时不能用任何资源下载、热更新,包括进度条、“更新”、“下载”等文本都要隐藏
马甲包差异化处理:
前置:混淆比例以1:1为最佳,直观包体大小变化:混淆前150MB->混淆300MB
1.工程级:游戏端工程如unity工程差异化;导出Xcode工程项目差异化,名称不同,目录结构不同,info.plist差异(应 用版本号差异大等),出包包体大小差异大(见下方减少IPA包体大小方法)
2.代码级混淆:类名方法函数差异化,OC、lua、C#、C++等代码层:a.所有类名或方法名使用不同的前缀;b.增加垃圾代码,可以不产生效果,但必须在工程里调用(即include/import后调用空实现方法)注意:目前混淆的垃圾代码,机审会扫描是否可运行的。如果是非常无规则的或者和主代码完全不匹配的,直接提示垃圾代码。拒掉。所以垃圾代码要作处理,和主代码类似,有关联性,主代码和垃圾代码相互引用,增加耦合度,尽量多的相互调用,可以增加过包几率
3.资源文件级:游戏资源进行压缩,不同类目结构,对素材进行差异化处理(大小、尺寸、文件名、哈希值等进行批量小幅度更改:比如24X24改成23X23;10kb改成13kb;btn1.png改成btnl.png);首包资源按比例增减. 注意:IPA里面的图片文件名需要作处理,特别是已经被拒很多次的IPA。比如icon.png,btn.png这样的命名,不要多包多次重复使用。会关联到已被拒的大量垃圾包,直接被拒
4.游戏UI美术级:游戏loading载入图、登录界面背景图、选角界面图等差异化;角色模型随机展示,初始任务或场景差异化,商城界面差异化(部分商品进行隐藏,审核过后再显示)
5.服务器交互级:游戏资源下载地址及其他交互链接地址差异化(比如http://url/k1变成http://url/k2);提审服游戏新手任务等差异化处理
6.使用不同的打包机器出包。
7.代码、图片等资源的Xcode项目混淆案例
https://github.com/klaus01/KLGenerateSpamCode
https://github.com/JourneyYoung/iOSMixProject
8.Xcode工程编译混淆
a、混淆参考https://blog.csdn.net/SysProgram/article/details/75140310
b、在a完成后重启电脑即可在XCode编译选项中选择使用混淆编辑器;
c、注释掉代码Classes/Preprocessor.h line17 环境检测;
d、修改工程设置: BuildSetting->Obfuscator4.0-languageCXX
CLANG_CXX_LANGUAGE_STANDART -> c++14
CLANG_CXX_LIVRARY->libstdc++
e、修改工程设置:BuildSetting->Obfuscator4.0-CustomFlags
OTHER_CPLUSPLUSFLAGS -> $(inherited) $(OTHER_CFLAGS) -mllvm -bcf_prob=40
【链接】Obfuscator-LLVM在iOS中的实践
https://www.jianshu.com/p/a631b5584de6
减少IPA包体大小的方法:
1.对素材资源进行压缩
2.减少所支持设备类型,如仅支持iPhone设备
3.Xcode工程支持Bitcode(西游SDK暂不支持Bitcode)
4. 减少所支持CPU架构,体积减小效果很明显,如图只支持arm64:
各类设备所支持架构:
模拟器架构:i386、x86_64
真机:
armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2
armv7s: iPhone 5、iPhone 5c (只要支持了armv7,就可以在armv7s的架构上运行)
arm64: iPhone 5s、iPhoneSE、iPhone6及更新iPhone;iPad5、 iPad Air(2)、iPad mini2~4、iPad Pro以及更新设备
目前西游后台数据显示,32位旧设备占比为4%左右,32位旧设备充值占比为0.5%左右