iOS依赖管理和打包

时间:2015-01-21 19:23:12

标签: ios gradle cocoapods dependency-management

我是iOS开发的新手,来自Android背景。我开始研究iOS中依赖管理的替代方案,发现CocoaPods似乎是最普遍的选择。

在阅读了很多关于这个主题的链接之后,我有点不知所措,想知道在iOS中处理依赖关系的常用方式是什么。

我有两个问题:

1)使用gradle生成库(.aar)项目相当于在iOS中使用什么?如果有任何等效选项。从我所见,可以将静态库和头文件包装到框架中,这些可以在其他应用程序中使用,这是标准的方法吗?

2)如果(1)是正确的,CocoaPods是否提供了一种机制来将框架作为依赖项添加?

2 个答案:

答案 0 :(得分:4)

我没有Android背景,但根据我对.aar文件的理解,CocoaPods做了非常相似的事情。 CocoaPods使用.podspec个文件(描述为here)来生成static libraries(和soon动态框架,这些框架是iOS 8中的新功能),然后链接到您的项目中。

podspec可以定义源供应商链接到您的应用程序的源文件,资产,库或框架。所以它确实支持添加框架作为依赖项,尽管在iOS上根本不支持iOS 8框架。

就“标准”方式而言,我认为这是基于意见。有一些通用的方法可以包含您可以选择的依赖项。

  1. 手动将文件,框架以及您需要的任何其他内容拖到项目中。更新这些更加困难,这也意味着您必须根据库所需的功能(例如ARC)来配置.xcodeproj

  2. 将提供的.xcodeproj拖到项目中,并链接给定项目中的相关目标。如果库提供了可以构建框架或静态库的项目,这可能会很好,在这种情况下,您将引入该库,但它们的项目将处理自定义编译器标志。

  3. 执行上述任一操作,同时将其包含为git submodules。假设项目中没有任何重大变化,这对更新依赖项有很大帮助。

  4. 使用CocoaPods。 CocoaPods将根据semantic versioning(通常)处理所有自定义链接和更新。

  5. 使用Carthage。迦太基是CocoaPods和.xcodeproj解决方案之间的中间人。它将根据git标签定义的语义版本下载代码,然后将生成的框架拖到项目中。

  6. 所有这些选项都有利有弊,决定通常取决于您对包含库的控制感觉,以及您希望它实现的自动化程度。

答案 1 :(得分:1)

我没有Android或iOS背景但是我一直在为这两个平台开发CI工具,这里有答案

  1. 正如您所提到的,来自cocoapods的框架和pod(库)以这种方式分发。例如,看看Apphance。点击spec后,可以看到此可以作为 Apphance-Production.framework 进行访问。

  2. 您将pod添加到 Podfile 并使用pod install命令下载它们。此命令将从代码中访问 Apphance 中的类。有些人确实提交了下载的pod,其他人没有(这就像在源代码控制中添加jar或aars一样)。