iOS依赖管理和打包
我对iOS开发完全陌生,来自Android背景。 我开始研究iOS中依赖管理的替代方案,并发现CocoaPods似乎是最普遍的选择。
在阅读了很多关于这个主题的链接之后,我有点茫然,想知道在iOS中处理依赖关系的常用方式是什么。
我有两个问题:
1)在iOS中,等同于使用gradle生成库(.aar)项目的是什么? 如果有任何同等的选择。 从我看到的,可以将静态库和头文件包装到框架中,并且这些可以在其他应用程序中使用,这是实现它的标准方法吗?
2)如果(1)是正确的,CocoaPods是否提供了一种机制来添加框架作为依赖关系?
我没有Android背景,但是从我了解的.aar
文件中可以看出CocoaPods的功能非常类似。 CocoaPods使用.podspec
文件(在这里描述)来生成静态库(并且很快动态框架在iOS 8中是新的),然后链接到您的项目中。
podspec
可以定义源供应商链接到应用程序的源文件,资产,库或框架。 所以是的,它确实支持将框架添加为依赖项,尽管直到iOS 8完全不支持iOS 8框架。
就“标准”做法而言,我认为这是基于意见。 有几种常用的方法可以包含您可以选择的依赖关系。
手动将文件,框架和其他任何你需要的东西拖到你的项目中。 更新这些更加困难,这也意味着您必须根据库需要哪些功能来配置.xcodeproj
(例如ARC)
将提供的.xcodeproj
拖动到您的项目中,并链接给定项目的相关目标。 如果库提供了一个可以构建框架或静态库的项目,这可能会很好,在这种情况下,您需要将该库引入,但其项目将处理自定义编译器标志。
在将它们包括为git子模块时,执行上述任一操作。 假设项目没有任何大的改变,这对更新依赖关系有很大的帮助。
使用CocoaPods。 CocoaPods将根据语义版本处理(通常)来处理所有的自定义链接和更新。
使用迦太基。 Carthage是介于CocoaPods和.xcodeproj
解决方案之间的产品。 它会根据git标签定义的语义版本下载代码,然后将生成的框架拖到您的项目中。
所有这些选项都有优点和缺点,通常决定于您对包含图书馆的控制以及您希望如何实现自动化的感受。
我没有Android或iOS背景,但是我一直在为这两个平台开发CI工具,这里有答案
正如你刚才提到的那样,一个来自cocoapods的框架和豆荚(库)就是这样分配的。 例如,看看Apphance。 当点击spec时,可以看到这个库将作为Apphance-Production.framework访问。
您将Pod添加到Podfile并使用pod install
命令下载它们。 该命令将使Apphance的类可以从代码访问。 有些人确实提交了下载的豆荚,其他人则没有(这就像添加罐子或空间到源代码控制)。
上一篇: iOS dependency management and packaging
下一篇: Managing dependencies in static libraries with cocoapods