1. 程式人生 > >【原】iOS查詢私有API

【原】iOS查詢私有API

喜接新專案往往預示的會出一堆問題。解決問題的同時往往也就是學到更多東西的時候,這也許就是學習到新東西最直接最快速的方法吧!
小編經過努力,新專案終於過測試了,可是被蘋果大大給拒了,好苦啊,最近的稽核真的是沒有誰了。這回被拒是因為專案中存在私有api,下圖為被拒資訊。

這就坑了啊,這麼大一個專案,我如何定位呢?

如果是程式碼裡面運用到私有api,那就簡單了,直接command+Shift+F,就可以定位了!prefs:root= 就是原來程式碼裡面的,小編找到後果斷刪除了!

最麻煩的就是在第三方SDK中的私有api(com.apple.springboard.lockcomplete

),實在不知道如何定位了。在被拒訊息中也提示了我們如何定位,百度+Google走一波,學習了一下,隨便寫個筆記。好記性不如爛筆頭嘛!

方法1:strings檢測

這個方法是我在被拒資訊中看到的蘋果大大建議的方法,步驟如下:

1、獲取release的ipa包,打包是選擇的方式為:App Store

2、將 .ipa 修改為 .zip,減壓,獲取到兩個資料夾Payload、Symbols

3、開啟命令列,cd 到 Payload 裡面的 app,然後使用 strings 命令進行查詢

strings - -a -arch armv7 "工程名" | grep com.apple.springboard.lockcomplete

還有一種命令,直接生成一個 txt 檔案。

strings - -a -arch armv7 "工程名" > /Users/admin/Desktop/strings.txt

執行後會在桌面上出現一個 strings.txt 檔案,檔案的路徑和名字隨個人開發習慣

兩種命令獲取方式都沒有定位到具體位置,只是告訴我們存在這個私有api

方法2:otool工具(xcode自帶,可以直接在終端中使用)

前兩步同方法1
terminal中 cd 到 Payload 裡面的 app
然後使用如下命令

otool -L appName

這個命令會列出你所有使用的系統庫,檢查一下給出的列表中有沒有私有api的庫

如果對命令不熟悉還可以使用

otool -help

去檢視命令幫助文件

方法3:全域性搜尋(建議使用)

這個方法是我認為最直接最有效的方法!

1、 cd 到你的工程目錄

2、使用全域性搜尋命令(注意最後要加一個點)

grep -r lockcomplete .

這個方法直接定位到這個私有api出現在 AmazonFling.framework 中。

到這裡,解決上述第三方庫的私有API的問題,就是直接替換掉新的SDK,當然如果新的第三方庫也有私有API的話,那就只能捨棄了,否則基本無解。

小編比較幸運,直接更換最新的 AmazonFling.framework 後,就消除了私有api(com.apple.springboard.lockcomplete)。在發版前,使用這兩個方法都進行了驗證,私有api不存在了!