CocoaPods中podsepc文件设置详解
theme: smartblue
「这是我参与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 = "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_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
... ```
上面的一些设置都是常常会用到的,当然还有一些不常用的方法就不在此一一说明了;
以上内容就是本篇的全部内容。
- LeetCode 初级算法之数组(上),看看你都学会了吗?
- LeetCode 初级算法之链表,看看你都学会了吗?
- LeetCode 初级算法之字符串(上),看看你都学会了吗?
- 纯代码布局,也可以一样的简洁
- UIStackView之一问一答
- 使用UIStackView来简化iOS的界面布局
- 夏天来了,iOS开发者们该如何减少App耗电?(上)
- 夏天来了,App开发者们如何看待手机发烫问题?
- 聊聊iOS中UITableView复用的那些事
- 曾经经典的微信打飞机游戏还有人记得吗?
- iOS 原生渲染与 Flutter 有什么区别 (上)
- 了解 Mach-O文件
- CocoaPods中podsepc文件设置详解
- iOS 原生渲染与 Flutter 有什么区别 (下)
- 简单了解 iOS CVPixelBuffer (上)
- 谈谈 iOS 包瘦身方案
- 播放器重构的探索之路
- 如何使用CocoaPods制作私有库
- iOS 组件化方案