现在,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 获取的头文件,能够推出使用的第三方库为 AFNetworking
。json
可是这样有个问题,遍历 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
api
IPA_HEADER_PATH = '/Users/lefex/Desktop/header/xxx'
复制代码
xxx.podspec.json
文件中的 source_files
有时候没有,致使生成 Github API 时获取不到源文件,致使有些pod库查不出来,这块须要后续逐步完善数据库;知识小集是一个团队公众号,主要定位在移动开发领域,分享移动开发技术,包括 iOS、Android、小程序、移动前端、React Native、weex 等。每周都会有 原创 文章分享,咱们的文章都会在公众号首发。欢迎关注查看更多内容。缓存