Lei's Blog

iOS规避马甲包方案

iOS规避马甲包方案

Guideline 4.3 - Design
We noticed that your app provides the same feature set as other apps submitted to the App Store; it simply varies in content or language, which is considered a form of spam.

我们来看看这段话的中文翻译
我们注意到您的应用提供了与提交到App Store的其他应用相同的功能集; 它只是内容或语言不同,被认为是一种垃圾邮件.

古语云:知己知彼百战不殆要解决此问题,得先了解一下AppStore的审核机制。

  • 预审核阶段

    所谓预审核阶段就是指我们打包ipa进行上传的时候,一般这个时候要注意icon是否合规,alpha通道,build版本要大于已经上传过的版本。

  • 机审
  • 此处会扫描支付SDK,及马甲情况,快速审核可绕过机审。
  • 人工审核

    此处主要是审核人员对App进行体验测试,有登陆功能的需要提供测试账号。

了解完审核规则猜测我们的App极有可能是机审被拒的,根据网上其它同行的经验总结得知需对以下功能进行修改。

  1. 修改工程名
  2. 修改类名前缀
  3. 扫描工程中的代码,生成同等数量的 Category 文件,文件中及是同等方法数量的垃圾代码。
  4. 修改 xxx.xcassets 文件夹中的 png 资源文件名。
  5. 删除代码中的所有注释和空行。

手动改这些工作量是很大的,所以就有了KLGenerateSpamCode)这款神器。下面我们就用这款神器对我们的应用程序进行修改.

第一步先将代码clone到本地

cd 到指定文件夹执行如下命令
git clone https://github.com/klaus01/KLGenerateSpamCode.git

第二步配置参数

打开Xcode>Product>Scheme>Edit Scheme

注意配置中需要一步步执行,不能一次性执行完毕

2.1 填写源代码路径

所谓源代码文件也就是你的工程文件路径,可以打开Terminal将文件夹拖入copy即可。

例如: /Users/leiMac/Desktop/project/gunqiu/1.0\ 2/GQZhiBo/GQZhiBo
如果xcodeproj和你的源代码在同一路径下,需要将路径指定到你的源代码文件夹下。

2.2 修改工程名

-modifyProjectName [原名称]>[新名称] 切记原xcodeproj命名需要和原代码文件夹一直,否则报错

执行完之后 如果使用了pod管理工具,还需要将Podfile > target改为修改后的名字。同时删掉PodsFrameworks文件夹 和 xxx.xcworkspace执行 pod install

手动修改TARGETS名字,Schemes名字

2.3 修改类名前缀
-modifyClassNamePrefix /Users/leiMac/Desktop/project/gunqiu/1.0\ 2/GQZhiBo/GQZhiBo.xcodeproj GQ>ZB

忽略文件 -ignoreDirNames ThirdPart,Categoreies,Pods

修改完成之后工程树下,文件下的类名会变为红色,删除一个就会提示从磁盘读取,还是保留当前版本,切记选择从磁盘读取,会自动帮你把新生成的文件填充上来,负责需要一个个手动替换。

2.4 删除注释和空格

-deleteComments

2.5 修改xcassets图片命名

-handleXcassets

2.6 生成垃圾代码

作者更新版本后并没有对文档进行更新,-spamCodeOut [垃圾代码文件输出目录] [垃圾代码方法增加的参数名]按照这个命令会报缺少垃圾代码函数调用名
正确的命令应该是 -spamCodeOut 垃圾代码文件存放目录 垃圾代码参数名 垃圾代码函数调用名 NewClass代码函数调用名

第三步另外修改图片 hash 值的方法
  • 安装 ImageMagick brew install imagemagick
  • 压缩工程目录下所有 png 文件 find . -iname "*.png" -exec echo {} \; -exec convert {} {} \;

代码改造中的几个tips

  • 上述很多步骤都是不可逆的,所以每执行成功一步赶紧commit
  • shift+command+j 在你定位删除代码时很有帮助
  • 获取文件路径时使用Terminal