CocoaPods安装遇到的坑。
//官⽅推荐地址
cooped的安装 $(inherited)
报pod 不到:sudo gem install -n /usr/local/bin cocoa pods
查看当前系统Cocoapods版本命令:pod --version
1.命令⾏更新(安装)步骤
$ sudo gem update --system // 先更新Ruby,国内需要切换源
//查看是否替换成功
$ 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.1
卸载cocoapods
sudo gem uninstall cocoapods
最新的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/fig'. 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
如果gem太⽼,可以尝试⽤如下命令升级gem
$ sudo gem update --system
升级成功后会提⽰: RubyGems system software updated
然后重新执⾏安装下载命令
$ sudo gem install cocoapods
这时候应该没什么问题了(如果报告Operation 之类的错误,请参考第五节:常见问题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.
原因:单引号格式,可能是⼿动输⼊导致
rubyinstaller安装解决办法:系统偏好设置-键盘-⽂本-将“使⽤智能引号和破折号”⼀项取消勾选-再将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/fig'. 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/fig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
原因:我是在已有项⽬中集成Cocoapods的时候遇到这个问题,原因是项⽬ Target 中做了⼀些设置,C
ocoaPods 也做了默认的设置,如果两个设置结果不⼀致,就会造成问题。
解决⽅法:我想要使⽤ CocoaPods 中的设置,分别在我的项⽬中定义PODS_ROOT和Other Linker Flags的地⽅(build settings),把他们的值⽤$(inherited)替换掉,进⼊终端,执⾏ pod update
警告没了,回到 Xcode,build通过。
⽹上还流⾏另外⼀种简单粗暴的⽅法:点击项⽬⽂件 deproj,右键显⽰包内容,⽤⽂本编辑器打开project.pbxproj,删
除OTHER_LDFLAGS的地⽅,保存(这种我没试过)
4.
[!] Oh no, an error occurred.
It appears to have originated from your Podfile at line 2.
Don't forget to anonymize any private data!
原因:这个问题⽐较蛋疼,弄了好久,仔细看发现就是因为Podfile⽂件⾥⾯ platform 那⼀⾏冒号和ios
之间多了⼀个空格。。。。其实这个错误在报错的时候ruby已经给出了,只是⼀开始没有好好看:
03.png
5.(201
6.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 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⽂件都托管在github/CocoaPods/Specs,
第⼀次执⾏pod setup时,CocoaPods会将这些podspec索引⽂件更新到本地的~/.cocoapods⽬录下,
这个索引⽂件⽐较⼤,所以第⼀次更新时⾮常慢.
友好⼈⼠在国内的服务器建⽴了Cocoapods索引库的镜像,
所以执⾏索引跟新操作时候会快很多.具体操作⽅法如下:
$ pod repo remove master
$ pod repo add master gitcafe/akuandev/Specs.git
$ pod repo update
这是使⽤gitcafe上的镜像,将以上代码中的 gitcafe/akuandev/Specs.git
替换成 git.oschina/akuandev/Specs.git 即可使⽤oschina上的镜像。
⽂/CoderAO(简书作者)
原⽂链接:www.jianshu/p/6e5c0f78200a
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论