//官方推荐地址

CocoaPods :http://code4app.com/article/cocoapods-install-usage

cooped的安装  $(inherited)

报pod 找不到 :sudo gem install -n /usr/local/bin cocoa pods

查看当前系统Cocoapods版本命令:pod --version

1.命令行更新(安装)步骤

$ sudo gem update --system // 先更新Ruby,国内需要切换源

$ gem sources --remove https://rubygems.org/

$ gem source -a https://ruby.taobao.org/

//查看是否替换成功

$ gem sources -l

*** CURRENT SOURCES ***

$ sudo gem install cocoapods // 安装cocoapods

$ pod setup

和安装过程是一样的

再次查看版本

$ pod --version 0.32.1 Done!!

2.pod 报错

如果新获取一份xcode工程代码 运行了pod install 或者 pod update 之后 无法正常 Run 代码 出现类似 [!] No Podfile found in the project directory. 这种错误. 那么有一种简单粗暴的办法解决

1.找到工程目录所在位置,即Podfile文件所在的目录下

2.删除后缀名为:xcworkspace,lock 以及pods 三个文件

3.重新运行 pod install 或者 pod update 即可

直接跳过cocoapods 的自我检查 -->更新

安装框架,不更新本地索引,速度快,但是不会升级本地代码库

$pod install --verbose --no-repo-update

$ pod install --no-repo-update

# 更新框架,不更新本地索引,速度快

# 可以安装新框架或者删除不用的框架,但是不会升级项目已经安装的框架

$pod update --verbose --no-repo-update

$ pod update --no-repo-update

检查xcode 是否是 官方 下载

spctl --assess --verbose "/Applications/Xcode.app"

shasum /Users/my_liu/Downloads/Xcode_7.1.dmg

cocoapods 安装指定版本(回退)

sudo gem install -n /usr/local/bin cocoapods --version 0.39.0.rc.1

卸载cocoapods

sudo gem uninstall cocoapods

COCOAPODS的时候出现的问题 _OBJC_CLASS_$_XXX

最新的cocoapod导入xmpp的时候,会出现循环依赖,所以撸主选择了手动导入。

一开始还用的挺开心的,后来,使用cocoapods导入其他的框架,发现调用的时候总是报错。

Undefined symbols for architecture x86_64:

"_OBJC_CLASS_$_SVProgressHUD", referenced from:

objc-class-ref in HJCXMPPTools.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

在网上搜索了一堆的攻略,cocoapods卸载重新按照了108遍,然而这并没有什么卵用。

后来我再次用cocoapod更新框架的时候,发现终端的一段警告

[!] The `myQQ [Debug]` target overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Target Support Files/Pods/Pods.debug.xcconfig'. This can lead to problems with the CocoaPods installation

- Use the `$(inherited)` flag, or

- Remove the build settings from the target.

这下有了思路了,原来我手动导入xmpp的时候,修改了Other Linker Flags

所以解决办法就是:

按照提示,增加$(inherited)

添加之后,问题终于解决

CocoaPods的安装

CocoaPods可以方便地通过Mac自带的RubyGems安装。
打开Terminal,然后键入以下命令:
$ sudo gem install cocoapods

