ReportsiOS开发ios

1. CocoaPods 使用

2016-06-12  本文已影响4815人  Laughingg

CocoaPods 为你的项目管理 lib 的依赖。cocoaPods 的使用时基于 Gem 的。

1、 gem 的使用

gem 是 ruby 的包管理工具,ruby 的各种插件是通过 gem 来安装的。 cocoapods 就是 ruby 开发的一个插件。 ruby 中文社区

在使用 gem 来安装 CocoaPods 的时候建议先更新 gem 的版本。(gem 是 mac 自带的我们不需要安装)

当 ruby 版本过老的情况下我们还需要更新 ruby 的版本。

# 查看版本
$ gem --version
# gem自身升级, 这个主要是解决 gem 版本过老导致 cocoapods 不能使用的问题
$ sudo gem update --system
# 列出本地安装的包
# 可用查看安装了多少个版本的 CocoaPods,可以对老版本的进行卸载
$ gem list
# 更新包(所有的)
$ sudo gem update
# 清除过期的gem
$ sudo gem cleanup

注意:
以上操作是建立在 gem 服务器良好的情况下进行的。(ruby 的软件源 https://rubygems.org 因为使用的是亚马逊的云服务,所以被墙了,需要更新一下 ruby 的源,使用如下代码将官方的 ruby 源替换成国内淘宝的源)

# 查看gem源
$ gem sources –l
# 添加源
# (这个是阿里在国内做的一个镜像源)
$ sudo gem sources -a https://ruby.taobao.org/ 
# 删除源
# (这个是系统默认的源)
$ sudo gem sources -r https://rubygems.org/  

以上 gem 的配置基本搞定。

2、CocoaPods 的安装:

# 安装 cocoapods 包
$ sudo gem install cocoapods

当 cocoapods 的在安装过程中出现了问题请打开这个指南

执行 sudo gem install cocoapods 出现下列错误, 对于安全进行了升级。开启了rootless 权限。

Snip20161226_2.png

命令改为:
sudo gem install -n /usr/local/bin cocoapods

可以避免 rootless 权限造成的不能读写的问题。

CocoaPods 的其他操作
当 cocoapods 出现问题或 cocoapods 的版本需要更新的时候我们需要使用下面的命令。

# 卸载 cocoapods 包
$ sudo gem uninstall cocoapods
# 更新 cocoapods 包
$ sudo gem update cocoapods

最简单的 cocoapods 的更新是再一次安装 cocoapods

# 在已经安装 cocoapods 的情况下执行这个命令可以更新 cocoapods 
# 但是 gem list 中会存在 多个 cocoapods 包。(最近测试没有出现这个问题)
$ sudo gem install cocoapods

安装 gem 的 预览版

$ sudo gem install cocoapods --pre

pod 初始化

# 设置 cocoapods 初始化 , 这个操作可能等待的时间过于长久
# 其实是 Cocoapods 在将 podspec索引文件 下载到 ~/.cocoapods目录下
# 如果你等太久,可以试着 cd   ~/.cocoapods 到那个目录,用du -sh *来查看下载进度。
# 全部下载完大概 800M左右 (随着 cocoapods 的使用这个值会增大), 这么大时间不久才怪。
$ pod setup 

当一段时间没有使用 CocoaPods,在使用 CocoaPods 之前先执行下面这个指令

# 更新仓库 (将更新的podspec下载到本地)
# 更新 podspec索引文件
$ pod repo update 

3、CocoaPods 的使用

1. 单一Target的项目中使用 CocoaPods

一般情况下, 我们是在现有的工程中加入 cocoapods 来引入第三方框架。

初始环境
项目中只有一个 target, 且没有用到 Workspace 。

使用终端操作
纯属装逼

  1. 确认框架是否可用
# 搜索 AFNetworking 框架(在本地搜索)
# 查看  AFNetworking 的可用版本
#(建议执行 pod update 指令后再进行 pod search 操作)
$ pod search AFNetworking
  1. 在项目文件夹中创建 Podfile 文件并指定库依赖
    必须是 [project name].xcodeproj 文件所在的路径。
# 切换到当前项目的文件夹路径
$ cd [项目路径]

创建 podfile 文件

# 这个这个命令就可以在当前文件夹下创建 podfile 文件 
$ pod init 

我特别喜欢这个指令
(使用这个指令不需要执行 pod init 指令)
vim Podfile , 如果当前文件夹下没有 Podfile 就会创建 Podfile 文件,并用 vim 编辑器打开

# 创建并编辑 podfile 文件 (这个是使用 vim 编辑器,创建以备文件,
# 并使用 vim 编辑器进行编辑)
$ vim Podfile 

编辑 lib 的依赖信息

  # 使用时需要新建一个名为 Podfile 的文件,以如下格式,将依赖的库名字依次列在文件中即可
  # 指定平台和系统版本
  platform :ios, '8.0'

  # 表示可以使用 swift 的框架
use_frameworks!

  # 这个是 cocoapods 升级 1.0 后必须的
 #  MyApp 就是 TARGET NAME
target 'MyApp' do

      # 指定库 和 库的版本
      pod 'JSONKit',       '~> 1.4'
      pod 'Reachability',  '~> 3.0.0'
      pod 'ASIHTTPRequest'
      pod 'RegexKitLite'
end
  1. 安装框架
# 安装 podfile 指定的框架
$ pod install
  1. 打开 App.xcworkspace 并进行编译
  2. 框架的升级或框架更新
# 升级框架
# 当需要更新框架的时候可以执行这个命令
# 可以在不使用 pod install 的情况下直接使用 pod update
$ pod update

每次更改了 Podfile 文件,你需要重新执行一次pod update命令。

特殊处理
已经存在的 workspace 的 cocoapods 集成
在 podfile 的最后单独的一行 指定(也可以是开始的第一行,不建议写在中间)

workspace 'MyWorkspace'    # MyWorkspace 可以任意指定。
# 在执行 pod install 的时候 会根据  MyWorkspace 生成 MyWorkspace.xcworkspace 文件。

2. 多个 target 的项目中使用 cocoapods

多 target 是基于 workspace 存在的。

目录结构

Snip20161009_1.png

** workspace 中的结构**
workspace project 是通过手动拖入的。


Snip20161009_2.png

为了使 cocoapods 不依赖于某个 project , 我们将 Podfile 文件和 .workspace 文件同文件夹。

使用终端

# 切换到   .workspace 所在目录
$ cd [Workspace name] .workspace
$ vim Podfile

编辑 Podfile 文件

# 指定  workspace 
# 指定后不会生成默认的 workspace 文件
workspace ‘myWorkspace’

#  指定 workspace
workspace ‘MyWorkspace’

# cocoapods 会用在 swift 项目
use_frameworks!
    
# 指定 target
target 'aProject' do
    # 由于 Podfile 和  .xcodeproj 不在同一文件夹下
    # 需要指定路径
    #  xcode 项目可以存在任何的子路路径中,只需要指定正确的路径就可以
    project ‘aProject/aProject.xcodeproj’
 
    #  在每一个 project 下都导入 SnapKit 进行测试
    pod "SnapKit"
end

target 'bProject' do
    project 'bProject/bProject.xcodeproj’
    pod "SnapKit"
end

target 'aFramework' do
    project ‘aFramework/aFramework.xcodeproj’
    pod "SnapKit"
end

target 'bFramework' do
    project ‘bFramework/bFramework.xcodeproj’
    pod "SnapKit"
end

安装框架

# 安装 podfile 指定的框架
$ pod install

重新 打开 workspace 文件

Snip20161009_3.png

在每一个 project 中都可以正常的使用 SnapKit 框架。

在 workspace 的多 project 的使用中,我们还可以直接在 aProject 和 bProject 中导入 aFramework 和 bFramework 进行使用。

Snip20161009_4.png

测试项目地址https://github.com/zhuohongxiao/CocoapodsTest

4. cocoapods 的使用过程中出现的问题解决方案:

1. 去除第三方库的警告

# 这个是全部去除
$ inhibit_all_warnings!
# 去除指定框架的警告
$ pod 'ReactiveCocoa', '~> 2.4', :inhibit_warnings => true

2. CocoaPods pod install/pod update更新慢的问题

更新慢的原因主要有两个:

  1. 你本地的repo库太长时间没有更新,需要下载的内容太多。执行 pod repo update 更新主仓库就会显的很慢。
  2. 执行 pod install 和 pod update 的时候 会同时执行 pod repo update ,在网络情况不好的时候就会显的很慢。

CocoaPods 在执行pod install和pod update时,会默认先更新一次podspec索引。
使用--no-repo-update参数可以禁止其做索引更新操作 (在网络不好和没有网的情况下建议使用这俩指令)

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

这个指令和上面的是同一样的效果

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

根据唐巧博客的介绍,为了加快 pod install 或 pod update 的执行,我们还可以使用国内的 spec.git 的镜像。

  1. 用CocoaPods做iOS程序的依赖管理

3、 cocoapods 升级的问题:

# 先查看版本
$ pod --version 
# 先更新 gem  
# 有时候会因为 gem 的版本的原因导致安装或更新失败
$ sudo gem update --system 
# 更新 cocoapods 包
$ sudo gem update cocoapods
# 再执行初始化设置
$ pod setup

** 4. pod setup 报CocoaPods was not able to update the master repo 错误解决办法**
这个问题解决的根本性的办法就是将 cocoapods 的主仓库删除,并清除缓存,将 cocoapods 进行重装。

先删除全局的缓存:
$ sudo rm -fr;
$ sudo rm -fr ~/.cocoapods/repos/master/
还不行的话就把当前 Pods 目录清空:
$ sudo rm -fr Pods/
// 再执行
$ sudo gem install cocoapods
$ pod setup 看看还有没有报错

5. Pods目录是否需要添加到源代码控制?

Pods 文件夹是否添加到版本控制由你决定,工作流因项目而异。我们建议你保持Pods目录在源代码控制下, 不要将它添加到您的.gitignore。
但最终由你决定:

检查 Pods 文件夹检查的好处

  1. 克隆这个仓库后,即使你的机器上没有安装 cocoapods 该项目可以立即构建和运行。不需要pod install, 不需要网络连接。
  2. Pod 组件(代码/类库文件)总是可以用的。即使 pod 的 github 上的源代码已经 down( 损坏 )
  3. Pod 组件保证和原始安装的的克隆下来的代码相同

忽略 Pods 文件夹的好处

  1. 源控制仓库将占据更少的空间
  2. 要保证所有的 Pods 的 github 的源代码是可用的。CocoaPods通常能够重建相同的安装。(技术上没有保证舱安装运行时获取和重现相同的工件不使用commit Podfile沙。尤其是当使用Podfile zip文件。)
  3. 源代码控制操作不会有任何的冲突

无论 pods 文件夹是否被检查, PodfilePodfile.lock 将总是在这个版本控制下。

6、 Podfile.lock

这个文件才是最终确定第三方框架的依赖关系的。是在执行 pod install 指令后自动生成的。 Podfile.lock 应该加入到版本控制里面,不应该把这个文件加入到.gitignore中。因为Podfile.lock会锁定当前各依赖库的版本,之后只有在执行 pod intallpod update 的情况下才会更新 Podfile.lock 文件 。这样多人协作的时候,可以防止第三方库升级时造成大家各自的第三方库版本不一致。

工具推荐

** cocoapos 插件的安装:**

curl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh | sh

个人强烈建议:
每天使用 cocoapods 的时候先执行:

pod update 

参考学习博客:
用CocoaPods做iOS程序的依赖管理

上一篇下一篇

猜你喜欢

热点阅读