5
28
2014
0

CocoaPods再使用

安装 CocoaPods

CocoaPods 是基于 Ruby 开发的, 其安装需要 Ruby 环境. 幸运的是 MAC 默认都是预装 好 Ruby 的.

在开始安装前, 我们有两点需要准备:

  • 确定 Ruby 环境是好的, 并配置好环境变量PATH.

编辑~/.profile~/.bash_profile , 配置PATH:

export PATH=$HOME/.rvm/bin:$PATH

* 由于 gems 的源被墙了, 需要连 VPN, 或者切换成国内的源:

    $ gem sources --remove https://rubygems.org/
    $ gem sources -a http://ruby.taobao.org/
    # 验证一下
    $ gem sources -l

安装

$ gem install cocoapods
$ gem which cocoapods
/Users/nuoerlz/.rvm/gems/ruby-1.9.3-p194/gems/cocoapods-0.29.0/lib/cocoapods.rb
$ type -all pod
pod is /Users/nuoerlz/.rvm/gems/ruby-1.9.3-p194/bin/pod

升级

升级只需要重新安装一遍:

$ gem install cocoapods

另, 也可以安装预发布版:

$ gem install cocoapods --pre

使用 CocoaPods

在单一Target的项目中使用 CocoaPods

一般情况下, 我们都是想在现有的工程中加入使用 CocoaPods, 这种工程只有一个 Target, 且没有用到Workspace. 对于这种情况, 使用 CocoaPods 还是很简单的, 网 上的很多教程也大多数是这种情况, 可以直接参考:

场景1:利用CocoaPods,在项目中导入AFNetworking类库
Adding Pods to an Xcode project

另一种常见情况是, 在新的工程里使用 CocoaPods, 这种工程也是只有一个Target, 且 没有使用Workspace, 这和上面提到的是很类似的, 直接参考就行, 还可以参考:

Creating a new Xcode project with CocoaPods

在有多个Target多个工程且已有Workspace的项目中使用 CocoaPods

一般情况, 有多个工程的Workspace的目录结构:

nzplayer_dir_list

截图中的Workspace包含了两个工程(xcodeproj), 其中, NZPlayerKit是静态库工程, 其 目标是编译出 libNZPlayerKit.a, 而NZPlayer是普通的App工程, 最终会生成 NZPlayer.app, 其是依赖 libNZPlayerKit.a :

nzplayer_project

nzplayer_libs_ref

OK, 现在我们想在 NZPlayerKit.xcodeproj 和 NZPlayer.xcodeproj 中使用第三方的开 源库, 并用 CocoaPods 管理, 看了一下 CocoaPods官网的文档, 跟本没有说明 如何配置多工程的! 好么! 只能试啊试...

假设 NZPlayerKit.xcodeproj 中的 NZPlayerKit(Target) 需要用到的第三方库是:

UMeng

NZPlayer.xcodeproj 中的 NZPlayer(Target) 需要用到的第三方库是:

UMeng
pod AFNetworking
pod RSTWebViewController

在这里, 选择这几个库的原因是, 它们开放的方式是各不一样的, 这样才更具普遍性. 其中, UMeng 是不开源的, 它提供了静态库(lib*.a); AFNetworking 是典型的Pod; RSTWebViewController 是还在开发中的, 还没发布任何版本, 只能直接引用其git repo.

那么, 可以这么配置Podfile(Podfile语法):

inhibit_all_warnings!

# 使用现有的 workspace(NZ.xcworkspace), 不要生成新的!
workspace 'NZ.xcworkspace'
# 配置默认 xcodeproj, 路径是相对于 Podfile 的路径. 这是必须的, 否则会报Syntax错误.
xcodeproj 'NZPlayerKit/NZPlayerKit.xcodeproj'

## 下面就是配置各个Target了! 也就是说, CocoaPods 面向的主配置对象是Target而不
## 是Project. 当然你得指定该Target属于那个Project, 否则会使用前面配置默认的.

# 配置NZPlayerKit(Target)
target :NZPlayerKit do
    # 该Target属于的工程
    xcodeproj 'NZPlayerKit/NZPlayerKit.xcodeproj'
    # 平台和系统版本
    platform :ios, "5.0"
    # UMeng pod
    pod 'UMeng', '2.2.1'
end

# 配置NZPlayer(Target)
target :NZPlayer do
    xcodeproj 'NZPlayer/NZPlayer.xcodeproj'
    platform :ios, "7.0"
    pod 'UMeng', '2.2.1'
    pod "AFNetworking", "~> 2.0"
    pod 'RSTWebViewController', :git => 'https://github.com/rileytestut/RSTWebViewController.git'
end

OK, 保存Podfile, 执行pod install:

[nuoerlz NZPlayer-Workpace]$ pod install
Analyzing dependencies
Pre-downloading: `RSTWebViewController` from `https://github.com/rileytestut/RSTWebViewController.git`
Downloading dependencies
Installing AFNetworking (2.2.1)
Installing NJKWebViewProgress (0.1.8)
Installing RSTWebViewController (0.1)
Installing UMeng (2.2.1)
Generating Pods project
Integrating client projects

最后, 工程们长这样:

nzplayerkit_pods

NZPlayerKit 对 libPods-*.a 的依赖关系是这么的:

nzplayerkit_libs_ref

NZPlayer 对 libPods-*.a 的依赖关系是这么的:

nzplayer_libs_ref_2

看了这些截图, CocoaPods 的原理也就不日明了....

Reference

Getting Started
Podfile Syntax Reference
CocoaPods安装和使用教程

(end)

Category: iOS | Tags: Tools Xcode iOS objc Pods | Read Count: 3305

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com