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使用总结的更多相关文章

  1. Cocoa pod的使用注意点

    一.CocoaPods是什么? CocoaPods是一个负责管理iOS项目中第三方开源库的工具.CocoaPods的项目源码在Github上管理.该项目开始于2011年8月12日,在这两年多的时间里, ...

  2. Cocoa pod导入第三方框架遇到的那点事儿

    废话不多说,直接上干货. 以下所有操作均是在Cocoapod导入第三方库,并且是.xcworkspace的工程里面操作的, 1.导入头文件找不到,也就是所谓的,not find ''AFNetwork ...

  3. 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 ...

  4. OS X EI Capitan 系统 安装cocoapod

    没有废话直接上步骤    (哪一步卡住了 多试几次 可能是网络不好的缘故) 1. 首先安装 home-brew   以下方法转自:http://www.cnblogs.com/lzrabbit/p/4 ...

  5. iOS开发之网络篇-CocoaPods的安装 EI Capitan 10.11 之前的方式

    注意:此种方式,在苹果系统 EI Capitan 10.11  之前的版本,新版本有所不同 一.安装 1> 查看gem源 $ gem sources –l 2> 删除源 (因为本人是第N次 ...

  6. Swift调用Objective C的FrameWork

    很多Github的库经过很多年的发展,源码都是OC写的,,所以,用Swift调用OC的库就是开发中难免遇到的的一个问题,本文以AFNetworking为例,讲解如何跨语言调用. 第一步 创建一个空的工 ...

  7. iOS之Cocoapods安装

    网上关于cocoapods的教程很多,关于它的优点我不赘述:但是我根据多次安装的经验,把我遇到的问题写一下,希望对新手有所帮助. 1. 设置输入源(由于默认的gem资源是国外的,由于历史原因,访问比较 ...

  8. Mapbox使用详解

    一.简介: Mapbox致力于打造全球最漂亮的个性化地图.   在一次偶然的地图相关资料搜索过程中发现了一个很神奇又很漂亮的地图,这个地图支持高度自定义各种地图元素,比如,道路,水系,绿地,建筑物,背 ...

  9. iOS 上传自己的库到cocoapod

    最近自己写了个库,传到github上,想让自己的库支持cocoapod,这里我看了很多相关文章.下面我就写下详细步骤以及会遇到的问题. 我们会使用trunk的方式提交到cocoa pod 这是2014 ...

随机推荐

  1. Linux.Siggen.180

    from: https://vms.drweb.com/virus/?i=15455134&lng=en Linux.Siggen.180 Added to Dr.Web virus data ...

  2. idea绿色版+谷歌浏览器绿色版——设置打开jsp文件

    首先我们的工具有 1.idea绿色版 2.Chrome绿色版 3.JavaJDK 4.Tomcat绿色版 文件放在那里都可以 1.idea设置默认打开Chrome 2.idea设置选择Tomcat和J ...

  3. 线段树 - HDU1166 - 敌兵布阵

    2017-07-29 16:41:00 writer:pprp 线段树跟区间操作相关,想要在题目限定的时间内解决问题就需要用线段树这种数据结构来解决: 线段树是一种二叉平衡树 参考书目:张新华的< ...

  4. 八步学会数据迁移:ETL工具kettle使用方法

    一.目的 将不同服务器上的表合并到另外一个服务器上.例如:将服务器1上的表A和服务器2上的表B,合并到服务器3上的表C 要求:表A需要被裁剪(去掉不必要的字段).表B需要增加一些字段 二.使用方法 ( ...

  5. python处理数据的风骚操作[pandas 之 groupby&agg]

    https://segmentfault.com/a/1190000012394176 介绍 每隔一段时间我都会去学习.回顾一下python中的新函数.新操作.这对于你后面的工作是有一定好处的.本文重 ...

  6. Generate parentheses,生成括号对,递归,深度优先搜索。

    问题描述:给n对括号,生成所有合理的括号对.比如n=2,(()),()() 算法思路:利用深度优先搜索的递归思想,对n进行深度优先搜索.边界条件是n==0:前面电话号组成字符串也是利用dfs. pub ...

  7. 因磁盘爆满而导致NameNode HA无法启动

    场景回顾: 测试集群节点分配:35,36是namenode且开启HA,37,38,39即作为datanode,又作为journalnode. 某时间 38节点磁盘爆满,集群中hdfs及依赖的服务全部宕 ...

  8. 单网卡安装neutron

    devstack中机器只有一个物理网卡,如何设置neutron中的external网络? 方式是: 创建一个linux bridge和veth,把eth0和veth1加入到brige,用veth的另一 ...

  9. Selenium with Python 006 - 操作浏览器

    #!/usr/bin/env python # -*- coding: utf-8 -*- from selenium import webdriver import time driver = we ...

  10. docker建立和共享文件(服务器和docker之间的共享)

    建立序列号:sudo docker run -it domimiek/deep-base  /bin/bash   回撤后会出现一个序列号(记住) 开始:sudo docker start 序列号 当 ...