一、概要

iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库(从一个坑出来,又进了另一个坑而已……)。

二、安装

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

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

1、Ruby环境搭建

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

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

  1. ritekiMac-mini:PodTest lucky$ ruby -v
  2. ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
  3. ritekiMac-mini:PodTest lucky$

b 更新ruby

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

gem sources --remove https://rubygems.org/ 
gem sources -a http://ruby.taobao.org/ 
gem sources -l  (用来检查使用替换镜像位置成功)

  1. ritekiMac-mini:~ lucky$ gem sources --remove https://rubygems.org/
  2. https://rubygems.org/ removed from sources
  3. ritekiMac-mini:~ lucky$ gem sources -a https://ruby.taobao.org//
  4. http://ruby.taobao.org/ added to sources
  5. ritekiMac-mini:~ lucky$ gem sources -l
  6. *** CURRENT SOURCES ***

2、下载安装CocoaPods

终端输入:sudo gem install cocoapods

  1. ritekiMac-mini:~ lucky$ sudo gem install cocoapods
  2. CHANGELOG:
  3. ## 0.32.1
  4. ##### Bug Fixes
  5. * Fixed the Podfile `default_subspec` attribute in nested subspecs.
  6. [Fabio Pelosin][irrationalfab]
  7. \ [#2050](https://github.com/CocoaPods/CocoaPods/issues/2050)
  8. Successfully installed cocoapods-0.32.1
  9. Installing ri documentation for cocoapods-0.32.1
  10. /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rdoc/rdoc.rb:280: warning: conflicting chdir during another chdir block
  11. /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rdoc/rdoc.rb:287: warning: conflicting chdir during another chdir block
  12. Done installing documentation for cocoapods after 10 seconds
  13. 1 gem installed

这样就下载安装好了CocoaPods

3、使用CocoaPods

a  新建一个项目,名字PodTest

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

  1. cd /Users/lucky/Desktop/PodTest

c  建立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的形式组织和管理。

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

运行结果:

补充:

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. lizhongfudeMacBook-Pro:~ lizhongfu$ cd /Users/lizhongfu/Desktop/TestProject
  2. lizhongfudeMacBook-Pro:TestProject lizhongfu$ 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. target :'Second' do
  8. pod 'OpenUDID'
  9. 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'      //不显式指定依赖库版本,表示每次都获取最新版本  (<span style="color: rgb(50, 62, 50); font-family: Arial; font-size: 14px; line-height: 26px;">11、</span><span style="color: rgb(50, 62, 50); font-family: Arial; font-size: 14px; line-height: 26px;">pod update</span>)
  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被墙了

14、(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'
end

pod update 试了还可以用
pod install  被墙了,请大家换成pod install --verbose --no-repo-update

升级10.11后使用CocoaPod出现-bash: pod: command not found 解决办法

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

-bash: pod: command not found

解决办法:

sudo gem install -n /usr/local/bin cocoapods
2'如果还不能解决,可以使用以下方法再试试:

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

sudo chmod +rx /usr/local/bin

3.遇到如下错误可能是因为装了多个Xcode导致路径变了

[!] Unable to add a source with url `https://github.com/CocoaPods/Specs.Git` named `master-1`.  You can try adding it manually in `~/.cocoapods/repos` or via `pod repo add`.

解决办法:

sudo xcode-select -switch /Applications/Xcode.app

/Applications/Xcode.app:此部分未Xcode所在路径,找到Xcode的安装路径,拖进来即可

4.

pod》error:The dependency `` is not used in any concrete target

我的原来Podfile的内容是:

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'
end

此处的MyTarget为自己的工程名

 

5.使用Pod后导致"_OBJC_CLASS_$_xxx", reference

解决办法:

在自己的工程Build Phases的Link Binary With Libraries中添加

6.TodayExtension中共用Pod中的库

iOS开发 cocoapods的安装以及使用的更多相关文章

  1. iOS开发 - CocoaPods的常见使用方式

    1 CocoaPods 的安装 1.1 作用: 帮助管理和维护第三方框架,快速的搜索到第三方框架, 然后自动集成到工程里面来, 并编译成一个libPod.a的静态库给我们项目用 1.2 理解:  1. ...

  2. iOS开发-CocoaPods实战

    CocoaPods 是开发 OS X 和 iOS 应用程序的第三方库的依赖管理工具,如果是正常的开发不需要使用的第三方的代码,CocoaPods是不需要的,但是从实际情况上,为了提高开发效率,Coco ...

  3. iOS开发CocoaPods使用

    一.为什么用CocoaPods iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三 ...

  4. iOS开发 - CocoaPods安装和使用教程

    一.CocoaPods简介 1.什么是CocoaPods CocoaPods是iOS的包管理工具. 2.为什么要使用CocoaPods 在开发iOS项目时,经常会使用第三方开源库,手动引入流程复杂,并 ...

  5. iOS中CocoaPods的安装及错误详解

    什么是CocoaPods CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为"Pods"的依赖库(这些类库必须是Coc ...

  6. iOS开发 - CocoaPods远程私有库从0到1

    1. 创建主工程  路径:/Users/Funky/Desktop/CocoaPodRemoteLib/MyMainProject/MyMainProject.xcodeproj 2. 在码云(htt ...

  7. 【Xamarin For IOS 开发需要的安装文件】

    官网安装文件下载: http://download.xamarin.com/XamarinforMac/Mac/xamarin.mac-2.0.1.64.pkghttp://download.xama ...

  8. ios开发 xcode6以上安装Alcatraz管理插件

    在终端上输入如下命令即可完成安装: curl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh |  ...

  9. IOS开发 CocoaPods 使用 pod Install 出现 Updating local specs repositories

    pod install 换成pod install --verbose --no-repo-update这个命令,前面的命令被墙了

随机推荐

  1. Uva 12563,劲歌金曲,01背包

    题目链接:https://uva.onlinejudge.org/external/125/12563.pdf 题意:n首歌,每首歌的长度给出,还剩 t 秒钟,由于KTV不会在一首歌没有唱完的情况下切 ...

  2. 用re-sign.jar重签名apk后安装失败的解决办法

    问题 打开re-sign.jar,将下载好的apk拖入re-sign.jar的界面进行重签名.重签名成功后,通过adb intall命令安装重签名后的apk文件失败.提示:Failure [INSTA ...

  3. MD5签名方法

    /** * md5签名 * @param plainText 要签名的字符串 * @param enc 要编译的格式 gbk:utf-8 * @return */ public static Stri ...

  4. UML的概念模型

    为 了理解UML,需要形成该语言的概念模型,这要求学习建模的3个要素:UML的基本构造块.支配这些构造块如何放在一起的规则和一些运用于整个UML的公 共机制.如果掌握了这些思想,就能够读懂UML模型, ...

  5. 2016 Al-Baath University Training Camp Contest-1 C

    Description Rami went back from school and he had an easy homework about bitwise operations (and,or, ...

  6. SqlSever基础 datepart 获取一个日期的月份

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  7. Linux 性能监测:Network

    网络的监测是所有 Linux 子系统里面最复杂的,有太多的因素在里面,比如:延迟.阻塞.冲突.丢包等,更糟的是与 Linux 主机相连的路由器.交换机.无线信号都会影响到整体网络并且很难判断是因为 L ...

  8. 【leetcode❤python】Ransom Note

    #-*- coding: UTF-8 -*- class Solution(object):       def canConstruct(self, ransomNote, magazine):   ...

  9. nohup不输出日志信息的方法,及linux重定向学习

    起因 最近使用nohup创建了一个后台进程,默认日志输出到了nohup.out文件中,程序跑起来也就没再管,过了大约一周,发现硬盘空间不够了,于是查找原因,发现这个nohup.out文件已经到了70G ...

  10. C# 返回Foreach集合

    IEnumerable<DataRow> DetailRows()       {           foreach (DataRow dr in EditData.Tables[tb_ ...