一枚iOS coder, 貌似对pod这个工具熟悉的不行不行了吧, pod除了管理三方库之外, 还能干很多事, 今天聊聊pod的一个plugin:pod package.
pod package, 顾名思义, 就是一个打包工具, 可以把代码打包成静态库(.a和.framework)和动态库(.framework), 当然Xcode也可以打包, 只是比pod package会麻烦一些. 网上关于使用Xcode打包的说明已经很多, 不再赘述.
为什么要使用打包为二进制文件
二进制化指的是通过编译把组件的源码转换成静态库或动态库,以提高该组件在App项目中的编译速度。
-
为了项目组件化. 将单一功能的代码写成一个仓库, 在项目的podfile里面去引入
-
二进制化的话就节省了很多源文件的编译时间,直接使用编译好的二进制文件。
0. 安装pod package
详见GitHub cocoapods-packager, 不赘述
1. package的参数说明
如果要使用podpackage, 首先, 你得有个podsepc, 简单说明一下
0.使用pod创建仓库
pod lib create Demo
根据提示, 一步一步去搞, 不赘述
1.参数
到Demo.podspec的目录下, 执行 pod package --help
如下:
//强制覆盖之前已经生成过的二进制库
--force
//生成静态.framework
--embedded
//生成静态.a
--library
//生成动态.framework
--dynamic
//动态.framework是需要签名的,所以只有生成动态库的时候需要这个BundleId
--bundle-identifier
//不包含依赖的符号表,生成动态库的时候不能包含这个命令,静态库一定需要包含依赖的符号表。
--exclude-deps
//表示生成的库是debug还是release,默认是release。
--configuration=Debug //设置为debug的
网友评论
以下是我的podspec:
Pod::Spec.new do |s|
s.name = "frameworkB"
s.source_files = "TestPod/TestPod/*.{h,m}"
s.public_header_files = "TestPod/TestPod/TestPodPublic.h"
#这里标识了需要引用的私有库
s.vendored_frameworks = "TestPod/TestPod/frameworkA.framework"
end
打包命令如下:
pod package TestPod.podspec --no-mangle --force --embedded
pod package TestPod.podspec --dynamic --no-mangle --spec-sources=http://(你们如果有内网私有库的话, 这里是内网私有库的链接), https://github.com/CocoaPods/Specs.git
ss.vendored_frameworks = "frameworks(路径)/Aframework.framework"
只想对外提供Bframework, B中又依赖了A, 可以以subspec的形式引入:
s.subspec 'Aframework' do |ss|
ss.xcconfig = {
#此处是xcoode配置, 如下 是配置 ENABLE_BITCODE, xcode中ENABLE_BITCODE默认是yes
# 'ENABLE_BITCODE' => 'NO'
}
ss.vendored_frameworks = "frameworks(路径)/Aframework"
# ss.frameworks = ['AVFoundation', 'VideoToolbox'] //Aframework依赖的系统动态framework
# ss.libraries = [ 'c++', 'z'] // Aframework依赖的系统静态library
# ss.dependency 'AFNetworking', '~> 3.0' // Aframework依赖的三方库, 依赖的三方库可能很
多, 如下:
# ss.dependency 'XXX'
# ss.dependency 'YYY'
end