前言
本工具用于應(yīng)對蘋果對重復(fù)應(yīng)用的審核(Guideline 4.3 Design Spam),避免蘋果機(jī)審檢測概率。
被拒處理
4.3一般存在3種情況,可以根據(jù)被拒回復(fù)進(jìn)行判斷,如果你真的看不懂被拒回復(fù),下面一一列舉,逐一排除
第一種:簡稱代碼重復(fù),代碼重復(fù)使用也有三種情況
1.可能你之前用這套源碼上過一個包,現(xiàn)在用這套代碼直接改一個logo跟名字再上一個馬甲,這種基本會直接4.3
這種情況基本要改源碼,第一步:工程中的文件夾的名字全部進(jìn)行修改。第二步:每一個工程都有一個類前綴, 我們需要取一個長一點的類前綴, 并且這個類前綴在你的整個工程一定是一個唯一的字符串, 我們假設(shè)這個類前綴是PayDayLoan, 現(xiàn)在我們需要生成一個控制器, 控制器的結(jié)尾Controller也需要用一個特定的字符去代替, 比如:Director,剩下的View以及object做法類似, 就不一一介紹了,做馬甲的時候就是把這些名字用另一個唯一的字符去代替, 盡量長一點。第三步:把另一個其他的工程中的類全部導(dǎo)入進(jìn)來, 主要是混淆代碼, 在現(xiàn)有的工程中調(diào)用, 可以沒有任何效果, 只是單純調(diào)用方法。
注:單一的加入垃圾代碼混淆沒用的!
2.如果你的這套源碼在一個賬號上提交過,但是被拒了,后來因為其他原因你不得不在別的賬號上重新提交此源碼,這種情況第二個賬號基本也會報4.3
這種情況需要在第一個賬號做一下處理, xcode新建一個應(yīng)用, 直接用之前提交過的bundle Id打包,logo用一個純白或者純黑的圖片, 將這個新建的應(yīng)用提交到應(yīng)用市場, 構(gòu)建版本中將之前被拒的包移除, 用這個新的應(yīng)用頂替之前被拒的包, app名字改成 “作廢-此應(yīng)用不再提交” 后面再隨便加一個數(shù)次, 因為這個名字別人已經(jīng)用過了, app描述跟app名字一樣, 剩下的信息全部刪除.最后點擊保存即可.
3.你的源碼只要提交到itunes connect里面,就算沒提交審核,當(dāng)你再次使用此源碼提交審核的時候,基本都會報4.3
第二種界面功能相似這種情況簡單的改源碼已經(jīng)沒用了,需要在原有的app上加一些不同的功能,我用借貸類舉例說明該如何解決,其他類型的app可以參考以下舉兩個應(yīng)用說明, 分別用A應(yīng)用與B應(yīng)用代替, 你需要如何處理并且如何回復(fù)審核人員
1.A應(yīng)用 是給沒有信用卡的用戶使用的一款借款A(yù)pp,B應(yīng)用 是給有信用卡的用戶使用的一款借款A(yù)pp.2.A應(yīng)用的最高借款額度是1000元, B應(yīng)用 的最高借款額度是25000元.3.A應(yīng)用的還款時間是7天與14天, B應(yīng)用 的還款時間是28天. 4.A應(yīng)用內(nèi)部有貸款計算器功能, B應(yīng)用只是一個普通的貸款app, 并無其他功能5.兩款app是我們公司內(nèi)不同的部門開發(fā)的app, 分別針對不同的用戶人群.
第三種,app名字被用過針對馬甲包標(biāo)題、名稱、描述不合規(guī)的這項被拒原因,最有效的解決方案就是:馬甲包名稱方面:按照蘋果審核回執(zhí)書寫標(biāo)準(zhǔn)修改馬甲包的名稱(侵犯其他品牌名稱需要重新取名);升級version或者build ID 重新提審。馬甲包標(biāo)題方面:去除誤導(dǎo)性品牌詞、切換品牌詞組合方式;修改標(biāo)題長度(可進(jìn)行標(biāo)題精簡字?jǐn)?shù)至10字以內(nèi)、多語言版本可每個語言版本標(biāo)題一致),并回復(fù)蘋果審核。馬甲包產(chǎn)品描述方面:按照蘋果審核回執(zhí)去除誤導(dǎo)性及錯誤性描述,盡量貼近游戲產(chǎn)品功能,并回復(fù)蘋果審核。
除以上步驟外,還需要注意相同的馬甲包提交至少要間隔一天以上,避免被同一個審核員看到。當(dāng)然,還可以配合著升級套路:升級version(版本)號、換bundle id,換開發(fā)者賬號再提交審核;如果以上步驟不奏效,還可以嘗試采用修改應(yīng)用價格、發(fā)布地區(qū)、產(chǎn)品分類等方式。不過注意,App上架后價格、發(fā)布地區(qū)是可以修改的,但產(chǎn)品分類不可以,對這個有要求的慎用!
IPv6的話,確認(rèn)代碼沒問題的話,重新提交1~2次就好了。多數(shù)是審核人員所在的網(wǎng)絡(luò)環(huán)境導(dǎo)致的問題,如果不放心,重新提交時將截圖或拍下視頻放附件里或直接向蘋果申訴。如果 App本身有問題,例如不兼容 IPv6,最好的辦法是讓App兼容 IPv6 或通過升級服務(wù)器來支持IPv6,其他代碼問題問問技術(shù)就OK了。
多嘗試,不試試你永遠(yuǎn)不知道你什么時候會成功!
1、定期換電腦提包.
2、換電腦的序列號.
3、換圖標(biāo),換啟動圖.
4、換VPN環(huán)境.
5、定期換域名.
工具方法

