参考网址 http://guides.cocoapods.org
成文的环境
https://mp.csdn.net/mdeditor/86520080#
和私有Pod库制作过程基本一致,区别在于公有库需要发布到CocoaPods
发布使用CocoaPods Trunk方式。
# 语法检查 pod lib lint xxx.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' => '[email protected]' } #作者
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.source_files = 'Reachability.{h,m}' #参与编译的文件
spec.framework = 'SystemConfiguration' #依赖的系统库(指苹果的系统库)
end
Pod::Spec
Pod::Spec.new do |spec| # 创建一个Pod::Spec变量,名字spec
spec.name = 'Reachability' #库名字
#其他说明规范
end
ios
osx
或 macos
tvos
watchos
name
属性
Pod::Spec.new do |spec|
spec.name = '你的库名字'
end
version
属性
版本号遵循 semantic versioning
Pod::Spec.new do |spec|
spec.version = '1.2.3' #版本号
end
author
属性
Pod::Spec.new do |spec|
spec.author = '作者名字'
end
authors
属性
Pod::Spec.new do |spec|
spec.authors = '作者名字A','作者名字B','作者名字C'
end
#一个作者
Pod::Spec.new do |spec|
spec.author = { '作者A' ==> '[email protected]'}
end
#多个作者
Pod::Spec.new do |spec|
spec.authors = { '作者A' ==> '[email protected]',
'作者B' ==> '[email protected]'
}
end
license
属性
知名的许可协议
Pod::Spec.new do |spec|
spec.license = 'MIT'
end
指定许可协议文件
Pod::Spec.new do |spec|
spec.license = { :type => 'ABC', :file => 'MIT-LICENSE.txt' }
end
简短的许可协议内容
Pod::Spec.new do |spec|
spec.license = { :type => 'MIT', :text => <<-LICENSE
#//协议内容//
Copyright 2012
Permission is granted to...
#//
LICENSE
}
end
homepage
属性
Pod::Spec.new do |spec|
spec.homepage = 'http://www.example.com'
end
source
属性
支持协议 git
、svn
、hg
、http
支持关键字:
:git => :tag, :branch, :commit, :submodules
:svn => :folder, :tag, :revision
:hg => :revision
:http => :flatten, :type, :sha256, :sha1
仓库 + 标签
Pod::Spec.new do |spec|
# git
spec.source = { :git => 'https://xxx.yyy.zzz/abc.git',
:tag => '1.2.3' }
或
# svn
spec.source = { :svn => 'https://xxx.yyy.zzz/abc',
:tag => '5.6.7' }
或
# hg
spec.source = { :hg => 'https://xxx.yyy.zzz/abc',
:revision => '8.9.0' }
end
http地址 + 代码压缩包
压缩格式支持 zip
, tgz
, bz2
, txz
,tar
Pod::Spec.new do |spec|
spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip'}
end
http地址 + 代码压缩包
支持文件Hash校验,支持的Hash算法有sha1
,sha256
Pod::Spec.new do |spec|
spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip'
:sha1 => '7e21857fe11a511f472cfd7cfa2d979bd7ab7d96'}
end
summary
属性 ,最大140个字符
Pod::Spec.new do |spec|
spec.summary = '简介'
end
description
属性,比简介summary
更详细的介绍
spec.description = <<-DESC
#//协议内容//
详细介绍
#/
DESC
swift_version
属性,指Swift语言版本
Pod::Spec.new do |spec|
spec.swift_version = '3.2' #版本号
end
cocoapods_version
属性,指支持的CocoaPod工具版本
Pod::Spec.new do |spec|
spec.cocoapods_version = '>= 0.36'
end
social_media_url
属性
Pod::Spec.new do |spec|
spec.social_media_url = 'https://twitter.com/cocoapods'
end
一些图片url,支持gif格式
screenshot
属性
Pod::Spec.new do |spec|
spec.screenshot = 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png'
end
screenshots
属性
Pod::Spec.new do |spec|
spec.screenshots = ['http://dl.dropbox.com/u/378729/MBProgressHUD/1.png',
'http://dl.dropbox.com/u/378729/MBProgressHUD/2.png' ]
end
documentation_url
属性
Pod::Spec.new do |spec|
spec.documentation_url = 'http://www.example.com/docs.html'
end
prepare_command
属性
一个bash脚本,在下载Pod库后,Specification(Pod::Spec)的其他属性被收集之前运行。 此命令可用于创建,删除和修改下载的任何文件。
此命令的工作目录是Pod的根目录。
在清除Pod之前和创建Pods项目之前执行此命令。
如果使用了:path
选项安装pod,则不会执行此命令。
单条
Pod::Spec.new do |spec|
spec.prepare_command = 'ruby build_files.rb'
end
多条
Pod::Spec.new do |spec|
spec.prepare_command = <<-CMD
sed -i 's/MyNameSpacedHeader/Header/g' ./**/*.h
sed -i 's/MyNameOtherSpacedHeader/OtherHeader/g' ./**/*.h
CMD
end
和前置脚本prepare_command
不同,script_phases
将作为xcodebuild的一部分,可以访问编译期间的所有环境变量
Pod::Spec.new do |spec|
spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"' }
或
spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"', :execution_position => :before_compile }
或
spec.script_phase = { :name => 'Hello World', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby' }
或
spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"',
:input_files => ['/path/to/input_file.txt'], :output_files => ['/path/to/output_file.txt']
}
或
spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"',
:input_file_lists => ['/path/to/input_files.xcfilelist'], :output_file_lists => ['/path/to/output_files.xcfilelist']
}
或
spec.script_phases = [
{ :name => 'Hello World', :script => 'echo "Hello World"' },
{ :name => 'Hello Ruby World', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby' },
]}
end
static_framework
表示,如果Podfile使用了指令use_frameworks!
,那么pod应包含静态库框架。
Pod::Spec.new do |spec|
spec.static_framework = true
end
platform
属性
Pod::Spec.new do |spec|
spec.platform = :osx, '10.8'
或
spec.platform = :ios
或
spec.platform = :tvOS
或
spec.platform = :watchos
end
deployment_target
Pod::Spec.new do |spec|
spec.ios.deployment_target = '6.0'
spec.osx.deployment_target = '10.8'
spec.tvOS.deployment_target = '9.0'
spec.watchos.deployment_target = '2.0'
end
dependency
可以指定依赖其他Pod库
例如
Pod::Spec.new do |spec|
spec.dependency 'AFNetworking', '~> 1.0'
end
版号规则 参见[设置版本号] [https://blog.csdn.net/holdsky/article/details/87270013#_87]
requires_arc
默认是启用ARC的;当指定不启用时,则会给xcode工程文件添加编译标志 -fno-objc-arc
Pod::Spec.new do |spec|
spec.requires_arc = true # true 启用 false 不启用
end
Pod::Spec.new do |spec|
spec.requires_arc = ['a.m', 'b.mm'] #仅a.m , b.m启用arc,其他文件不启用arc
end
framework
或frameworks
Pod::Spec.new do |spec|
spec.ios.framework = 'CFNetwork'
或
spec.frameworks = 'QuartzCore', 'CoreData'
end
library
或 librarys
Pod::Spec.new do |spec|
spec.ios.library = 'xml2'
或
spec.libraries = 'xml2', 'z'
end
weak_framework
或 weak_frameworks
Pod::Spec.new do |spec|
spec.ios.weak_framework = 'CFNetwork'
或
spec.weak_frameworks = 'QuartzCore', 'CoreData'
end
compiler_flags
传给xcode编译器的编译标志
Pod::Spec.new do |spec|
spec.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'
end
prefix_header_contents
不建议使用此属性,因为Pod不应该污染其他库或用户工程的前缀头。
Pod::Spec.new do |spec|
spec.prefix_header_contents = '#import ' , '#import '
end
prefix_header_file
不建议使用此属性,因为Pod不应该污染其他库或用户工程的前缀头。
前缀头文件的路径,用于注入pod项目的前缀头。 false表示不应生成默认的CocoaPods前缀头。 true是默认值,表示应生成默认的CocoaPods前缀头。
Pod::Spec.new do |spec|
spec.prefix_header_file = 'iphone/include/prefix.pch'
或
spec.prefix_header_file = false
end
module_name
表示生成的framework的名字。当不指定module_name时,framework的名子为name
值
Pod::Spec.new do |spec|
spec.name = 'Reachability'
#因为设置了module_name,所以framework的名字是Hello而不是Reachability
spec.module_name = 'Hello'
end
*
当前目录的所有文件
**
递归匹配
{}
匹配任意一个
更多参见https://guides.cocoapods.org/syntax/podspec.html#group_file_patterns
source_files
指定库包含的源代码文件
Pod::Spec.new do |spec|
spec.source_files = 'Classes/**/*.{h,m}', 'More_Classes/**/*.{h,m}'
end
public_header_files
指定库对外暴露的头文件
Pod::Spec.new do |spec|
spec.public_header_files = 'Headers/Public/*.h'
end
private_header_files
指定库私有的头文件
Pod::Spec.new do |spec|
spec.private_header_files = 'Headers/Private/*.h'
end
vendored_frameworks
Pod::Spec.new do |spec|
spec.vendored_frameworks = 'MyFramework.framework', 'TheirFramework.framework'
end
通常,当希望对外公开源代码时,可以使用这个属性。即,将源代码编译成framework,并将路径指定给vendored_frameworks
vendored_libraries
Pod::Spec.new do |spec|
spec.vendored_libraries = 'libProj4.a', 'libJavaScriptCore.a'
end
通常,当希望对外公开源代码时,可以使用这个属性。即,将源代码编译成静态库,并将路径指定给vendored_libraries
注意,使用此属性时最好要确保静态库的命名符合libXXX.a格式,即前缀lib,扩展名.a
resource_bundles
Pod::Spec.new do |spec|
spec.resource_bundles = {
'MapBox' => ['MapView/Map/Resources/*.png'],
'MapBoxOtherResources' => ['MapView/Map/OtherResources/*.png']
}
end
上面示例,
resources
Pod::Spec.new do |spec|
spec.resources = ['Images/*.png','Resources/HockeySDK.bundle']
end
这个属性认为bundle也是一种资源文件
exclude_files
表示库不需要包含的文件
Pod::Spec.new do |spec|
spec.exclude_files = 'Classes/**/unused.{h,m}'
end
preserve_paths
表示,这些路径下的文件,不会被CocoaPod移除,即便它们已经不匹配规范文件定义了
默认情况下,CocoaPod会移除不再匹配规范文件定义的文件
Pod::Spec.new do |spec|
spec.preserve_paths = 'Frameworks/*.framework'
end