什么是Cocoapods?我发现许多开发人员在开发应用程序来安装API时一直在使用Pod,但我还没有理解为什么你不能手动导入文件。他们的目的是什么,他们有什么帮助?
答案 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
sudo gem install cocoapods
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
pod 'AFNetworking'
pod 'ARAnalytics', '~> 2.7'
对于每个库,您可以选择指定最低版本。
pod setup pod install open YourApp.xcworkspace
现在你的项目准备好了。请注意上面的最后一个命令是打开YourApp.xcworkspace,而不是YourApp.xcodeproj,否则在构建应用程序时会出现“找不到库-lPods”错误。
答案 3 :(得分:0)
使用cocoapods或任何依赖项管理器,您可以指定一个框架以及要使用的版本。
这样,团队中的所有开发人员都安装了相同的版本。
其逻辑非常类似于package.json
+ package-lock.json
或Gemfile
+ Gemfile.lock
,其中列出了所有node
或gem
依赖项
除了每个项目之外,语言对于是否提交依赖项的实际文件都有自己的约定,即所有项目的确包含依赖项和版本列表。
一种思想流派将您的pods目录视为衍生数据。只要在项目中同时检查了podfile
和lock
文件,而且您应该...那么,任何人理论上都可以通过运行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 install
或pod 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
podspec
和podfile
之间的区别是什么?podspec
定义广告连播本身。podfile
列出了项目的pod依赖项。Podfile
和Podfile.lock
看起来像什么?您可以比较Signal的Podfile和Podfile.lock
或者比较Wordpress的Podfile和Podfile.lock
这两种思想流派都必须致力于Podfile
和Podfile.lock
。但是第二思想流派也将实施一项巨大的 Pods 项目