美文网首页
CocoaPods详解4:.podspec语法参考

CocoaPods详解4:.podspec语法参考

作者: 物非0人非 | 来源:发表于2021-12-31 09:39 被阅读0次

https://www.cnblogs.com/lxlx1798/p/14587007.html

一,概述

spec文件描述了Pod库的版本。它包括有关从哪里获取source、要使用哪些文件、应用程序构建设置以及其他通用元数据(如名称、版本和描述)的详细信息。

二、spec文件(Specification) 规范说明

1.创建spec文件

pod spec create DemoSpec

2.podspec示例

Pod::Spec.new do |spec|
  spec.name         = 'Reachability'
  spec.version      = '3.1.0'
  spec.license      = { :type => 'BSD' }
  spec.homepage     = 'https://github.com/tonymillion/Reachability'
  spec.authors      = { 'Tony Million' => 'tonymillion@gmail.com' }
  spec.summary      = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
  spec.source       = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
  spec.module_name  = 'Rich'

  spec.ios.deployment_target  = '9.0'
  spec.osx.deployment_target  = '10.10'

  spec.source_files       = 'Reachability/common/*.swift'
  spec.ios.source_files   = 'Reachability/ios/*.swift', 'Reachability/extensions/*.swift'
  spec.osx.source_files   = 'Reachability/osx/*.swift'

  spec.framework      = 'SystemConfiguration'
  spec.ios.framework  = 'UIKit'
  spec.osx.framework  = 'AppKit'

  spec.dependency 'SomeOtherPod'
end

语法

1、Root specification
根规范“根”规范存储有关库的特定版本的信息。此组中的属性只能写入规范,而不是子规范。在这个组中列出的属性是podspec需要的唯一属性。其他组的属性被用来改进podspec并遵循一个关于配置方法的约定。根规范可以直接通过sub-specifications来描述这些属性。

name 必须

#跟podspec文件名相同
spec.name = 'AFNetworking'

version 必须

spec.version = '0.0.1'

cocoapods_version

规范支持的CocoaPods版本。
spec.cocoapods_version = '>= 0.36'

authors 必须

库维护人员的名称和电子邮件地址,不是Podspec维护者。
spec.author = '作者名字'

多个作者

spec.authors = 'Darth Vader', 'Wookiee'

多个作者,以及其邮箱

spec.authors = { 'Darth Vader' => 'darthvader@darkside.com', 'Wookiee' => 'wookiee@aggrrttaaggrrt.com' }

license 必须
pod库的许可证。除非源文件包含一个名为LICENSE.* or LICENCE.*的文件,否则许可证文件的路径或通常用于许可证类型的公告完整文本,必须指定。许可证文件可以没有文件扩展名也可以是txt, md, 或是markdown

许可证默认与spec文件在同一目录下
MIT是一个比较宽泛的开源许可协议

spec.license = 'MIT'

指定许可文件

spec.license = { :type => 'MIT', :file => 'MIT-LICENSE.txt' }

指定了许可证文件的内容

spec.license = { :type => 'MIT', :text => <<-LICENSE Copyright 2012 Permission is granted to... LICENSE }

homepage必须

pod库主页地址

spec.homepage = 'http://www.example.com'

source 必须
pod库的位置

通过tag指定Git源 用的最多的方式!!
tag值spec.version一致。

spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => spec.version.to_s }

以下的方式,项目中没有用到,不能过多的解释,更多参照source

使用v前缀的tag值和子模块`

spec.source = { :git => 'https://github.com/typhoon-framework/Typhoon.git', :tag => "v#{spec.version}", :submodules => true }

#使用svn源

spec.source = { :svn => 'http://svn.code.sf.net/p/polyclipping/code', :tag => '4.8.8' }

#使用HTTP下载代码的压缩文件。它支持zip、tgz、bz2、txz和tar。

spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip' }

#使用HTTP下载文件,使用hash来验证下载。它支持sha1和sha256。

spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip',:sha1 => '7e21857fe11a511f472cfd7cfa2d979bd7ab7d96' }

支持的key

:git => :tag, :branch, :commit, :submodules
:svn => :folder, :tag, :revision
:hg => :revision
:http => :flatten, :type, :sha256, :sha1
:path

summary 必须
pod库简介,最多140个字符。

spec.summary = 'Computes the meaning of life.'

description
pod库的描述,比summary详细

spec.description = <<-DESC
                     Computes the meaning of life.
                     Features:
                     1. Is self aware
                     ...
                     42. Likes candies.
                   DESC

screenshots
用图片展示pod库,UI库可以使用这种方式,其他的建议使用git地址
单个截图

spec.screenshot = 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png'

多个截图

spec.screenshots = [ 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png', 'http://dl.dropbox.com/u/378729/MBProgressHUD/2.png' ]

documentation_url
可选的Pod库文档的URL

spec.documentation_url = 'http://www.example.com/docs.html'

prepare_command
Pod下载完之后将执行的bash脚本。该命令可用于创建、删除和修改任何下载的文件。
这个命令是在Pod被清理之前且创建Pod项目之前执行的。工作目录是Pod根目录
如果是使用:path安装的pod,这个命令将不会被执行。

指定脚本文件,ruby build_files.rb是脚本文件名

spec.prepare_command = 'ruby build_files.rb'

这里用到了ruby命令

`#sed命令是利用script来处理文本文件
#i :插入
#s :取代
#sed 's/要被取代的字串/新的字串/g'
#第一个sed 语句表示将当前目录下的所有.h文件中的MyNameSpacedHeader替换成Header`
spec.prepare_command = <<-CMD
sed -i 's/MyNameSpacedHeader/Header/g' ./**/*.h
sed -i 's/MyNameOtherSpacedHeader/OtherHeader/g' ./**/*.h
CMD

