发布开源库到CocoaPods的时候。对CocoaPods重新学习了一下。

1.CocoaPods的日常使用

2.创建CocoaPods的私有库

3.创建CocoaPods的开源库

一. CocoaPods的介绍

什么是CocoaPods?CocoaPods是一个负责管理iOS项目中第三方开源库的工具,CocoaPods的项目源码在https://github.com/CocoaPods/Specs上管理。

经过CocoaPods团队的不懈努力,2016年5月10号,CocoaPods终于在其官方博客上宣布正式发布CocoaPods 1.0。与此同时,公开了相应的Mac版App——CocoaPods App 1.0 。

CocoaPods App 1.0 的下载地址:https://cocoapods.org/app

二. CocoaPods的安装

1. 替换ruby源

CocoaPods是基于ruby ecosystem的,需要ruby环境,使用ruby的gem命令。所以我们的系统要有ruby环境。然而Mac系统默认会安装好ruby环境。可在终端ruby -v查看ruby版本:

//查看ruby版本

ruby -v

//输出信息

ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]

查看ruby源

gem sources -l

默认情况下,终端会显示下面:

*** CURRENT SOURCES ***

https://rubygems.org/

当然这个源在墙内是访问不到的,所以要更换到ruby-china的镜像

// 1.移除掉原有的源

gem sources --remove https://rubygems.org/

//2.淘宝的源已经不更新维护了,现在使用ruby-china的源哦

gem source -a https://gems.ruby-china.org

以下命令添加淘宝的源:(不建议继续使用)

gem sources -a https://ruby.taobao.org/

// 3.验证是否替换成功

gem sources -l

如果显示下面输出就说明正确:

*** CURRENT SOURCES ***

https://gems.ruby-china.org

2. 更新升级 Gem 版本

Gem是管理Ruby库和程序的标准包,如果它的版本过低也可能导致安装失败,解决方案自然是升级Gem,执行下述命令即可:

// 更新升级gem,国内需要切换源

sudo gem update --system

查看gem版本

gem -v

2.6.6

3. 安装CocoaPods

OS X 10.11 以前安装命令为:

sudo gem install cocoapods// 安装cocoapods

Mac系统为OS X EL Capitan安装命令为:

//安装最新版本

sudo gem install -n /usr/local/bin cocoa pods

//安装指定版本

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

//安装最新的release beta版本

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

如果你想卸载CocoaPods怎么办?看下面:

//卸载CocoaPods

sudo gem uninstall cocoapods

4. 更新Podspec索引文件

如果按照上面3个步骤没问题,用命令pod --version查看是否安装成功,如果成功会显示pod的版本。

pod setup作用:将所有第三方的Podspec索引文件更新到本地的~/.cocoapods/repos目录下

pod安装成功之后一个首先的操作就是执行命令(不是必须的):

pod setup

所有的第三方开源库的Podspec文件都托管在https://github.com/CocoaPods/Specs

我们需要把这个Podspec文件保存到本地,这样才能让我们使用命令pod search 开源库搜索一个开源库,怎样才能把github上的Podspec文件保存本地呢?那就是 pod setup

执行pod setup时,CocoaPods 会将第三方的podspec索引文件更新到本地的~/.cocoapods/repos目录下

  • 如果没有执行过 pod setup,那用户根目录下~找不到.cocoapods/repos目录的,没有创建这个目录。

  • 如果执行 pod setup,并且命令没有执行成功,那么会创建~/.cocoapods/repos目录,只不过目录是空的。

  • 如果执行 pod setup,并且命令执行成功,说明把github上的Podsepc文件更新到本地,那么会创建~/.cocoapods/repos目录,并且repos目录里有一个master目录,这个master目录保存的就是github上所有第三方开源库的Podspec索引文件。

但是第一次执行pod setup时,这个github的Podspec索引文件比较大,有 300M 左右(以后会越来越大的),所以第一次更新时非常慢.要耐心等待……可以进去目录~/.cocoapods/repos使用命令du -sh *来查看下载文件的大小了

怎么才能快点呢?网上好多给出都是更换索引库的镜像,gitcafe

