「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。
在前面的文章中,我们有讲过如何如何使用CocoaPods制作私有库,在制作私有库中,有一个关键点就是配置.podsepc文件,所以在这篇文章中我们将整理出.podsepc文件的配置。
想要了解cocoapods官方文档的详细设置点这里 podspec.html
基础设置
这里的设置都是最基础的,一般会有默认的文案,或者在生成podsepc文件时,自动生成的。如果了解过的,可以自行忽略。
设置名称:
名称将会帮助别人找到你的库 pod search XXXX
spec.name = "XXXX"
设置版本号:
设置的版本号,这里设置的版本号需要和git上tag对应。
spec.version = "0.0.1"
设置概要:
为你的库设置一个较为简洁的概要
spec.summary = ""
设置描述:
描述信息将用于生成标签和改进搜索结果
spec.description = ""
设置主页:
spec.homepage = "https://github.com/xxxx"
设置许可:
官方许可,目前主流使用的 'MIT', 'BSD',详情可以查看文档
spec.license = { :type => "MIT", :file => "LICENSE" }
设置作者信息:
指定这个库的作者的名称以及邮箱地址,一般会默认生成了这些信息;
spec.author = { "xxxx" => "xxxxxx@google.com" }
spec.authors = { "xxxx" => "xxxxxx@google.com", "xxxy" => "xxxxxy@google.com" }
设置平台信息:
指定平台版本版本信息(支持最低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 => "https://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_BITCODE为NO,那么你的私有库中则无法支持ENABLE_BITCODE为Yes了,所以你需要在这里去设置。否则在后面的验证中会无法通过;
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' }
模块设置
如果想要在自己的库中模块化,则需要按照以下来设置;使用这种子模块可以将一个大的项目库划分的非常清晰,也包括依赖关系。
子模块设置:
如果需要设置子模块,那么依赖库,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
...
上面的一些设置都是常常会用到的,当然还有一些不常用的方法就不在此一一说明了;
以上内容就是本篇的全部内容。