CocoaPods使用详解

来源:互联网 发布:软件架构师薪水 编辑:程序博客网 时间:2024/06/07 13:54

一、什么是CocoaPods


1、为什么需要CocoaPods

在进行iOS开发的时候,总免不了使用第三方的开源库,比如SBJson、AFNetworking、Reachability等等。使用这些库的时候通常需要:

  • 下载开源库的源代码并引入工程
  • 向工程中添加开源库使用到的framework
  • 解决开源库和开源库以及开源库和工程之间的依赖关系、检查重复添加的framework等问题
  • 如果开源库有更新的时候,还需要将工程中使用的开源库删除,重新执行前面的三个步骤,顿时头都大了。。。

自从有了CocoaPods以后,这些繁杂的工作就不再需要我们亲力亲为了,只需要我们做好少量的配置工作,CocoaPods会为我们做好一切!

2、什么是CocoaPods

CocoaPods是一个用来帮助我们管理第三方依赖库的工具。它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我们的工程连接起来,供我们开发使用。

使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方开源库。

二、安装CocoaPods

         CocoaPods是用Ruby实现的,要想使用它首先需要有Ruby的环境。幸运的是OS X系统默认的已经可以运行Ruby了,如果Ruby没有安装,请参考 如何在Mac OS X上安装 Ruby运行环境


1、查看下当前ruby版本:

     打开终端输入 ruby -v


