新生代农民工的主页

CocoaPods中podsepc文件设置详情

字数统计: 1.7k阅读时长: 6 min
2022/02/27

在前面的文章中,我们有讲过如何如何使用CocoaPods制作私有库,在制作私有库中,有一个关键点就是配置.podsepc文件,所以在这篇文章中我们将整理出.podsepc文件的配置。

想要了解cocoapods官方文档的详细设置点这里 podspec.html

基础设置

这里的设置都是最基础的,一般会有默认的文案,或者在生成podsepc文件时,自动生成的。如果了解过的,可以自行忽略。

设置名称:

名称将会帮助别人找到你的库 pod search XXXX

1
spec.name = "XXXX"

设置版本号:

设置的版本号,这里设置的版本号需要和gittag对应。

1
spec.version = "0.0.1"

设置概要:

为你的库设置一个较为简洁的概要

1
spec.summary = ""

设置描述:

描述信息将用于生成标签和改进搜索结果

1
spec.description = ""

设置主页:

1
spec.homepage = "https://github.com/xxxx"

设置许可:

官方许可,目前主流使用的 'MIT', 'BSD',详情可以查看文档

1
spec.license = { :type => "MIT", :file => "LICENSE" }

设置作者信息:

指定这个库的作者的名称以及邮箱地址,一般会默认生成了这些信息;

1
2
spec.author  = { "xxxx" => "xxxxxx@google.com" }
spec.authors = { "xxxx" => "xxxxxx@google.com", "xxxy" => "xxxxxy@google.com" }

设置平台信息:

指定平台版本版本信息(支持最低ios版本),如果有多平台的话,可以使用以下参数设置;

1
2
3
4
5
6
spec.platform = :ios, "9.0"
// 使用多平台
spec.ios.deployment_target = "5.0"
spec.osx.deployment_target = "10.7"
spec.watchos.deployment_target = "2.0"
spec.tvos.deployment_target = "9.0"

设置源代码地址:

1
spec.source = { :git => "https://github.com/xxxx/project.git", :tag => "#{spec.version}" }

文件路径设置

我们在库中使用到的源代码(包括.h/.m/.pch文件)和资源文件的路径需要使用到以下的设置,这些设置是比较重要的,如果文件的路径错误,会造成后面的报错。

设置源代码文件路径:

设置源文件(包括.h和.m文件)、头文件、pch文件的路径

1
2
3
4
5
6
// 源代码目录
spec.source_files = "Classes", "Classes/**/*.{h,m}"
// 头文件
spec.public_header_files = "Classes/**/*.h"
// pch文件
spec.prefix_header_file = 'Pod/Classes/**/*.pch'

以下是文件匹配规则

  • *匹配所有文件
  • c*匹配以名字c开头的文件
  • *c匹配以名字c结尾的文件
  • *c*匹配所有名字包含c的文件
  • **文件夹以及递归子文件夹
  • ?任意一个字符(注意是一个字符)
  • [set] 匹配多个字符,支持取反
  • {a,b} 匹配名字包括a 或者 b的文件

设置资源文件:

项目如果使用了图片资源文件,那么需要设置这些属性;
resources:配置的文件都会被放到mainBundle路径中
resource_bundles:配置的文件会放到你自己指定的bundle中

1
2
spec.resource = "icon.png"   
spec.resource_bundles = "Resources/*.png"

依赖关系设置

当自己的库中引用了本地库或者依赖第三方的pod库时,你需要添加以下这些依赖关系。

本地依赖:

如果依赖本地的lib库或者framework,则需要设置这些依赖,不然在后面的验证中将不会通过。

framework, frameworks:一个库就是用framework,多个库设置frameworks并使用,分割。
library, libraries:同上,需要注意的是设置lib依赖库时,省略其名称的lib前缀,以及.后缀

1
2
3
4
5
spec.framework  = "SomeFramework"
spec.frameworks = "SomeFramework", "AnotherFramework"

spec.library = "iconv"
spec.libraries = "iconv", "xml2"

