Cocoa Pod使用总结
1. 背景
CocoaPod是Swift,Objective-C语言编写的Cocoa项目的依赖管理工具。简单点说就是它管理了很多的Swift和Objective-C的库,然后通过CocoaPod可以比较容易的在自己的项目中引用与管理它所提供的各种库。CocoaPod本身是用Ruby开发的,可以在Mac默认的Ruby环境下运行(官方也推荐用Mac默认环境运行)。它本身也是被Ruby的包管理工具Gem所管理。这里其实有点绕,Ruby下面的包管理工具Gem下管理了CocoaPod包,而CocoaPod自身可以认为是一个Swift/Objective-C依赖包管理工具,它管理了很多Swift/Objective-C的库。
2. 安装
我们可以通过Gem install命令来安装Cocoa Pod,但是受国内防火墙影响,可能访问不了Gem国外的源。因此我们需要更改Gem的源为国内的提供商。可选提供商如下:
1. https://ruby.taobao.org
2. https://gems.ruby-china.org
可以通过gem source add {source uri}来添加
添加好源后,我们即可通过sudo gem install cocoapods来安装cocoapod.
安装好后,我们即可使用cocoapod来管理我们的依赖库
3. Podfile
cocoapod是通过podfile来描述项目所以依赖的库,具体文件内容如下:
# Uncomment this line to define a global platform for your project
platform :ios, '9.0'
use_frameworks!//使用framework的方式来引用依赖库 target ‘CocoaPodTest’ do//为项目的该targe定义依赖
pod ‘SwiftyJSON’//为项目添加SwiftJSON的依赖,版本为最新版
end
可以在project所在目录执行pod init命令,来让pod为我们创建podfile文件,也可以自己手动创建,然后添加自己所依赖的库。
4. 拉取依赖库
podfile准备好后,通过命令pod install命令(在podfile所在目录执行)来安装项目所以来的库。
注意:当后续添加/删除了库的依赖后,依然是通过pod install来拉取,只有当需要更行所依赖的库的版本的时候才执行pod update命令来更新依赖库的版本
5. pod install后生成的文件分析以及cocoa pod的工作原理

先来看一下整体结构:
CocoaPodTest project
-Depended on
--Pods_CocoaPodTest.framework
Pod project
-Target
--Pods_CocoaPodTest
--SwiftJSON
新生成了一个Pod project,它有两个targets:Pods_CocoaPodTest,SwiftJSON,依赖于SwiftJSON
我们的项目CocoaPodTest依赖与Pod project的Pods_CocoaPodTest target的产出Pods_CocoaPodTest.framework
这样我们自己的项目就只依赖与Pods_CocoaPodTest.framework,然后其它所有引入的库由Pod_CocoaPodTest target触发编译。减少对我们自己Project的修改。
除了这些target的配置外,从上面的图可以看出在Support文件夹里面生成了很多文件。主要是三类文件:
1. Module定义文件

为了让我们引入的每个库的我们的项目代码中能以Module的形式应用,CocoaPod将每一个库输出为一个framework,这些Module定义文件定义了framework的module.
2. target的编译配置文件*.xcconfig
这些定义每一个target的xcode编译配置。
3. 编译脚本
我们如果查看CocoaPodTest project的的build phase,可以看到
cocoa pod为我们添加了三个build phase:
1. Check Pods Manifest.lock
这个环节利用根目录里面的manifest.lock文件和上级目录中的podfile.lock,来确保多人协同开发时,每个人本地的库版本一致。具体原理如下:
1)pod install或者pod update后,cocoa pod会更新manifest.lock和podfile.lock,根文件保存了所依赖库的版本信息
2)将podfile.lock提交至源码管理系统
3)其他人拿到代码后,如果本地的库版本与提交至源码管理系统的podfile.lock所描述的不一样。编译会失败,报告本地需要通过pod install/pod update来更新库文件。达到保证多人开发时版本一致的目的。
2. Embed Pods Frameworks
这个环节会去执行Pod所生成的编译脚本Pods-CocoaPodTest-frameworks.sh,主要是对所生成的依赖库的framework进行签名等。
3. Copy Pods Resource
这个环节会去执行Pod所生成的编译脚本Pods-CocoaPodTest-resources.sh,来拷贝所依赖库中的资源文件。
Cocoa Pod使用总结的更多相关文章
- Cocoa pod的使用注意点
一.CocoaPods是什么? CocoaPods是一个负责管理iOS项目中第三方开源库的工具.CocoaPods的项目源码在Github上管理.该项目开始于2011年8月12日,在这两年多的时间里, ...
- Cocoa pod导入第三方框架遇到的那点事儿
废话不多说,直接上干货. 以下所有操作均是在Cocoapod导入第三方库,并且是.xcworkspace的工程里面操作的, 1.导入头文件找不到,也就是所谓的,not find ''AFNetwork ...
- How Cocoa Beans Grow And Are Harvested Into Chocolate
What is Cocoa Beans Do you like chocolate? Most people do. The smooth, brown candy is deliciously sw ...
- OS X EI Capitan 系统 安装cocoapod
没有废话直接上步骤 (哪一步卡住了 多试几次 可能是网络不好的缘故) 1. 首先安装 home-brew 以下方法转自:http://www.cnblogs.com/lzrabbit/p/4 ...
- iOS开发之网络篇-CocoaPods的安装 EI Capitan 10.11 之前的方式
注意:此种方式,在苹果系统 EI Capitan 10.11 之前的版本,新版本有所不同 一.安装 1> 查看gem源 $ gem sources –l 2> 删除源 (因为本人是第N次 ...
- Swift调用Objective C的FrameWork
很多Github的库经过很多年的发展,源码都是OC写的,,所以,用Swift调用OC的库就是开发中难免遇到的的一个问题,本文以AFNetworking为例,讲解如何跨语言调用. 第一步 创建一个空的工 ...
- iOS之Cocoapods安装
网上关于cocoapods的教程很多,关于它的优点我不赘述:但是我根据多次安装的经验,把我遇到的问题写一下,希望对新手有所帮助. 1. 设置输入源(由于默认的gem资源是国外的,由于历史原因,访问比较 ...
- Mapbox使用详解
一.简介: Mapbox致力于打造全球最漂亮的个性化地图. 在一次偶然的地图相关资料搜索过程中发现了一个很神奇又很漂亮的地图,这个地图支持高度自定义各种地图元素,比如,道路,水系,绿地,建筑物,背 ...
- iOS 上传自己的库到cocoapod
最近自己写了个库,传到github上,想让自己的库支持cocoapod,这里我看了很多相关文章.下面我就写下详细步骤以及会遇到的问题. 我们会使用trunk的方式提交到cocoa pod 这是2014 ...
随机推荐
- iOS日常学习 - 让你的 Xcode8 继续使用插件
本文转载,原文链接 随着 iOS10 的正式版即将发布,Xcode8 GM 也在发布会后放出,本文不会涉及到 Xcode8 有哪些更新,而是记录了如何让 Xcode8 继续支持 Plugin. 相信各 ...
- Spring注解(生命周期)
对于上面的知识图解,需要一点一点的研究. 首先核心容器: 控制反转 和 依赖注入 创建工程: maven仓库搜索 spring context : 引入后 <!-- https://mvnre ...
- SQL中比较好的For xml 用法实例
--包裹单号 入库时间 交易号 商品分类 商品名称 实付款SELECT a.DeliveryCode AS '包裹单号',a.DomesticWarehouseInTime AS '入库时间',a.T ...
- scala学习手记37 - 容器的使用
这次统一看一下scala中容器类的几个方法. Set filter()方法 filter()方法用来从Set中过滤获取含有指定特征的元素.示例代码如下: val colors1 = Set(" ...
- FM算法 的总结
FM的总结: 1.FM算法与线性回归相比增加了特征的交叉.自动选择了所有特征的两两组合,并且给出了两两组合的权重. 2.上一条所说的,如果给两两特征的组合都给一个权重的话,需要训练的参数太多了.比如我 ...
- nyoj-1316-二分
acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1316题目链接 Interval 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描 ...
- DOCKER实战案例
操作系统:[root@yz6205 ~]# docker search busyboxNAME DESCRIPTION STARS OFFICIAL AUTOMATEDbusybox Busybox ...
- 【Python】内置函数清单
Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义.最常见的内置函数是: print("Hello Wor ...
- elasticsearch负载均衡节点——客户端节点 node.master: false node.data: false 其他配置和master 数据节点一样
elasticSearch的配置文件中有2个参数:node.master和node.data.这两个参 数搭配使用时,能够帮助提供服务器性能. 数据节点node.master: false node. ...
- python基础8之类的实例化过程剖析
一.概述 之前我们说关于python中的类,都一脸懵逼,都想说,类这么牛逼到底是什么,什么才是类?下面我们就来讲讲,什么是类?它具有哪些特性. 二.类的语法 2.1 语法 class dog(obje ...