審核 二進(jìn)制文件被拒絕
Your app uses or references the following non-public APIs: xxx,xxx
年前上線的版本因?yàn)槭褂孟到y(tǒng)非公開api導(dǎo)致了二進(jìn)制文件被拒絕沒審核過教届,總結(jié)下如何解決問題通過審核
- 如何在項(xiàng)目上線前檢查是否引用了系統(tǒng)非公開api,防止審核被拒
- 如果在萬不得已的情況下使用系統(tǒng)非公開api,如何規(guī)避Apple的審查、通過審核
1咆课、在項(xiàng)目上線前檢查是否引用了系統(tǒng)非公開api
- 如果您正在使用第三方庫章郁,請更新到這些庫的最新版本。
- 如果您沒有訪問庫的源代碼惶岭,您可以使用“字符串”或“otool”命令行工具搜索已編譯的二進(jìn)制文件示损∩酰“strings”工具可以輸出庫調(diào)用的方法的列表,“otool -ov”將輸出Objective-C類結(jié)構(gòu)及其定義的方法。
2始鱼、使用了系統(tǒng)非公開api 也可以通過審核
比如項(xiàng)目代碼[target isKindOfClass:NSClassFromString(@"CAMViewfinderView")]
,其中的CAMViewfinderView
就是系統(tǒng)非公開的api论巍,Apple審核的時(shí)候檢查到了這個字符就會直接把你的項(xiàng)目打回來并告訴你“二進(jìn)制文件被拒絕”,但是我的項(xiàng)目里不寫這個方法就會出現(xiàn)各種bug风响,怎么辦?
其實(shí)只要不讓項(xiàng)目里直接出現(xiàn)“CAMViewfinderView”這個字符串就不會被Apple檢測到了丹禀,既不用動太多代碼影響功能状勤,也能通過審核的兩種方法:
1. 動態(tài)拼接字符串
比如把“CAMViewfinderView”拆分成好幾個字符串,這樣調(diào)用這個方法[target isKindOfClass:NSClassFromString(str1,str2,str3,str4)]
(str1,str2,str3,str4拼起來就是CAMViewfinderView)
2. 加密處理系統(tǒng)非公開api
統(tǒng)一加密工具双泪,在程序外先加密好你調(diào)用的api字符串
- 比如先把
“CAMViewfinderView”
加密成"Q0FNVmlld2ZpbmRlclZpZXdDb250cm9sbGVy"
- 然后在app方法里先解密
"Q0FNVmlld2ZpbmRlclZpZXdDb250cm9sbGVy"
為decodeStr
, - 再調(diào)用
[target isKindOfClass:NSClassFromString(decodeStr)]
加密的方法是親測成功通過審核的所以總結(jié)分享下持搜。
整個方法都沒直接出現(xiàn)系統(tǒng)的非公開api,但實(shí)現(xiàn)的方法是沒有任何變化焙矛,再提交就能審核通過
注意:還是盡量不要調(diào)用系統(tǒng)非公開api葫盼;如果你使用上述方法避開審核一定要寫好修改注釋或者文檔,否則后面時(shí)間一久維護(hù)起來就相當(dāng)麻煩了村斟。