不知道大家有没有遇到这种情况,当给一个项目中导入一个静态库的时候,会遇到静态库重复第三方库的错误,这时cocopods的这项技术就派上用场了。该技术通过对引用的三方库进行重命名很好的解决了类库命名冲突的问题,比如项目中可以包含两个AFNetworking框架,项目中本身包含一个,静态库中包含一个,两个可以同时存在。在开始之前,需要安装通过pod lib命令完成初始项目的搭建,和安装cocoapods-packager插件。
注:根据上下文将代码中XXX修改为自己相应的内容
一,通过pod lib命令完成初始项目的搭建
- 执行命令
# pod lib create XXXLib
- 在此期间需要确认下面4个问题:
Would you like to provide a demo application with your library? [ Yes / No ]
yes
Which testing frameworks will you use? [ Specta / Kiwi / None ]
Kiwi
Would you like to do view based testing? [ Yes / No ]
No
What is your class prefix?
XXX
二,安装cocoapods-packager插件
- 执行命令
# sudo gem install cocoapods-packager
三,配置podspec文件
下面是我项目中的podspec文件,请参考配置
Pod::Spec.new do |s|
s.name = "XXXLIB"
s.version = "0.4.0.8"
s.summary = "生成静态库的XXXLIB."
s.description = <<-DESC
成静态库的XXXLIB
DESC
s.homepage = "https://github.com/username/XXXLIB"
s.license = 'MIT'
s.author = { "username" => "XXX@gmail.com" }
# s.source = { :git => "/Users/XXX用户名/Desktop/XXXLIB", :tag => '0.4.0.8'}
s.source = { :git => "/Users/XXX用户名/Desktop/XXXLIB", :tag => s.version.to_s}
s.platform = :ios, '7.0'
s.requires_arc = true
s.source_files = ['Pod/Classes/**/*.{h,m,plist,c}']
s.resource_bundles = {
'XXXRES' => ['Pod/Assets/*.{png,jpg}']
}
s.public_header_files = ['Pod/Classes/XXX/*.h']
s.frameworks = ['UIKit', 'MapKit','MobileCoreServices','MobileCoreServices','SystemConfiguration','CFNetwork','AVFoundation','CoreData','ImageIO','Twitter']
s.libraries = 'z.1'
s.dependency 'AFNetworking', '~> 2.3'
s.dependency 'FMDB','~> 2.2'
s.dependency 'MJExtension'
s.dependency 'SDWebImage'
s.dependency 'CocoaAsyncSocket'
end
四,打包的步骤
1,验证
开发完成静态类库之后,需要运行pod lib lint验证一下类库是否符合pod的要求(cd到podspec文件所在目录下),如果确认无误可略过。
# pod lib lint XXXLIB.podspec -only-errors --verbose --allow-warnings
2,更新pod(cd到Podfile文件所在目录下)
# pod update --verbose --no-repo-update 或者pod install
3,提交,更新版本号(cd到podspec文件所在目录下)
# git add .
# git commit -a -m'v请换成版本号'
# git tag -a 版本号 -m'v版本号'
4,将podspec文件中s.version的版本号替换为所需要的版本号(第三步git tag的版本)
修改podspec文件中s.version = "修改为自己需要打包的版本"
5,打包(cd到podspec所在文件目录下)
# pod package XXXLIB.podspec --library --force 打包成.a文件。--force是指强制覆盖
# pod package XXXLIB.podspec --force 打包成.framework文件
五,相关的参考阅读