IOSiOS进阶之路

iOS 将个人framework上传至私有pod库

2018-12-20  本文已影响66人  _蓝星

需求:将项目中的一个模块制作成一个可移植的代码库。上传到pod移植起来会更方便,也方便版本管理。

一、实施步骤

  1. 制作frmaework库;传送门
  2. 开发framework库;传送门
  3. 将framework库上传至pod;

二、制作pod库的准备工作

  1. 制作好的framework静态库;
  2. pod调试工程;
  3. 代码托管工具(码云、github、gitlab等都行),这里以码云为为例;

1.1 framework包合并

上传pod库的framwoek包一般建议是release的真机和模拟器的合并包。目前我测试pod下来的库好使不好使,用debug的合并包也没有问题。

lipo -create Debug模拟器.a路径+空格+Debug真机.a路径+输出路径+输出名字

1.2 将framework文件放入到pod调试工程中的Class文件夹,bundle文件放入到Assets文件夹

都放到Class文件夹也可以,在之后的.podspec文件将路径写清楚就行。


1.pod调试工程目录.png

2.1 生成pod调试工程

pod lib create 库名 

2.2 导入framework文件,编写.podspec文件

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文件方法,如果有小伙伴知道此类方法还请不吝赐教。


3.1 创建远程仓库

此处一般需要创建3个远程仓库,分别用于

  1. podspace的版本管理;
  2. framework源码的管理;
  3. 用户上传pod库。
    建议将这些都放置在公司的gitlab当中,不要将公司的代码上传到自己的代码托管账号当中。一是方便其他同事的使用,二是如果自己离职这些东西也方便交接。

到这里准备工作都完了,剩下的是pod库制作相关的主要内容了

创建私有pod库

  1. 创建本地podSpace 并关联远程podSpace仓库;
  2. 创建pod库;
  3. 配置 .podspec 文件;(上边已经配置过了,此时更改一下文件中远程仓库地址)
  4. 验证本地pod文件;
  5. 提交pod库到远程仓库;
  6. 给pod工程打上tag值,并推送到远程仓库;
  7. 私有pod库的验证;
  8. 生成pod私有库;
  9. 引用验证pod库。
    1.创建-关联podSpace
pod repo add FrameworkPodSpace https://gitee.com/wlsxmahaozhe/FrameworkPodSpace.git

之后可以通过~/.cocoapods/repos查看本地pod版本库:

7.本地pod版本库.png
第二第三步上边已经做过了,此处略过
验证本地pod文件是否正确
pod spec lint

有警告啥的可以加上--private--allow-warnings
通过后可以按看到类似framewirkPod passed validation.的提示。
提交pod工程到远程仓库
上传成功后刷新远程仓库页面可以看到:

8.pod库上传成功.png
给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
验证成功后会显示

9.私有pod库验证成功.png

注:此处我这里卡了一下,一直提示vendored_frameworksresource_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测试工程中的一样。
然后根据上边添加资源文件方式添加资源文件,应该就可以使用了。

上一篇下一篇

猜你喜欢

热点阅读