iOS 依赖管理和打包

iOS dependency management and packaging

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

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

我有两个问题:

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

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

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

  1. 正如您所提到的,cocoapods 中的框架和 pods(库)就是这样分发的。例如,查看 Apphance. When spec 被点击,可以看到这个 可以作为 Apphance-Production.framework[=25= 访问].

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

我没有 Android 背景,但根据我对 .aar 文件的了解,CocoaPods 的功能非常相似。 CocoaPods 使用 .podspec 文件(描述 here) to generate static libraries (and soon 动态框架,这是 iOS 8 中的新增内容)然后 link 编辑到您的项目中。

podspec 可以定义源文件、资产、库或框架,源供应商可以将其link 装入您的应用程序。所以是的,它确实支持添加框架作为依赖项,尽管直到 iOS iOS.

上根本不支持 8 个框架

至于 'standard' 的实现方式,我认为这是基于意见。有几种通用的方法来包含您可以选择的依赖项。

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

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

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

  5. 使用CocoaPods. CocoaPods will handle all the custom linking and updates based on semantic versioning(通常)。

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

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