什么是Cocoapods?

时间:2014-03-07 21:35:37

标签: cocoapods

什么是Cocoapods?我发现许多开发人员在开发应用程序来安装API时一直在使用Pod,但我还没有理解为什么你不能手动导入文件。他们的目的是什么,他们有什么帮助?

4 个答案:

答案 0 :(得分:35)

“CocoaPods是Swift和Objective-C Cocoa项目的依赖管理器。它有超过3万个库,用于超过190万个应用程序.CocoaPods可以帮助您优雅地扩展项目。”通过http://cocoapods.org

从本质上讲,它可以帮助您将第三方库,框架集成到您的产品中,而无需担心如何设置和配置您的项目,这有时会非常痛苦。

关于为什么不能在项目中包含文件?

  • 由于这些是第三方,因此每次有新版本时都必须下载并复制到项目中?可以说,你的项目中有10个库或框架,现在想象一下它需要你检查其中是否有任何你想要更新的新版本的时间?如果某些东西不起作用,最糟糕的是,你需要恢复到以前的版本吗?这需要花费时间并且令人讨厌,CocoaPods只需输入pod update并更新那些有更新版本的版本。

  • 现在如果你想要一个特定图书馆的v1.1?您可以轻松浏览Git提交历史记录,找出您需要哪一个?使用CocoaPods,您只需说pod 'AFrameworkLib', '1.1'

  • 每个lib都需要使用一组配置来设置项目以使其工作,为10个左右的库执行此操作然后修复冲突本身就很痛苦。使用CocoaPods时,会自动处理。

  • 最后但并非最不重要的一点是,您必须为所有第三方库提供许可证,以便向该库的原始开发人员提供信用。想象一下,复制10个许可证文档并确保它们是最新的? CocoaPod会自动在项目中创建一个确认文件,您可以将其包含在适当的位置。

答案 1 :(得分:30)

CocoaPods是Objective-C项目的依赖管理器。它有数千个库,可以帮助您优雅地扩展项目。最终,它的目标是通过创建一个更加集中的生态系统来提高第三方开源库的可发现性和参与度。

项目的依赖关系在一个名为Podfile的文本文件中指定,CocoaPods解析库之间的依赖关系,获取生成的源代码,然后在Xcode工作区中将它们链接在一起以构建项目。

项目链接:link

规格(第三方工具):link

入门指南:link

答案 2 :(得分:6)

CocoaPods是Objective-C项目的依赖管理工具,类似于Maven的Java项目,它是用Ruby编写的,由几个Ruby Gems组成。我们的想法是,一旦您将第三方库添加到项目中,您将不再需要检查是否有更新的版本。 CocoaPods将为您处理。它还使得逆转回到某个版本的库非常容易。要使用它,请按照以下步骤操作。有关更多详细信息,请访问官方网站http://cocoapods.org

  1. 在Mac上运行以下命令
  2.   

    sudo gem install cocoapods

    1. 在cocoapods.org中搜索您想要的库,然后在Xcode项目目录中创建一个名为Podfile的文本文件,其中包含
    2. 等条目
        

         source 'https://github.com/CocoaPods/Specs.git'
         platform :ios, '8.0'
      
         pod 'AFNetworking'
         pod 'ARAnalytics', '~> 2.7'
      

      对于每个库,您可以选择指定最低版本。

      1. 然后运行这些命令以启动项目目录中的所有必要组件
      2. pod setup
        pod install
        open YourApp.xcworkspace
        

        现在你的项目准备好了。请注意上面的最后一个命令是打开YourApp.xcworkspace,而不是YourApp.xcodeproj,否则在构建应用程序时会出现“找不到库-lPods”错误。

答案 3 :(得分:0)

使用cocoapods或任何依赖项管理器,您可以指定一个框架以及要使用的版本

这样,团队中的所有开发人员都安装了相同的版本。

其逻辑非常类似于package.json + package-lock.jsonGemfile + Gemfile.lock,其中列出了所有nodegem依赖项


除了每个项目之外,语言对于是否提交依赖项的实际文件都有自己的约定,即所有项目的确包含依赖项和版本列表。

对于iOS,在提交pods文件夹时有两种思路

  • 一种思想流派将您的pods目录视为衍生数据。只要在项目中同时检查了podfilelock文件,而且您应该...那么,任何人理论上都可以通过运行pod install在任何时候重新创建该环境。也就是说,您不需要提交pods项目<-这种方法要求每个用户都安装Cocoapods。它也与javascript节点世界的工作原理非常相似。服务器只是查看您的package.json并为您下载依赖项。

  • 另一种观点认为,因为您的pods目录包含运行项目所需的基本文件...您应该完全对其进行检入。这样,任何人都可以下载您的整个存储库并运行它。无需其他步骤。对于没有Cocoapods经验的新手开发人员来说,这更容易,因为项目的编译不需要您运行任何命令。尽管这种方法可能会使您的存储库变得肿,并且可能会遇到pod合并冲突。 Pod合并冲突can be resolved as easily大多数 iOS项目就是这样做的。

上面的两个项目符号主要来自这个很棒的视频CocoaPods and Lockfiles

什么是Podfile

这是每个目标的pod依赖项列表(例如,Apple Watch或Test目标的依赖项可能不同于主要的iOS应用)。作为开发人员,您将列出依赖项以及所需的版本。例如在信号Podfile中,要使用YapDatabase/SQLCipher窗格,然后将其添加到Podfile like this

pod 'YapDatabase/SQLCipher', :git => 'https://github.com/signalapp/YapDatabase.git', branch: 'signal-release'

什么是Podfile.lock

这是您的pod依赖项以及它们的依赖项以及git url及其使用的标记/版本/提交的快照。当您运行pod installpod update时,将为您生成文件。您自己不要对其进行更改。

如果您已将YapDatabase/SQLCipher添加为广告连播,则Podfile.lock将为您生成 these lines

- YapDatabase/SQLCipher (3.1.1):
  - YapDatabase/SQLCipher/Core (= 3.1.1)
  - YapDatabase/SQLCipher/Extensions (= 3.1.1)

锁是捕获两个分支之间差异的好方法-假设它们都更新了相同的行。

什么是podspec

类似这样的事情。它具有pod的名称,版本,主页,作者,源以及需要插入的源文件类型。

Pod::Spec.new do |spec|
  spec.name         = 'Reachability'
  spec.version      = '3.1.0'
  spec.license      = { :type => 'BSD' }
  spec.homepage     = 'https://github.com/tonymillion/Reachability'
  spec.authors      = { 'Tony Million' => 'tonymillion@gmail.com' }
  spec.summary      = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
  spec.source       = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
  spec.source_files = 'Reachability.{h,m}'
  spec.framework    = 'SystemConfiguration'
end

podspecpodfile之间的区别是什么?

  • podspec定义广告连播本身。
  • podfile列出了项目的pod依赖项。

真实的PodfilePodfile.lock看起来像什么?

您可以比较Signal的PodfilePodfile.lock

或者比较Wordpress的PodfilePodfile.lock

这两种思想流派都必须致力于PodfilePodfile.lock。但是第二思想流派也将实施一项巨大的 Pods 项目