CocoaPod使用--Podfile--版本依赖管理
文章目录
- 安装cocoapod
- 和现有工程集成--空Podfile
- 和现有工程集成-- 指定workspace
- 添加依赖库
- Podfile 语法
- 添加依赖库
- 指定依赖库的描述文件(Specification)
- 将依赖库以framework形式引入
- 设置依赖库版本号
- 忽略所有依赖库的所有警告
- 忽略单个依赖库的警告
- 依赖库的构建配置(Build configurations)
- 模块化头文件 (Modular Headers)
- 指定依赖库的源
- 从本地文件目录引入依赖库
- 从代码仓库中引入依赖库
- 定义target
- inherit! 依赖继承
- 添加脚本
- 抽象target (abstract_target)
- link_with (deprecated)
- 另一种抽象target的(abstract!)
- 指定平台最小版本
- 指定工程项目(project)和配置(build configurations)
- xcodeproj(deprecated)
- 指定工作空间(workspace)
- 添加依赖库下载源
参考网址 http://guides.cocoapods.org
成文的环境
- mac os 10.14
- cocoapod 1.5.3
- xcode 10.1
安装cocoapod
安装需要gem包管理器
在shell中执行
$ sudo gem install cocoapods
安装后,可以查看pod版本,输出正常,则安装完成
$ pod --version
和现有工程集成–空Podfile
和现有工程集成,使用空podfile,是一个简单有效的方法。
在现有工程的工程文件目录中,添加Podfile
platform :ios, '8.0' # 平台ios,最小依赖 8.0
#下面两行是一个整体代码块
target 'myApp' do # myApp需替换成自己的target
end
保存podfile文件,将其放在工程文件同目录,打开shell执行
$ pod install
执行完毕后,一般会多出些文件和文件夹:myApp.xcworkspace
、Podfile.lock
、Pods
。
之后,就可以打开myApp.xcworkspace
管理现有工程了
和现有工程集成-- 指定workspace
如果现有工程已经有了xxxx.xcworkspace
文件怎么办?
也很简单,在空Podfile上稍微修改即可
添加workspace 'abcd.xcworkspace'
workspace 'abcd.xcworkspace' #abcd为已经存在的工程文件
platform :ios, '8.0' # 平台ios,最小依赖 8.0
#下面两行是一个整体代码块
target 'myApp' do # myApp需替换成自己的target
end
然后执行
$ pod install
打开abcd.xcworkspace
添加依赖库
空Podfile建立后,就可以添加依赖库了,以AFNetworking
为例
在空Podfile基础上,添加依赖库 pd 库名 版本
platform :ios, '8.0'
target 'myApp' do pod 'AFNetworking', '~> 3.2.1' #版本为3.2.1 - 3.3之间,不包括3.3#pod 'AFNetworking', '= 3.2.1' #指定使用3.2.1
end
然后执行 pod install
$ pod install
这样,AFNetwork库就引入工程了。
Podfile 语法
添加依赖库
指令 pod
例如 pod 'AFNetworking'
,pod 'AFNetworking', '~> 3.2.1'
指定依赖库的描述文件(Specification)
podspec
通常,一个Pod库目录下只要一个podspec文件,在有多个的情况下,CocoaPod将使用找到的第一个podspec文件;你也可以指定使用哪一个podspec文件
podspec :name => 'QuickDialog'
或
podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'
将依赖库以framework形式引入
指令为 use_frameworks!
platform :ios, '8.0'
target 'myApp' do use_frameworks! #将依赖库以framework形式引入pod 'AFNetworking', '~> 3.2.1'
end
使用 use_frameworks!
和不使用的区别如图:
设置依赖库版本号
cocoapod的版本号规则遵循 semantic versioning
可以不指定依赖库的版本,如下
platform :ios, '8.0'
target 'myApp' do pod 'AFNetworking'
end
如果指定,规则如下:
'> 0.1'
任何大于0.1的版本 (不包含0.1)'>= 0.1'
任何大于等于0.1的版本 (包含0.1)'< 0.1'
任何小于0.1的版本(不包含0.1)'<= 0.1'
任何小于等于0.1的版本 (包含0.1)
cocoapod额外提供的版本号操作符 ~>
:
'~> 0.1.2'
从0.1.2(含)到 0.2(不含)之间的任何版本,不包含高于0.2的版本'~> 0.1'
从0.1(含) 到 1.0(不含)之间的任何版本, 不包含高于1.0的版本'~> 0'
0或者高于0的任何版本
忽略所有依赖库的所有警告
指令 inhibit_all_warnings!
platform :ios, '8.0'
nhibit_all_warnings!
target 'myApp' do pod 'AFNetworking', '~> 3.2.1'
end
忽略单个依赖库的警告
指令 inhibit_warnings
,优先级高于 inhibit_all_warnings!
例如:
target 'myApp' do pod 'SSZipArchive', :inhibit_warnings => true #true 忽略警告pod 'AFNetworking', :inhibit_warnings => false #false 输出警告
end
依赖库的构建配置(Build configurations)
默认情况,依赖的构建配置和target的配置保持一致
如果出于调试,或者其他原因,可以单独给依赖库设置
指定多个配置
pod 'AFNetworking', :configurations => ['Debug', 'Beta']
指定一个
pod 'AFNetworking', :configuration => 'Debug'
- 注意,多个和一个的指令有区别 ,
configurations
和configuration
模块化头文件 (Modular Headers)
use_modular_headers!
(全局)
:modular_headers => true
(单个Pod,优先级高于全局)
:modular_headers => fasle
(单个Pod,优先级高于全局)
例如
pod 'AFNetworking', :modular_headers => true
platform :ios, '8.0'
target 'myApp' douse_frameworks!pod 'AFNetworking', :modular_headers => true
end
指定依赖库的源
source
例如 pod 'PonyDebugger', :source => 'https://github.com/CocoaPods/Specs.git'
从本地文件目录引入依赖库
path
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
- 注意,上面示例,~/Documents/AFNetworking不是git仓库
从代码仓库中引入依赖库
以git仓库为例:
- 使用master分支
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
- 指定分支
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
- 使用标签
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
- 指定提交节点
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
- 使用podspec描述文件
pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'
定义target
target的名字应该和xcode工程中的名字保持一致
#定义ZipApp,ZipApp依赖SSZipArchive
target 'ZipApp' dopod 'SSZipArchive'
end
默认情况下,target会继承在自身外面的依赖项,若不想继承需要使用inherit!
指令(参见 inherit! 依赖继承)
target 'ZipApp' dopod 'SSZipArchive'target 'ZipAppTests' do #ZipAppTests需要继续ZipApp的依赖,即也依赖 SSZipArchivepod 'Nimble'end
end
inherit! 依赖继承
inherit! 依赖继承 可用模式如下:
inherit! : complete
继承父项的所有行为inherit! : none
不会继承父项的任何行为inherit! : search_paths
仅继承父项的搜索路径
target 'App' dotarget 'AppTests' doinherit! :search_pathsend
end
添加脚本
script_phase
给指定的target的添加脚本,该脚本可以访问xcode环境变量,在Xcode执行编译时被调用。
可在xcode的target->Build Phases中查看
target 'myApp' doscript_phase :name => 'HelloWorldScript1', :script => 'echo "Hello World"'script_phase :name => 'HelloWorldScript2', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby'
end
上面的示例执行pod install后,在xcode的target->Build Phases中查看
抽象target (abstract_target)
abstract_target
一般情况下,target
必须和xcode工程中的target名字保持一致,而abstract_target
则不必这样。
abstract_target
主要是为了方便管理依赖项继承。
一个应用场景就是,xcode中的多个target都依赖相同的三方库,则可以使用抽象target来管理
abstract_target 'ABC' dopod 'libA'pod 'libB'pod 'libC'target 'XXX' do # xxx同时依赖 libA、libB、libC、libDpod 'libD'endtarget 'YYY' do # xxx同时依赖 libA、libB、libC、libEpod 'libE'end
end
link_with (deprecated)
为CocoaPod 1.0之前的指令,请使用abstract_target
另一种抽象target的(abstract!)
abstract!
表示当前target是抽象的,因此不会直接链接到Xcode目标(target)中。
target 'ABC' doabstract!pod 'libA'pod 'libB'pod 'libC'target 'XXX' do # xxx同时依赖 libA、libB、libC、libDpod 'libD'endtarget 'YYY' do # xxx同时依赖 libA、libB、libC、libEpod 'libE'end
end
指定平台最小版本
platform
例如
platform :ios # 合法的平台 osx ,ios ,tvos,watchos
默认情况下,各个平台对应的版本
- iOS 4.3
- OS X 10.6
- tvOS 9.0
- watchOS 2.0
也可以自己指定版本号
platform :ios, 4.0
platform :osx, 10.0
platform :tvOS, 9.0
platform :watchos, 2.0
指定工程项目(project)和配置(build configurations)
指定哪些xcode project需要使用链接Pods库
Podfile文件所在目录如果只有一个xcode project文件,那么在不指定project的情况下,和Podfile文件同目录下的那个唯一一个xcode project文件将被使用。
在有多个xcode project文件时,使用project
指定需要的工程项目,例如
target 'myApp_123' doproject './myApp_123' #或者添加扩展名 ./myApp_123.xcodeproj
endtarget 'myApp_456' doproject './myApp_456'
end
还可以指定构建配置,例如
target 'myApp' doproject './myApp_123', '发布的Target' => :release, '测试的Target' => :debug
end
xcodeproj(deprecated)
为CocoaPod 1.0之前的指令,行为同project
指定工作空间(workspace)
workspace 'MyWorkspace'
添加依赖库下载源
source
CocoaPods Master Repository #官方的源
source 'https://github.com/artsy/Specs.git'
source 'https://github.com/CocoaPods/Specs.git'
在不指定任何源情况下,CocoaPods将使用隐含的官方源;如果指定了其他源,那么这个隐含的官方源需要显式指定(如果不使用官方源,可以不指定);
源的优先级和顺序相关,第一个源优先级最高;
CocoaPods将使用包含Pod的第一个源的Pod的最高版本(无论其他源是否具有更高版本)
CocoaPod使用--Podfile--版本依赖管理相关推荐
- 统一依赖管理Composing builds
背景 在我们的AS项目中,经常引用多个Module,多人参与项目开发,这种背景下,我们会时常遇到版本冲突问题,出现不同的compileSdkVersion等,导致我们的包体变大,项目运行时间变长,所以 ...
- Android Studio统一依赖管理Composing builds
glideVersion : "4.11.0", okhttpVersion : "3.11.0", retrofitVersion : "2.3.0 ...
- Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)
Java Gradle入门指南之依赖管理(添加依赖.仓库.版本冲突) 作者:@gzdaijie 本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/52 ...
- dep指定版本 go_Go依赖管理工具 - dep
Go依赖管理工具 Go dependency management tool 环境要求 Golang >= 1.9 Dep 目前版本: dep: version : devel build da ...
- 用CocoaPods做iOS程序的依赖管理
CocoaPods 简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 语言的 Maven,nodejs 的 npm.随着 iOS 开发者的增多,业界也出现了为 iOS 程序提供 ...
- ios依赖管理工具:Carthage
Cocoa的依赖管理器,我们已经有了CocoaPods,非常好用,那么为什么还要创建这样一个项目呢? 首先,CocoaPods默认会自动创建并更新你的应用程序和所有依赖的Xcode workspace ...
- Gradle系列教程之依赖管理
这一章我将介绍Gradle对依赖管理的强大支持,学习依赖分组和定位不同类型仓库.依赖管理看起来很容易,但是当出现依赖解析冲突时就会很棘手,复杂的依赖关系可能导致构建中依赖一个库的多个版本.Gradle ...
- Gradle之依赖管理
Gradle之依赖管理 泡在网上的日子 / 文 发表于2015-01-29 16:12 第8824次阅读 Gradle,Android Studio 2 编辑推荐:稀土掘金,这是一个针对技术开发者的一 ...
- Gradle for Android 第三篇( 依赖管理 )
Gradle for Android 第三篇( 依赖管理 ) 依赖管理是Gradle最闪耀的地方,最好的情景是,你仅仅只需添加一行代码在你的build文件,Gradle会自动从远程仓库为你下载相关的j ...
- 【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
文章目录 一.Gradle 自动下载并配置构建环境 二.Gradle 提供 API 扩展与开发工具集成 三.Gradle 内置 Maven 和 Ivy 依赖管理 四.Gradle 使用 Groovy ...
最新文章
- ReentrantReadWriteLock读写锁的使用
- UML科普文,一篇文章掌握14种UML图
- 2位图灵奖得主、7位院士等一众AI大佬云集共议数字化转型 | CNCC 2021
- pytorch 激活函数
- qt udp多线程收发过程_! udp多线程的有关问题
- VTK:Disk用法实战
- asp.net读取用户控件,自定义加载用户控件
- 编译原理—小型(简化)高级语言分析器前端(Java)
- html文档定义层标记是,jsp练习题目201312
- el-table跨页选中
- 关于obs的录制时黑屏问题
- JavaScript重难点解析6(Promise)
- code::blocks打造自己的开发环境
- 【ROS学习笔记】(十二)常用可视化工具
- android 10闪退如何解决,安卓Activity启动在10.0下闪退
- codeforces 584E Anton and Ira [想法题]
- log4j的详细介绍
- H264编解码算法在网络视频传输中的应用
- SPOJ COT 10628 Count on a tree
- 向量的数量积和向量积