iOS项目集成cocoaPods

一、Cocoa Pods简介

Cocoa Pods是一个负责管理iOS项目中第三方资源的工具,它的项目源代码在Github上面管理,得益于活跃的Github开发者社区大神们的不断维护,从2011年8月该项目启动以来,它保持活跃更新。开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得我们可以节省设置和更新第三方开源库的时间。

在我们有了CocoaPods这个工具之后,只需要将用到的第三方开源库放到一个名为Podfile的文件中,然后在命令行执行$pod install命令,CocoaPods就会自动将这些第三方资源库的源代码下载下来,并且为当前的工程设置好响应的系统依赖和编译参数。

二、Cocoa Pods的安装

(1)安装

安装的方式非常简单,Mac下已经再带了ruby,只要使用ruby的gem命令就可以安装了。打开Mac终端工具,在终端运行下面的命令,

 
  1. [sudo] gem install cocoapods

  2. pod setup

说明,上面的[sudo]可以省略,这两个步骤都是进行网络请求的过程,所以需要一定的等待时间。

(2)更新

如果我们修改了Podfile文件,那么就需要更新CocoaPods,使用下面的ruby的gem命令来更新,

[sudo] gem update cocoapods

(3)查找第三方库

可以使用pod search + lib_name来搜索第三方库,查看版本,如下命令所示,

sudo pod search sdwebImage

说明:SDWebimage是一个用于图片缓存的开源库,是对UIImageView类的扩展。

三、Cocoa Pods的使用

现在我在Desktop/develop文件夹下面新建了一个项目,参考CocoaChina中的一个教程,就是一个完整的天气App,项目名称为SimpleWeather,那么接下来这样操作使用Cocoa Pods,

(1)进入项目SimpleWeather.project所在的文件夹,在终端输入以下命令,

cd Desktop/develop/SimpleWeather

(2)在该目录中,通过Vim新建Podfile

vim Podfile

(3)通过i(insert模式),插入如下的语句,

 
  1. platform :ios, '7.0' 

  2.   

  3. pod 'Mantle' 

  4. pod 'LBBlurredImage' 

  5. pod 'TSMessages' 

  6. pod 'ReactiveCocoa'

这样就指定了第三方资源的iOS版本、开源库主要包括:Mantle、LBBlurredImage、TSMessages、ReactiveCocoa,这些都不重要,这里只是示范而已。

输入完成以后退出vim并保存,先Esc然后输入:wq,表示写入并退出。

(4)在终端输入$pod install,

pod install

初始化pod也是一个网络请求下载的过程,稍等一段时间,如果输入的资源名称没有问题,那么过一段时间就会在终端得到初始化成功的提示。

四、通过WorkSpace来进行项目代码的编写

进入项目文件夹,可以看见一个后缀名未.workspace的文件,双击打开。从现在开始我们通过来SimpleWeather.xcworkspace管理项目、编写代码,而不是之前的SimpleWeather.xproj,打开workspace文件,Xcode项目的文件结构如下图所示,

第一个箭头所指的就是SimpleWeather项目;第二个箭头就是Pods帮我们生成的项目,它来管理需要的资源库;第三个箭头指向的就是Podfile里面指定的第三方开源库。

还有需要注意的是每当我们修改了Podfile这个文件之后,一定要在项目所在文件夹执行$pod install命令,还可以执行$pod update来更新类库。

总结:

这里是我在开发过程中简单总结的,有很多没有考虑到的细节,我会根据自己遇到的问题再不断地更新这个博客。在上家公司工作的时候就遇到一些CocoaPods更新时候需要最高权限的问题,我尽量在后面重现,帮助遇到该问题的朋友解决这个问题。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods

可以用来方便的统一管理这些第三方库。

一、安装 

由于网上的教程基本都大同小异,但细节之处还不是很完善,所以借机会在这里补充下: 

注:要使用CocoaPods,那就要下载安装它,而下载安装CocoaPods需要Ruby环境    

1、Ruby环境搭建 