和oschina, gitcafe已经被coding收购了(2016年3月份左右收购)。这两个我亲测,现在都不行了(可能是我网速不好,基本上就是连接失败,有空网速好点的时候我在测试一下)。所以还是别更换 CocoaPods 索引库的镜像了。

三. CocoaPods的使用

1. 新建 Podfile文件

使用时需要在你的项目根目录下新建一个名为Podfile的文件(文件名一定为Podfile,不能更改),将依赖的库名字依次列在文件中即可.

//进入项目的根目录

cd ~/Desktop/Projects/JYCocoaPodsTest

//新建一个名为Podfile的文件

touch Podfile

2. 编辑 Podfile文件

CococaPods升级到1.0.0版本之后,Podfile文件的格式也发生了很大改变

我来带领大家写一个完整的Podfile文件 ,各个选项的解释在文件后面一起解释。

假设我们的项目名称为JYCocoaPodsTest, 为JYCocoaPodsTest新建了一个UITarget。打开JYCocoaPodsTest.xcodeproj结构如下:

JYCocoaPodsTest.xcodeproj结构.png

1. 简单的Podfile:

platform :ios, '7.0'

inhibit_all_warnings!

xcodeproj 'JYCocoaPodsTest'

workspace 'JYCocoaPodsTest'

use_frameworks!

target 'JYCocoaPodsTest' do

pod 'AFNetworking',

pod 'JYCarousel', '0.0.1'

end

2. 稍微复杂的Podfile:

source 'ssh://git@gitlab.9ijx.com:9830/iOS/Specs.git'

source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '7.0'

use_frameworks!

inhibit_all_warnings!

workspace 'JYCocoaPodsTest'

target 'JYCocoaPodsTest' do

pod 'AFNetworking'

pod 'JYCarousel', '0.0.1'

pod 'WCJCache', :git => "http://gitlab.9ijx.com/iOS/WCJCache.git"

target :JYCocoaPodsTestUITests do

inherit! :search_paths

pod 'YYText'

end

end

3. Podfile的语法解释:

1. platform :iOS, ‘7.0’

  • 指定了开源库应该被编译在哪个平台以及平台的最低版本。

  • 若不指定平台版本,官方文档里写明各平台默认值为iOS:4.3,OS X:10.6,tvOS:9.0,watchOS:2.0

2. inhibit_all_warnings!

  • 屏蔽cocoapods库里面的所有警告

  • 这个特性也能在子target里面定义,如果你想屏蔽某pod里面的警告也是可以的:

pod 'JYCarousel', :inhibit_warnings => true

3. xcodeproj,现在被project代替,这个变量就别使用了

  • 允许你指定需要链接的工程

4. use_frameworks!

使用frameworks动态库替换静态库链接

(1)swift项目cocoapods 默认 use_frameworks!

(2)OC项目cocoapods 默认 #use_frameworks!

5. workspace

  • 指定应该包含所有projects的Xcode workspace.

  • 如果没有显示指定workspace并且在Podfile所在目录只有一个project,那么project的名称会被用作于workspace的名称

6. project

  • 默认情况下是没有指定的,当没有指定时,会使用Podfile目录下与target同名的工程:(我们只有一个工程JYCocoaPodsTest)

    # JYCocoaPodsTest这个Target只有在JYCocoaPodsTest工程中才会链接

    target ‘JYCocoaPodsTest’ do

    project ‘JYCocoaPodsTest’

    end

5. target ‘xxxx’ do

end

  • 指定特定Target的依赖库

  • 可以嵌套子Target的依赖库

6. inherit! :search_paths

  • 明确指定继承于父层的所有pod,默认就是继承的

7. source

  • 指定specs的位置,自定义添加自己的podspec。公司内部使用

    cocoapods 官方source是隐式的需要的,一旦你指定了其他source 你就需要也把官方的指定上

    例如:

source 'ssh://git@gitlab.9ijx.com:9830/iOS/Specs.git'

source 'https://github.com/CocoaPods/Specs.git'

  • 当我们使用pod install或者pod setup时,会自动在~/.cocoapods/repo目录下更新项目需要的podspec索引文件如下:

