cocoaPods:公有库私有库

1、创建依赖库

依赖库说白了就是存放第三方代码的库,而 cocoapods 本质就是第三方库维护和导入的便利性工具。依赖库也叫 pod 库,通常都是发布在公共的代码存放网站,上供别人下载和使用,好比 github 上的 AF、MJRefesh等。html

而公司中不少时候并不像泄露代码,可是又须要使用组件化的框架,这个时候就会把本身的代码发布到私有仓库上,这种 pod 库通常称为私有库。其本质和 AF、MJRefesh 等没有任何区别,惟一的区别就是一个公开,一个不公开。ios

1.在git上建立工程

通常而言,依赖库的创建能够直接使用公开类服务器如github中的仓库,也能够是私有服务器,好比 gitlab。这里使用 gitlab 做为演示 git

建立依赖库

2.使用git管理工程

直接使用sourceTree新增一个仓库便可: github

使用sourceTree拉去依赖库

3.将代码上传到依赖库中

若是初始化中勾选使用readMe初始化,那么工程中就有一个README.md文件; 这一步只须要将代码赋值到改工程中提交便可,这里以修改README.md文件作演示: 缓存

update

2、建立spec仓库

spec 仓库的概念至关于一个映射,能够理解成商品的清单。由于 pod 库会有不少,每一个 pod 库都会有一个本身的代码存放地址,若是想要导入不少 pod 库,挨个在 podfile 上添加地址,这是不现实的,也很不方便。bash

spec 仓库就是存放了全部的 pod 库的代码地址和信息,在使用特定的 pod 库时,直接在这个仓库中查找到其对应的代码下载地址进行下载,并根据 pod 库的一些配置信息进行相对应的配置,这些过程全都是自动化脚本实现的,关键文件有:podfile、spec文件、spec仓库。服务器

咱们使用 cocoapods 时,第一次pod update时都会下载 spec 仓库,仓库很大,因此第一次会很慢。本质就是下载 github.com/CocoaPods/S… 中的内容到本地,并且在咱们电脑中能够直接找到这个 spec 库的内容,具体地址就不贴出来了,很方便就能找到。框架

1.在git上建立spec仓库

这一步和上一步中建立依赖库是同一个操做,只是 spec 库的惟一做用就是用来存储私有库对应的spec。在pod时,source 须要设置spec对应的地址,也就是如今要建立的这个仓库的地址。和共有库(好比AF、SDWebimage等)的惟一区别就是共有库的spec文件是存储在cocoapod的master分支中的,私有库的spec文件存储在私有仓库中; ide

specRepo

2.使用git管理spec仓库

同理,使用sourceTree直接拉取,略。svn

3、依赖库和spec库的整合连接

1.依赖库生成spec文件

初始化spec的命令:

pod spec create specName
复制代码

create spec

2.spec文件的配置

基础格式:

Pod::Spec.new do |s|
...
end
复制代码

解释: 将spec略缩成s来表达 步骤: 1.填写基本信息(Spec Metadata)

s.name         = "XKQuote"
  s.version      = "0.0.1"
  s.summary      = "the summary of Spec."
  s.description  = "description of the Spec."
  s.homepage     = "http://EXAMPLE/XKQuote"
复制代码

2.Author Metadata

s.author             = { "caoxk" => "289722789@qq.com" }
复制代码

备注:这里的做者和邮箱(联系方式)必须和下面的License保持一致 3.Spec License 格式:

s.license      = { :type => "MIT", :file => "LICENSE" }
复制代码

通常使用MIT License:

create License(1)
create License(2)
建立完成后的样式:
MIT License

备注:license能够理解成一种版权信息,甚至能够理解成就是一串单纯的字符串,建立方法能够直接建立空文件而后复制字符串,也能够再gitlab上建立 4.Platform Specifics(平台信息)

s.platform     = :ios, "8.0"

  # When using multiple platforms
  # s.ios.deployment_target = "5.0"
  # s.osx.deployment_target = "10.7"
  # s.watchos.deployment_target = "2.0"
  # s.tvos.deployment_target = "9.0"
复制代码

5.Source Location(源地址)

s.source       = { :git => "http://EXAMPLE/XKQuote.git", :tag => "#{s.version}" }
复制代码

所支持的key: :git => :tag, :branch, :commit, :submodules :svn => :folder, :tag, :revision :hg => :revision :http => :flatten, :type, :sha256, :sha1 其中,git、svn、hg、http是来源渠道。另外,"url地址",这个至关因而默认的key。 咱们例子中gitlab中依赖库的地址便可填写:

