iOS 将个人framework上传至私有pod库
需求:将项目中的一个模块制作成一个可移植的代码库。上传到pod移植起来会更方便,也方便版本管理。
一、实施步骤
二、制作pod库的准备工作
- 制作好的framework静态库;
- pod调试工程;
- 代码托管工具(码云、github、gitlab等都行),这里以码云为为例;
1.1 framework包合并
上传pod库的framwoek包一般建议是release的真机和模拟器的合并包。目前我测试pod下来的库好使不好使,用debug的合并包也没有问题。
- 合并framework包
lipo -create Debug模拟器.a路径+空格+Debug真机.a路径+输出路径+输出名字
- framework用的资源文件也准备好,这里以.bundle文件为例。
1.2 将framework文件放入到pod调试工程中的Class文件夹,bundle文件放入到Assets文件夹
都放到Class文件夹也可以,在之后的.podspec文件将路径写清楚就行。
1.pod调试工程目录.png
2.1 生成pod调试工程
- cd 到目标文件夹路径;
- 执行生成命令;
pod lib create 库名
-
创建的选项
这么选我觉着是挺好用的,具体看自己的需求。
2.生成pod库.png
2.2 导入framework文件,编写.podspec文件
- 首先按照上边的操作,导入freamework和资源文件
- 然后编写.podspec文件,编写完成后cd到pod工程的Example文件目录,执行pod install命令。
Pod::Spec.new do |s|
s.name = 'framewirkPod'
s.version = '0.0.1'
s.summary = 'A short description of framewirkPod.'
s.description = "上传pod的一个演示"
s.homepage = 'www.baidu.com'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'MHZ' => '********@qq.com' }
s.source = { :git => '这个工程在托管工具上的Git地址', :tag => s.version}
s.ios.deployment_target = '8.0'
#其他文件可以在这里添加
# s.source_files = 'framewirkPod/Classes/**/*'
# s.resource_bundles = {
# 'framewirkPod' => ['framewirkPod/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
s.vendored_frameworks = ['framewirkPod/Classes/TestFramework.framework'] #自己的framework在工程中的路径
s.resource_bundles = {
'Resources' => 'framewirkPod/Assets/frameworkImages.bundle'
}#资源文件的路径,会在pod中创建“Resources”的文件夹
#framewirk需要依赖那些三方库可以在这里添加,导入该pod是,会自动导入这些三方库
s.dependency 'Masonry'
s.dependency 'YYCategories'
s.dependency 'YYModel'
end
之后我们就的到这样一个目录结构的工程:
3.执行pod install之后的工程.png
这时候我们就可以尝试在测试工程中调用我们的framework,在这里能够正确使用,则基本可以说明上传到pod 之后的framework也同样可以正常使用了。
但这时候调用,会发现我们使用的图片资源加载不出来,是因为我们的bundle文件没有在主工程当中。也是因为我们在调用图片的方法获取的bundle路径的方法只能获取到主工程中的bundle文件,无法访问到pod工程中的bundle文件。目前我没有找到能够让framework自主调用静态库内部bundle文件方法,如果有小伙伴知道此类方法还请不吝赐教。
-
添加bundle文件的操作
4.在主工程中添加bundle文件.png
-然后尝试调用framework中的内容
5调用framwwork内容,及结果.png
3.1 创建远程仓库
此处一般需要创建3个远程仓库,分别用于
- podspace的版本管理;
- framework源码的管理;
- 用户上传pod库。
建议将这些都放置在公司的gitlab当中,不要将公司的代码上传到自己的代码托管账号当中。一是方便其他同事的使用,二是如果自己离职这些东西也方便交接。
-
生成远程仓库
此处省略源码的远程仓库的创建。
6.远程仓库.png
到这里准备工作都完了,剩下的是pod库制作相关的主要内容了
创建私有pod库
- 创建本地podSpace 并关联远程podSpace仓库;
- 创建pod库;
- 配置 .podspec 文件;(上边已经配置过了,此时更改一下文件中远程仓库地址)
- 验证本地pod文件;
- 提交pod库到远程仓库;
- 给pod工程打上tag值,并推送到远程仓库;
- 私有pod库的验证;
- 生成pod私有库;
- 引用验证pod库。
1.创建-关联podSpace
pod repo add FrameworkPodSpace https://gitee.com/wlsxmahaozhe/FrameworkPodSpace.git
之后可以通过~/.cocoapods/repos查看本地pod版本库:
第二第三步上边已经做过了,此处略过
验证本地pod文件是否正确
pod spec lint
有警告啥的可以加上--private或--allow-warnings。
通过后可以按看到类似framewirkPod passed validation.的提示。
提交pod工程到远程仓库
上传成功后刷新远程仓库页面可以看到:
给pod库打上tag并推送到远程仓库
git tag -m 'first release' '0.0.1'
git push --tags #推送tag到远端仓库
此处的0.0.1与pod文件中写的s.version = '0.0.1'保持一致。
验证私有pod库
pod spec lint --sources='https://gitee.com/******/FrameworkPodSpace.git,https://github.com/CocoaPods/Specs' --allow-warnings
因为我们的pod空中包含有静态库,需要在后边再额外添加--use-libraries
验证成功后会显示
注:此处我这里卡了一下,一直提示vendored_frameworks和resource_bundles路径下文件找不到,但整个工程貌似没有问题,后来才发现是我的工程在重新配置.podspec文件后没有打tag也没有上传。操作一下tag和上传tag之后再校验就通过了。
然后就是生成自己的私有pod库,例:
pod repo push FrameworkPodSpace framewirkPod.podspec --sources='https://gitee.com/wlsxmahaozhe/FrameworkPodSpace.git,https://github.com/CocoaPods/Specs' --allow-warnings --use-libraries
成功之后显示:
10.生成pod库成功.png
查看远程私有pod仓库:
屏幕快照 2018-12-20 下午5.33.59.png
此时没出息地激动了一下。
三.私有pod库的使用
1.配置podfile文件
source 'https://gitee.com/wlsxmahaozhe/FrameworkPodSpace.git' //自己的远端pod仓库
source 'https://github.com/CocoaPods/Specs.git' //github的远端公有pod仓库
platform :ios, '8.0'
target 'SelfPodApplyDemo' do
pod 'framewirkPod'
end
工程调用和在创建的pod测试工程中的一样。
然后根据上边添加资源文件方式添加资源文件,应该就可以使用了。