圖片一
圖片二
- 修改工程名
- 修改類名前綴
- 掃描工程中的代碼,生成同等數(shù)量的 Category 文件,文件中及是同等方法數(shù)量的垃圾代碼。
- 修改 xxx.xcassets 文件夾中的 png 資源文件名。
- 刪除代碼中的所有注釋和空行。
使用
使用源碼
- 下載源碼。
- 用 Xcode 打開工程并配置參數(shù)。如圖
- 運行
使用二進(jìn)制文件,在終端中執(zhí)行 GenerateSpamCode
$ ./GenerateSpamCode \
/Users/kelei/Documents/work/git/projectName/source \
-deleteComments
參數(shù)說明
-
(必填) 源碼文件夾絕對路徑(如:
/Users/kelei/Documents/work/git/projectName/source) -
-modifyProjectName [原名稱]>[新名稱] 修改工程名。程序會修改
原名稱-Swift.h、Podfile、原名稱-Bridging-Header.h、源碼文件夾絕對路徑、原名稱.xcodeproj和原名稱.xcworkspace的名稱和內(nèi)容。Podfile被修改后需要手動pod install -
-modifyClassNamePrefix [工程文件 xcodeproj 絕對路徑] [原前綴]>[新前綴] 修改源代碼類名前綴。程序會掃描
源碼文件夾絕對路徑下的 .h .swift 文件,修改文件名,修改使用該類名的代碼,修改工程文件中的文件名。文件名有原前綴的會修改成新前綴,如:原前綴ViewController變成新前綴ViewController;沒有原前綴的會增加新前綴,如:ViewController變成新前綴ViewController。 -
-spamCodeOut [垃圾代碼文件輸出目錄] [垃圾代碼方法增加的參數(shù)名] 生成垃圾代碼。程序會掃描
源碼文件夾絕對路徑下的 .m .swift 文件中的類和方法,并生成category和extension文件,文件中的方法是在代碼原方法的基礎(chǔ)上增加垃圾代碼方法增加的參數(shù)名參數(shù)。如:-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; } -
-ignoreDirNames [忽略文件夾名稱字符串] 忽略這些文件夾,對
-modifyClassNamePrefix、-spamCodeOut和-deleteComments參數(shù)有效。目前只會忽略源碼文件夾絕對路徑下一級的這些目錄。如:/p/s -ignoreDirNames categorys,那么/p/s/categorys會被忽略,但/p/s/viewControllers/categorys不會忽略。 -
-handleXcassets 修改
xxx.xcassets文件夾中的 png 資源文件名,同時也Contents.json文件中的關(guān)聯(lián)名稱,不會影響代碼中使用圖片。 - -deleteComments 刪除工程目錄下 .h .m .swift 文件中的注釋和空行。
另外修改圖片 hash 值的方法
使用 ImageMagick 對 png 圖片做輕量壓縮,及不損失圖片質(zhì)量,又可改變圖片文件 hash 值。方法:
- 安裝 ImageMagick,
brew install imagemagick - 壓縮工程目錄下所有 png 文件,
find . -iname "*.png" -exec echo {} \; -exec convert {} {} \;
使用經(jīng)驗
就我 2017-11 月的提交情況來看,只需要做如下修改就可以上馬甲包了。
- 修改工程名
- 修改類名前綴
- 修改圖片文件 Hash 值
- 修改 .xcassets 中的圖片文件名
- 用別的電腦打包
已知問題
- 生成的垃圾代碼文件可能是 .m 文件中實現(xiàn)的私有類,編譯垃圾代碼可能會報錯,刪除該垃圾代碼 .h .m 文件及可。
git混淆代碼地址:
二、修改方法名
先會class-dump. O(∩_∩)O謝謝。推薦San心兩yi_鐘的安裝步驟
先大致解釋一下“編譯"、"反編譯":
編譯:就是把千千萬萬行字符串(也叫代碼,或者源文件),變成010101010101(機(jī)器碼,也叫目標(biāo)代碼)
編譯過程:預(yù)處理-編譯-匯編-鏈接
我的腳本運行在預(yù)處理階段。
反編譯:就是把0101010111110001100(機(jī)器碼,也叫目標(biāo)代碼),變成千千萬萬行字符串(也叫代碼,或者源文件)
最近三年一直待在銀行做App,由于銀行對安全要求較高,所以iOS的代碼必須要有混淆的措施,初期實施了[念茜姐](http://blog.csdn.net/yiyaaixuexi/article/details/29201699)的混淆方案,但是領(lǐng)導(dǎo)說,我們要自動混淆,方法名字不能一個一個的添加到func.list中,所以方法名只能從.m和.h文件中抽取了,但是如何屏蔽系統(tǒng)的方法名,暫行的策略是:將自己定義的方法名全部添加一個前綴。
例如 “hsk_funtion1”; “hsk_funtion2”;“hsk_funtion3”;
在Xcode-->Target--->Build Phases--->添加Run Script
通過class-dump 反編譯之后:Appdelegate 效果
通過class-dump 反編譯之后:ViewController 效果
codeObfuscation.h宏定義文件、confuse.sh腳本文件、func.list函數(shù)列表文件的關(guān)系。
程序每次預(yù)處理,都就會執(zhí)行confuse.sh,從.m和.h文件中按照"一定的規(guī)則"抽取需要混淆的函數(shù)名,全部寫到func.list中,然后再從func.list中逐行提取函數(shù)名進(jìn)行宏定義,宏定義使用隨機(jī)字符串,然后寫到codeObfuscation.h文件中。
func.list函數(shù)列表抽取,和宏定義是腳本自動完成,不需要手動抽函數(shù)和手動宏定義呢。
您的星星,是我最大的鼓勵。最近想把HSKConfuse集成到CocoaPods,敬請期待。O(∩_∩)O謝謝
另送一份:iOS 腳本打包 傻瓜版,無需改變配置 github地址