4. 依赖库的基本写法:

pod 'JYCarousel', //不显式指定依赖库版本,表示每次都获取最新版本

pod 'JYCarousel', '0.01'//只使用0.0.1版本

pod 'JYCarousel', '>0.0.1' //使用高于0.0.1的版本

pod 'JYCarousel', '>=0.0.1' //使用大于或等于0.0.1的版本

pod 'JYCarousel', '0.0.1' //使用大于等于0.0.1但小于0.1的版本,相当于>=0.0.1&&0.1' //使用大于等于0.1但小于1.0的版本

pod 'JYCarousel', '~>0' //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本

5. 依赖库的自定义写法

下面都会用到podspec文件,所以要熟悉这个文件的构成才可以.

我会在下一篇博客编辑这个文件

  • Using the files from a local path (使用本地文件)

pod 'JYCarousel', :path => '/Users/Dely/Desktop/JYCarousel'

我新建一个工程PodTest来演示

1.在podfile写好依赖路径

platform :ios, '7.0'

inhibit_all_warnings!

workspace 'PodTest'

target 'PodTest' do

pod 'JYCarousel', :path => '/Users/Dely/Desktop/JYCarousel'

end

2.在你的本地pod库添加xxx.podspec文件,(一定要注意是根目录添加)

JYCarousel目录结构.png

3.编辑xxx.podspec文件

主要下面红框点,修改成你的本地路径:

podspec.png

4.进入项目根目录进行安装pod install

  • From a podspec in the root of a library repository (引用仓库根目录的podspec)

    在仓库根目录下加入podsepc文件上传到git上就可以了(比较简单)

使用仓库中的master分支:

pod 'JYCarousel', :git => 'https://github.com/Delyer/JYCarousel.git'

使用仓库的其他分支:

pod 'JYCarousel', :git => 'https://github.com/Delyer/JYCarousel.git' :branch => 'release'

使用仓库的某个tag:

pod 'JYCarousel', :git => 'https://github.com/Delyer/JYCarousel.git', :tag => '0.0.1'

或者指定一个提交记录:

pod 'JYCarousel', :git => 'https://github.com/Delyer/JYCarousel.git', :commit => '5e473f1e0530bb3799f2f0d70554b292570bd8f0'

需要特别注意的是,虽然这样将会满足任何在Pod中的依赖项通过其他Pods

但是 podspec必须存在于仓库的根目录 中,如果根目录中没有存在这个podspec文件,你将不得不使用下面提到的几种方式之一

  • From a podspec outside a spec repository, for a library without podspec(在一个不带podsepec的库里引用外部的spec)

    如果一个podspec能够从外部的仓库源的获取,设想一下,也通过HTTP来获取podspec:

pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'

  • pod spec

    使用一个在给定podspec中声明的Pod的依赖项。如果如果没有参数被传递,那么在Podfile根部的第一个podspec会被使用。它将会被库所在的工程所使用

    注意:这个不会包含哪些来自于podspec的资源而仅仅是来自于CocoaPods基础架构

    例子:

podspec

podspec :name => 'QuickDialog'

podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'

上面的基本够我们日常使用。如果你还想了解更多。请到CocoaPods官方博客学习:https://guides.cocoapods.org

3. 安装依赖开源库

第二步中我们编辑好的Podfile文件保存好,进入项目根目录执行命令

//进入项目的根目录

cd ~/Desktop/Projects/JYCocoaPodsTest

//安装依赖库

pod install

pod install.png

pod install命令执行成功后,会看到项目根目录下多出xxx.xcworkspace、Podfile.lock文件和Pods目录。再看看刚才执行完pod install命令打印出来的内容的最后一行:From now on use CocoaPodsDemo.xcworkspace.提示我们从现在起,我们需要使用JYCocoaPodsTest.xcworkspace文件来开发。

4. 第三方库更新

跟pod install相似的一个命令就是pod update.

如果未指定特定版本的话,pod update将所有第三方框架更新到最新版本。

5. pod文件和命令说明

