iOS开发之CocoaPods的安装与使用

前言部分

注:本文内容摘抄自 http://blog.csdn.net/lizhongfu2013/article/details/26384029  内容做了些许修改以及更新。

一、概要

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 http://ruby.taobao.org/ 
3、gem sources -l  (用来检查使用替换镜像位置成功)

2、下载安装CocoaPods

终端输入:sudo
gem install 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/lizhongfu/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、如果pod install之后,一直停留在Updating local specs repositories,可以试一试 pod install --verbose --no-repo-update,原因是pod install被墙了

时间: 2024-08-27 13:18:23

iOS开发之CocoaPods的安装与使用的相关文章

iOS开发之CocoaPods的使用

透明色:00ff00ff //设置柱状图的颜色                ColorSet cs = new ColorSet();                cs.Id = "colorset1"; #region 设置柱状图的颜色 待开发                    string strColor = oYAXIS.Color;                    switch (strColor)                    {           

iOS 开发之Cocoapods的使用及制作私有pods

一.安装CocoaPods 第一步:升级ruby环境 更新Ruby环境 如果出现 更新ruby错误 然后就可以进行Cocoapods的安装了, 第二步:更换淘宝的RubyGems镜像代替官方版本, 移除官方的镜像 更换成淘宝镜像 验证是否更换成功 第三步:安装Cocoapods 如果你的是版本是10.11以下用这个命令 安装Cocoapods 如果你的是版本是10.11以上用这个命令 安装Cocoapods 然后执行 将Cocoapods Specs repository复制到你电脑的~/.co

iOS开发之CocoaPods(objective-c第三方库管理工具)

介绍: iOS开发中,大多数情况下,我们都需要集成一些第三方依赖库,对于一个稍大的项目,用到的第三方依赖库的数量也非常可观.CocoaPods是objective-c第三方库管理工具,方便第三方库的管理. 用法: 1. 安装 $ sudo gem install cocoapods 2. 用法 在iOS项目目录下新建Podfile文件,添加第三方依赖库,如 source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' p

李洪强iOS开发之iOS好文章收集

李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 nginx 和 rtmp 插件搭建视频直播和点播服务器 2015-05-12 20:13:00 iOS9适配技巧 图iOS9适配新技巧 2015-09-29 09:01 TextKit分页效果 图文混排 2015年6月1日 iPhone 6 / 6 Plus 设计·适配方案 屏幕适配 2014-11-2

IOS开发之copy的问题

copy的目的就是修改副本,修改原始对象和副本时不会产生干扰. 定义一个不可变属性A,再定义一个可变属性B.用B做添加删除等操作后再将B赋值给A时,有些人习惯用A = B:其实这样是不安全的. 假设有下面的一段代码: ? 1 2 3 4 5 6 7 8 9 10   int main() {    NSMutableString *strM = [NSMutableString [email protected]"123"];    NSString *str = strM;    N

iOS开发之WKWebView简单使用和常用使用场景

iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版.本着对新事物的好奇,就上网查了一下,但是找了好多个都没说的多了详细,于是就问谷歌,找文档,看看使用方法,试用了一下,果然不错,记录下来,大家分享! WKWebView的特点: 性能高,稳定性好,占用的内存比较小, 支持JS交互 支持HTML5 新特性 可以添加进度条(然并卵,不好用,还是习惯第三方的). 支持内建手势, 据说高达60fps的刷

iOS开发之Auto Layout入门

随着iPhone6与iOS8的临近,适配的问题讲更加复杂,最近学习了一下Auto Layout的使用,与大家分享.  什么是Auto Layout? Auto Layout是iOS6发布后引入的一个全新的布局特性,其目的是弥补以往Autoresizing在布局方面的不足之处,以及未来面对更多尺寸适配时界面布局可以更好的适应. 为什么要用Auto Layout? Autolayout能解决不同屏幕(iPhone4,iPhone5,iPad...)之间的适配问题. 在iPhone4时代开发者只需要适

iOS开发之UILabel

UILabel是iOS开发中常用的一个组件,主要用来显示内容. UILabel的主要使用如下: ? 1 2 3 4 5 6 7 8 9 10 /*尺寸*/ CGRect labelRect = CGRectMake(100, 100, 80, 40); /*初始化*/ UILabel *titleLabel = [[UILabel alloc] initWithFrame:labelRect]; /*一些属性的设置*/ titleLabel.font = [UIFont systemFontOf

iOS开发之多XIB之间相互关联

Xib link Xib 1.直接加载xib中的UIView 创建一个View1.xib, 随便设一个背景色,加一个标识UILabel, 这样好知道是这个view是哪一个view. 你可以在这个view上加作意的subview,我只是说明原理,所以这儿并没有加作何subview. 最终我的View1如下图: 由于View1会放到其它View上作为subview,所以这儿size是Freeform, Status Bar是:None. 将下面代码放到viewDidLoad中: &1这行代码就是加载