CocoaPods的简介:
CocoaPods负责管理iOS项目中第三方框架。CocoaPods的项目源码在Github上管理。项目从2011年8月12日开始,CocoaPods的出现使得我们可以节省设置和更新第三方开源库的时间,是一个第三方框架的管理工具!
一、在安装CocoaPods之前,首先要在本地安装好Ruby环境:
步骤1 - 安装 RVM
具体RVM 是干什么的,说实话,我也没搞懂,查了一下,应该是第三方安装工具
$ curl -L https://get.rvm.io | bash -s stable
安装过程可能会需要sudo管理员权限也可能不需要管理员密码视个人情况而定,以及自动通过homebrew安装依赖包,等待一段时间后就可以成功安装好 RVM。
然后,载入 RVM 环境(新开 Termal 就不用这么做了,会自动重新载入的)
$ source ~/.rvm/scripts/rvm
检查一下是否安装正确
$ rvm -v
正确安装以后会显示下面一些信息
rvm 1.22.17 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
步骤2 - 安装Homebrew工具
点击���Homebrew安装方法,Homebrew是MAC OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。
步骤3 - 用 RVM 安装 Ruby 环境
使用下面的命令列出已知的ruby版本
$ rvm list known
可以选择现有的rvm版本来进行安装(下面以rvm 2.0.0版本的安装为例)
$ rvm install 2.0.0
同样继续等待漫长的下载,编译过程,完成以后,Ruby, Ruby Gems 就安装好了。
查询已经安装的ruby
$ rvm list
卸载一个已安装版本
$ rvm remove 1.9.2
(3.1)在安装过程中可能存在的问题
(1).发生了读写错误信息,如图所示:
这个错误是因为Homebrew发生了not writable的错误,也就是说Homebrew不可写入的错误
解决办法的终端命令是:
$ rvm autolibs read-only # read more here:https://rvm.io/rvm/autolibs
$ rvm install ruby
输入这个终端命令之后,就会进入疯狂的下载模式了
(3.2)出现can not find 'brew' command,please report a bug http....
这个错误的时候,是指电脑没有装brew软件,回到步骤二中去安装brew软件
步骤4 - 设置 Ruby 版本
RVM 装好以后,需要执行下面的命令将指定版本的 Ruby 设置为系统默认版本
$ rvm 2.3.0 --default
同样,也可以用其他版本号,前提是你有用 rvm install 安装过那个版本,现在最新的版本已经升级到2.5.1这个版本了,你可以使用最新版本,也可以使用你安装的版本,但是之前有的老版本已经停止维护了,所以在安装的时候最好安装还在维护的版本
这个时候你可以测试是否正确,查看一下ruby版本:
$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
$ gem -v
2.5.1
然后检查ruby源
admin@admindeiMac ~ % gem sources -l
*** CURRENT SOURCES ***
https://rubygems.org/
下面是将ruby的源换成国内可用的,国外的网址有时访问不了
之所以要添加国内的 ruby-china源,是因为taobao源已经停止维护了,所以此处替换的是ruby-china源,且尽量确保只有一个。
//移除原有镜像源:
gem sources --remove https://rubygems.org/
//添加国内镜像源
gem sources --add https://gems.ruby-china.com
但是在终端执行过后,我这边电脑有了一个新的报错,这个是因为最新的系统中由于OpenSSL出现了漏洞,苹果已经开始弃用这个了,所以出现的问题,问题提示如下:
ERROR: While executing gem ... (Gem::Exception) Unable to require openssl, install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources
这个是由于缺乏OpenSSL导致的,解决办法有两个,第一是安装OpenSSL这个软件,第二是使用http地址,即https://gems.ruby-china.org/
修改成http://gems.ruby-china.org/
的源地址即可以,这里只是针对
要想验证是否替换成功了,可以执行:
$ gem sources -l
正常的输出结果:
CURRENT SOURCES
到这里就已经把Ruby环境成功的安装到了Mac OS X上,接下来就可以安装cocoapods了
二、安装cocoapods,并使用cocoapods管理第三方框架
安装cocoapods只需一行命令
$ sudo gem install cocoapods
然后去执行
pod setup
去进行cocoapods的安装,然后你会看到出现了Setting up CocoaPods master repo,卡住不动了,暂时不要着急,这个下载的东西比较大,跟网络有关系,安心等待一会
如果在在pod setup中出现了error: RPC failed; curl 56 SSLRead() return error -36这个问题有两种解决办法可以尝试:
(1).这个是由于电脑里面拥有两个客户端,或者是之前电脑使用了两个客户端导致的
在终端输入”sudo xcode-select -switch “,然后,打开Xcode—>右键显示包内容,找到Developer文件夹拖到终端里面,回车,再重新执行 pod setup
(2).第二个原因可能是因为是postBuffer默认值较小的原因,配置一个大一点的值,终端输入
git config --global http.postBuffer 524288000
最后在等待一会,发现底部出现完成的提示信息,就说明cocoapods的安装工作就完成了,下面是使用的简单介绍:
以下以AFNetWorking为例,说一下cocoapods如何管理第三方框架
首先,搜索一下cocoapods是否支持AFNetWorking
$ pod search AFNetWorking
稍后会列出AFNetWorking的一些信息,还有一些AFN中最新的以及常见的版本,因此可以使用cocoapods来管理
在终端中进入(cd命令)你项目所在目录(可以直接在终端中cd 然后将目标文件直接拖拽到终端去),然后在当前目录下输入:
$ pod init
然后在项目中回多出一个Podfile文件,打开这个文件,是下图样子
这个时候以SDWebImage跟AFN为例子,将其文件修改成
这时候,你就可以利用CocoPods下载相对应的类库了。还是在终端中的当前项目目录下,运行以下命令:
$ pod install
因为是在你的项目中导入相对应的类库,这就是为什么这个命令需要你进入你的项目所在目录中运行。
运行上述命令之后,小编的终端出现一些信息:(不用管)
最后一句注意下:
[!] From now on use CocoaPodsDemo.xcworkspace
.
注意最后一句话,意思是:以后打开项目就用 CocoaPodsDemo.xcworkspace 打开,而不是之前的.xcodeproj文件。
至此,就完成了在此项目中使用cocoapods管理三方;
特别提示:如果出现 setting up cocoapods master repo 请等待;
三、使用过程中遇到的问题
1 - 卡在Creating search index for spec repo 'master'..,
卡在Creating search index for spec repo 'master'..,千万别着急,这只是因为是你第一次安装使用cocoapods正常卡顿,具体是往~/.cocoapods文件里导库,耐心等待就好,时间不一定;
2 - 报“Unable to find a pod with name, author, summary, or descriptionmatching”错误,
请在终端执行“rm ~/Library/Caches/CocoaPods/search_index.json”命令,然后再“pod search AFNetworking”即可。
3 - 发现有的时候在执行pod init的时候不能正常地创建出来pod File文件,显示的错误如下:
――― MARKDOWN TEMPLATE ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
### Command
/Users/wangyongwangyongwang/.rvm/rubies/ruby-2.3.0/bin/pod init
### Report
* What did you do?
* What did you expect to happen?
* What happened instead?
### Stack
CocoaPods : 1.0.1
Ruby : ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
RubyGems : 2.6.6
Host : Mac OS X 10.12.6 (16G29)
Xcode : 9.0 (9A235)
Git : git version 2.10.1
Ruby lib dir : /Users/wangyongwangyongwang/.rvm/rubies/ruby-2.3.0/lib
Repositories : master - https://github.com/CocoaPods/Specs.git @ 74d8002565cb1b582426b5affef1b97991b4c14c
### Plugins
cocoapods-deintegrate : 1.0.1
cocoapods-plugins : 1.0.0
cocoapods-search : 1.0.0
cocoapods-stats : 1.0.0
cocoapods-trunk : 1.0.0
cocoapods-try : 1.1.0
### Error
RuntimeError - [Xcodeproj] Unknown object version.
/Users/wangyongwangyongwang/.rvm/gems/ruby-2.3.0@global/gems/xcodeproj-1.3.0/lib/xcodeproj/project.rb:217:in `initialize_from_file'
/Users/wangyongwangyongwang/.rvm/gems/ruby-2.3.0@global/gems/xcodeproj-1.3.0/lib/xcodeproj/project.rb:102:in `open'
/Users/wangyongwangyongwang/.rvm/gems/ruby-2.3.0@global/gems/cocoapods-1.0.1/lib/cocoapods/command/init.rb:41:in `validate!'
/Users/wangyongwangyongwang/.rvm/gems/ruby-2.3.0@global/gems/claide-1.0.0/lib/claide/command.rb:333:in `run'
/Users/wangyongwangyongwang/.rvm/gems/ruby-2.3.0@global/gems/cocoapods-1.0.1/lib/cocoapods/command.rb:50:in `run'
/Users/wangyongwangyongwang/.rvm/gems/ruby-2.3.0@global/gems/cocoapods-1.0.1/bin/pod:55:in `<top (required)>'
/Users/wangyongwangyongwang/.rvm/rubies/ruby-2.3.0/bin/pod:22:in `load'
/Users/wangyongwangyongwang/.rvm/rubies/ruby-2.3.0/bin/pod:22:in `<main>'
/Users/wangyongwangyongwang/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `eval'
/Users/wangyongwangyongwang/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `<main>'
――― TEMPLATE END ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
[!] Oh no, an error occurred.
Search for existing GitHub issues similar to yours:
https://github.com/CocoaPods/CocoaPods/search?q=%5BXcodeproj%5D+Unknown+object+version.&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!
wangwang:WWTestCocoaPodsError wangyongwangyongwang$
执行pod init的时候的错误提示
这里是指pods的版本过低了,只需要将其pods版本更新一样就可以了
gem install cocoapods --pre
4 - mapping values are not allowed in this context at line 3 column 4
――――――――――MARKDOWN TEMPLATE ――――――――――
### Report
* What did you do?
* What did you expect to happen?
* What happened instead?
### Stack
CocoaPods : 0.29.0
Ruby : ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
RubyGems : 2.1.11
Host : Mac OS X 10.9.2 (13C64)
Xcode : 5.1 (5B130a)
Ruby lib dir : /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib
Repositories : master - https://github.com/CocoaPods/Specs.git @ bd6736d07b16c98ab7a1dae04697cae002f25a9b
### Podfile
ruby
platform :ios,'8.0'
pod 'MBProgressHUD', '~> 0.8'
### Error
Psych::SyntaxError - (/Users/MAXJ/.cocoapods/repos/master/CocoaPods-version.yml): mapping values are not allowed in this context at line 3 column 4
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/psych.rb:205:in `parse'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/psych.rb:205:in `parse_stream'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/psych.rb:153:in `parse'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/psych.rb:129:in `load'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/psych.rb:299:in `block in load_file'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/psych.rb:299:in `open'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/psych.rb:299:in `load_file'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-0.29.0/lib/cocoapods/sources_manager.rb:261:in `version_information'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-0.29.0/lib/cocoapods/sources_manager.rb:222:in `repo_compatible?'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-0.29.0/lib/cocoapods/sources_manager.rb:281:in `master_repo_functional?'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-0.29.0/lib/cocoapods/command.rb:39:in `parse'
/Library/Ruby/Gems/2.0.0/gems/claide-0.4.0/lib/claide/command.rb:179:in `parse'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-0.29.0/lib/cocoapods/command.rb:38:in `parse'
/Library/Ruby/Gems/2.0.0/gems/claide-0.4.0/lib/claide/command.rb:211:in `run'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-0.29.0/lib/cocoapods/command.rb:51:in `run'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-0.29.0/bin/pod:24:in `'
/usr/bin/pod:23:in `load'
/usr/bin/pod:23:in `'
―――――――――― TEMPLATE END ――――――――――
[!] Oh no, an error occurred.
Search for existing github issues similar to yours:
https://github.com/CocoaPods/CocoaPods/search?q=%28%2FUsers%2FMAXJ%2F.cocoapods%2Frepos%2Fmaster%2FCocoaPods-version.yml%29%3A+mapping+values+are+not+allowed+in+this+context+at+line+3+column+4&type=Issues
If none exists, create a ticket, with the template displayed above, on:
https://github.com/CocoaPods/CocoaPods/issues/new
Don't forget to anonymize any private data!
解决方案:
$ sudo rm -rf ~/.cocoapods/repos/master
$ pod setup
5.出现了[!]The 'pods-xxx' target has libraries with conflicting name: libcrypto.a and libssl.a这个错误,如下图所示:
解决这个问题的主要方法就是降低pods的版本号,即是讲最新版本的pods卸载,然后在重新安装一个指定版本的pods,终端指令如下:
查看pods的版本号
pod --version
卸载pods
sudo gem uninstall cocoapods
安装指定版本的pods
gem install cocoapods -v 1.0.0
然后可以利用查看版本号的命令去查看是否成功修改了
参考文献:放点其他的链接吧
cocoapods详细安装
iOS安装CocoaPods详细过程
cocopods 安装报错 RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
Cocoapods安装
pods中openssl的报错处理,M1处理