如果没有安装 cocoapods-packager ,可以使用如下命令安装:
$ gem install cocoapods-packager
#
# Be sure to run `pod lib lint ASDK.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'ASDK'
s.version = '0.1.0'
s.summary = 'A short description of ASDK.'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://github.com/xxx/ASDK'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'xxxx' => 'xxxx@163.com' }
# s.source 中是表示使用 pod package 打包时候 pod 去寻找的打包的路径。
# podspec 默认使用 git commit tag 作为路径。
# 也可以修改成本地路径 'file:///Users/xxx/Desktop/ASDK'。
# 如果当前没有设置 :tag ,打包时候默认使用当前 git commit 的 head 节点,
# (如果部分修改内容没有 commit,那么使用 git package 不会将未 commit 的内容进行打包)
s.source = { :git => 'file:///Users/xxx/Desktop/ASDK'}
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
# 支持的平台的最低部署目标
s.ios.deployment_target = '9.0'
# Pod的源文件,注意源码一般放到 Classes 文件夹目录下
# 而且实体文件中不要有非源码内容放到 Classes 文件夹
s.source_files = 'ASDK/Classes/**/*'
# --- 资源添加方式一 ---
# cocoapods 会将 Assets 中的内容自动打包成 ASDK.bundle
# s.resource_bundles = {
# 'ASDK' => [
# 'ASDK/Assets/*.png',
# ]
# }
# --- 资源添加方式二 ---
# 在 Assets 文件夹中放入我们自己写好的 ASDK.bundle,bundle 中是我们使用的资源。
# 使用 s.resource = 'ASDK/Assets/ASDK.bundle' 会将这些资源打入 framework 中。
# 在 Example 中手动引用我们自己创建的 ASDK.bundle 资源文件。
s.resource = 'ASDK/Assets/ASDK.bundle'
# 是否是静态库,如果是静态库,需要设置该选项,默认为动态库
s.static_framework = true
# arc和mrc选项
s.requires_arc = true
# 当前 sdk 依赖的三方 .a 文件
s.vendored_libraries = 'ASDK/Assets/xxx.a'
# 当前 sdk 依赖的系统 .a 文件
s.libraries ='c++'
# 当前 sdk 依赖的三方 framework
s.vendored_frameworks = 'ASDK/Assets/xxx.framework', 'ASDK/Assets/yyy.framework'
# 当前 sdk 依赖的系统的 framework
s.frameworks = 'AVFoundation', 'UIKit', 'Foundation', 'CallKit'
# 要添加到最终专用 pod 目标 xcconfig 文件的任何标志
s.pod_target_xcconfig = {
'ENABLE_BITCODE' => 'NO',
'OTHER_LDFLAGS' => '-ObjC',
'LIBRARY_SEARCH_PATHS' => '/Users/xxx/Desktop/ASDK/Assets',
}
# 需要对外部暴露的头文件
s.public_header_files = [
'ASDK/Classes/ASDK.h',
'ASDK/Classes/xxx.h',
'ASDK/Classes/yyy.h',
]
# 当前 podspec 类库对外部第三方库的依赖。
# 如果使用 pod package 打包 sdk 时候,这里的 dependency 会被自动添加前缀,防止重复引用冲突。
# 而且这里的依赖只能是 pod 库(公有或者私有)的内容.
s.dependency 'AFNetworking/Serialization'
s.dependency 'AFNetworking/Security'
s.dependency 'AFNetworking/NSURLSession'
s.dependency 'AFNetworking/Reachability'
end
进入项目目录,在终端输入以下命令进行打包:
$ pod package ASDK.podspec --exclude-deps --no-mangle --embedded
命令参数说明:
–force
强制覆盖之前已经生成过的二进制库
–embedded
生成静态.framework
–library
生成静态.a
–dynamic
生成动态.framework
–bundle-identifier
动态.framework是需要签名的,所以只有生成动态库的时候需要这个BundleId
–exclude-deps
不包含依赖的符号表,生成动态库的时候不能包含这个命令,动态库一定需要包含依赖的符号表。
–configuration
表示生成的库是debug还是release,默认是release。–configuration=Debug
–no-mangle
表示不使用name mangling技术,pod package默认是使用这个技术的。我们能在用pod package生成二进制库的时候会看到终端有输出Mangling symbols和Building mangled framework。表示使用了这个技术。
如果你的pod库没有其他依赖的话,那么不使用这个命令也不会报错。但是如果有其他依赖,不使用–no-mangle这个命令的话,那么你在工程里使用生成的二进制库的时候就会报错:Undefined symbols for architecture x86_64。
–subspecs
如果你的pod库有subspec,那么加上这个命名表示只给某个或几个subspec生成二进制库,–subspecs=subspec1,subspec2。生成的库的名字就是你podspec的名字,如果你想生成的库的名字跟subspec的名字一样,那么就需要修改podspec的名字。
这个脚本就是批量生成subspec的二进制库,每一个subspec的库名就是podspecName+subspecName。
–spec-sources
一些依赖的source,如果你有依赖是来自于私有库的,那就需要加上那个私有库的source,默认是cocoapods的Specs仓库。–spec-sources=private,https://github.com/CocoaPods/Specs.git。