CocoaPods详解2:基本功能结构
一:CocoaPods介绍
CocoaPods
将所有依赖的库都放在一个名为Pods
的项目下,然后让主项目
依赖Pods项目
。然后,我们编码工作都从主项目
转移到Pods项目
。Pods
项目最终会编译为一个libPod-项目名.a静态库
,主项目依赖于这个静态库
。
对于资源文件,CocoaPods
提供了一个名为Pods-resources.sh
的 bash
脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。
CocoaPods
通过一个名为Pods.xcconfig
的文件来在编译时设置所有的依赖和参数。
CocoaPods
是用Ruby
写的,并由若干个 Ruby
包 (gems) 构成的。在解析整合过程中,最重要的几个gems
分别是: CocoaPods/CocoaPods, CocoaPods/Core, 和 CocoaPods/Xcodeproj。
二:CocoaPod的核心组件
CocoaPods/CocoaPod
: 面向用户的组件,每当执行一个pod
命令时,这个组件都将被激活。该组件包括了所有使用CocoaPods
涉及到的功能,并且还能通过调用所有其它的gems
来执行任务。CocoaPods/Core
:Core
组件提供支持与CocoaPods
相关文件的处理,文件主要是Podfile
和podspecs
。Podfile
Podfile
是一个文件,用于定义项目所需要使用的第三方库。该文件支持高度定制,你可以根据个人喜好对其做出定制。更多相关信息,请查阅Podfile
指南。Podspec
:.podspec
也是一个文件,该文件描述了一个库是怎样被添加到工程中的。它支持的功能有:列出源文件
、framework
、编译选项
和某个库
所需要的依赖等。CocoaPods/Xcodeproj
: 这个gem
组件负责所有工程文件的整合。它能够创建并修改.xcodeproj
和.xcworkspace
文件。它也可以作为单独的一个gem
包使用。如果你想要写一个脚本来方便地修改工程文件,那么可以使用这个gem
。
三:多target时Podfile该如何写?
使用Ruby
语法,定义不同的分组,然后不同的target
可以自由选择依赖哪些分组,这种方式看起来更简洁,对于多target
的项目来说也更友好:
platform :ios, '8.0'
def commonPods #通用pods集
pod 'AFNetworking', '~> 2.0'
pod 'Masonry'
end
def appOnlyPods #app专用pods集
pod 'MBProgressHUD'
end
def extensionPods #扩展专用pods集
pod 'GTSDKExtension'
end
target :TestCocoaPods do
commonPods
appOnlyPods
target :TestCocoaPodsTests do
inherit! :search_paths
# Pods for testing
end
target :TestCocoaPodsUITests do
inherit! :search_paths
# Pods for testing
end
end
target :SecondTarget do
commonPods
end
四: 如何忽略Pods警告?
有些第三方Pod集成进来会有一大堆警告信息,如果你看着比较难受想把它忽略的话,在Podfile中对应的target或分组下加上关键字inhibit_all_warnings即可。
五:如何直接引用第三方库中的头文件?
在用CocoaPods集成第三方库之后,默认情况下,我们需要使用类似#import <XXX/YYY.h>的方式引入第三方库的头文件。我们可以在Build Settings -> User Header Search Paths中添加${SRCROOT}并设置成recursive,这样我们就可以直接使用#impot "YYY.h"这种方式了。
六: pod install 和 pod update
pod install
:在Podfile中用于安装,新增,删除pod的命令。
【1,当我们第一次运行Podfile时,如果对依赖库不指定版本的话,cocoapods会安装最新的版本,同时将pods的版本记录在Podfile.lock文件中,此文件会保持对每个pod已安装版本的跟踪,并且锁定这些版本。
2,再执行pod install的话,只会处理没有记录在Podfile.lock中的依赖库,会查找匹配Podfile中描述的版本。
3,当然,如果你约束了pods的版本的话,会按照你指定的版本进行安装,同时也会更新Podfile.lock记录的信息。】pod update
:命令仅用在更新指定pod版本,或者更新所有pod。
【推荐用法:pod update 要更新库的名字
这个命令会忽略Podfile.lock中的记录,直接去找符合Podfile文件中的该依赖库的约束版本(无约束的话就是最新版本)】
在Podfile中添加新的pod后应该用pod install命令,而不是pod update命令。
注释:尽量不要用pod update
,因为它是全部检查一遍,不仅慢有时候还会出现坑。上个版本好好的,下个版本跟新一堆,可能会报错或者依赖的其他第三方有所冲突,兼容等。。。