第三方依赖:

依赖的其他的第三方库

1
2
// 依赖pod库
spec.dependency "JSONKit", "~> 1.4"

工程设置

工程设置:

user_target_xcconfig,这个设置会影响到用户项目设置,不建议使用;
pod_target_xcconfig,是修改当前pod工程中的项目设置,不会影响到其他的工程设置,这个也是官方推荐。

有关xcconfig相关的设置取决你的项目中某些设置是否修改,有些朋友可能对此不知道如何设置,我来简单说下,这里的设置其实对应的是你在工程文件中改动的地方,比如说:

在你的pod库中依赖了一些第三方库,而其中某个依赖库的ENABLE_BITCODENO,那么你的私有库中则无法支持ENABLE_BITCODEYes了,所以你需要在这里去设置。否则在后面的验证中会无法通过;

1
spec.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO' }

或者,某些你的私有库中不支持模拟器设置,那么你也需要在这里设置。

1
spec.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64', 'ENABLE_BITCODE' => 'NO' }

也就是说,当你的工程设置无法通过验证时,你需要讲你的工程设置内容记录在这里。这个你可以根据报错信息来提示你哪些设置。

说下具体的做法吧,在访达中找到项目工程.xcodeproj,右键包管理,打开文件project.pbxproj,在文件中找到需要的设置,然后写在这里就可以;

如下图:

1
2
3
4
5
6
7
// 设置ARC
spec.requires_arc = true
// 配置信息,根据需求填写
// 添加到该Pod target下的xcconfig文件
spec.pod_target_xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' }
// 添加到 用户 target下的xcconfig文件
spec.user_target_xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' }

模块设置

如果想要在自己的库中模块化,则需要按照以下来设置;使用这种子模块可以将一个大的项目库划分的非常清晰,也包括依赖关系。

效果图.png

子模块设置:

如果需要设置子模块,那么依赖库,pod,资源文件设置都是继承父模块的,所以可以重写这些属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Animation
  s.subspec 'Animation' do |subp|
    subp.source_files = 'UtilityComponent/Classes/Animation/*'
    subp.framework = 'QuartzCore'
  end

  # Audio
  s.subspec 'Audio' do |subp|
    subp.source_files = 'UtilityComponent/Classes/Audio/*'
    subp.frameworks = 'AudioToolbox'
  end

  # Authorization
  s.subspec 'Authorization' do |subp|
    subp.source_files = 'UtilityComponent/Classes/Authorization/*'
  end

  # Cache
  s.subspec 'Cache' do |subp|
    subp.source_files = 'UtilityComponent/Classes/Cache/*'
    subp.frameworks = 'MapKit', 'CoreGraphics'
  end

  # Camera
  s.subspec 'Camera' do |subp|
    subp.source_files = 'UtilityComponent/Classes/Camera/*'
    subp.frameworks = 'AVFoundation', 'AVFAudio'
  end

# String
  s.subspec 'String' do |subp|
    subp.source_files = 'UtilityComponent/Classes/String/*'
  end

...

上面的一些设置都是常常会用到的,当然还有一些不常用的方法就不在此一一说明了;

以上内容就是本篇的全部内容。

CATALOG
  1. 1. 基础设置
    1. 1.1. 设置名称:
    2. 1.2. 设置版本号:
    3. 1.3. 设置概要:
    4. 1.4. 设置描述:
    5. 1.5. 设置主页:
    6. 1.6. 设置许可:
    7. 1.7. 设置作者信息:
    8. 1.8. 设置平台信息:
    9. 1.9. 设置源代码地址:
  2. 2. 文件路径设置
    1. 2.1. 设置源代码文件路径:
    2. 2.2. 设置资源文件:
  3. 3. 依赖关系设置
    1. 3.1. 本地依赖:
    2. 3.2. 第三方依赖:
  4. 4. 工程设置
    1. 4.1. 工程设置:
  5. 5. 模块设置
    1. 5.1. 子模块设置: