微信使用了哪些第三方庫

知識小集發表於2019-03-03

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

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

原理

在介紹原理前,需要了解 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 獲取的標頭檔案,可以推出使用的第三方庫為 AFNetworking

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

CREATE TABLE podlib (
    name        TEXT PRIMARY KEY
                     NOT NULL,
    source      TEXT,
    summary     TEXT,
    star        INT,
    file1       TEXT,
    file2       TEXT,
    file3       TEXT,
    source_file TEXT
);
複製程式碼

使用

本工具基於 python 寫的,在 這裡 可以找到原始碼。下載原始碼後修改 main.py 檔案的 IPA_HEADER_PATH 為 class-dump 匯出的標頭檔案目錄。執行 python main.py

IPA_HEADER_PATH = `/Users/lefex/Desktop/header/xxx`
複製程式碼

總結

  • 由於本工具是基於匯出的標頭檔案查詢第三方庫,而有些庫如果不支援 pod,那麼就不能查詢到該三方庫(如果連 Pod 都不支援,你還會用嗎?);
  • 如果專案中的檔名恰好和第三方庫中的檔名相同,會被判定為第三方庫,所以新增了 star 數作為參考(如果 star 數小於 100,你會用嗎?);
  • 由於 xxx.podspec.json 檔案中的 source_files 有時候沒有,導致生成 Github API 時獲取不到原始檔,導致有些pod庫查不出來,這塊需要後續逐步完善資料庫;
  • 查詢出來的第三方庫,會以 star 倒序排列,更容易識別是否為第三方庫。

知識小集是一個團隊公眾號,主要定位在移動開發領域,分享移動開發技術,包括 iOS、Android、小程式、移動前端、React Native、weex 等。每週都會有 原創 文章分享,我們的文章都會在公眾號首發。歡迎關注檢視更多內容。

微信使用了哪些第三方庫

相關文章