s.source       = { :git => "https://gitlab.com/caoxk289722789/xkquote", :tag => "#{s.version}" }
复制代码

备注:

  • source和homePage没有关系。homePage只是做者告诉读者的一个非必要性信息(其实Metadata中最重要的几个就是name、version、author)
  • s.version == s.version.to_s ??? 6.Source Code(很重要) 源文件选项,也就是告诉cocoapods你须要复制到项目中的文件有哪些 语法:
// 源文件(要拷贝的文件)
  s.source_files  = "Classes", "Classes/**/*.{h,m}"
  // 排除在外的文件
  s.exclude_files = "Classes/Exclude"
  // 头文件(若是没有则会暴露全部的头文件,具体怎么用还要再试试)
  s.public_header_files = "Classes/**/*.h"
复制代码

例子: 文件的结构:

source file

写法:

s.source_files  = "QLCrashGuardDemo/QLCrashGuardSupportFiles/**/*.{h,m}"
复制代码

本例子中直接使用README来作演示:

image.png
写法:

s.source_files  = "SourceFiles/*.{h,m}"
#s.exclude_files = "Classes/Exclude"
#s.public_header_files = "Classes/**/*.h"
复制代码

备注: *:表示全部格式的文件 7.Resources 主要是添加资源文件,好比图片等 8.Project Linking 主要是添加framework 9.Project Settings(重点) 主要是添加依赖

3.验证spec文件

命令:

pod spec lint(须要在对应的路径下运行)
复制代码

如图:

image.png
验证后的警告能够不修改,报错是必须修改的,按照提示修改报错知道验证经过便可; 经过后的样式:
image.png

备注 1.添加tag时,要推送到远端,否则仍然找不到和version对应的tag 2.及时推送了tag,有时候多是缓存的缘由让然会致使更新不及时,此时新增一个全新的tag再验证便可

按照模板填写便可 官方文档:guides.cocoapods.org/syntax/pods… 几个重点地方:

4.添加spec仓库到本地

这一步就是下载spec仓库到本地,至关于第一次 pod update时,cocoapods会自动下载github.com/CocoaPods/S… 的内容到本地,这一次是咱们本身手动下载咱们本身的 spec 索引到本地。

命令:

pod repo add specFileName(spec仓库的名称) spec(仓库的地址)
复制代码

image.png

5.将依赖库的spec文件push到spec仓库

本地有了 spec 索引,可是其实这个 spec 索引中尚未咱们即将使用到的私有库的信息,也就是没有源代码的下载地址,这个时候须要把咱们私有库的 podspec 文件 push 到 spec 库中,从而创建索引,这样咱们 pod 的时候就能够先去 spec 库中找到这个私有库,而后提取里面存储的私有库的 podspec 文件,利用文件中的 source 地址下载源码,而且根据 podspec 文件中的配置命令对源码和工程进行相应的配置,这样就大功告成,可使用咱们本身的私有库了。

命令以下:

pod repo push XKQuote(spec repo的名称) XKQuote.podspec(spec文件名)
复制代码

添加并push以后会见到以下效果:

image.png

这里说一下,若是是直接 push 到公有库,也就是 github 上的 cocopods 的spec 仓库,直接使用 trunk 命令便可,以下:

pod trunk push XXX.podspec
复制代码

4、在项目中导入依赖库

pod

备注: 1.须要添加对应spec repo的地址,否则会找不到对应的依赖库 2.pod update以前要确保已经add了spec repo

pod成功的结果:

image.png

5、pod中使用本地路径:

好比:

pod 'BaseBusiness', :path => '../../BaseBusiness'
复制代码

几个特性: 1.本地没有spec repo都没问题,依据的是本地path中对应的spec 2.spec不用每次都push,修改后立马生效 3.直接使用本地的source_files中设置的文件,不拷贝,会创建索引,因此在工程中修改后会影响到源文件,若是有git,也会有git关联,因此很适合开发阶段来使用。

总结: cocoapod的本质是分为两个仓库,确切的说分为量种仓库。能够形象的理解成海港中有不少仓库,一种是存储货物的仓库,而在一个办公室里面,有一个关于这些货物信息的清单。依赖库至关于货物仓库,spec repo至关于清单仓库。每次pod update,先根据source下载货物清单,再根据pod xxx中具体须要哪一种货物去清单找寻找对应的spec,了解这个货物的信息和配置后再进行pod,其实pod的作了什么操做,具体见下一章节 ios中的project、workspace、libary、framwork

更多文章
相关文章
相关标签/搜索