【问题标题】:Working with git submodules/cocoapods使用 git 子模块/cocoapods
【发布时间】:2013-04-07 20:45:09
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios github repository git-submodules cocoapods


    【解决方案1】:

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

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

    使用 Cocoapods

    要开始使用,首先是install 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 的支持。

    祝你好运!

    【讨论】:

    • 现在有一个新的 Xcode 插件来管理 CocoaPods。您应该在 GUI 中使用它。它位于github.com/kattrali/cocoapods-xcode-plugin
    • 好答案。但是,我认为重要的是要注意大多数 Pod 已过时。出于某种原因,许多项目只是“忘记”更新他们的 pod。因此,请务必检查主存储库,确保您的 pod 实际上是最新版本。
    • 感谢您解释 CocoaPods!我希望你给了另一个选项,git submodules,同一种处理,或者至少一句比较
    • Cocoapods 相对于 git 子模块的另一个优势是使用 Cocoapods 自定义子项目的构建方式的接口更加简单。作为 pod 创建者,您可以提供子规范来自定义提供哪些源文件集以及以累积方式指定哪些预处理器。
    【解决方案2】:

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

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

    submodules are sub-repos - 这不仅意味着 git 和 git GUI 隐式识别它们并且越来越多地支持轻松使用它们,还意味着您的依赖项与美妙的世界保持联系他们的 git 存储库,无论是否是 Cocoapod,都驻留在其中。这意味着您可以在项目中协作和测试更改,您的项目通常是详细阐述依赖项的灵感来源。

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

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

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


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

    【讨论】:

    • 优点。我不认为忽略或掩盖子模块相对于 Cocoopods 的这些优势是不公平的。我高度怀疑 Apple 是否会增加对它们的支持(很乐意详细说明),尽管我并不认为这是决定使用一个选项而不是另一个选项的最相关因素。然而,你提到的两点为我解决了争论
    • 它得到了认可,Apple 的 Github 项目 ResearchKit 和 CareKit 都在使用它。
    猜你喜欢
    • 2016-09-10
    • 2016-01-02
    • 2015-04-24
    • 2017-08-30
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2021-03-07
    • 2016-11-13
    相关资源
    最近更新 更多