CocoaPods详解2:基本功能结构

2021-11-15  本文已影响0人  物非0人非

一:CocoaPods介绍

CocoaPods将所有依赖的库都放在一个名为Pods的项目下,然后让主项目依赖Pods项目。然后,我们编码工作都从主项目转移到Pods项目Pods项目最终会编译为一个libPod-项目名.a静态库,主项目依赖于这个静态库
对于资源文件,CocoaPods 提供了一个名为Pods-resources.shbash脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。

CocoaPods 通过一个名为Pods.xcconfig 的文件来在编译时设置所有的依赖和参数。

CocoaPods是用Ruby 写的,并由若干个 Ruby 包 (gems) 构成的。在解析整合过程中,最重要的几个gems分别是: CocoaPods/CocoaPods, CocoaPods/Core, 和 CocoaPods/Xcodeproj

二:CocoaPod的核心组件

  • CocoaPods/CocoaPod: 面向用户的组件,每当执行一个pod 命令时,这个组件都将被激活。该组件包括了所有使用CocoaPods 涉及到的功能,并且还能通过调用所有其它的 gems 来执行任务。
  • CocoaPods/Core: Core组件提供支持与 CocoaPods 相关文件的处理,文件主要是 Podfilepodspecs
  • 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,因为它是全部检查一遍,不仅慢有时候还会出现坑。上个版本好好的,下个版本跟新一堆,可能会报错或者依赖的其他第三方有所冲突,兼容等。。。

上一篇下一篇

猜你喜欢

热点阅读