微信使用了哪些第三方庫

現在,APP 愈來愈多,公司之間面臨着同一個問題,競品愈來愈多,公司之間爲獲取更多流量不得不在APP的體驗上作足功課。那麼,研究競品變得愈來愈重要,好比研究競品某個核心功能使用了哪些第三方服務、架構是什麼樣的、某個接口是如何設計的、數據庫是如何設計的、沙盒目錄結構是什麼樣的等。最近研究第三方 APP 比較多,但願能夠總結一套研究第三方 APP 的流程,目前正在研究微信,若是有機會分享給讀者朋友們。前端

研究某個競品APP時,須要瞭解其使用的第三方庫,使用 class-dump 導出的頭文件很是多,僅靠肉眼查看時,耗時耗力。爲了解決這個痛點,便發明了這個工具。下面是獲取微信 使用的第三方庫,能夠查看 pod 庫的 star 數,源地址。python

原理

在介紹原理前,須要瞭解 class-dump,它能夠根據某個被砸坑的應用,導出APP中全部的頭文件,包含第三方庫的頭文件,那麼能夠利用導出的第三庫頭文件反查第三方庫。iOS 的同窗都清楚,目前主流的第三方庫都使用 Pod 管理,全部的第三方開源庫都被放到 CocoaPods/Specs 中。而這些源文件均可以經過 Github 提供的 API 獲取到它的源文件。對比 class-dump 導出的頭文件和經過 Github 提供的 API 獲取到它的源文件便可肯定它使用的第三方庫。ios

以 AFNetworking 爲例:git

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

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 獲取的頭文件,能夠推出使用的第三方庫爲 AFNetworkingjson

可是這樣有個問題,遍歷 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.pyapi

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 等。每週都會有 原創 文章分享,咱們的文章都會在公衆號首發。歡迎關注查看更多內容。緩存

相關文章
相關標籤/搜索