Podfile了解

一、使用背景

iOS开发会经常用到cocoapods管理第三方,简单、方便、高效。如何集成CocoaPods在cocoapods官网和Podfile语法说明会有详细介绍,本文介绍的是关于集成CocoaPods时会用到的一个文件Podfile文件

1、什么是Podfile

Podfile是一种规范,描述了一个或多个项目的目标的依赖关系。

2、创建Podfile

打开Terminal,cd到项目根目录下,执行touch Podfile,会创建一个空的Podfile文件

或者

打开Terminal,cd到项目根目录下,执行pod init,会创建一个默认的Podfile文件

扫描二维码关注公众号,回复: 14984290 查看本文章

使用命令行pod init创建的默认的Podfile文件如下:

二、Podfile使用介绍

1、一个简单的Podfile内容

2、install! 申明安装期间要使用的安装方法和选项

表示在使用Podfile文件过程中,需要先安装CocoaPods,这里就不介绍安装CocoaPods的方法了

还可以指定CocoaPods的自定义安装选项:

:clean 是否在安装过程中清理pod的来源,此选项默认为 true

清理会删除podspec和项目支持的平台指定的pod未使用的任何文件

:deduplicate_targets 是否对目标进行重复数据删除,此选项默认为true

:deterministic_uuids 创建pod项目时是否生成确定性UUID,此选项默认为true

:integrate_targets 是否将已安装的pod集成到用户项目中,此选项默认为true

如果设置为 false,Pod 将被下载并安装到该Pods/目录,但它们不会集成到您的项目中。

:lock_pod_sources 是否锁定 pod 的源文件。Xcode 在尝试修改文件内容时会提示解锁文件,此选项默认为 true

标记是否对pod库中文件内容加锁,默认是加锁的,所以当我们在修改pod库中的文件时,经常会有提示是否解锁的弹窗;

在安装过程中锁定 pod 会降低性能。如果这pod install对您的项目的持续时间有显着影响,您可以尝试将其设置为false

:warn_for_multiple_pod_sources 当多个源包含同名同版本的 Pod 时是否发出警告,此选项默认为true

如果发现了这个警告,我们需要手动指定这个pod使用的源。

:warn_for_unused_master_specs_repo 如果项目没有明确指定基于 git 的主规范 repo,是否发出警告,并且可以使用默认的 CDN。,此选项默认为true

:share_schemes_for_development_pods是否为开发 pod 共享 Xcode 方案,此选项默认为false开发 pod 的方案是自动创建的,但默认情况下不共享。

标记对于DevelopmentPods是否共享Xcode的schemes,默认是不会共享的,DevelopmentPods的schemes会自动创建。

:disable_input_output_paths 是否禁用 CocoaPods 脚本阶段的输入输出路径(Copy Frameworks & Copy Resources),此选项默认为false

:preserve_pod_file_structure 是否保留所有 Pod 的文件结构,包括外部来源的 pod,此选项默认为false

默认情况下,Pod 源的文件结构仅保留用于开发 pod。设置 :preserve_pod_file_structure为true将始终保留文件结构。

:generate_multiple_pod_projects 是否为每个 pod 目标生成一个project。这个选项不是创建1个 Pods.xcodeproj,如果设置为true,而是把每个嵌套在Pods.xcodeproj下的pod库生成一个对应的project,此选项默认为false

:incremental_installation 是否仅启用重新生成自上次安装以来已更改的目标及其关联项目,此选项默认为false

当执行 pod install 时,CocoaPods 现在支持仅重新生成自上次 install 以来发生更改的 pod 库,而不是像之前那样重新生成整个 workspace。

设置incremental_installation 为 true 选项开启此功能,但是incremental_installation 选项需要启用 generate_multiple_pod_projects 安装选项才能使其正常运行。

:skip_pods_project_generation 是否跳过生成Pods.xcodeproj并仅执行依赖项解析和下载。,此选项默认为false

2、ensure_bundler! 使用Global Gemset运行CocoaPods时引发警告。如果bundler版本与所需版本不匹配,可以提供语义版本来发出警告。

3、 Dependencies 依赖项

  • pod 是声明指定依赖的方式

  • podspec 提供了一个简单的API用于创建podspecs

  • target 允许你在工程中限定依赖项只在你指定的targets中生效

3.1  pod

pod 用于指定项目的依赖项

3.1.1  指定版本号

pod  用于指定项目的依赖项,依赖项必须指定名称,版本是可选的。

  • 没有指定版本号,则会默认使用最新的版本

  • 可以指定使用固定的版本号

除了没有版本或特定版本之外,还可以使用运算符:

  • = 0.10.1 版。

  • > 0.1任何高于 0.1 的版本。

  • >= 0.10.1 版及更高版本。

  • < 0.1任何低于 0.1 的版本。

  • <= 0.10.1 版和任何更低的版本。

  • ~> 0.1.2版本 0.1.2 和 0.2 之前的版本,不包括 0.2。此运算符基于您在版本要求中指定的最后一个组件工作。该示例等同于 >= 0.1.2结合< 0.2.0并始终匹配符合您要求的最新已知版本。

  • ~> 0版本 0 和最高版本 1,不包括 1。

  • ~> 0.1.3-beta.00.1.3 的 Beta 和发布版本,最高 0.2 的发布版本不包括 0.2。由破折号 (-) 分隔的组件将不被视为版本要求。

3.1.2  Build configurations

默认情况下,依赖项安装在目标的所有构建配置中。如果出于调试目的或其他原因,需要只在Debug模式下启用,可以如下配置:

请注意,所有配置中都包含过渡依赖项,如果不希望这样做,必须手动指定它们的构建配置。

