这篇文章,记录一下CocoaPods的进阶用法。

进阶用法主要体现在.podspec文件和Podfile的配置上。

.podspec文件的进阶配置

以官方的一个.podspec文件示例细说:

Pod::Spec.new do |spec|
spec.name = 'Reachability'
spec.version = '3.1.0'
spec.license = { :type => 'BSD' }
spec.homepage = 'https://github.com/tonymillion/Reachability'
spec.authors = { 'Tony Million' => 'tonymillion@gmail.com' }
spec.summary = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
spec.module_name = 'Rich' spec.ios.deployment_target = '9.0'
spec.osx.deployment_target = '10.10' spec.source_files = 'Reachability/common/*.swift'
spec.ios.source_files = 'Reachability/ios/*.swift', 'Reachability/extensions/*.swift'
spec.osx.source_files = 'Reachability/osx/*.swift' spec.framework = 'SystemConfiguration'
spec.ios.framework = 'UIKit'
spec.osx.framework = 'AppKit' spec.dependency 'SomeOtherPod'
end

1.|spec|中的spec命名可以任意修改,只需要保持后续选项的对象名称一致即可。

2.version字段对应Podfile文件配置中版本号,source的tag字段对应SCM源代码的标签

3.source字段指定了SCM源代码地址和版本,支持如下关键字组:

:git => :tag, :branch, :commit, :submodules

:svn => :folder, :tag, :revision

:hg => :revision

:http => :flatten, :type, :sha256, :sha1

:path

tag的写法可以如下::tag => spec.version

建议如此,使得SCM源代码的标签和Podfile配置中版本号保持一致。

4.source_files字段,表明类库包括的文件。

需要注意文件匹配的写法:

*表示文件名通配符

**表示文件夹递归匹配

?表示一个任意字符的匹配

[a-z]表示匹配集合中的一个字符

{h,m}表示两个字符中的任意一个

如下示例:

"JSONKit.?"    #=> ["JSONKit.h", "JSONKit.m"]
"*.[a-z][a-z]" #=> ["CHANGELOG.md", "README.md"]
"*.[^m]*" #=> ["JSONKit.h"]
"*.{h,m}" #=> ["JSONKit.h", "JSONKit.m"]
"*" #=> ["CHANGELOG.md", "JSONKit.h", "JSONKit.m", "README.md"]

5.public_header_files和private_header_files分别表示公开和私有的头文件路径,便于集成时候自动配置引用路径,默认公开全部头文件

6.vendored_frameworks和verdored_libraries分别表示当前类库中存在的.framework和.a文件的路径,用于集成时候自动配置引用路径

7.resource_bundles字段,表明编译类库需要的资源bundles及其文件,如下:

spec.resource_bundles = {
'MapBox' => ['MapView/Map/Resources/*.png'],
'OtherResources' => ['MapView/Map/OtherResources/*.png']
}

key表示bundle的名称,value表示内部资源文件。

不建议使用类似字段resources,可能造成资源名字冲突,并且会将指定资源直接拷贝到目标target中。

8.exclude_files字段,表明不包括的文件

9.frameworks和libaries字段表明类库引用的系统frameworks和libraries

需要注意的是,libraries的value需要省略前缀"lib",并且不需要扩展名。例如需要引用libz.dylib,则如下写法:

s.libraries = 'z'

10.compiler_flags字段表明编译flags,例如-Objc

11.pod_target_xcconfig字段表明任意编译flag,如下:

spec.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }

12.header_dir字段表明存储公开头文件的文件夹名称

13.dependency字段,表明依赖的其他类库及版本,多个类库分开书写

14.requires_arc字段,表明是否启用ARC,默认为true,也可以指定部分目录或文件启用ARC,如下:

spec.requires_arc = 'Classes/Arc'
spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm']

如果大多数文件启用ARC,个人文件不启用ARC,可以使用subspec字段:

Pod::Spec.new do |s|
...
s.exclude_files = 'xxxx'
s.subspec 'Core' do |sp|
sp.requires_arc = false
sp.source_files = 'xxxx'  
end s.subspec 'ObjectMapping' do |os|
end
end

15.subspec字段,定义一个子模块,将部分文件移入其中,可添加局部配置,'Core'和'ObjectMapping'就是子模块文件夹的名称

Podfile文件的进阶配置

1.pod指令,指定依赖库时候,无版本号表示最新版本,具体版本号将锁定版本,使用运算符可指定一个区间的版本;~> 0.1.2表示大于等于0.1.2并且小于0.2.0,此运算符对所给版本号最后一个部分有效。

2.如果需要使用本地仓库,可以如下配置:

pod 'AFNetworking', :path => '~/Documents/AFNetworking'

但需要注意,所给路径下应该存在.podspec文件

3.如果podspec文件存在于git仓库中,即使没有最新提交对应的podspec文件,也可用下列方式直接集成对应位置的类库:

To use the master branch of the repository:
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git' To use a different branch of the repository:
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev' To use a tag of the repository:
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0' Or specify a commit:
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'

特别是指定一个commit的方式,适合未发布标签版本的代码内测。

4.如果podspec文件不存在于git仓库中,需要用如下方式访问:

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

