概述
最近在学习中,发现了对于cocoapods只是停留在了使用阶段。并没有什么了解。于是乎这个系列诞生了。本系列不讲解如何使用cocoapods,而是通过官方的文档来详细了解一下cocoapods。主要会记录一下三个方面的内容。
- 1.podfile相关内容
- 2.podspec相关内容
- 3.搭建私有cocoapods库
依据于官方文档,有兴趣的可以去看看:官网文档
一:podfile
1.1 简介
Podfile是一个用来描述xcode项目的依赖的说明书或者规格。长这个样子。
1.2 根选择(类似于全局配置)
1.2.1 install!
全局配置现在只有一个install!install!标注了pod在整个安装期间安装的方法和选择。
第一个参数是安装所用的方法,第二个参数是用来标记安装选项。当前安装所用的方法就只有一个:’cocoapods’,所以第一个参数就只能用’cocoapods’。未来应该会支持更多的方法。
1.3 依赖
1.3.1 pod
podfile指明了每一个用户目标的依赖关系。一下 ’ ‘ 都为单引号
1.3.1.1 pod
指明一个工程的依赖关系。一个依赖通过一个pod 名称和一个可选的版本号规定。
当你想使用一个pod的最新版本的时候,可以忽略后面的版本号。
比如:pod ‘xxxxxx’
如果想要在项目中使用一个固定的pod 版本,就需要在后面加入版本号。
比如:pod ‘xxxxx’, ’0.9’
如果没有指定的版本,也可以使用操作符号:比如如下所示:
其他的可以不用解释,解释一下>这个操作符,例子中> 0.1.2其实是0.1.2-0.2.0中间的版本,并且不包括0.2.0版本,取这个范围之内最近的一个符合我们要求的版本。
版本号的规定如下:
https://semver.org/lang/zh-CN/ 根据标准。也方便我们以后搭建私有仓库时,对组件进行版本管理。
1.3.1.2 构建配置
默认情况下,目标所有的构建配置中都安装了依赖项。为了调试或者其他的原因,可以在一个列表中表明在什么环境下可以被使用或者配置。
pod 'PonyDebugger', :configurations => ['Debug', 'Beta’]
也可以只设置一个模式。
pod 'PonyDebugger', :configuration => ‘Debug’
1.3.1.3 来源
可以重新指定依赖项的源位置,而不使用pod仓库的源的位置。
pod 'PonyDebugger', :source => '[https://github.com/CocoaPods/Specs.git](https://github.com/CocoaPods/Specs.git)’
1.3.1.4 子模块
当通过名称安装pod的时候,将会安装在podspec中配置好的所有的子模块。如果只想安装特定模块,可以使用以下:
pod 'QueryKit/Attribute'
如果想要安装好几个特定的模块,可以指定一个list,如下。
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet’]
1.3.1.5 使用本地文件
pod 可以指定为本地的源文件。如下
pod 'AFNetworking', :path => '~/Documents/AFNetworking’
cocoapods会假定,我们指定的文件夹就是pod的根目录,会直接从这个根目录编译项目到我们指定的target中,如果我们本地的源文件变化了,那么编译出来的pod也会跟着变化。
注意:pod的podspec文件应该放在这个文件夹当中,podspec文件是一个配置文件。
1.3.1.6 可以从外部引入podspec
podsepc可以从另外一个库中引入。如下:可以从http中引入。
pod 'JSONKit', :podspec => '[https://example.com/JSONKit.podspec](https://example.com/JSONKit.podspec)’
1.3.2 podspec(pod的配置文件)
使用在podspec中定义的pod的依赖关系。如果没有参数,podspec优先使用根目录。
podspec
//指定名称
podspec :name => 'QuickDialog'
//指定podspec的源。
podspec :path => '/Documents/PrettyKit/PrettyKit.podspec’
1.3.3 target (目标)
根据给定的block定义cocoapods的目标和作用域。目标必须与一个xcode项目相关联。
1.3.4 脚本 script_phase
可以添加与目标项目集成的脚本。script phase可以执行任意脚本,并且可以在运行期间使用所有xcode的环境变量。如下所示
script_phase :name => 'HelloWorldScript', :script => 'echo "Hello World"'
script_phase :name => 'HelloWorldScript', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby’
1.4 目标配置项
这些设置用来控制cocoapods来生成project。
1.4.1 platform(平台)
指定一个静态链接库编译的平台版本。cocoapods提供一个默认的开发平台。当前的是iOS 4.3,OSX 10.6,TVOS 9.0,watchOS 2.0。
如果编译iOS平台<4.3,armv6需要添加ARCHS标识。如下:
1.4.2 project(工程)
指定一个工程,可以使用cocoapods链接出来的库。如果没有指定,那么就会使用和podfile同一个目录下的project。也可以指定在什么模式下生效。比如release,debug等。
第一个指定了project,那么cocoapods链接的静态库,就只能在FastGPS中引入。
1.4.3 inhibit_all_warnings(阻止所有警告)
阻止所有cocoapods库中的所有警告。
1.4.4 use_frameworks!
如果指定了use_frameworks!,就生成framework而不是.a静态库。
1.5 工作区(workspace)
用来罗列出配置workspace的选项并且进行全局设置。
1.5.1 workspace
指定一个包含了所有project的xcode的工作区。
如果没有明确的指明workspace并且在同一个文件夹下有一个podfile,那么这个project的名字就会被workspace用来作为名字。以下可以指定名称。
workspace ‘MyWorkspace'
1.6 Sources(pod源)
默认使用官方的来源。但是也可以自己指定。podfile根据文件中定义的pod和version从源码仓列表中检索spec。当然了,也可以自己标注。自己标注的话,默认会使用最高版本号的。
1.7 Hooks(钩子)
就是hook一系列的pod的安装过程。比如安装前,或者提交安装前。
1.7.1 pre_install
允许在pod下载完成之后,安装之前做一些操作。如下:
1.7.2 post_install
允许对即将被写入磁盘的xcode工程做一些改变。
二:小结
完。
我是二毛,一个集智慧和逗比于一身的iOSer