关于 Xcode 9 的 API Doc

导读:调研 iOS 私有 API 扫描时,对于最新版 iOS 的私有 API 数据库如何构建这个话题,留了个坑,现在填上。

Xcode 9 的 API Doc 数据源主要是存在于下面这个路径下的两个数据库文件:map.db 和 cache.db

/Applications/Xcode.app/Contents/SharedFrameworks/DNTDocumentationSupport.framework/Versions/A/Resources/external
  1. UICollectionView 为例,在 map.db 的 map 表里查询到 uuid
select uuid from map where source_language = 1 and reference_path = 'uikit/uicollectionview'
  1. 到 cache.db 的 refs 表里查询到 data_id
select data_id from refs where uuid = 'hcLSvaK1nM'
  1. 根据上面查询到的 data_id: 1605 到 fs 子目录(与 db 文件同级)下,即可看到同名文件

经过上面几步拿到的数据文件,是采用苹果新的无损压缩算法LZFSE进行压缩的。Github 上有该算法的参考实现,下载后构建得到命令行工具 lzfse:

./lzfse -decode -i 1605 -o 1605.decoded.json

解压后的文件中,类似下面的字符串即代表实例方法:

"s":[{"k":"instm","t":{"x":"initWithFrame:collectionViewLayout:"}

据此,是不是不难构建出最终的 ios_private.db 喽?

你可能感兴趣的:(关于 Xcode 9 的 API Doc)