内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

获取App使用的第三方库(iOS)

2018-06-08 19:11 出处:清屏网 人气: 评论(0

如今,APP 越来越多,公司之间面临着同一个问题,竞品越来越多,公司之间为获取更多流量不得不在APP的体验上做足功课。那么,研究竞品变得越来越重要,比如研究竞品某个核心功能使用了哪些第三方服务、架构是什么样的、某个接口是如何设计的、数据库是如何设计的、沙盒目录结构是什么样的等。最近研究第三方 APP 比较多,希望可以总结一套研究第三方 APP 的流程,目前正在研究微信,如果有机会分享给读者朋友们。

研究某个竞品APP时,需要了解其使用的第三方库,使用 class-dump 导出的头文件非常多,仅靠肉眼查看时,耗时耗力。为了解决这个痛点,便发明了这个工具。下面是获取某个第三方 APP 使用的第三方库,可以查看 pod 库的 star 数,源地址。

  • AFNetworking https://github.com/AFNetworking/AFNetworking.git - (30982)

  • Masonry https://github.com/cloudkite/Masonry.git - (16318)

  • MJRefresh https://github.com/CoderMJLee/MJRefresh.git - (11823)

  • Mantle https://github.com/github/Mantle.git - (10984)

  • iCarousel https://github.com/nicklockwood/iCarousel.git - (10440)

  • CocoaAsyncSocket https://github.com/robbiehanson/CocoaAsyncSocket.git - (9991)

原理

在介绍原理前,需要了解 class-dump,它可以根据某个被砸坑的应用,导出APP中所有的头文件,包含 第三方库的头文件 ,那么可以利用导出的第三库头文件反查第三方库。iOS 的同学都清楚,目前主流的第三方库都使用 Pod 管理,所有的第三方开源库都被放到  CocoaPods/Specs https://github.com/CocoaPods/Specs 中。而这些源文件都可以通过 Github 提供的 API 获取到它的源文件。对比 class-dump 导出的头文件和通过 Github 提供的 API 获取到它的源文件即可确定它使用的第三方库。

以 AFNetworking 为例:

使用 class-dump 导出的头文件(部分):

AFHTTPRequestSerializer .h

AFHTTPResponseSerializer .h

AFHTTPSessionManager

.h

使用 Github 提供的 API https://api.github.com/repos/AFNetworking/AFNetworking/contents/AFNetworking (部分) 获取源文件

[{

"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 写的,在 https://github.com/lefex/WeChatShot 可以找到源码。下载源码后修改  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 倒序排列,更容易识别是否为第三方库。

分享给小伙伴们:
本文标签: App第三方库

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号