首页投稿(暂停使用,暂停投稿)程序员开源工具技巧

CocoaPods的安装使用以及应该注意的点

2017-01-12  本文已影响176人  SuperMario_Nil

前言:好久没写点什么,17年要多“提笔”了,无论是记录自己学习的点滴,还是分享一些技术感悟~给自己定个小目标,今年至少要完成50篇文章。也就是说基本每周出一篇。💪 最近项目中在用CocoaPods,这篇文章再温习一下吧~🤓

night.jpg

What ?

CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具,类似PHP的Composer,Java的Maven,NodeJs的npm。


Why ?

使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方库
在工程中引入第三方库会涉及到许多内容。针对 Objective-C 初级开发者来说,工程文件的配置会让人很沮丧。在配置 build phases 和 linker flags 过程中,会引起许多人为因素的错误。CocoaPods 简化了这一切,它能够自动配置编译选项。而且方便管理第三方库的版本,方便升级与控制。
例如实际开发中需要导入一些第三方库,在没有使用 CocoaPods 以前,我们需要:
1.把这些第三方开源库的源代码文件复制到项目中,或者设置成 git 的 submodule。
2.对于这些开源库通常需要依赖系统的一些 framework,我需要手工地将这些 framework 分别增加到项目依赖中,比如通常情况下,一个网络库就需要增加以下 framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
3.对于某些开源库,我还需要设置-licucore或者 -fno-objc-arc等编译参数
4.管理这些依赖包的更新。
5.检测重复是否添加,是否有多个版本

这些体力活虽然简单,但毫无技术含量并且浪费时间。在使用 CocoaPods 之后,我们只需要将用到的第三方开源库放到一个名为 Podfile 的文件中,然后执行pod install。CocoaPods 就会自动将这些第三方开源库的源码下载下来,并且为我的工程设置好相应的系统依赖和编译参数。【片段摘自巧神博客😉】


How ?

CocoaPods安装:

CocoaPods是用Ruby实现的,要想使用它首先需要有Ruby的环境,我们的MacOS都自带了Ruby环境。请尽可能用比较新的 RubyGems 版本,建议 2.6.x 以上,打开你的终端

gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
gem sources -l https://gems.ruby-china.org
# 确保只有 gems.ruby-china.org
sudo gem update --system # 这里可能要翻墙一下
gem -v

注意,如果遇到 SSL 证书问题,你又无法解决,请直接用 http://gems.ruby-china.org避免 SSL 的问题。
接下来执行安装CocoaPods命令:

sudo gem install cocoapods
pod setup

这步等待时间可能有点长,因为要下载大概几百M的文件,下载到 ~/.cocoapods目录下,如果你等太久,可以试着 cd 到那个目录,用du -sh *来查看下载进度。

当然我们也可以使用CocoaPods国内的镜像索引来加速下载速度

pod repo remove master
pod repo add master https://git.coding.net/CocoaPods/Specs.git
pod repo update

使用CocoaPods:

首先在你的项目目录下执行如下代码:

pod init

然后你会发现刚才的命令创建了一个Podfile 文件
Podfile 文件可以很简单:

target 'MyApp' 
  do pod 'ObjectiveSugar'
end

Podfile文件也可以很复杂:

platform :ios, '9.0'
inhibit_all_warnings!
target 'MyApp' do
  pod 'ObjectiveSugar', '~> 0.5'

  target "MyAppTests" do
    inherit! :search_paths
    pod 'OCMock', '~> 2.0.1'
  end
end
post_install do |installer|
  installer.pods_project.targets.each do |target|
    puts "#{target.name}"
  end
end

具体语法可以参考Podfile指南

这里简单说明一下常用的写法

pod 'MBProgressHUD',
pod 'MBProgressHUD', '0.9.2'
pod 'MBProgressHUD', '~>0.9.2'

对于版本号的个人理解:比如说0.9.2,0.x.x到1.x.x几这样跨度的应该是一个改动很大的版本,有可能会废弃一些老的API,可能会造成一些兼容性需适配问题。0.8.x到0.9.x这样的是增加了一些新功能,同时可能修复了一些bug。0.9.1到0.9.2这样增加版本号的,只是修复了一些bug没太多影响。


写好了Podfile文件之后执行命令:

pod install --verbose
#--verbose参数代表查看这个命令执行的详细过程

然后会生成xxx.xcworkspace,和Podfile.lock以及Pods文件夹。以后打开工程用xxx.xcworkspace

关于Podfile 与 Podfile.lock需注意:

Podfile文件以及Podfile.lock文件应该加入到版本控制中(SVN or Git...),这一点也是官方文档中强调的。Podfile.lock文件记录了当前所依赖的第三方库版本。当团队合作时,务必要保证大家版本一致性,不然可能会造成各种奇奇怪怪的bug以及隐患。


什么时候用pod install 什么时候用pod update ?

当你使用pod install它只解决了Podfile里面,但不在Podfile.lock文件里面的那些库之间的依赖。对于在Podfile.lock里面所列出的那些库,会下载在Podfile.lock里面明确的版本,并不会去检查是否该库有新的版本。

比如说:Podfile文件如下

target 'testCocoaPods' do
  pod 'MBProgressHUD', '~>0.9.1'
end

你当前 Podfile.lock里面已经是0.9.1版本,你再执行pod install的时候,Podfile.lock里面的版本符合Podfile要求就等于没什么操作,即使有0.9.2版本更新也不会下载

当你运行 pod update PODNAME 命令时,CocoaPods会帮你更新到这个库的新版本,而不需要考虑Podfile.lock里面的限制,它会更新到这个库尽可能的新版本,只要符合Podfile里面的版本限制。

如果你运行pod update,后面没有跟库的名字,CocoaPods就会更新每一个Podfile里面的库到尽可能的最新版本。
比如:上面的例子运行 pod update时候,如果有0.9.2版本,CocoaPods会按照你Podfile文件的配置去更新,然后更改Podfile.lock

需要注意的事项:

运行 pod update 有时候你会感觉到特别慢,是因为它首先会去更新podspec,使用--no-repo-update参数可以禁止其做索引更新操作


EOF:文中难免会有一些错误的之处,欢迎大家拍砖~

上一篇下一篇

猜你喜欢

热点阅读