文章目录

  • 安装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.xcworkspacePodfile.lockPods

之后,就可以打开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'

  • 注意,多个和一个的指令有区别 ,configurationsconfiguration

模块化头文件 (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--版本依赖管理相关推荐

  1. 统一依赖管理Composing builds

    背景 在我们的AS项目中,经常引用多个Module,多人参与项目开发,这种背景下,我们会时常遇到版本冲突问题,出现不同的compileSdkVersion等,导致我们的包体变大,项目运行时间变长,所以 ...

  2. Android Studio统一依赖管理Composing builds

    glideVersion : "4.11.0", okhttpVersion : "3.11.0", retrofitVersion : "2.3.0 ...

  3. Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)

    Java Gradle入门指南之依赖管理(添加依赖.仓库.版本冲突) 作者:@gzdaijie 本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/52 ...

  4. dep指定版本 go_Go依赖管理工具 - dep

    Go依赖管理工具 Go dependency management tool 环境要求 Golang >= 1.9 Dep 目前版本: dep: version : devel build da ...

  5. 用CocoaPods做iOS程序的依赖管理

    CocoaPods 简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 语言的 Maven,nodejs 的 npm.随着 iOS 开发者的增多,业界也出现了为 iOS 程序提供 ...

  6. ios依赖管理工具:Carthage

    Cocoa的依赖管理器,我们已经有了CocoaPods,非常好用,那么为什么还要创建这样一个项目呢? 首先,CocoaPods默认会自动创建并更新你的应用程序和所有依赖的Xcode workspace ...

  7. Gradle系列教程之依赖管理

    这一章我将介绍Gradle对依赖管理的强大支持,学习依赖分组和定位不同类型仓库.依赖管理看起来很容易,但是当出现依赖解析冲突时就会很棘手,复杂的依赖关系可能导致构建中依赖一个库的多个版本.Gradle ...

  8. Gradle之依赖管理

    Gradle之依赖管理 泡在网上的日子 / 文 发表于2015-01-29 16:12 第8824次阅读 Gradle,Android Studio 2 编辑推荐:稀土掘金,这是一个针对技术开发者的一 ...

  9. Gradle for Android 第三篇( 依赖管理 )

    Gradle for Android 第三篇( 依赖管理 ) 依赖管理是Gradle最闪耀的地方,最好的情景是,你仅仅只需添加一行代码在你的build文件,Gradle会自动从远程仓库为你下载相关的j ...

  10. 【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )

    文章目录 一.Gradle 自动下载并配置构建环境 二.Gradle 提供 API 扩展与开发工具集成 三.Gradle 内置 Maven 和 Ivy 依赖管理 四.Gradle 使用 Groovy ...

最新文章

  1. ReentrantReadWriteLock读写锁的使用
  2. UML科普文,一篇文章掌握14种UML图
  3. 2位图灵奖得主、7位院士等一众AI大佬云集共议数字化转型 | CNCC 2021
  4. pytorch 激活函数
  5. qt udp多线程收发过程_! udp多线程的有关问题
  6. VTK:Disk用法实战
  7. asp.net读取用户控件,自定义加载用户控件
  8. 编译原理—小型(简化)高级语言分析器前端(Java)
  9. html文档定义层标记是,jsp练习题目201312
  10. el-table跨页选中
  11. 关于obs的录制时黑屏问题
  12. JavaScript重难点解析6(Promise)
  13. code::blocks打造自己的开发环境
  14. 【ROS学习笔记】(十二)常用可视化工具
  15. android 10闪退如何解决,安卓Activity启动在10.0下闪退
  16. codeforces 584E Anton and Ira [想法题]
  17. log4j的详细介绍
  18. H264编解码算法在网络视频传输中的应用
  19. SPOJ COT 10628 Count on a tree
  20. 向量的数量积和向量积

热门文章

  1. cnnvd爬取漏洞信息
  2. java服务器向客户端发消息_socket 服务器向指定的客户端发消息
  3. java调用数据库的基本步骤_java数据库操作基本流程和技巧
  4. 查看tomcat目前用的jdk版本
  5. 统计学贾俊平第六版pdf下载|贾俊平统计学第六版pdf下载电子书
  6. 软件测试面试题 背完面试没问题 亲测
  7. 中国物联网激荡20年
  8. 典型环节的电路模拟MATLAB,典型环节的模拟及参数测试
  9. 基于Ace Admin 的菜单栏实现
  10. bootice添加黑苹果引导_懒人黑苹果安装教程:CLOVER(四叶草)引导