iOS-CocoaPods-安装笔记(持续更新遇到的坑)

2,529 阅读5分钟

因为把简书所有的文章删除了,所以这边就补充会原本的一些认为有价值的文章供查阅

CocoaPods 真是每时每刻都可能出现新的坑,所以我又只能更新了....

CocoaPods 能让开发者非常方便的使用第三方类库,不用自己去管理依赖问题,以及非arc等编译条件在mac 系统下调用终端:


  • 基本的步骤是 gem install cocoapods -> pod setup -> pod init -> edit Podfile -> pod install -> open xcworksapce (期间出现对应的问题 就对应解决)

  • 这里着重解析下pod常用的几个文件夹:

    • /Users/{yourName}/Library/Caches/CocoaPods 这个位置放着系统的pod git clone成功后的三方库的缓存
      大概的逻辑: pod install -> 下载SDWebImage到Caches里面 -> 根据podSpec copy Caches内的库到项目Pods里面进行使用
    • /Users/{yourName}/.cocoapods/repos 这个位置存放着cocoapods的中心索引表,主要得repo 是 master, 也必须要有master才可以让pod进行执行 同时你新建的私有repo也会处于这个位置
    • 项目文件下的 Pods 根据Podfile生成的文件内容,里面包含了源码

    所以在网络极端情况(自己特别难更新的话),终极技能是,直接去复制队友的Pods文件到自己项目文件,然后pod install就行...,或者也可以将队友的Caches文件复制过去,


#安装cocoapods

为了防止gem安装更新失败,因此先替换为国内的淘宝的镜像源,否则在天朝的网络限制中会很慢很慢

请别弄混乱一个东西,这里替换的ruby源的地址,是为了安装cocoapods这个库管理软件,安装目录默认在/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.1.1/, 后面说替换的coding等spec.git,是指替换cocoapods的中心索引表的git地址

gem sources --remove https://rubygems.org/ //等有反应之后再敲入以下命令 
// 更新为 ruby-china的镜像, 淘宝镜像已经停止
gem sources -a https://gems.ruby-china.org/

检查一下看看

gem sources -l
*** CURRENT SOURCES *** https://gems.ruby-china.org/

使用gem安装cocoapods

sudo gem install cocoapods  //1.0正式版本已经发布,规则有一点的变化

如果gem出现错误 ** Unable to resolve dependencies: cocoapods requires cocoapods-core (= 0.35.0), claide (~> 0.7.0), xcodeproj (~> 0.20.2), cocoapods-downloader (~> 0.8.0) **

先更新gem然后重新开始

sudo gem update --system  //没什么问题就不要更新这个了,容易出现问题,更新后请重新设置下镜像源



** sudo gem install cocoapods 出现 Operation not permitted - /usr/bin/xcodeproj**


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

//如果还有问题 请看下面

设置pod中心索引表(初始化cocoapods) -- 重要问题都在这

如果pod setup可以将github的代码下载得动,那你就不用去折腾了

specs的意思: 规格, 说明书

所有第三方库pod lib lint通过后,都会push到这个Specs.git里面,而且cocoapods软件在pod install,也是去Specs.git(即repo里面的master)查找对应的版本信息的,因此我称之为中心索引表

cocospod就是一个中心化的工具,相对而言carthge是去中心化的,因此carthge 不能进行search,或者查看下各个库支持到哪个版本,只能去三方的git库自行查看

pod setup //会将Specs.git的代码下载到~/.cocoapods/repo/master
//如果还是太慢,尝试下
pod install --verbose
  • pod setup内部实现 /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.1.1/lib/cocoapods/command/setup.rb

        def run
          UI.section 'Setting up CocoaPods master repo' do
            if master_repo_dir.exist?
              set_master_repo_url
              set_master_repo_branch
              update_master_repo
            else
              add_master_repo
            end
          end
    
          UI.puts 'Setup completed'.green
        end
    
        // 省略一些代码 ....
        
        def self.read_only_url
          'https://github.com/CocoaPods/Specs.git'  
    

//这里默认写了加载索引表的地址, 所以 如果 pod repo add master https://git.coding.net/CocoaPods/Specs.git 这句失败的话 //可以尝试直接把这个url改为你要更换的新的git 地址,而且改成你要用的ssh可能更加好

  end


- **如果setup很慢甚至卡住**
>  (github本身就慢,而且Spec.git的文件数量甚多(1069459+)),导致300+m的git库特别难下载成功)

为了`pod install / update` 的时候加快速度,specs仓库镜像换成coding上的镜像或者是 oschina 上的镜像所以建议先更换数据源  

pod repo remove master

// 这里执行的是,用国内的oschina/coding 去提供git下载,做一下中转,让速度稍微快点,但是现在发现上面的Specs.git大多都不更新了... // 后面要自力更生了 pod repo add master https://git.oschina.net/akuandev/Specs.git



> 如果提示失败或者setup不成功,方案有两种:

