一: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,因为它是全部检查一遍,不仅慢有时候还会出现坑。上个版本好好的,下个版本跟新一堆,可能会报错或者依赖的其他第三方有所冲突,兼容等。。。













网友评论