- 版权声明:本文为博主原创文章,未经博主允许不得转载。
CocoaPods简介
每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 语言的 Maven,nodejs 的 npm。随着 iOS 开发者的增多,业界也出现了为 iOS 程序提供依赖管理的工具,它的名字叫做:CocoaPods。
CocoaPods项目的源码 在 Github 上管理。该项目开始于 2011 年 8 月 12 日,经过多年发展,现在已经成为 iOS 开发事实上的依赖管理标准工具。开发 iOS 项目不可避免地要使用第三方开源库,CocoaPods 的出现使得我们可以节省设置和更新第三方开源库的时间。
我在开发猿题库客户端时,使用了 24 个第三方开源库。在没有使用 CocoaPods 以前,我需要:
- 1.把这些第三方开源库的源代码文件复制到项目中,或者设置成 git 的 submodule。
- 2.对于这些开源库通常需要依赖系统的一些 framework,我需要手工地将这些 framework 分别增加到项目依赖中,比如通常情况下,一个网络库就需要增加以下 framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
- 3.对于某些开源库,我还需要设置
-licucore
或者-fno-objc-arc
等编译参数 - 4.管理这些依赖包的更新。
这些体力活虽然简单,但毫无技术含量并且浪费时间。在使用 CocoaPods 之后,我只需要将用到的第三方开源库放到一个名为 Podfile 的文件中,然后执行pod install
。
CocoaPods 就会自动将这些第三方开源库的源码下载下来,并且为我的工程设置好相应的系统依赖和编译参数。
CocoaPods的安装及使用
安装
安装的方式非常简单,Mac下已经自带了ruby,只要使用ruby的gem命令就可以安装了。打开的Mac的终端,在终端运行下面的命令:
$ [sudo] gem install cocoapods
$ pod setup
说明:执行
$ pod setup
这步可能比较慢,需要多等待一段时间,也可能是网络的问题
更新
当然我们也可以更新我们的CocoaPods,同样也是使用ruby的gem命令:
$ [sudo] gem update cocoa pods```
然而你也可以更新CocoaPods的预览版,执行下面的命令:
$ [sudo] gem update cocoapods --pre```
查找第三方库
如果我们不知道cocoaPods管理的库中,是否有你想要的库,那么你可以通过$ pod search xxx命令进行查找,以下是我用$ pod search sdwebimage查找到的所有可用的库:
-> SDWebImage (3.5.1)
Asynchronous image downloader with cache support with an UIImageView
category.
pod 'SDWebImage', '~> 3.5.1'
- Homepage: https://github.com/rs/SDWebImage
- Source: https://github.com/rs/SDWebImage.git
- Versions: 3.5.1, 3.5, 3.4, 3.3, 3.2, 3.1, 3.0, 2.7.4, 2.7, 2.6, 2.5, 2.4
[master repo]
- Sub specs:
- SDWebImage/Core (3.5.1)
- SDWebImage/MapKit (3.5.1)
- SDWebImage/WebP (3.5.1)```
>注:我省略了两个库,没有全列出。
#####使用
假设我的Desktop上有一个已经存在的一个项目名称叫做:CocoaPodsTest,首先,进入项目的根目录,并在根目录下创建一个名叫Podfile的文件(没有任何后缀):
$ cd Desktop/CocoaPodsTest/ '进入项目根目录,根据自己项目实际目录'
$ vim Podfile '创建Podfile文件,你可以选择你自己喜欢的编辑器'```
注:vim的简单用法,$ vim fileName创建文件fileName,并打开;按i进入插入模式,输入文本;按esc进入命令模式后,按:wq或ZZ退出并保存。
然后,在Podfile文件中按以下的格式将依赖库的名字列出:
platform :ios, '6.0' '平台、版本'
target 'CocoaPodsText' do `项目target`
pod 'SDWebImage', '~> 3.5.1' '开源库名称、版本'
pod 'AFNetworking', '~> 2.0.3' '开源库名称、版本'```
保存Podfile文件后,执行如下安装的命令:
$ pod install```
当安装命令执行成功后,会输出:
Analyzing dependencies
Downloading dependencies
Installing AFNetworking (2.0.3)
Installing SDWebImage (3.5.1)
Generating Pods project
Integrating client project
[!] From now on use `CocoaPodsTest.xcworkspace`.```
哈哈,看到类似这样的输出就是成功了。你所需要的第三方开源库都下载好了,并且设置好了相应的依赖以及编译参数。在我们以后用的时候一定要记住以下两点:
>1. 最后一行是一个警告,提醒我们需要注意:从现在开始,需要通过`xxx.xcworkspace`打开的我们的项目。而不是之前我们一直用的`xxx.xcodeproj`
>2. 当我们每次修改了`Podfile`这个文件后,一定要记得执行命令:`$ pod install`,还可以执行`$ pod update`来更新类库
###常见问题
1.[!] Invalid Podfile file: undefined local variable or method `en_US' for #<Pod::Podfile:0x00000102a5d8b0>. Updating CocoaPods might fix the issue.
原因:单引号格式,可能是手动输入导致
解决办法:系统偏好设置-键盘-文本-将“使用智能引号和破折号”一项取消勾选-再将podfile里面的单(双)引号修改一下
2.如果在执行sudo gem install cocoapods的时候报以下错误:
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/pod
并且你的操作系统是EI Caption,可是尝试使用以下方法来代替上面的安装命令:
$ sudo gem install -n /usr/local/bin cocoa pods
附:如何使用CocoaPods的镜像索引:
所有项目的Podspec文件都托管在https://github.com/CocoaPods/Specs,
第一次执行pod setup时,CocoaPods会将这些podspec索引文件更新到本地的~/.cocoapods目录下,
这个索引文件比较大,所以第一次更新时非常慢.
友好人士在国内的服务器建立了Cocoapods索引库的镜像,
所以执行索引跟新操作时候会快很多.具体操作方法如下:
$ pod repo remove master
$ pod repo add master https://gitcafe.com/akuandev/Specs.git
$ pod repo update
这是使用gitcafe上的镜像,将以上代码中的 https://gitcafe.com/akuandev/Specs.git
替换成 http://git.oschina.net/akuandev/Specs.git 即可使用oschina上的镜像。```
3.ArgumentError - invalid byte sequence in US-ASCII
原因:字符集错误
解决办法:
使用locale命令查看当前的字符集,如果都是zh,需要执行以下命令:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
然后再使用locale命令查看,已经改过来了
[!] The YMTea [Debug] target overrides the OTHER_LDFLAGS build setting defined in `Pods/Target Support Files/Pods/Pods.debug.xcconfig'. This can lead to problems with the CocoaPods installation
Use the $(inherited) flag, or
Remove the build settings from the target.
[!] The YMTea [Release] target overrides the OTHER_LDFLAGS build setting defined in `Pods/Target Support Files/Pods/Pods.release.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
原因:我是在已有项目中集成Cocoapods的时候遇到这个问题,原因是项目 Target 中做了一些设置,CocoaPods 也做了默认的设置,如果两个设置结果不一致,就会造成问题。
解决方法:我想要使用 CocoaPods 中的设置,分别在我的项目中定义PODS_ROOT 和 Other Linker Flags的地方(build settings),把他们的值用$(inherited)替换掉,进入终端,执行 pod update
警告没了,回到 Xcode,build通过。
网上还流行另外一种简单粗暴的方法:点击项目文件 project.xcodeproj,右键显示包内容,用文本编辑器打开project.pbxproj,删除OTHER_LDFLAGS的地方,保存(这种我没试过)
网友评论