- ###1) 手动将代码clone下来  【该方法比较有效】
- 出现  [!] To setup the master specs repo, please run `pod setup`.

  这些git如果没更新的话,就先去oschina 搜索 `Specs` 来找一些更新的,或者也可以自己做一些中转(新建项目,导入git url,把cocoapods官方的导入到自己的项目中,自行更新... 你要写个脚本,每天更新也行...)
  ![寻找新的git](http://upload-images.jianshu.io/upload_images/1111290-fb7f09546d64263c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


git clone https://git.oschina.net/yqszxx/Specs ~/.cocoapods/repos/master

//或者使用ssh的方式,总觉得ssh的方式会快点,https总是卡住 git clone git@git.coding.net:yqszxx/Specs.git ~/.cocoapods/repos/master

pod setup //务必在手动下载代码后执行一次,执行后 Setup completed

//在执行 pod install --verbose --no-repo-update //避免去更新了


> 如果使用oschina 的 https git clone不成功的话,建议到`git.oschina.net`中添加ssh key,换ssh方式下载源码

git clone git@git.oschina.net:akuandev/Specs.git ~/.cocoapods/repos/master


--- 


#Cocoapods 具体使用方法:

直接在需要加入cocoapods项目的根目录新建Podfile文件

$pod init //会生成模板的Podfile文件 //或者手动创建 $touch Podfile


##编辑 Podfile文件

platform :ios pod 'AFNetworking'

###单独某个target依赖pod 
> 在1.0中要求必须指定target了

target 'XXXTarget' do pod 'AFNetworking' pod 'Masonry' end


然后再执行 pod setup 即可以后每次更改 Podfile文件 则执行 pod update 即可如果在初始化的时候出现:如果安装后出现

[!] The platform of the target Pods (iOS 4.3) may not be compatible with Reachability (3.2) which has a minimum requirement of iOS 6.0 - OS X 10.8.

则修改 Podfile 为

platform :ios, '6.0'

update 后如果出现大量提示

错误 target overrides the OTHER_LDFLAGS...

则项目中Building setting 设置中 搜索**`Other Linker Flags`**的地方,添加一条

$(inherited)

以后打开项目点击xcworksapce后缀的文件,不要点击原来的项目文件


![打开](http://upload-images.jianshu.io/upload_images/1111290-3ae8e3273afdc017.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 至此,已经结束,愉快地使用吧

---
#出现问题总结:
##如果 pod update / pod install 命令执行过慢

(首次运行的时候不要)执行pod install还是pod update都卡在了Analyzing dependencies不动原因在于当执行以上两个命令的时候会升级CocoaPods的spec仓库,加一个参数可以省略这一步,然后速度就会提升不少。
加参数的命令如下:

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


##gem install
> 出现 ERROR:  While executing gem ... (Gem::FilePermissionError)

解决方法:


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

---
或者:

$ mkdir -p $HOME/Software/ruby $ export GEM_HOME=$HOME/Software/ruby $ gem install cocoapods //打印 $ export PATH=$PATH:$HOME/Sofware/ruby/bin $ pod --version


或者重新安装rvm

//Install Homebrew:(已经装过就不用了) $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" // Install RVM: $ \curl -sSL https://get.rvm.io | bash -s stable --ruby $ gem install cocoapods



##出现 Invalid \\`Podfile` file

[!] Invalid Podfile file: incompatible character encodings: UTF-8 and ASCII-8BIT. Updating CocoaPods might fix the issue.

这是编码的问题,有两种原因,
1.你的设备确实不支持utf8,
2.你本身录入文本有问题查看编码

localhost:xib cty$ locale

执行命令后出现

LANG="zh_CN.UTF-8"LC_COLLATE="zh_CN.UTF-8"LC_CTYPE="zh_CN.UTF-8"LC_MESSAGES="zh_CN.UTF-8"LC_MONETARY="zh_CN.UTF-8"LC_NUMERIC="zh_CN.UTF-8"LC_TIME="zh_CN.UTF-8"LC_ALL=

发现都是zh,强制设置一下

localhost:xib cty$ export LC_ALL=en_US.UTF-8 localhost:xib cty$ export.UTF-8

再检查一下

LANG="en_US.UTF-8"LC_COLLATE="en_US.UTF-8"LC_CTYPE="en_US.UTF-8"LC_MESSAGES="en_US.UTF-8"LC_MONETARY="en_US.UTF-8"LC_NUMERIC="en_US.UTF-8"LC_TIME="en_US.UTF-8"LC_ALL="en_US.UTF-8"

好像好了,继续pod install吧

[!] Invalid Podfile file: incompatible character encodings: UTF-8 and ASCII-8BIT. Updating CocoaPods might fix the issue.

问题依然把所有可能的配置都试一遍

gem install rails

然后

gem install rdoc

然后

gem install nokogiri --no-ri --no-rdoc

这些都设置完一般不会出现问题了,再有问题,可能是文本录入的问题2的解决办法,如果你是手动输入的这个需要注意,copy别人的也要检查一下打开键盘偏好设置设置单引号格式,当然冒号我还没找到怎么设置,一般错误会提示给你哪写错了这里不再提示utf8的错误了,输入法的错误,但是我切换了半天设置了半天还是没解决冒号,只能吧

The master repo requires CocoaPods 0.18.1 -

这个错误是在升级阶段出现的,升级

gem update cocoapods

##使cocopods管理开源库编译出现Library not found for -lPods问题的解决方法
+ 点击菜单栏上 Product > Edit Scheme
+ 选择Build
+ 加入Pods static library, 并且保证 pods 处于第一个位置
+ Clean and build 项目

##如果在导入头文件的时候发现无法自动补全,或者PCH文件中提示File not found
在User headers search path(在Project 和 Target 都修改)中

${SRCROOT} --右侧选择recursive



##Jenkins 脚本打包中出现 uft-8问题
> [33mWARNING: CocoaPods requires your terminal to be using UTF-8 encoding.

在pod install 之前执行 

export LC_ALL="en_US.UTF-8" pod install --no-repo-update