一、建立依赖库
1.在git上创建工程
一般而言,依赖库的建立可以直接使用公开类服务器如github中的仓库,也可以是私有服务器,比如gitlab。这里使用gitlab作为演示
2.使用git管理工程
直接使用sourceTree新增一个仓库即可:
3.将代码上传到依赖库中
如果初始化中勾选使用readMe初始化,那么工程中就有一个README.md文件;
这一步只需要将代码赋值到改工程中提交即可,这里以修改README.md文件做演示:
二、创建spec仓库
1.在git上创建spec仓库
这一步和上一步中创建依赖库是同一个操作,只是spec库的唯一作用就是用来存储私有库对应的spec。在pod时,source需要设置spec对应的地址,也就是现在要创建的这个仓库的地址。和共有库(比如AF、SDWebimage等)的唯一区别就是共有库的spec文件是存储在cocoapod的master分支中的,私有库的spec文件存储在私有仓库中;
2.使用git管理spec仓库
同理,使用sourceTree直接拉取,略
三、依赖库和spec库的整合链接
1.依赖库生成spec文件
初始化spec的命令:
pod spec create specName
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" => "[email protected]" }
备注:这里的作者和邮箱(联系方式)必须和下面的License保持一致
3.Spec License
格式:
s.license = { :type => "MIT", :file => "LICENSE" }
一般使用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"
例子:
文件的结构:
写法:
s.source_files = "QLCrashGuardDemo/QLCrashGuardSupportFiles/**/*.{h,m}"
本例子中直接使用README来做演示:
写法:
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(需要在对应的路径下运行)
如图:
验证后的警告可以不修改,报错是必须修改的,按照提示修改报错知道验证通过即可;
通过后的样式:
备注
1.添加tag时,要推送到远端,不然仍然找不到和version对应的tag
2.及时推送了tag,有时候可能是缓存的原因让然会导致更新不及时,此时新增一个全新的tag再验证即可
按照模板填写即可
官方文档:https://guides.cocoapods.org/syntax/podspec.html#social_media_url
几个重点地方:
4.添加spec仓库到贝蒂
命令:
pod repo add specFileName(spec仓库的名称) spec(仓库的地址)
5.将依赖库的spec文件push到spec仓库
添加并push之后会见到如下效果:
三、在项目中导入依赖库
备注:
1.需要添加对应spec repo的地址,不然会找不到对应的依赖库
2.pod update之前要确保已经add了spec repo
pod成功的结果:
四、pod中使用本地路径:
比如:
pod 'BaseBusiness', :path => '../../BaseBusiness'
几个特性:
1.本地没有spec repo都没问题,依据的是本地path中对应的spec
2.spec不用每次都push,修改后立马生效
3.使用本地path不回去下载dependency???而是直接复制指定的source_files文件夹的文件。而不使用path时回去下载对应的所有dependency???如果本地已经有了呢?或者多个pod重复依赖呢???
总结:
cocoapod的本质是分为两个仓库,确切的说分为量种仓库。可以形象的理解成海港中有很多仓库,一种是存储货物的仓库,而在一个办公室里面,有一个关于这些货物信息的清单。依赖库相当于货物仓库,spec repo相当于清单仓库。每次pod update,先根据source下载货物清单,再根据pod xxx中具体需要哪种货物去清单找寻找对应的spec,了解这个货物的信息和配置后再进行pod,其实pod的做了什么操作,具体见下一章节
ios中的project、workspace、libary、framwork