—————————–新增文件——————————
1. Podfile文件
项目的第三方库的依赖以及项目的基本配置

2. Podfile.lock文件
最后一次更新Pods时, 保存所有第三方框架的版本号

3. pods目录
保存通过pod install或者pod update下载下来的第三方开源库的源代码

4. xxx.xcworkspace文件
重新生成一个工作空间,打开这个工程文件来进行开发

—————————–常用指令——————————
1. pod setup
将所有第三方的Podspec索引文件更新到本地的~/.cocoapods/repos目录下,更新本地仓库。

2. pod repo update
执行 pod repo update更新本地仓库,本地仓库完成后,即可搜索到指定的第三方库,作用类似pod setup。不过这个命令经常不单独调用。比如执行pod setuppod searchpod installpod update会默认执行pod repo update

3. pod search xxx
查找某一个开源库。查找开源库之前,默认会执行pod repo update指令

4. pod list
列出所有可用的第三方库.现在已经2.4W+了.还在不断地增长

5. pod install

  • 会根据Podfile.lock文件中列举的版本号来安装第三方框架

  • 如果一开始Podfile.lock文件不存在, 就会按照Podfile文件列举的版本号来安装第三方框架

  • 安装开源库之前, 默认会执行pod repo update指令

6. pod update

  • 将所有第三方框架更新到最新版本, 并且创建一个新的Podfile.lock文件

  • 安装开源库之前, 默认会执行pod repo update指令

7. pod install –no-repo-update
8. pod update –no-repo-update
安装开源库之前, 不会执行pod repo update指令

四. CocoaPods相关的两个目录

    • 目录~/.cocoapods/repos/这个目录存储远端的podspec文件到本地。master是所有第三方的pod spec索引文件。其他的使我们自定义的podspec索引文件。

~/.cocoapods/repos/目录.png

  • 目录~/Library/Caches/CocoaPods/这个目录就是缓存文件的存储目录。

~/Library/Caches/CocoaPods/目录.png

如果我们使用pod search xxx 提示没有找到,但是我们这个第三方确实存在。

1.我们可以使用pod setup更新本地pod spec索引文件。然后pod search xxx

2.按照1的方法如果还是pod search xxx找不到,那我们就把~/Library/Caches/CocoaPods/的缓存文件删除。然后pod setup。最后pod search xxx这样应该就可以了

CocoaPods的常见错误:http://blog.csdn.net/wangyanchang21/article/details/51437934

五. CocoaPods的说明

1、第三方库会被编译成.a静态库或者.framwork的动态链接库供我们真正的工程使用。

CocoaPods会将所有的第三方库以target的方式组成一个名为Pods的工程,该工程就放在刚才新生成的Pods目录下。整个第三方库工程会生成一个名称为libPods.a的静态库提供给我们自己的CocoaPodsTest工程使用。

对于资源文件,CocoaPods提供了一个名为Pods-resources.sh的bash脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。

2、我们的工程和第三方库所在的工程会由一个新生成的workspace管理

为了方便我们直观的管理工程和第三方库,CocoaPodsTest工程和Pods工程会被以workspace的形式组织和管理,也就是我们刚才看到的JYCocoaPodsTest.xcworkspace文件。

3、原来的工程设置已经被更改了,这时候我们直接打开原来的工程文件去编译就会报错,只能使用新生成的workspace来进行项目管理。

4、CocoaPods通过一个名为Pods.xcconfig的文件来在编译时设置所有的依赖和参数。

