这是iOS代码混淆系列文章的第二篇,其他两篇可以点击下方链接查看
为什么要替换项目资源
在某些公司项目开发当中 ,有时候需要通过技术手段,多次上架同一款产品。这些功能类似,且界面不同的产品也称作马甲包。为了达到将同一个包,经过较少的改动,快速更改为另一个类似的产品时,在代码混淆的基础之上还需要修改项目名称、静态资源等来达到目的。
需替换的资源及注意事项
- 工程内部:工程名称、类名前缀、BundleId、icon、启动图、静态资源等
- 产品界面:整体UI布局配色、产品功能逻辑、Tabbar顺序等
- 打包机器:更换打包电脑、使用WIFI网络、使用Application Uploader 上传不同二进制包
工具介绍及实践
KLGenerateSpamCode是在GitHub上开源的一个可快速修改项目名称、文件前缀、生成垃圾代码等功能的集成工具,可方便的实现上述部分资源替换的功能。具体功能如下:
- 修改工程名
- 修改类名前缀
- 扫描工程中的代码,生成同等数量的 Category 文件,文件中及是同等方法数量的垃圾代码。
- 修改 xxx.xcassets 文件夹中的 png 资源文件名。
- 删除代码中的所有注释和空行。
由于在使用此工具之前,需要先配置修改参数,通过这些参数程序可以自动的修改项目中所需的内容,下面是从使用的角度对各项参数的解释:
# 1. 项目名地址,注意:不是项目文件夹地址,是项目名那个目录
/Users/jerry/Desktop/testProject0/century
# 2. 修改项目名称,注意:放到最后修改,因为其他的修改需要依赖这个目录来查找
-modifyProjectName century>actualbyte
# 3. 忽略文件夹,对添加的文件夹内的文件不执行修改。注意:多个文件夹之间用逗号隔开
-ignoreDirNames ThirdPartLib,Tools,Category,Utils,MacrosDefine,Main,Resource,Support Files
# 4. 修改类名前缀。没有前缀的会加上前缀,有前缀的会修改。注意:修改后是否重名
-modifyClassNamePrefix /Users/jerry/Desktop/testProject0/century.xcodeproj CG>WB
# 5. 生成垃圾代码,注意:生成后的垃圾代码,需要拖入到工程目录中,如有报错可以自己修改或删除
-spamCodeOut /Users/jerry/Desktop/testProject0/SpamCode WBLog
# 6. 修改 xxx.xcassets 文件夹中的 png 资源文件名,必须指定(#1)的地址为xcassets所在的目录,才能生效。注意:此修改不会影响代码中图片的引用名称,只是对资源实体名和json配置文件中的修改。
-handleXcassets
# 7. 删除空行和注释 ,在项目根目录下运行,无效果可以单独运行一次。
-deleteComments
上述的参数需要在下载的KLGenerateSpamCode工具目录中配置,如下图:
参数配置好之后,Run 运行项目即可实现修改。另外,如果包含pod,需要到原项目文件夹下中执行pod update
更新。
静态资源的修改
静态资源包括项目的icon、启动图、和.xcassets 文件中的图标资源。其中为了更改UI页面元素,icon和启动图需要重新做,并替换进去,而xcassets 资源图片,可以通过修改其hash值达到修改资源的目的,具体可以使用MAC 下的一个终端工具实现。
ImageMagick:是一款创建、编辑、合成,转换图像的命令行工具,可对 png 图片做轻量压缩,既不损失图片质量,又可改变图片文件 hash 值,正是我们想要的工具。
如果电脑中没有安装的话,需要使用Homebrew
来安装执行命令如下:
brew install imagemagick
安装完成后,就可以执行ImageMagick的命令,来压缩工程目录下所有 png 文件:
find . -iname "*.png" -exec echo {} \; -exec convert {} {} \;
总结
本篇介绍了,如何通过修改工程名称、类前缀、资源hash值等方式,达到修改二进制包的目的,为上架苹果App Store 做准备。有兴趣的小伙伴可以亲自尝试一下,想必可以给您带来一些帮助。