我在我的一些项目中使用了CocoaPods,它很酷,很容易更新我的依赖项/开源框架。
但我对CocoaPods的内部工作原理有些怀疑。
在我们的Podfile中,我们只给出了pod的名称,有时也会给出版本,例如
pod "AFNetworking" , "1.3.2"
然后它正确地找到并克隆了AFNetworking repo。这是如何工作的?ruby gems是如何知道实际的仓库在Github中的?pod是否只适用于Github?(因为我看到pod只适用于Github上可用的框架)。如果我们可以在Github之外的其他地方(例如Bitbuket)使用pod作为依赖项,我们如何将该pod添加到我们的Podfile中?
3条答案
按热度按时间whitzsjs1#
CocoaPods在幕后做了很多事情来让你谈论的一切都能正常工作。在相对较高的层次上,实际的“Pod”是在Github here上的一个repo中管理的。这是第三方库供应商提交他们的“Pod”来与CocoaPods一起工作的地方。我会注意到,如果您使用命令行工具
pod search AFNetworking
搜索Pod,您将看到所有与您的搜索词匹配的可用Pod。就Github与其他网站的比较而言,尽管Github上有CocoaPods规范的仓库,但CocoaPods本身只使用普通的Git从仓库中提取源代码,因此你可以从任何网站上的任何Git仓库中提取规范,我们也支持svn,善变和只是普通的老http(s)。如你我对规范的总体工作方式很感兴趣,您可以在specs repo中查看一些规范,您可以从本地计算机上的
~/.cocoapods/repos/master
打开它们或直接编辑一个规范从命令行输入pod spec edit AFNetworking
。htrmnn0y2#
可可豆
CocoaPods
是一个集中式依赖管理,由Podfile
操作,读取依赖和版本,在工作区创建Pod
工程,CocoaPods
实现Implicitly dependency
About(https://stackoverflow.com/a/57836007/4770877)方法:Source code
Closed code
Example(https://stackoverflow.com/a/58096234/4770877)在客户端有一个
Podfile
,Podfile
的核心是一个pod:读取
Podfile
时(在pod install
或pod update
期间),由Cocoapods
创建隐式和显式依赖关系图。之后,管理器应将每个源查找到.podspec
中,该.podspec
通常托管在某个主机中。这就是Cocoapods
集中化的原因。框架“的开发人员负责创建并支持该文件。.podspec
描述了关于框架的元信息,如依赖项、子规范它的主要部分是source
,它告诉Cocoapods
源代码所在的位置,这些源代码将被下载到Pod
项目中。Cocoapods
使用工作空间自动化构建过程并管理隐式依赖项。Cocoapods
将所有必要的信息设置到您的消费者项目中(如搜索pats等)。当您构建消费者项目Xcode pull pod并将其组装在一起时。一个月三次
规范或spec确定常规数据,如模块名称、部署版本等。规范可以包含子规范或多个子规范,以便对源文件进行更精细的控制。每个规范或子规范都可以具有依赖项。默认情况下,如果未指定
default_subspec
,则规范将包括所有子规范模块名称将在以下情况下更改
Local podspec(https://stackoverflow.com/a/57812997/4770877)
CocoaPods version(https://stackoverflow.com/a/59218883/4770877)
iOS Dependency manager(https://stackoverflow.com/a/59257708/4770877)
CocoaPods source_files(https://stackoverflow.com/a/59257783/4770877)
pcrecxhr3#
我可以对其他的答案做一些补充,你也可以通过提供本地路径来安装一个本地pod文件。
即使你可以从git源代码安装pod文件,你也可以 checkout 你想要的分支。