3.1.3  Modular Headers (模块化头文件)

如果你想使用模块头每个Pod你可以使用以下语法:

当你使用use_modular_headers!属性,你可以使用以下方法从模块头文件中排除一个特定的Pod:

3.1.4  Source(指定源)

默认情况下,在全局级别指定的源将按照依赖项匹配指定的顺序进行搜索。对于特定的依赖,可以单独指定依赖源:

全局级别指定的源:

单独指定依赖源:

3.1.5  Subspecs (使用子库)

当通过Pod的名称安装Pod时,它将安装podspec文件中定义的所有默认subspecs

可以使用下面的方式导入特定的subspec:

3.1.6  Test Specs

Test Specs可以通过:testspecs选项包含。默认情况下,Test Specs都不包括在内,可以使用下面的方式进行导入:

3.1.7  Using the files from a local path (使用本地路径)

如果和项目一样在本地开发Pod,可以使用path选项,如下:

注意,Pod文件的podspec必须在该文件夹中。

3.1.8 指定分支或者commit

  • 指定源,默认是master分支

  • 使用其它分支

  • 使用tag

  • 特殊的commit

podspec文件应该位于存储库的根目录中,如果这个库的存储库中还没有podspec文件,可以从其它来源获得:

3.2  podspec

只使用在给定podspec文件中定义的Pod的依赖项。如果没有传递参数,将使用

Podfile根目录中的第一个podspec。它的目的是供库的项目使用。

注意:这并不包括来自podspec的源代码,只包括CocoaPods基础设施。

3.3 target

在给定的块中定义CocoaPods的target和作用域依赖项。

一个target应该对应一个Xcode target。默认情况下,这个目标包含了块外面定义的依赖项,除非被指示不要inherit!(继承)他们。

3.4 关于inherit!

设置当前目标的继承模式。

  • inherit! : complete
    继承了父对象的所有行为

  • inherit! : none
    目标不会从父对象继承任何行为

  • inherit! : search_paths
    目标只继承父节点的搜索路径

3.5 abstract_target

定义一个新的抽象目标target,可用于方便的目标依赖项继承。

3.5.1  定义抽象目标

3.5.2  定义一个 abstract_target 包装 Pod 到多个目标

3.6  abstract!

表示当前目标是抽象的,因此不会直接链接到Xcode目标,暂未看到更多描述,应该也用不到这个。

3.7  script_phase

添加要与此目标集成的脚本阶段。脚本阶段可用于执行可以在执行期间使用所有 Xcode 环境变量的任意脚本。一个目标可能包括多个脚本阶段,它们将按照声明的顺序添加。如果先前已添加脚本阶段,则删除脚本阶段将有效地将其从目标中删除。

4、 Target configuration

这些设置用于控制CocoaPods生成的项目,首先要说明你正在开发的平台。xcodeproj允许您指定要链接的项目。

4.1  platform

指定应该为其构建静态库的平台。

平台可以是:osxOS X、:ios iOS、:tvostvOS或:watchoswatchOS。

4.2  project

指定Xcode项目,该项目包含了Pods库应该链接的目标target。

如果没有指定project,并且与Podfile相同的目录中只有一个project,那么将使用该project。

4.3  inhibit_all_warnings!

去掉CocoaPods库中的所有警告。也可以针对单个pod特殊指定:

4.4 use_modular_headers!

为所有CocoaPods静态库使用模块化头文件。也可以针对单个pod特殊指定:

4.5  use_frameworks!

使用frameworks而不是静态库。当使用frameworks时,你也可以指定:linkage样式来使用,比如 :static 或 :dynamic。

4.6  supports_swift_versions

指定此目标定义支持的Swift版本要求。

注意:这些需求可以从父级继承的,如果没有指定,那么所有的版本都被认为是支持的。

5、  Workspace

5.1  workspace

指定包含所有项目的Xcode工作区。如果没有明确指定Xcode工作空间,并且只有一个项目存在于与Podfile相同的目录中,那么这个项目的名称将被用作工作空间的名称。

  

5.2  generate_bridge_support!

指定应从所有已安装 Pod 的标头生成 BridgeSupport 元数据文档。这适用于MacRuby、 Nu和 JSCocoa等脚本语言,它们使用它来桥接类型、函数等。

5.3  set_arc_compatibility_flag!

指定应将 -fobjc-arc 标志添加到 OTHER_LD_FLAGS.

6、 Sources

Podfile从给定的源代码(存储库)列表中检索规范,源是全局的,它们不是按目标定义存储的。一般都是写到podfile文件最顶部:

注意事项:

  • 使用此方法会依赖于来源的顺序。CocoaPods将使用包含Pod的第一个来源的Pod的最高版本(无论其他来源是否有更高的版本)。

  • 如果指定了别的源,也需要将官方的源写一下

7、 Hooks

Podfile提供将在install过程中调用的钩子。钩子是全局的,不是按目标定义存储的。

7.1  plugin

使用这个方法可以指定在安装过程中应该使用的插件,以及在调用插件时应该传递给插件的选项。

7.2  pre_install

这个钩子允许你对pod在下载完成之后,但是在install之前做一些操作。

7.3 pre_integrate

该钩子允许您在将项目写入磁盘之前进行更改。

7.4 post_install

这个钩子允许你在生成的Xcode项目被写入磁盘之前对它做任何最后的修改,或者任何你想要执行的任务。

7.5 post_integrate

这个钩子允许您在项目被写入磁盘后进行更改。

8、 常用命令

【OVER】

猜你喜欢

转载自blog.csdn.net/fangli11223344/article/details/123738558
今日推荐