18

我正在开发一个项目,其中包括来自 Git 的其他存储库。

我想跟上这些存储库的最新信息。了解最新功能、错误修复等。 Qu 1) 在不收到报告的所有问题等电子邮件的情况下,在 Git 上与存储库保持同步的最佳方式是什么?

完成后,我想知道将这些包含到您的项目中的最佳方法。我知道您可以将源代码复制到项目中,但是 cocoapods/sub 模块是做什么用的?例如,使用包含的存储库的最新更改来更新项目的正确方法是什么?

与终端相比,这些方法中是否有任何 GUI?

4

2 回答 2

21

Cocoapods是在 Xcode 项目中包含其他项目的好方法。Cocoapods 项目维护了许多开源库的pod 规范文件列表,其中指定了下载代码的位置以及如何将它们集成到现有项目中。正如您所指出的,您通常必须添加一个git submodule,手动将源文件添加到您的项目中,更新您的构建设置等等。Cocoapods 为您处理所有这些。

我不确定是否有办法在不通知问题的情况下跟踪 Github 项目的更新,但 Cocoapods 肯定可以告诉您是否有任何“pod”已过时。然后是一个命令将它们更新到最新版本。也就是说,通常最好的做法是将您的外部依赖项“锁定”到您知道可以正常工作的特定版本。

使用 Cocoapods

要开始,首先安装 Cocoapods。然后,您只需在根项目目录(包含您的.xcodeproj文件的同一目录)中创建一个名为Podfile. 在内部,您可以指定目标操作系统和依赖项:

platform :ios, '5.0'

pod 'AFNetworking', '0.9.1'
pod 'OHAttributedLabel', '0.1.1'

上面的示例针对 iOS 5.0,并引入了AFNetworkingOHAttributedLabel项目。

然后,在终端中,切换到您的项目目录:

> cd path/to/my/project

并运行pod install

> pod install

这将为您检查最新版本的依赖项。它还会为您生成一个.xcworkspace文件。从现在开始,当您处理项目时,您必须打开 .xcworkspace,而不是 .xcodeproj 文件

在您的新工作区中,您将拥有现有的 Xcode 项目和一个新Pods项目 - 这包含您所有的第三方库。只需像往常一样构建并运行您的应用程序,Pods 项目也将被构建并包含在内。

其他一些有用的 Cocoapods 命令:

> pod outdated

将列出所有有可用更新的依赖项。

> pod search query

将在所有已知的 Pod 规范中搜索“查询”。对查找新库很有用!

教程

图形用户界面

恐怕我不知道 Cocoapods 的任何 GUI,但是您需要知道的终端命令确实不多。熟悉命令行是值得的,因为它是一个非常有用的开发人员工具。

也就是说,据我所知,AppcodeJetbrains 的Objective-C 替代 IDE)计划在下一次更新中添加 Cocoapods 支持。

祝你好运!

于 2013-04-16T08:50:09.757 回答
17

James Frost 的回答很好地解释了如何使用 Cocoapods 及其相对于子模块的优势。

子模块相对于 Cocoapods 的一些重要优势是:

子模块是子存储库- 这不仅意味着 git 和 git GUI 隐式识别它们并且越来越多地支持轻松地使用它们,还意味着您的依赖项与它们的 git 存储库、Cocoapods 驻留在的美妙世界保持联系. 这意味着您可以在项目中协作和测试更改,您的项目通常是详细说明依赖项的灵感来源。

不幸的是,Cocoapods 不维护这个链接,处理依赖意味着从 git 克隆它,超出了 Cocoapods 的范围。 编辑:值得注意的是,Cocoapods 确实允许使用pathorlocal字段在本地 pod 上工作,甚至可以构建自己的 Spec repo,但它仍然不是一个简单的过程。

少了一个工具依赖——正如上一个项目中提到的,子模块是 git 的一个功能,您使用 git 意味着它们可供您使用。任何软件采用 git 意味着它们最终将支持 git 的所有(重要)功能或涵盖常见用例的所有功能。Xcode 5 引入了对 git 和 GUI 的基本支持(它们是工具依赖项,这是真的,但希望只是指示信息如何呈现,git 指示它如何工作),例如 Git Tower,使子存储库的工作变得简单。

Cocoapods 已经走过了漫长的道路,每天都在努力成为一个稳定的、不可或缺的工具。然而,它还没有得到 Apple 的认可,而且 Apple 没有任何理由不发布破坏 Cocoapods 的 Xcode 更改。此外,Cocoapods 依赖于 Ruby。此外,考虑到围绕 Cocoapods 产生了多少关注和社区,Apple 忽略它是愚蠢的。


还值得注意的是,使用一个并不会阻止您使用另一个。这可能是一个令人头疼的问题,或者它可能是您所需要的,也许将 Cocoapods 用于小型类库或具有复杂依赖关系的库以及您将经常与之交互的库的子模块。

于 2013-12-02T08:36:48.363 回答