CocoaPods是iOS项目的依赖管理工具,该项目源码在Github上管理。开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得咱们能够节省设置和第三方开源库的时间。
在使用CocoaPods以前,开发项目须要用到第三方开源库的时候,咱们须要
1.把开源库的源代码复制到项目中
2.添加一些依赖框架和动态库
3.设置-ObjC,-fno-objc-arc等参数
4.管理他们的更新
在使用CocoaPods后,咱们只须要把用到的开源库放到一个名为Podfile的文件中,而后执行pod install.Cocoapods就会自动将这些第三方开源库的源码下载下来,而且为咱们的工程设置好响应的系统依赖和编译参数。ios
CocoaPods的原理是将全部的依赖库都放到另外一个名为Pods的项目中,而后让主项目依赖Pods项目,这样,源码管理工做都从主项目移到了Pods项目中。Pods项目最终会编译成一个名为libPods.a的文件,主项目只须要依赖这个.a文件便可。git
CocoaPods能够方便地经过Mac自带的RubyGems安装。
打开Terminal,而后键入如下命令:
$ sudo gem install cocoapodsgithub
执行完这句若是报告如下错误:
ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - Errno::ETIMEDOUT: Operation timed out - connect(2) (https://rubygems.org/latest_specs.4.8.gz)
ERROR: Possible alternatives: cocoapodssql
这是由于ruby的软件源rubygems.org由于使用亚马逊的云服务,被我天朝屏蔽了,须要更新一下ruby的源,过程以下:
$ gem sources -l (查看当前ruby的源)
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -lxcode
若是gem太老,能够尝试用以下命令升级gem
$ sudo gem update --system
升级成功后会提示: RubyGems system software updatedruby
而后从新执行安装下载命令
$ sudo gem install cocoapods
这时候应该没什么问题了服务器
接下来进行安装,执行:
$ pod setupapp
Terminal会停留在 Setting up CocoaPods master repo 这个状态一段时间,是由于要进行下载安装,并且目录比较大,须要耐心等待一下.若是想加快速度,可以使用cocoapods的镜像索引.(文章末尾附使用镜像索引的方法)
安装成功后,你会看到:框架
进入工程所在的目录(工程根目录)
执行命令 touch Podfile
这句是说新建一个名为Podfile的文件(不能写成别的名字,也能够本身在工程根目录里面直接新建)编辑器
而后对改文件进行编辑,执行命令 open -e Podfile
第一次执行这个命令,会有一个空白文件打开,能够先放在一边,
Podfile文件的格式应该以下:
platform :ios, '7.0'
pod 'AMap2DMap', '~> 2.5.0'
pod 'AFNetworking', '~> 2.5.3'
pod 'SDWebImage', '~> 3.7.2'
须要注意的几点:platform那一行,ios三个字母都要小写,并且与前面的冒号之间不能有间隔,后面的版本号也能够不写,可是有些开源库对版本是有要求的,好比要在6.0以上才能运行,遇到这样的开源库就须要写上版本号。
platform下面就是Cocoapods须要集成的开源库,根据你的须要肯定集成那些库。
举个例子:
我要集成AFNetworking这个库类,须要在Cocoapods里面先搜索是否有须要的库,能够在Terminal中输入:
pod search AFNetworking
回车以后就能够看到和你搜索的关键字相关的一些库类,如图:
其中第一个就是咱们须要的,把pod ‘AFNetworking’, ‘~>2.5.3’
那一行复制到咱们的Podfile文件中,保存修改。
而后在Terminal中执行 :
pod install
pod install 被墙了,请你们换成pod install --verbose --no-repo-update
这样,AFNetworking就已经下载完成而且设置好了编译参数和依赖,之后使用的时候切记以下两点:
1.今后之后须要使用Cocoapods生成的 .xcworkspace文件来打开工程,而不是使用之前的.xcodeproj文件
2.每次更改了Podfile文件,都须要从新执行一次pod update命令
ps:当执行pod install以后,除了Podfile,还会生成一个名为Podfile.lock的文件,它会锁定当前各依赖库的版本,以后即便屡次执行pod install也不会更改版本,只有执行pod update才会改变Podfile.lock.在多人协做的时候,这样能够防止第三方库升级时候形成你们各自的第三方库版本不一致。因此在提交版本的时 候不能把它落下,也不要添加到.gitignore中.
1.
[!] Invalid Podfile
file: undefined local variable or method `en_US' for #<Pod::Podfile:0x00000102a5d8b0>. Updating CocoaPods might fix the issue.
缘由:单引号格式,多是手动输入致使
解决办法:系统偏好设置-键盘-文本-将“使用智能引号和破折号”一项取消勾选-再将podfile里面的单(双)引号修改一下
2.ArgumentError - invalid byte sequence in US-ASCII
缘由:字符集错误
解决办法:
使用locale命令查看当前的字符集,若是都是zh,须要执行如下命令:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
而后再使用locale命令查看,已经改过来了
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
$(inherited)
flag, or[!] 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
的地方,保存(这种我没试过)
4.
[!] Oh no, an error occurred.
It appears to have originated from your Podfile at line 2.
Search for existing GitHub issues similar to yours:
https://github.com/CocoaPods/CocoaPods/search?q=%2FUsers%2Fxiao6%2FMusic%2FGI06%E5%AE%9E%E8%AE%AD%E8%8A%B8%E8%8C%97%E8%8C%B6%E5%8F%B6%2FYMTea%2FPodfile%3A2%3A+syntax+error%2C+unexpected+%27%3A%27%2C+expecting+end-of-input%0Aplatform+%3A+ios%2C+%277.0%27%0A++++++++++%5E&type=Issues
If none exists, create a ticket, with the template displayed above, on:
https://github.com/CocoaPods/CocoaPods/issues/new
Be sure to first read the contributing guide for details on how to properly submit a ticket:
https://github.com/CocoaPods/CocoaPods/blob/master/CONTRIBUTING.md
Don't forget to anonymize any private data!
缘由:这个问题比较蛋疼,弄了很久,仔细看发现就是由于Podfile文件里面 platform 那一行 冒号和ios之间多了一个空格。。。。其实这个错误在报错的时候ruby已经给出了,只是一开始没有好好看:
全部项目的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上的镜像。
http://code4app.com/article/cocoapods-install-usage