CocoaPods中podsepc文件设置详解

语言: CN / TW / HK

theme: smartblue

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。

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

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

基础设置

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

设置名称:

名称将会帮助别人找到你的库 pod search XXXX spec.name = "XXXX"

设置版本号:

设置的版本号,这里设置的版本号需要和gittag对应。 spec.version = "0.0.1"

设置概要:

为你的库设置一个较为简洁的概要 spec.summary = ""

设置描述:

描述信息将用于生成标签和改进搜索结果 spec.description = ""

设置主页:

spec.homepage = "http://github.com/xxxx"

设置许可:

官方许可,目前主流使用的 'MIT', 'BSD',详情可以查看文档 spec.license = { :type => "MIT", :file => "LICENSE" }

设置作者信息:

指定这个库的作者的名称以及邮箱地址,一般会默认生成了这些信息; spec.author = { "xxxx" => "[email protected]" } spec.authors = { "xxxx" => "[email protected]", "xxxy" => "[email protected]" }

设置平台信息:

指定平台版本版本信息(支持最低ios版本),如果有多平台的话,可以使用以下参数设置; 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"

设置源代码地址:

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

文件路径设置

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

设置源代码文件路径:

设置源文件(包括.h和.m文件)、头文件、pch文件的路径 // 源代码目录 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中 spec.resource = "icon.png" spec.resource_bundles = "Resources/*.png"

依赖关系设置

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

本地依赖:

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

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

``` spec.framework = "SomeFramework" spec.frameworks = "SomeFramework", "AnotherFramework"

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

第三方依赖:

依赖的其他的第三方库 // 依赖pod库 spec.dependency "JSONKit", "~> 1.4"

工程设置

工程设置:

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

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

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

或者,某些你的私有库中不支持模拟器设置,那么你也需要在这里设置。 spec.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64', 'ENABLE_BITCODE' => 'NO' }

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

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

如下图:

// 设置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,资源文件设置都是继承父模块的,所以可以重写这些属性: ``` # 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

... ```

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

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