深挖蘋果審覈規則,提高iOS審覈經過率

本文首發於微信公衆號【UC研發效能】 數據庫

引言

AppStore審覈最大痛點能夠概括爲三個:「誤報率高」 、「描述模糊」和 「申訴慢」。
咱們深知,蘋果的上架審覈很是嚴格,對私有API的調用是絕對不能容忍的,不少開發者都對提審坐臥不安,明明我沒用到這個方法,爲何又被拒了?代碼裏翻了幾遍都沒找到相關的字符,怎麼辦啊…orz
api

認識蘋果審覈規則

知己知彼,百戰百勝。想要跨越審覈這座大山,得知道蘋果審覈到底是怎樣的。那咱們就來研究下蘋果是怎麼對付咱們的。首先,咱們提交給蘋果的,是一個ipa文件,裏面的bin文件,都是編譯好的二進制可執行文件,蘋果生態中叫作machO格式,machO格式定義了各類分段,好比引用的庫列表,定義的類列表,方法列表,協議列表,字符串列表,而後又在一個地址映射表中記載着這些類,方法的對應關係,和實際的機器碼機址。蘋果只要對這些特定的段進行掃描,就能掃出來有沒有引用一些非公開的API,類,系統庫。     根據UC多年的經驗積累,蘋果會特別關注如下幾點xcode

  • 私有庫的引用,這個是絕對不能出現的;
  • 有虛擬物品內購的產品引用了第三方支付,這個也是嚴令禁止的;
  • 只有聲明,但沒有實現的方法名,若是命中了,這個被拒的機率是很是很是高的;
  • 全部的類名,切記不能與系統的私有類同名,爲了減小被拒的可能性,仍是換個名字吧;
  • 全部的字符串,能不與系統的私有類同名的,仍是儘可能不要同名,爲了減小被拒的可能性,仍是換個名字吧;
  • 蘋果掃描的私有API庫,是會針對全部固件版本的;
  • 還有部分應用還會執行運行時掃描,無論你用什麼方法混淆,加密,拼接,都會被蘋果發現。

揭祕巖鼠iOS預審

爲了解決iOS開發者的這個困擾,巖鼠深刻研究瞭如何去發現及應對以上問題,畢竟,提審流程太長了,被拒的滋味真的很差受。微信

  • 首先,咱們須要創建起一套可行的掃描方法;
  • 其次,咱們須要收集全部已知的私有API庫;
  • 最後,須要持續不斷的完善與更新這個私有API庫

創建一套掃描方法

咱們知道,iOS都是自成體系的,不少東西脫離不了macOS系統,咱們須要平臺化,通用化,首先須要解決macOS系統的依賴。因此要把machO格式的解析啃下來,咱們要把所加載的動態庫,全部方法名,類名,有實現的方法名,全部ascii字符串都加載出來。這些都在ipa的bin文件裏面,咱們按照machO格式去讀取出來便可。怎麼作呢?
首先咱們把ipa裏的bin文件解壓出來,而後依次讀取主模塊,各類插件的bin,關於machO格式,這裏簡單說明一下,machO文件會分紅多個段,一個段又分紅多個塊,以下圖:
markdown


而後找出咱們須要的段在哪裏,而後再把裏面的內容讀出來,如__objc_methname塊,__objc_classname塊,就是咱們要找的oc的方法名和類名,固然,若是你在xcode中修改過默認的編譯連接參數,生成的段名可能會有差別,須要在Load commands塊讀出來。這些信息讀取出來後再作一個簡單的加工,就能夠跟咱們的數據庫作對比了。
上面解決了靜態掃描的問題,那麼,運行時的掃描怎麼辦?這裏咱們能夠期待一下私有api掃描增強版,咱們計劃在巖鼠上面運行被掃描的app,在執行深度智能遍歷的時候,經過注入等手段,執行運行時掃描,而後再跟數據庫的私有api作對比。

創建私有API庫

利用RuntimeBrowser,在當前主流固件的真機運行,並導出的全部Frameworks和私有的PrivateFrameworks庫,取出後進行對比,最終把私有API按固件版本入庫。
app

私有API庫智能升級

完成初始化私有API庫的工做後,是否是就一勞永逸了呢?其實不是的,一方面是私有API庫的準確性須要持續提高,另外一方面是新的一些私有API也要持續加入,這樣才能保證iOS預審的有效性和準確率。
巖鼠的私有API庫創建了智能學習機制,會收集阿里內部應用審覈被拒的記錄,分析其中私有API被拒的狀況,主動添加新的私有API,不斷完善私有API庫。與此同時也會創建白名單,提高準確率。
oop

免費試用巖鼠iOS預審

在巖鼠上進行iOS預審十分簡單,只須要上傳待提審的ipa包,稍等幾分鐘,便可查看掃描的結果。
學習


當前巖鼠iOS預審能夠免費試用,歡迎你們來體驗:
yanshu.effirst.com/product/pre…
相關文章
相關標籤/搜索