5.如果想消除全部依赖类库的编译提醒,可使用inhibit_all_warnings!,如下配置:

platform :ios, '9.0'
inhibit_all_warnings! target 'MyApp' do
pod 'ObjectiveSugar', '~> 0.5'
...
end

也可以针对个别依赖库设置编译提醒的开关:

pod 'SSZipArchive', :inhibit_warnings => true
pod 'SSZipArchive', :inhibit_warnings => false

n

CocoaPods学习系列4——进阶用法的更多相关文章

  1. CocoaPods学习系列5——错误集锦

    这篇文章记录使用CocoaPods过程中遇到的一些错误. 1.error:include of non-modular header inside framework module 在自定义类库中,引 ...

  2. CocoaPods学习系列3——创建和使用私有Pods

    前一篇记录了使自己的项目支持CocoaPods管理的过程,核心的步骤就是podspec的配置和提交.这个文件,记录了类库的详细信息,用于对类库的集成. 需要注意的一点,上一篇创建的podspec文件, ...

  3. CocoaPods学习系列2——使自己的项目支持CocoaPods管理

    该篇记录使自己的项目支持CocoaPods管理. 要达到这一目的,需要如下步骤: 1.将自己的项目提交到github,添加开源协议license 2.添加podspec文件 3.验证podspec,成 ...

  4. CocoaPods学习系列1——安装和常规使用

    CocoaPods是一个Github上的开源项目,目前已经成为iOS开发过程中标准的依赖库管理器,提供了一种对第三方类库简单优雅的集成和管理方案. 其工作原理,是将第三方类库统一管理到一个名为Pods ...

  5. Python学习系列之format用法

    format是代替%s格式的方法 不需要理会数据类型的问题,在%s方法中的%s只能代替字符串类型 填充方式十分灵活,对其方式十分强大 format填充字符串 通过位置来填充字符串 #format会把参 ...

  6. (数据科学学习手札61)xpath进阶用法

    一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外(可参考我之前写的(数据科学学习手札50)基于P ...

  7. Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍

    大家好,又见面了. 到这里呢,已经是本SpringData JPA系列文档的第三篇了,先来回顾下前面两篇: 在第1篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring ...

  8. Django框架学习-Model进阶用法

    Model进阶用法 回顾 访问外键 访问多对多关系 更改数据库结构 当处理数据库结构改变时,需要注意到几点: 增加字段 首先在开发环境中: 再到产品环境中: 删除字段 删除多对多字段 删除model ...

  9. CSS学习系列4 -- 再说CSS中的浮动运用及clear:left/right实际用法

    在 CSS学习系列2 -- CSS中的清除浮动 中,我们详细说了CSS中清除浮动的方法及使用 后来我自己在项目开发一个需要使用浮动的网页时,进行了实际运用,加上后来看到一篇好文章.所以就在这里再次写篇 ...

随机推荐

  1. CodeForces 666B World Tour(spfa+枚举)

    B. World Tour time limit per test 5 seconds memory limit per test 512 megabytes input standard input ...

  2. <2014 08 28> 大学学习小结

    大一:哲学.物理(科普).瞎玩 大二:机械.力学.继续哲学 大三:电子电路.计算机.编程 大四:毕业项目(机器人等) 研一:物理.数学(常熟) 研二:AGV.TUM实习 研三:写论文.实习程序员.申请 ...

  3. <2014 04 26> 《Coders at Work编程人生:15位软件先驱访谈录》

    什么是老派程序员?调试只用printf,关心数据结构,先整体或先局部,不知道OO.IDE.TDD.BDD等等为何物.Ken Thompson,Jamie Zawinski,Joe Armstrong, ...

  4. Qt隐式共享与显式共享

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Amnes1a/article/details/69945878Qt中的很多C++类都使用了隐式数据共 ...

  5. scrapy spider

    spider 定义:在spiders文件夹中由用户自定义,继承scrapy.Spider类或其子类 Spider并没有提供什么特殊的功能. 其仅仅请求给定的 start_urls/start_requ ...

  6. Win7中的IIS配置asp时出现“出现403 文件夹禁止訪问错误”!

    Win7中的IIS配置asp时出现"出现403 文件夹禁止訪问错误"! 在[默认文档]中设一下启动文件即可了.

  7. vue自定义全局和局部指令

    一.介绍 1.除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令. 2.自定义指令的分类       1.全局指令 2.局部指令 3.自定义全局指令格式 V ...

  8. while小用

    1.使用while打印1 2 3 4 5 6  8 9 10 #!/usr/bin/env python #encoding: utf-8 num = 1 while num < 11: if ...

  9. Python(常用模块)

    模块 模块 本质上就是一个.py文件 内置模块(解释器层面) 第三方模块(Python lib文件) 自定义模块(当前路径) 模块调用,包的概念 在计算机程序的开发过程中,随着程序代码越写越多,在一个 ...

  10. python 对象和类

    python中所有数据都是以对象形式存在.对象既包含数据(变量),也包含代码(函数),是某一类具体事物的特殊实例. 面向对象的三大特性为封装.继承和多态. 1.定义类 #定义空类 class Pers ...