喜接新項目往往預示的會出一堆問題。解決問題的同時往往也就是學到更多東西的時候,這也許就是學習到新東西最直接最快速的方法吧!
小編經過努力,新項目終于過測試了,可是被蘋果大大給拒了,好苦啊,最近的審核真的是沒有誰了。這回被拒是因為項目中存在私有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 命令進行查找
1
|
strings - -a -arch armv7 "工程名" | grep com.apple.springboard.lockcomplete |
還有一種命令,直接生成一個 txt 文件。
1
|
strings - -a -arch armv7 "工程名" > /users/admin/desktop/strings.txt |
運行后會在桌面上出現一個 strings.txt
文件,文件的路徑和名字隨個人開發習慣
兩種命令獲取方式都沒有定位到具體位置,只是告訴我們存在這個私有api
方法2:otool工具(xcode自帶,可以直接在終端中使用)
前兩步同方法1
terminal中 cd 到 payload 里面的 app
然后使用如下命令
1
|
otool -l appname |
這個命令會列出你所有使用的系統庫,檢查一下給出的列表中有沒有私有api的庫
如果對命令不熟悉還可以使用
1
|
otool -help |
去查看命令幫助文檔
方法3:全局搜索(建議使用)
這個方法是我認為最直接最有效的方法!
1、 cd 到你的工程目錄
2、使用全局搜索命令(注意最后要加一個點)
1
|
grep -r lockcomplete . |
這個方法直接定位到這個私有api出現在 amazonfling.framework
中。
到這里,解決上述第三方庫的私有api的問題,就是直接替換掉新的sdk,當然如果新的第三方庫也有私有api的話,那就只能舍棄了,否則基本無解。
小編比較幸運,直接更換最新的 amazonfling.framework
后,就消除了私有api( com.apple.springboard.lockcomplete
)。在發版前,使用這兩個方法都進行了驗證,私有api不存在了!:smile:
參考資料:
https://www.jianshu.com/p/921a8b2315ce
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.jianshu.com/p/a110392db690