2、更新ruby

         a、先切换gem源(详情请见:https://gems.ruby-china.org/
1
2
gem sources --remove https://rubygems.org/
gem source -a https://gems.ruby-china.org

        b、查看是否切换成功

1
gem source -l

如果出现下图这样的就说明切换成功了, 如果还是官方的源, 请手动重启电脑尝试

        c、切换成功

*** CURRENT SOURCES ***
https://gems.ruby-china.org

        d、接下来就可以开始升级了cocoapods了

1
sudo gem install -n /usr/local/bin cocoapods --pre

        e、然后敲下

1
pod --version

        出现

        1.2.0.beta.3

        恭喜你, 安装成功

        f、剩下的就是设置pod仓库了

1
pod setup


安装过程中可能遇到的问题

        a、gem版本过老

gem是管理Ruby库和程序的标准包,如果它的版本过低也可能导致安装失败,解决方案自然是升级gem,执行下述命令即可:

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. $ sudo gem update --system  

        b、安装完成后,执行pod setup命令时报错:

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /Users/wangzz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:298:in `to_specs': Could not find 'cocoapods' (>= 0) among 6 total gem(s) (Gem::LoadError)  
  2.     from /Users/wangzz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:309:in `to_spec'  
  3.     from /Users/wangzz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_gem.rb:53:in `gem'  
  4.     from /Users/wangzz/.rvm/rubies/ruby-1.9.3-p448/bin/pod:22:in `<main>'  
这就是路径设置的问题,可以通过执行:
[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. $ rvm use ruby-1.9.3-p448  
解决该问题。

三、使用CocoaPods

1 、新建一个项目,名字PodTest


2 、 终端中,cd到项目总目录(注意:包含PodTest文件夹、PodTest.xcodeproj、PodTestTest的那个总目录)

[objc] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. cd /Users/lucky/Desktop/PodTest   
3  、建立Podfile(配置文件)

a、接着上一步,终端输入 vim Podfile



 b、键盘输入 i,进入编辑模式,输入

platform :ios, '7.0' 
pod 'MBProgressHUD', '~> 0.8'


 c、然后按Esc,并且输入“ :”号进入vim命令模式,然后在冒号后边输入wq



注意:键盘输入 :后,才能输入wq。回车后发现PodTest项目总目录中多一个Podfile文件



d、激动人心的时刻到了:

  确定终端cd到项目总目录

  然后输入 pod install



查看项目根目录:



注意:

        a、现在打开项目不是点击 PodTest.xodeproj了,而是点击 PodTest.xcworkspace

        b、第三方库会以成静态库方式引入工程使用

     CocoaPods会将所有的第三方库以target的方式组成一个名为Pods的工程,该工程就放在刚才新生成的Pods目录下。整个第三方库工程会生成一个名称为libPods.a的静态库提供给工程使用。

        c、xcworkspace(PodTest.xcworkspace)的作用是管理工程和第三方库PodTest工程和Pods工程被以workspace的形式组织和管理。

四、补充

1、如果有一些包已经存在了,或者我们更改了Podfile里面的版本,可以使用以下命令更新

$ pod update

2、关于Podfile文件编辑时,第三方库版本号的各种写法:

复制代码
pod ‘AFNetworking’      //不显式指定依赖库版本,表示每次都获取最新版本pod ‘AFNetworking’,  ‘2.0//只使用2.0版本pod ‘AFNetworking’, ‘>2.0//使用高于2.0的版本pod ‘AFNetworking’, ‘>=2.0//使用大于或等于2.0的版本pod ‘AFNetworking’, ‘<2.0//使用小于2.0的版本pod ‘AFNetworking’, ‘<=2.0//使用小于或等于2.0的版本pod ‘AFNetworking’, ‘~>0.1.2//使用大于等于0.1.2但小于0.2的版本,相当于>=0.1.2并且<0.2.0pod ‘AFNetworking’, ‘~>0.1//使用大于等于0.1但小于1.0的版本pod ‘AFNetworking’, ‘~>0//高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本
复制代码


3、CocoaPods的基本安装及使用都详细的说明了,但还有一些补充,当需要同时导入多个第三方时候怎么办 ?

这就需要修改Podfile了,就是用vim编辑的那个保存在项目根目录中的文件,修改完了Podfile文件,需要重新执行一次pod install命令。

例如:

platform :ios

pod 'AFNetworking',  '~> 2.0'


4、CocoaPods可以查找你想要的第三方库

终端输入命令:pod search x x x

然后重新编辑Podfile文件,按照之前的步骤,把更多的库都导入项目!


5、上文中“建立Podfile(配置文件)接着上一步,终端输入 vim Podfile”步骤,如果不习惯使用vim编辑器,也可以使用linux命令touch,生成一个空的Podfile文件,然后使用其他的文本编辑器都可以,例如:

[objc] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. lizhongfudeMacBook-Pro:~ lizhongfu$ cd /Users/lizhongfu/Desktop/TestProject   
  2. lizhongfudeMacBook-Pro:TestProject lizhongfu$ touch Podfile  
编辑好Podfile文件后,就可以执行pod install第三方导入了(详见:补充第1条),CocoaPods就开始为我们做下载源码、配置依赖关系、引入需要的framework等一些列工作。

6、如果已经生成了CocoaPods管理的工程,则可以在Xcode中编辑Podfile,编辑保存后,别忘记cd到根目录,调用pod install命令


7、项目存在多个Target的时候,需要配置Podfile文件来支持新增加的Target,否则只支持项目默认建立时生成的Target:

a、如果新建一个Target,命名为Second,并且Second与Test两个Target所需要的第三方支持相同,也就是使用相同的Pods依赖库,则可以使用

link_with关键字:

[objc] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. link_with 'Test''Second'  
  2. platform :ios  
  3. platform :ios, ‘9.0’    
  4. pod 'AFNetworking''~> 2.0'  

b、如果不同的Target需要不同的依赖库,则可以

[objc] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. platform :ios  
  2. target :'Test' do  
  3. pod 'Reachability'  
  4. pod 'SBJson'     
  5. pod 'AFNetworking'   
  6. end    
  7.     
  8. target :'Second' do  
  9. pod 'OpenUDID'   
  10. end  


8、出现/Library/Ruby/Gems/2.0.0/gems/claide-0.8.1/lib/claide/command.rb:417:in `help!': [!] You cannot run CocoaPods as root. (CLAide::Help)

重新打开一个终端,然后pod install,不要sudo pod install。


9、如果$ pod install时候遇到:

Analyzing dependencies  
Fetching podspec for `UAAppReviewManager` from `..`  
[!] Unable to satisfy the following requirements:  
- `UAAppReviewManager (from `..`)` required by `Podfile`  


10、如果要移除Cocoapods,则可以:

a. 删除工程文件夹下的Podfile、Podfile.lock及Pods文件夹

b. 删除xcworkspace文件

c. 使用xcodeproj文件打开工程,删除Frameworks组下的Pods.xcconfig及libPods.a引用

d. 在工程设置中的Build Phases下删除Check Pods Manifest.lock及Copy Pods Resources



ps:如果将cocoapods集成到工程中后不小心修改或删除了其相关文件导致无法便以通过例如:不小心把

Pods.xcconfig给删除了然后出现diff: /../Podfile.lock: No such file or directory,用上面的方法删除cocoapods后,

再重新$sudo pod install一下就好了。

如果编译的时候出现权限问题,对工程文件夹$sudo chmod 777 path-to-project-folder/*

$sudo chown 777 path-to-project-folder/*


11、当库正常导入,但还是找不到相关头文件,则可以:

在TARGETS -> Search Paths -> User Header Search Paths 中 写入 ${SRCROOT}再将后面参数改为recursive




12、Xcode - ld: library not found for -lPods

当新增加一个Target,并且pod install后,由于创建项目是默认创建的Target的Build Phases中引用了旧的.a,例如libPods.a,当新增加Targget后,libPods.a已经变成了libPods-Test.a,而新增加的Target名字为Second,依赖的.a为libPods-Second.a。所以libPods.a此时已经不再被引用,并且不会被生成,如果任何地方引用了就会报错,解决办法是出现问题的Target的Build Phases中删除无用的.a引用,例如libPods.a



巧大神这里有更多内容,其中介绍了pod制作及Podfile.lock的相关内容《用CocoaPods做iOS程序的依赖管理》

14、如果pod install之后,一直停留在Updating local specs repositories,可以试一试 pod install --verbose --no-repo-update,原因是pod install被墙了


 15、(2016年6月11日)The dependency 'xxx' is not used in any concrete target

在Podfile文件中需要明确指出使用第三方库的target,例如:

platform:ios,'7.0'
pod 'MJRefresh', '~> 3.1.0'
pod 'SDWebImage', '~> 3.7.6'
pod 'SVProgressHUD', '~> 2.0.3'
pod 'AFNetworking', '~> 3.1.0'

改为:

platform:ios,'7.0'
target "MyTarget" do
pod 'MJRefresh', '~> 3.1.0'
pod 'SDWebImage', '~> 3.7.6'
pod 'SVProgressHUD', '~> 2.0.3'
pod 'AFNetworking', '~> 3.1.0'


Cocoapods 降级处理

 移除pod组件,查看pod的安装位置

$ which pod

手动删除这个组件

$ sudo rm -rf <path>

卸载当前版本

sudo gem uninstall cocoapods

下载旧版本

sudo gem install cocoapods -v 0.39.0

查看当前pod 版本

pod --version

 

如果在操作的过程中,报错如:

则是因为 ruby 版本导致的,请参考淘宝网官方说明:https://ruby.taobao.org

当前的解决方式直接更新一下ruby指向:

$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/

 

参考资料:

http://blog.csdn.net/lizhongfu2013/article/details/26384029

http://blog.csdn.net/wzzvictory/article/details/18737437

http://www.cnblogs.com/jys509/p/4839803.html

http://www.cocoachina.com/ios/20161103/17943.html





0 0
原创粉丝点击