CocoaPod使用--Podfile--版本依赖管理

参考网址 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'

将依赖库以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' do
   use_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' do
 pod 'SSZipArchive'
end

默认情况下,target会继承在自身外面的依赖项,若不想继承需要使用inherit!指令(参见 inherit! 依赖继承

target 'ZipApp' do
 pod 'SSZipArchive'
 target 'ZipAppTests' do  #ZipAppTests需要继续ZipApp的依赖,即也依赖 SSZipArchive
   pod 'Nimble'
 end
end

inherit! 依赖继承

inherit! 依赖继承 可用模式如下:

  • inherit! : complete 继承父项的所有行为
  • inherit! : none 不会继承父项的任何行为
  • inherit! : search_paths 仅继承父项的搜索路径
target 'App' do
 target 'AppTests' do
   inherit! :search_paths
 end
end

添加脚本

script_phase
给指定的target的添加脚本,该脚本可以访问xcode环境变量,在Xcode执行编译时被调用。
可在xcode的target->Build Phases中查看

target 'myApp' do
   script_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' do
   pod 'libA'
   pod 'libB'
   pod 'libC'
   target 'XXX' do  # xxx同时依赖 	libA、libB、libC、libD
       pod 'libD'
   end
   target 'YYY' do # xxx同时依赖 	libA、libB、libC、libE
       pod 'libE'
   end
end

link_with (deprecated)

为CocoaPod 1.0之前的指令,请使用abstract_target

另一种抽象target的(abstract!)

abstract!
表示当前target是抽象的,因此不会直接链接到Xcode目标(target)中。

target 'ABC' do
   abstract!
   pod 'libA'
   pod 'libB'
   pod 'libC'
   target 'XXX' do  # xxx同时依赖 	libA、libB、libC、libD
       pod 'libD'
   end
   target 'YYY' do # xxx同时依赖 	libA、libB、libC、libE
       pod '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' do
    project './myApp_123' #或者添加扩展名 ./myApp_123.xcodeproj
end

target 'myApp_456' do
    project './myApp_456'
end

还可以指定构建配置,例如

target 'myApp' do
    project './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的最高版本(无论其他源是否具有更高版本)

猜你喜欢

转载自blog.csdn.net/holdsky/article/details/87270013