执行完这句如果报告以下错误:
ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - Errno::ETIMEDOUT: Operation timed out - connect(2) (https://rubygems.org/latest_specs.4.8.gz)
ERROR: Possible alternatives: cocoa pods

这是因为ruby的软件源rubygems.org因为使用亚马逊的云服务,被我天朝屏蔽了,需要更新一下ruby的源,过程如下:
$ gem sources -l (查看当前ruby的源)
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l

如果gem太老,可以尝试用如下命令升级gem
$ sudo gem update --system
升级成功后会提示: RubyGems system software updated

然后重新执行安装下载命令
$ sudo gem install cocoapods
这时候应该没什么问题了(如果报告Operation not permitted...之类的错误,请参考第五节:常见问题5,如果报告activesupport requires Ruby version >= 2.2.2这样的错误,请参考第五节:常见问题6)

接下来进行安装,执行:
$ pod setup

Terminal会停留在 Setting up CocoaPods master repo 这个状态一段时间,是因为要进行下载安装,而且目录比较大,需要耐心等待一下.如果想加快速度,可使用cocoapods的镜像索引.(文章末尾附使用镜像索引的方法)
安装成功后,你会看到:

01.png
四、Cocoapods的使用

进入工程所在的目录(工程根目录)
执行命令 touch Podfile
这句是说新建一个名为Podfile的文件(不能写成别的名字,也可以自己在工程根目录里面直接新建)

然后对改文件进行编辑,执行命令 open -e Podfile
第一次执行这个命令,会有一个空白文件打开,可以先放在一边,
Podfile文件的格式应该如下:
platform :ios, '7.0'
pod 'AMap2DMap', '~> 2.5.0'
pod 'AFNetworking', '~> 2.5.3'
pod 'SDWebImage', '~> 3.7.2'

需要注意的几点:platform那一行,ios三个字母都要小写,而且与前面的冒号之间不能有间隔,后面的版本号也可以不写,但是有些开源库对版本是有要求的,比如要在6.0以上才能运行,遇到这样的开源库就需要写上版本号。

platform下面就是Cocoapods需要集成的开源库,根据你的需要确定集成那些库。

举个例子:
我要集成AFNetworking这个库类,需要在Cocoapods里面先搜索是否有需要的库,可以在Terminal中输入:
pod search AFNetworking
回车之后就可以看到和你搜索的关键字相关的一些库类,如图:

02.png

其中第一个就是我们需要的,把pod ‘AFNetworking’, ‘~>2.5.3’
那一行复制到我们的Podfile文件中,保存修改。
然后在Terminal中执行 :
pod install

这样,AFNetworking就已经下载完成并且设置好了编译参数和依赖,以后使用的时候切记如下两点:
1.从此以后需要使用Cocoapods生成的 .xcworkspace文件来打开工程,而不是使用以前的.xcodeproj文件
2.每次更改了Podfile文件,都需要重新执行一次pod update命令

ps:当执行pod install之后,除了Podfile,还会生成一个名为Podfile.lock的文件,它会锁定当前各依赖库的版本,之后即使多次执行pod install也不会更改版本,只有执行pod update才会改变Podfile.lock.在多人协作的时候,这样可以防止第三方库升级时候造成大家各自的第三方库版本不一致。所以在提交版本的时候不能把它落下,也不要添加到.gitignore中.

五、常见问题

1.
[!] Invalid Podfile file: undefined local variable or method `en_US' for #<Pod::Podfile:0x00000102a5d8b0>. Updating CocoaPods might fix the issue.

原因:单引号格式,可能是手动输入导致
解决办法:系统偏好设置-键盘-文本-将“使用智能引号和破折号”一项取消勾选-再将podfile里面的单(双)引号修改一下

2.ArgumentError - invalid byte sequence in US-ASCII
原因:字符集错误
解决办法:
使用locale命令查看当前的字符集,如果都是zh,需要执行以下命令:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
然后再使用locale命令查看,已经改过来了

  1. [!] The YMTea [Debug] target overrides the OTHER_LDFLAGS build setting defined in `Pods/Target Support Files/Pods/Pods.debug.xcconfig'. This can lead to problems with the CocoaPods installation

    • Use the $(inherited) flag, or
    • Remove the build settings from the target.

[!] The YMTea [Release] target overrides the OTHER_LDFLAGS build setting defined in `Pods/Target Support Files/Pods/Pods.release.xcconfig'. This can lead to problems with the CocoaPods installation

- Use the `$(inherited)` flag, or
- Remove the build settings from the target.

原因:我是在已有项目中集成Cocoapods的时候遇到这个问题,原因是项目 Target 中做了一些设置,CocoaPods 也做了默认的设置,如果两个设置结果不一致,就会造成问题。
解决方法:我想要使用 CocoaPods 中的设置,分别在我的项目中定义PODS_ROOTOther Linker Flags的地方(build settings),把他们的值用$(inherited)替换掉,进入终端,执行 pod update
警告没了,回到 Xcode,build通过。
网上还流行另外一种简单粗暴的方法:点击项目文件 project.xcodeproj,右键显示包内容,用文本编辑器打开project.pbxproj,删除OTHER_LDFLAGS的地方,保存(这种我没试过)

4.
[!] Oh no, an error occurred.

It appears to have originated from your Podfile at line 2.

Search for existing GitHub issues similar to yours:
https://github.com/CocoaPods/CocoaPods/search?q=%2FUsers%2Fxiao6%2FMusic%2FGI06%E5%AE%9E%E8%AE%AD%E8%8A%B8%E8%8C%97%E8%8C%B6%E5%8F%B6%2FYMTea%2FPodfile%3A2%3A+syntax+error%2C+unexpected+%27%3A%27%2C+expecting+end-of-input%0Aplatform+%3A+ios%2C+%277.0%27%0A++++++++++%5E&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!

原因:这个问题比较蛋疼,弄了好久,仔细看发现就是因为Podfile文件里面 platform 那一行 冒号和ios之间多了一个空格。。。。其实这个错误在报错的时候ruby已经给出了,只是一开始没有好好看:

03.png

5.(2016.4.14更新)

如果在执行sudo gem install cocoapods的时候报以下错误:

ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/pod

并且你的操作系统是EI Caption,可是尝试使用以下方法来代替上面的安装命令:

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

6.(2016.8.4更新)

在执行sudo gem install cocoa pods指令安装的时候提示错误:

ERROR: Error installing cocoapods:
activesupport requires Ruby version >= 2.2.2.

解决方法: 由于你的ruby版本偏低,需要升级你电脑上的ruby.
在命令行输入:ruby -v来查看当前ruby的版本.确定版本是低于2.2.2后就可以开始进行ruby的升级.

一般通过rvm来升级ruby.
具体升级ruby的方法可以参考:
http://blog.csdn.net/lissdy/article/details/9191351 这个链接中的内容(大体操作过程相同,只是要安装的版本号的差异,大家也可以自行查找其它资料来升级自己的ruby)

在执行rvm install 2.2.4的过程中,我还出现了一些报错,标题是"requirements_osx_brew_update_system ruby-2.2.4"后面有一些详细的错误日志,像下面这样:

ruby更新错误.png

从日志内容可以看出大概意思就是说我在更新brew的过程中出现了一些错误.(然后你的也可能有其他报错,只要根据日志提示的错误内容采取相应的措施就好).所以接下来我还更新了brew:

brew update--更新homeBrew自己

我又报错了:The /usr/local directory is not writable.如下:

homeBrew更新报错.png

这是说,我那个路径不可写,按照上面说的,指令也告诉我们了:
sudo chown -R $(whoami):admin /usr/local
输入密码后重新执行brew update,就出现了一系列感觉要成功的进度提示等,最后提示Already up-to-date的时候,brew本身就更新好了(这个过程比较久).
接着用brew outdated命令查看brew下哪些软件可以进行升级.
然后brew upgrade命令用来升级所以可以升级的软件.
最后记得用brew cleanup来清理不需要的版本及其安装包缓存.
截止目前,brew也被我们更新好了.

接下来回到ruby更新,重新执行rvm install 2.2.4,又是漫长的等待后,一行行绿色的字表示ruby也安装完成了,这时候再看看ruby的版本ruby -v:

ruby更新后版本.png

ok,升级好了.

7.(2016.8.4更新)

执行pod setup的时候,出现报错:

Cloning into 'master'...
error: RPC failed; result=56, HTTP code = 200
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

如图:

pod setup报错.png

这个是用于在执行pod setup命令的时候,里面会执行从github上面clone资源到本地的语句,但是要clone的东西太大了,超过的git限制的大小.尝试执行以下语句把默认的限制变大:(52428000=500×1024×1024,即500M)
git config http.postBuffer 524288000
之前git中的配置是没有这一项的,执行完以上语句后输入git config -l可以看到配置项的最下面多出了一行我们刚刚配置的内容.
接下来再执行pod setup试试看吧.

如果老项目 新建的项目没有 pod 工作project 可以尝试用这个方法解决

sudo gem install -n /usr/local/bin cocoapods --pre,然后从新pod install。

附:如何使用CocoaPods的镜像索引:
所有项目的Podspec文件都托管在https://github.com/CocoaPods/Specs,
第一次执行pod setup时,CocoaPods会将这些podspec索引文件更新到本地的~/.cocoapods目录下,
这个索引文件比较大,所以第一次更新时非常慢.
友好人士在国内的服务器建立了Cocoapods索引库的镜像,
所以执行索引跟新操作时候会快很多.具体操作方法如下:
$ pod repo remove master
$ pod repo add master https://gitcafe.com/akuandev/Specs.git
$ pod repo update
这是使用gitcafe上的镜像,将以上代码中的 https://gitcafe.com/akuandev/Specs.git
替换成 https://git.oschina.net/akuandev/Specs.git 即可使用oschina上的镜像。
文/CoderAO(简书作者)
原文链接:http://www.jianshu.com/p/6e5c0f78200a
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

CocoaPods安装遇到的坑。的更多相关文章

  1. cocoapods卸载与安装的各种坑

    在mac上安装cocoapods,一路的坑啊,无数报错啊有木有! 本以为安装很简单,mac下都自带ruby,使用ruby的gem命令即可下载安装: $ sudo gem install cocoapo ...

  2. mac 10.11.6,Xcode8下,ruby2.3安装,Cocoapods安装~

    适用环境 mac: 10.11.6 Xcode:8.1 命令执行步骤(安装ruby2.3前准备工作) 查看ruby更新源 gem sources  -L 删除默认官方或者淘宝,新增 https://g ...

  3. iOS工具】rvm、Ruby环境和CocoaPods安装使用及相关报错问题解决

    〇.前言 <p>在iOS开发中 CocoaPods作为库依赖管理工具就是一把利器. 有了 CocoaPods则无需再通过拖 第三方库及第三方库所依赖的 framework静态库到项目中等麻 ...

  4. Ruby升级的最新方法/CocoaPods安装

    今天安装cocoapods时候出现了下面的提示 Error installing pods:active support requires Ruby version >= 2.2.0//这个需求 ...

  5. 最新的 cocoaPods 安装方法

    经过努力终于发现了最新的 解决cocoaPods安装的办法: taobao Gems 源已停止维护,现由 ruby-china 提供镜像服务 第一步:安装rvm, 不管需不需要升级ruby,rvm可以 ...

  6. cocoapods安装

    什么是cocoapods CocoaPods是一个用来帮助我们管理第三方依赖库的工具.它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我 ...

  7. iOS 之 Cocoapods安装

    进入正题前,先来点前奏:了解cocoapods是某天看一个博客,那时才明白原来写项目不用一个个将三方库拷进项目里啊,惊讶的我是一塌糊涂的啊...(原谅我那时还没进入过正规的IT公司....好多你们自然 ...

  8. Mac 下安装ruby,以及CocoaPods安装以及使用网摘

    ruby安装网址:https://ruby-china.org/wiki/install_ruby_guide CocoaPods安装和使用教程地址:http://code4app.com/artic ...

  9. cocoapods安装以及使用,安装过程中ruby版本过低

    cocoapods安装以及使用,安装过程中ruby版本过低 字数473 阅读103 评论1 喜欢2 1.打开终端 2.移除现有 Ruby 默认源 $ gem sources --remove http ...

随机推荐

  1. 织梦DedeCMS未审核文章更新为当前时间

    对于个人站长来说,每天文章的更新量都是个巨大的问题,例如,立信CPA培训注册会计师考试网站,有时候我们去别的网站采集大量的文章,然后自己进行手工整理伪原创,但是审核的时候,时间却是采集发布的时间.一方 ...

  2. 每次rand出来都是41?说好的随机数呢?!

    rand()函数是C++标准函数库提供的随机数生成器,生成0-RAND_MAX之间的一个"伪随机"整数,理论上可以产生的最大数值为2^16-1,即32767. rand()函数不接 ...

  3. iOS bounds、frame之间的关系

    这几个都是在ios程序中,经常会注意到的一些小细节,能否真正了解这些,对写ios程序也有很大的好处. frame 是UIView中表示此view的一个矩形面积,包括了view在它的superview中 ...

  4. Educational Codeforces Round 24 CF 818 A-G 补题

    6月快要结束了 期末也过去大半了 马上就是大三狗了 取消了小学期后20周的学期真心长, 看着各种北方的学校都放假嗨皮了,我们这个在北回归线的学校,还在忍受酷暑. 过年的时候下定决心要拿块ACM的牌子, ...

  5. Linux的终端类型

    终端是一个很重要的外设,用过终端设备的人都知道如果设备类型不对就会有乱字符,也可用仿真终端软件如netterm试验一下,Linux的终端信息放在 /usr/share/terminfo下,在这个目录的 ...

  6. 在msys里进行复制和粘贴操作

    You can copy text from an MSYS window to the clipboard simply by selecting the text you want to copy ...

  7. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 10. 使用EF Core

    支持的数据库:可以查看官方网站 https://docs.microsoft.com/en-us/ef/core/providers/ 安装了VS2017后会安装了LocalDB,验证localDB ...

  8. typeof操作符返回一个字符串,表示未经计算的操作数的类型。

    typeof操作符返回一个字符串,表示未经计算的操作数的类型.   语法 typeof运算符后跟操作数: typeof operand or typeof (operand) 参数 operand 是 ...

  9. Tenka1 Programmer Beginner Contest D - IntegerotS(位运算)

    传送门 题意 给出N,K,给出N对数a[i],b[i],选择一些数使得or和小于k且\(max\sum b[i]\) 分析 枚举k的每一个1位,将其删去并让低位全为1,对于每一个这样的数c,如果a[i ...

  10. 7天学完Java基础之6/7

    final关键字的概念与四种用法 final关键字代表最终,不可改变的 常见四种用法: 可以用来修饰一个类 当前这个类不能有任何子类 可以用来修饰一个方法 当final关键字用来修饰一个方法的时候,这 ...