deprecated
是否弃用

spec.deprecated = true

deprecated_in_favor_of
设置弃用的pod库的新名字,告诉使用者可以搜索新的库名。

spec.deprecated_in_favor_of = 'NewMoreAwesomePod'

2、Platform
规范应该指出使用pod支持的平台和相应的部署目标。如果没有在子规范中定义,该分组的属性将继承父类的值。

platform
不设置表示支持全部平台,如果支持多个平台使用deployment_target命令
只能在OS系统使用,要求系统版本至少10.8

spec.platform = :osx, '10.8'

也可以只指定平台,不指定版本

spec.platform = :iOS

deployment_target

平台支持的最低部署版本,可以分别为每个平台指定不同的版本。

spec.ios.deployment_target = '6.
spec.osx.deployment_target = '10.8'

3、Build settings

接下来列出了与构建库所用的构建环境相关的属性。

dependency

设置对其他pod或“sub-specification”的依赖。
依赖关系如果需要指定版本,推荐使用~>

spec.dependency 'AFNetworking', '~> 1.0'

依赖RestKit库中的子模块

spec.dependency 'RestKit/CoreData', '~> 0.20.0'

指定某个平台的依赖

spec.ios.dependency 'MBProgressHUD', '~> 0.5'

requires_arc

支持多平台
requires_arc允许指定哪个source_files使用ARC。不使用ARC的文件将添加- fno-objc- ARC编译器标记。

此属性的默认值为true。

不支持ARC

spec.requires_arc = false

指定某个文件夹支持ARC的

spec.requires_arc = 'Classes/Arc'

指定某些文件支持ARC

spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm']

frameworks 支持多平台
需要链接的系统frameworks

spec.ios.framework = 'CFNetwork'

多个库

spec.frameworks = 'QuartzCore', 'CoreData'

libraries 支持多平台

spec.ios.library = 'xml2'
#多个库,其中xml2对应ibxml2.tbd       z对应libz.tbd
#所以lib库 省略lib与后缀。
spec.libraries = 'xml2', 'z'

compiler_flags

支持多平台
编译参数 #-D是前缀,-Wno-format这个是gcc编译警告的参数

spec.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'

pod_target_xcconfig

支持多平台
设置的参数都会添加到最终的私有pod的target xcconfig文件中
【注意】这是设置pod库的target 命令

#OTHER_LDFLAGS  对应buildsetting的other linker flags
spec.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }

user_target_xcconfig

支持多平台
这个会添加到最终target 的xcconfig中,不建议使用,不应该污染用户项目的构建设置,因为这可能导致冲突。

如果导入pod时,需要使用clang编译器标志或预编译器宏定义,最好使用pod_target_xcconfig,这个只会影响你自己的pod target。

spec.user_target_xcconfig = { 'MY_SUBSPEC' => 'YES' }
image.png
spec.user_target_xcconfig = { 'MY_SUBSPEC' => 'YES' }

prefix_header_contents

支持多平台
在pod项目的前缀头文件中注入的内容,前缀头文件是模块的pch文件。

spec.prefix_header_contents = '#import <UIKit/UIKit.h>'
spec.prefix_header_contents = '#import <UIKit/UIKit.h>', '#import <Foundation/Foundation.h>'
//可以将多行内容放到两个EOS中间
s.prefix_header_contents = <<-EOS
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#else
EOS
s.prefix_header_contents = <<-EOS
#define HHHH @"测试代码"
EOS

相关文章

网友评论

      本文标题:CocoaPods详解4:.podspec语法参考

      本文链接:https://www.haomeiwen.com/subject/iuyaoltx.html