当前安装环境为Mac mini 10.10.3 Mac  OS 本身自带Ruby,但还是更新一下保险,因为我第一次安装在没有更新Ruby的情况下就失败了。  

1-1 查看下当前ruby版本:打开终端输入 ruby -v(确实安装了,不过用这个版本接下来工作失败了,所以更新下ruby)

1-2 更新ruby

终端输入如下命令(把Ruby镜像指向taobao,避免被墙,你懂得)

1、gem sources --remove https://rubygems.org/ (该地址被墙了)
2、gem sources -a https://ruby.taobao.org/ 
3、gem sources -l  (用来检查使用替换镜像位置成功)

最新操作细则参照:RubyGems 镜像 - 淘宝网

2、下载安装CocoaPods  

终端输入:sudo gem install cocoapods 

 显示如上信息表示已经安装成功

PS: 升级10.11后,运行pod命令出现:

-bash: pod: command not found

解决办法:

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

之后pod命令可以使用了。


如果pod update / pod install 卡在:

Updating local specs repositories

等待即可,或者

可以使用 "pod install --verbose --no-repo-update" 进行下载,原因可能x被墙。

 (CocoaPods其他相关问题处理操作方法

3、使用CocoaPods

 3-1  新建一个项目,名字PodTest

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

例如: cd /Users/KingKong/Desktop/PodTest

3-3 建立Podfile(配置文件)

输入 touch Podfile

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

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

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

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

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

激动人心的时刻到了:确定终端cd到项目总目录,然后输入 pod install,等待一会,大约3分钟。

查看项目根目录:

注意:现在打开项目不是点击 PodTest.xodeproj了,而是点击 PodTest.xcworkspace

对于工程发生的变化,有几点需要说明:

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

CocoaPods会将所有的第三方库以target的方式组成一个名为Pods的工程,该工程就放在刚才新生成的Pods目录下。整个第三方库工程会生成

一个名称为libPods.a的静态库提供给工程使用。

b、xcworkspace(PodTest.xcworkspace)的作用是管理工程和第三方库

PodTest工程和Pods工程被以workspace的形式组织和管理。 

打开项目后看到项目结构并且测试一下:

运行结果:

4、补充:  

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

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

例如: 

platform :ios

pod 'JSONKit',       '~> 1.4'

pod 'AFNetworking',  '~> 2.0' 

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

终端输入命令:pod search UI

疯了!我怎么查找这么大众的关键字,好多库~~

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

3、上文中“建立Podfile(配置文件)接着上一步,终端输入 vim Podfile”步骤,如果不习惯使用vim编辑器,也可以使用linux命令touch,

      生成一个空的Podfile文件,然后使用其他的文本编辑器都可以,例如:  

1     KingKong-Pro:~ kingkong$ cd /Users/KingKong/Desktop/TestProject   
2     KingKong-Pro:TestProject kingkong$ touch Podfile  

编辑好Podfile文件后,就可以执行pod install第三方导入了(详见:补充第1条),CocoaPods就开始为我们做下载源码、配置依赖关系、

引入需要的framework等一些列工作。

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

 

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

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

link_with关键字:

1 link_with 'Test', 'Second'  
2 platform :ios  
3 platform :ios, ‘9.0’    
4 pod 'AFNetworking', '~> 2.0' 

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

复制代码

 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   

复制代码

6、出现/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。

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

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

8、如果要移除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/* 

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

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

  

10、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

 

11、pod update  

若果Podfile中指定的依赖库版本不是写死的,当对应的依赖库有了更新,无论有没有Podfile.lock文件都会去获取Podfile文件描述的允许获取到的最新依赖库版本。 

12、在引用第三方,如果想明确第三方版本号的时候,还有一些小细节:

1     pod 'AFNetworking'      //不显式指定依赖库版本,表示每次都获取最新版本  
2     pod 'AFNetworking', '2.0'     //只使用2.0版本    
3     pod 'AFNetworking', '> 2.0'     //使用高于2.0的版本    
4     pod 'AFNetworking', '>= 2.0'     //使用大于或等于2.0的版本    
5     pod 'AFNetworking', '< 2.0'     //使用小于2.0的版本    
6     pod 'AFNetworking', '<= 2.0'     //使用小于或等于2.0的版本    
7     pod 'AFNetworking', '~> 0.1.2'     //使用大于等于0.1.2但小于0.2的版本    
8     pod 'AFNetworking', '~>0.1'     //使用大于等于0.1但小于1.0的版本    
9     pod 'AFNetworking', '~>0'     //使用最新版本,与不显示指定依赖库版本相同  

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

13、彻底 删除/卸载CocoaPods所有引用的方法 

 1)查询当前安装的cocoapod 的相关信息 gem list 如图

 2)删除所有的引用项

  1、sudo gem uninstall cocoapods -v 1.0.0
  2、sudo gem uninstall cocoapods-core -v 1.0.0
  3、sudo gem uninstall cocoapods-stats -v 1.0.0
  4、sudo gem uninstall cocoapods-search -v 1.0.0
  5、sudo gem uninstall cocoapods-plugins -v 1.0.0
  6、sudo gem uninstall cocoapods-deintegrate -v 1.0.0
  7、sudo gem uninstall cocoapods-downloader -v 1.0.1 
  8、sudo gem uninstall cocoapods-trunk -v 1.0.0
  9、sudo gem uninstall cocoapods-try -v 1.0.0

  注:-v 1.0.0 版本号对应我们第一步中查询到的版本号。

3)删除.cocoapods目录,在终端输入以下命令: 

   1、cd ~/.cocoapods/ 

  2、sudo -rm -rf ~/.cocoapods/

14、安装指定的cocoapod版本到 local 目录

 sudo gem install -n /usr/local/bin cocoapods -v 1.0.0  

15、

  1. RPC failed; curl 56 SSLRead() return

  2. error -36

 问题处理 先说解决方案:
1.访问 https://github.com/CocoaPods/Specs,然后将Specs项目fork到自己的github账户上
2. 下载GitHub Desktop, 然后clone Specs项目。
3. 将clone的Specs项目的文件夹改名为master,然后拖到/Users/用户名/.cocoapods/repos目录下。
4. 运行pod setup 

PS:pod setup的本质就是将https://github.com/CocoaPods/Specs上的Specs项目clone到/Users/用户名/.cocoapods/repos目录下。若此目录下已有Specs项目,则会将项目更新到最新的状态。由于Specs很大,容易导致pod setup失败。这时就需要我们手动安装Specs。若直接从github上下载zip文件,由于缺少git文件,会导致cocoa pods不使用。若用git clone,由于文件过大,容易导致失败。但是使用GitHub Desktop软件,则会提高clone的成功率,并且会给出clone的进度。


如果您觉得阅读完本文对您有帮助,请点一下“推荐”按钮,您的推荐将是我写作的最大动力;本文版权归作者和博客园共有,来源网址:http://www.cnblogs.com/ChinaKingKong/欢迎各位转载,但未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接否则保留追究法律责任的权利。

///////////////////////////////////////////////////////////////////////////////////////////

1.首先我们要打开我们的终端:

2.在终端输入 这条命令  gem sources -l

2.1如果是和我是一样的显示,则镜像已添加,无需更改,如果不一样,则需要进行更改

这里输出的如果是 https://rubygems.org/ 镜像的话,

我们要删除这个镜像,然后添加镜像:https://ruby.taobao.org/ 具体操作命令如下:

<1> 删除原始镜像:gem sources --remove https://rubygems.org/

<2> 添加新的镜像:gem sources -a https://ruby.taobao.org/

<3> 查看是否更改成功:再次输入以下命令: 如2中图所示,那么我们镜像更改成功了

3.接下来我们要进行安装 cocoapods 的重要步骤了。。。

输入:sudo gem install -n /usr/local/bin cocoapods

大概10几分钟,就会安装成功了,成功后的样子

3.1 查看是否安装成功  输入: pod search AFNetworking

如果出现下图所示,表示安装成功。

4. 接下来我们来使用cocoapods

  4.1 首先我们先创建项目,如果创建完之后,如果知道路径的直接cd 到你的项目中去,不知道的直接 在 Finder里,找到 项目文件夹,直接拖进 终端运行 

(cd —> 项目文件根目录)

 4.2 上面就是我的项目的的根目录(切记一定要到项目的根目录),然后在这里我们要创建Podfile,

命令如下:touch Podfile

如下图所示: 我们创建Podfile 成功

4.3 接下来我们就要操作Podfile 文件了,说到这里有二种方法来写我们的Podfile文件

第一种使用vim

第二种直接打开Podfile 来写入我们需要的东西 (然后在进行其他操作即可)

4.3.1 先说第一种 vim 操作

使用之前我们比如我们要加入 AFNetworking 这个第三方库,我们执行一下命令:pod search AFNetworking 

 命令:pod search AFNetworking  显而易见是进行搜索AFNetworking 这个第三方网络请求的库

所有如果想要添加那个库的话,我们可以直接在终端打印 pod search ***库文件名 ,然后会显示出,这个库的所有版本,下图是我打印的的AFNetworking的所有版本,我画红色线条的哪里就是我们要写入到我们Podflie文件里面的内容

4.3.1.1  我们来使用Vim 编辑器,终端打印  vim Podfile  如下图所示:

里面写入的参数:platform  : iOS,'7.0'  (注:这个参数表示为最低支持的系统版本)

第二个参数就是我们上一步执行搜索出来的内容,复制到这里就Ok了

(注:如图所示,我们加入了我们需要的东西,写入完成了,然后我们要保存退出,这里要怎么退出来vim呢?,写入完成后,我们点击左上角的esc按钮,然后输入冒号(:英文的冒号),然后输入wq,(wq 的意思是保存退出的意思),然后回车) 如图所示:

然后在终端中在输入 pod install   , cocoapods 即安装成功,进行使用

4.3.1.2 这里我们介绍第二种方法,直接在我们的项目中使用Podfile 文件来写入上面的内容(注:这种方法简单粗暴,建议大家使用这种方法) 如图所示:

打开我们的项目的文件夹 ,然后双击打开Podflie文件,在里面写入上面的两行:如图所示

(我是添加了二个第三方的库)写入完成,保存commond + s退出,我们回到终端


 

回到终端,接下来我们的操作就是一样了,我们要在我们的项目中导入AFNetworking 这个第三方库

接下来的两个命令是我们经常使用的

Note:

【 pod install: 使用 :pod install --verbose --no-repo-update 】

【 pod update: 使用: pod update --verbose --no-repo-update】

4.4 接下来我们在终端输入命令: pod install --verbose --no-repo-update

 如果看到下面的字样,表示我们导入第三方库成功:(如图所示:)

这里告诉我们再次打开项目,要用  单选和多选按钮.xcworkspae打开

 5 接下来们打开我们的项目,你会发现,多出来了一些东西,如图所示:

所以我们再次打开项目的时候要打开 后缀为 xcworkspace 的项目 

6 根据上面的目录可以看到,我们加入AFNetworking 的库已经成功添加进来了,到这里基本算是完成了

7 如果我们不想要这个第三方库,该怎么删除呢??

 假如我现在不想添加这个AFNetworking 这个库了,我想把它从我们的项目中移除,怎么办:

 

我们可以直接删除    pod 'AFNetworking', '~> 3.0.4'    这句话

接下来我们回到终端,输入命令:pod update --verbose --no-repo-update(注 :更新命令)

然后我们再看我们的Podfile文件,里面已经没有了AFN的库 

cocoapods基本就这样,下载第三方库进行管理,删除第三方库更新

cocoapods常用的命令整理:

pod install --verbose --no-repo-update  插入第三方库

pod update --verbose --no-repo-update 更新第三方库

pod  install 更新所有第三方库 

记得我们每次都要先更新在插入 ^@^ Big_Xin

猜你喜欢

转载自blog.csdn.net/baidu_37366055/article/details/82181498