當前位置:
首頁 > 最新 > 獲取 APP 使用的第三方庫

獲取 APP 使用的第三方庫

如今,APP 越來越多,公司之間面臨著同一個問題,競品越來越多,公司之間為獲取更多流量不得不在APP的體驗上做足功課。那麼,研究競品變得越來越重要,比如研究競品某個核心功能使用了哪些第三方服務、架構是什麼樣的、某個介面是如何設計的、資料庫是如何設計的、沙盒目錄結構是什麼樣的等。最近研究第三方 APP 比較多,希望可以總結一套研究第三方 APP 的流程,目前正在研究微信,如果有機會分享給讀者朋友們。

研究某個競品APP時,需要了解其使用的第三方庫,使用 class-dump 導出的頭文件非常多,僅靠肉眼查看時,耗時耗力。為了解決這個痛點,便發明了這個工具。下面是獲取某個第三方 APP 使用的第三方庫,可以查看 pod 庫的 star 數,源地址。

AFNetworking- (30982)

Masonry- (16318)

MJRefresh- (11823)

Mantle- (10984)

iCarousel- (10440)

CocoaAsyncSocket- (9991)

原理

在介紹原理前,需要了解 class-dump,它可以根據某個被砸坑的應用,導出APP中所有的頭文件,包含第三方庫的頭文件,那麼可以利用導出的第三庫頭文件反查第三方庫。iOS 的同學都清楚,目前主流的第三方庫都使用 Pod 管理,所有的第三方開源庫都被放到CocoaPods/Specs中。而這些源文件都可以通過 Github 提供的 API 獲取到它的源文件。對比 class-dump 導出的頭文件和通過 Github 提供的 API 獲取到它的源文件即可確定它使用的第三方庫。

以 AFNetworking 為例:

使用 class-dump 導出的頭文件(部分):

AFHTTPRequestSerializer.h

AFHTTPResponseSerializer.h

AFHTTPSessionManager.h

使用 Github 提供的API(部分) 獲取源文件

[{

"name":"AFURLResponseSerialization.h",

"path":"AFNetworking/AFURLResponseSerialization.h"

},

{

"name":"AFURLResponseSerialization.m",

"path":"AFNetworking/AFURLResponseSerialization.m"

},

{

"name":"AFURLSessionManager.h",

"path":"AFNetworking/AFURLSessionManager.h"

}]

對比 class-dump 導出的頭文件 和 使用 Github 提供的 API 獲取的頭文件,可以推出使用的第三方庫為 。

但是這樣有個問題,遍歷 class-dump 導出的頭文件,需要每個頭文件都需要請求Github提供的API,這樣速度非常慢,是無法忍受的。為解決這個問題,需要提前把 中第三方庫的源文件名緩存到資料庫中,這樣就不需要每次從網路中獲取pod庫的源文件。

CREATETABLEpodlib (

nameTEXTPRIMARYKEY

NOTNULL,

sourceTEXT,

summaryTEXT,

starINT,

file1TEXT,

file2TEXT,

file3TEXT,

source_fileTEXT

);

使用

本工具基於 python 寫的,在 可以找到源碼。下載源碼後修改 文件的 為 class-dump 導出的頭文件目錄。執行

IPA_HEADER_PATH="/Users/lefex/Desktop/header/xxx"

總結

由於本工具是基於導出的頭文件查找第三方庫,而有些庫如果不支持 pod,那麼就不能查找到該三方庫(如果連 Pod 都不支持,你還會用嗎?);

如果項目中的文件名恰好和第三方庫中的文件名相同,會被判定為第三方庫,所以添加了 star 數作為參考(如果 star 數小於 100,你會用嗎?);

由於 文件中的 有時候沒有,導致生成 Github API 時獲取不到源文件,導致有些pod庫查不出來,這塊需要後續逐步完善資料庫;

查找出來的第三方庫,會以 star 倒序排列,更容易識別是否為第三方庫。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 知識小集 的精彩文章:

TAG:知識小集 |