有没有办法通过 API 获取 Pod 规范(版本、名称、日期等)?我发现的最接近的是来自他们网站的搜索请求,但不是 JSON API。
如果你查看 cocoacontrols,一定有类似 API 的东西,因为它们会为你的存储库找到正确的 pod。
背景:我需要查找 pod,看看是否有新版本可用。
我查看了 GitHub Repo,但找不到所需的规格。
我知道这个问题太老了,但无论如何它在谷歌中排名第一。所以,至少还有人会知道 CocoaPods 提供 API。
目前 CocoaPods 系统的唯一部分是命令行工具和 specs repo。我可以想到几种方法可以做到这一点,但它们肯定会比提供的 API 更复杂。
您可以使用 Github 的 API 来查询规范存储库。每个规范的文件夹结构都是相同的,因此您可以查看
repo/specname
以文件夹形式查看可用版本号。
如果您想在本地执行此操作,您可以对
~/.cocoapods/master
中的文件夹执行类似的操作,该文件夹是规范存储库的克隆。
我相信 Cocoapods 的工作原理是直接检查 podspecs GitHub 存储库。您还可以自定义它来查看您选择的自定义规范存储库(例如公司内部的 Pod),但没有用于列出 Pod 的 API。
从技术上讲,有点——参见https://blog.cocoapods.org/CocoaPods-1.7.2/
我必须阅读大量源代码,因为这确实没有记录,但是 Specs 遵循“查找模式”,其中区分大小写的 pod 名称经过 md5 哈希处理,前缀是从十六进制摘要生成的,并且路径已生成。这是它在 python 中的样子:
In [2]: api = 'https://cdn.cocoapods.org'
...: podname = 'FirebaseDynamicLinks'
...: version = '10.13.0'
In [3]: hash = yaml.safe_load(requests.get(f"{api}/CocoaPods-version.yml").text)
...:
...: prefix_lengths = hash['prefix_lengths']
...: prefix_lengths
Out[3]: [1, 1, 1]
In [4]: hashed = hashlib.md5(podname.encode('utf-8')).hexdigest()
...: hashed
Out[4]: '6e53dba4b40e400f2f7e3dab02b2c2b2'
In [5]: r = [hashed[i:i+length] for i, length in enumerate(prefix_lengths)]
...: r.extend([podname, version, f"{podname}.podspec.json"])
...: r
Out[5]:
['6',
'e',
'5',
'FirebaseDynamicLinks',
'10.13.0',
'FirebaseDynamicLinks.podspec.json']
In [6]: spec = requests.get(f"{api}/Specs/{'/'.join(r)}").json()
...: spec['description']
Out[6]: 'Firebase Dynamic Links are deep links that enhance user experience and increase engagement by retaining context post-install, across platforms.'
我个人对 yaml 和 json 的混合感到恼火。看起来,如果你不介意它可能被破坏的话,人们可以假设前三位数字才是重要的。