最新的 CocoaPods 的使用教程(一)的更多相关文章

  1. 【转】CocoaPods的使用教程

    转载自:https://www.jianshu.com/p/dfe970588f95 前言 前几天发布我的开源库<最简单方便的iOS轮播开源库:JYCarousel>到CocoaPods的 ...

  2. 最新的 cocoaPods 安装方法

    经过努力终于发现了最新的 解决cocoaPods安装的办法: taobao Gems 源已停止维护,现由 ruby-china 提供镜像服务 第一步:安装rvm, 不管需不需要升级ruby,rvm可以 ...

  3. iOS:最详细的创建CocoaPods私有库教程

    一.感慨 说实话,创建这个CocoaPods私有库,我愣是搞了两个星期,创建的过程中,自己的感情波动是这样的:激情四射---->有点困惑----->极度困惑----->有点失望--- ...

  4. 最新的 cocoapods 安装与使用(2016.11)

    cocoapods简介: cocoapods 是iOS的类库管理工具,可以让开发者很方便集成各种第三方库,而不用去网站上一个个下载,再一个个文件夹的拖进项目中,还得添加相关的系统依赖库.只需要安装好c ...

  5. CocoaPods 安装使用教程

    CocoaPods 是比较好的第三方类库管理工具.可通过 terminal 命令进行第三方类库的安装,非常方便. 安装: Mac terminal 输入:gem install cocoapods 若 ...

  6. 最新的 cocoapods 安装与使用(2019.04)

    cocoapods简介: cocoapods 是iOS的类库管理工具,可以让开发者很方便集成各种第三方库,而不用去网站上一个个下载,再一个个文件夹的拖进项目中,还得添加相关的系统依赖库.只需要安装好c ...

  7. 最新的CocoaPods 安装及使用

    当在开发iOS应用时,会经常使用到很多的第三方开源类库,一般的方法是直接从GitHub下载,然后拖到项目中使用,如果该开源类库不依赖其他的类库,就可以直接使用:如果该开源类库还依赖一些其他的类库,则需 ...

  8. 2017 最新的 cocoaPods 安装方法

    经过努力终于发现了最新的 解决cocoaPods安装的办法: taobao Gems 源已停止维护,现由 ruby-china 提供镜像服务 第一步:安装rvm, 不管需不需要升级ruby,rvm可以 ...

  9. Ruby升级的最新方法/CocoaPods安装

    今天安装cocoapods时候出现了下面的提示 Error installing pods:active support requires Ruby version >= 2.2.0//这个需求 ...

随机推荐

  1. Java7,AutoClosable

    Java 7的try-with-resource语法的目的是提高Java开发人员的效率,使得他们不需要在编写代码时考虑资源释放问题,大多数的这类"清理"问题是由于异常发生时清理方法 ...

  2. Pearson(皮尔逊)相关系数

    Pearson(皮尔逊)相关系数:也叫pearson积差相关系数.衡量两个连续变量之间的线性相关程度. 当两个变量都是正态连续变量,而且两者之间呈线性关系时,表现这两个变量之间相关程度用积差相关系数, ...

  3. 微信小程序阿里云服务器https搭建

    已更新 2018-11-20 1.什么是https?HTTPS(全称:安全套接字层上的超文本传输​​协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS ...

  4. 【转】npm install、npm install --save与npm install --save-dev区别

    原文: https://blog.csdn.net/qq_30378229/article/details/78463930 ------------------------------------- ...

  5. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(八)安装zookeeper-3.4.12

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  6. wifidog接口文档(转)

    目录(?)[-] 网关心跳协议 请求信息 回复格式 例子 用户状态心跳协议 请求格式 注意 回复格式 状态码 例子 跳转协议 请求格式 例子 注册协议 请求格式 例子 wifidog是搭建无线热点认证 ...

  7. Mongo DB Sharding

    Database Sharding is considered to be the horizontal partitioning of a database or the search engine ...

  8. HTTP协议综合

    1.用浏览器模拟各种User Agent 测试页面的时候经常需要不同的User Agent,Firefox.Chrome浏览器就可以完美的模拟出各种User Agent.User Agent Swit ...

  9. thinkphp3错误:syntax error, unexpected 'list' (T_LIST), expecting identifier (T_STRING)

    syntax error, unexpected 'list' (T_LIST), expecting identifier (T_STRING) 出现这个错误的原因是,list是php的一个函数,系 ...

  10. asp.net 字符串反序列化

    //在大多数情况下,dynamic 类型与 object 类型的行为是一样的. //Dynamic 在通过 dynamic 类型实现的操作中,该类型的作用是绕过编译时类型检查, 改为在运行时解析这些操 ...