文章目录
  1. 1. 初次使用
  2. 2. 深入至Podfile
    1. 2.1. platform
    2. 2.2. xcodeproj
    3. 2.3. pod
    4. 2.4. target
    5. 2.5. inhibit_all_warnings!
    6. 2.6. use_frameworks!
    7. 2.7. source
    8. 2.8. plugin
    9. 2.9. pre_install
    10. 2.10. post_install

初次使用

关于使用我这里主要分为两个部分,一个部分是关于命令的层次来说的,一部分是关于Podfile的层次来说的。当然对于简单的使用用起来也非常简单。不过刚开始就来一个简单的吧。

就比如我们最常用的AFNetworkingSDwebImage来说的话,只需在项目名.xcodeproj的目录下创建一个Podfile的文件,然后打开文件,填入一下内容:

1
2
3
4
platform:ios,'7.1'
pod 'SDWebImage', '~>3.7'
pod 'AFNetworking'
pod 'iOS-Echarts'

然后保存,并且打开一个命令行,跳转到Podfile的目录直接运行pod install即可。

当然,你会看到你的目录下会多了目录Pods, 文件Podfile.lock以及文件项目名.xcworkspace。以后你打开项目就再也不是xcodeproj的文件了,而是wxcworkspcace的文件。

深入至Podfile

由于有Podfile.lock文件的保护下,在没有执行pod update命令的情况下,是不会将已有的第三方依赖库进行升级的。

platform

这个参数是只依赖的库希望在哪个平台被编译。 一句话带过吧,直接使用platform:ios, '7.0',说希望采用iOS7.0的进行编译。

xcodeproj

指定包含引用pod库的target的Xcode工程会被链接到

如果没有显示的project被指定,那么会默认使用target的父target指定的project作为目标。如果如果没有任何一个target指定目标,那么就会使用和Podefile在同一目录下的project。

同样也能够指定是否这些设置在release或者debug模式下生效。为了做到这一点,你必须指定一个名字和:release/:debuge关联起来

例子: 指定用户工程

1
2
3
4
5
6
7
8
# Look for target to link with in an Xcode project called
# `MyProject.xcodeproj`.
xcodeproj 'MyProject'
target :test do
# This Pods library links with a target in another project.
xcodeproj 'TestProject'
end

用自定义的编译配置

1
xcodeproj 'TestProject', 'Mac App Store' => :release, 'Test' => :debug

pod

首先先来讲讲最核心的pod关键字吧。关于pod的使用在上面可以看得出来是pod ‘框架名’ 参数。 当然对于前面两个pod ‘框架名’是固定的,没上面好说,参数的话,这里主要讲参数。

参数一: 版本号 从上面可以看得出SDWebImage就接了版本号。不过版本号可以是大于、小于、等于等。当然具体的可以是’> 3.7’, ‘>= 3.7’, ‘< 3.7’, ‘3.7’以及’~> 3.7’。关于普通的就没什么好说了,最后一个~>指的是正对最后一位来说。如使用’~> 3.7.4’,意味着’>= 3.7.4’并且’< 3.8.0’的意思。

参数二:地址 CocoaPods可以指定某一个git的目录或者是本地的目录。有的时候我们希望一直用某一个版本最新的版本,即使没有打版本的话,我们可以直接后面接上:git => 'https://github.com/gowalla/AFNetworking.git'。 当然除了这种情况外,还有可能是如果是我们自己开发的私有库,并且在开发阶段的情况下,可能就希望开发模式进行引用,则可以使用path参数::path => '~/Documents/AFNetworking'

参数三:tag、branch、commit 有的时候我们希望引用有一个tag,branch或者是comit的内容的话可以使用这个参数,分别用:branch => ‘branch名’、:tag => ‘tag名’、:commit => ‘提交号’。

参数四:inhibit_warnings 用来避免那些第三方框架中带来的警告: :inhibit_warnings => true

target

这个是指定具体的配置是适配在哪个target,这里的target值得就是Xcode中的target。如果对于一些项目中你的不同target引用的框架不同的话,可以采用这个进行区分。

1
2
3
4
5
6
target "ShowsApp" do
pod 'ShowsKit'
target "ShowsTV" do
pod "ShowTVAuth"
end
end

inhibit_all_warnings!

屏蔽CocoaPods库里面的所有警告。

use_frameworks!

这个指明编译成动态库,而不是静态库,特别是在使用Swift库的过程中,特别需要使用这句。不过他会把所有项目的编译动态库,这一点有点不好。不过在使用Swift库的过程中就没办法了。

source

这个参数是指CocoaPods从哪些仓库(Spec)中获得框架的源代码,如果在结合使用开源库以及自己私有库的情况下,这个参数还是非常有意义的。只需要在Podfile文件开头列出你需要引用库的所有仓库地址即可。

1
2
source 'https://github.com/artsy/Specs.git'
source 'https://192.168.0.90:8888/MySepcs/Specs.git'

plugin

Podfile提供了钩子用来在安装时被调用,钩子是全局的,不存储在每个target定义里面。

指定的插件应该使用在安装过程中使用此方法来指定一个插件,应该在安装过程中使用,同时,应传递给插件调用时的选项

例子: 指定用slather 和 CocoaPods-keys插件

1
2
plugin 'CocoaPods-keys', :keyring => 'Eidolon'
plugin 'slather'

pre_install

这个钩子允许你在Pods被下载后但是还未安装前对Pods做一些改变;它接受 Pod::Installer 作为唯一参数

例子: 定义pre_install钩子

1
2
3
pre_install do |installer|
# Do something fancy!
end

post_install

这个钩子允许你在生成的Xcode project写入硬盘或者其他你想执行的操作前做最后的改动;它接受 Pod::Installer 作为唯一参数

例子: 给所有target自定义编译配置

1
2
3
4
5
6
7
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'
end
end
end

好了对于Podfile常用几个稍微拿出来说了一下,如果还有更深入不懂的情况下,可以查看 CocoaPods Guide 。 最后给一个官方的Demo吧.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
platform :ios, '9.0'
inhibit_all_warnings!
target 'MyApp' do
pod 'ObjectiveSugar', '~> 0.5'
target "MyAppTests" do
inherit! :search_paths
pod 'OCMock', '~> 2.0.1'
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
puts "#{target.name}"
end
end