美文网首页IOSiOS进阶之路
iOS 将个人framework上传至私有pod库

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

作者: _蓝星 | 来源:发表于2018-12-20 17:51 被阅读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的合并包也没有问题。

    • 合并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个远程仓库,分别用于

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


      6.远程仓库.png

    到这里准备工作都完了,剩下的是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测试工程中的一样。
    然后根据上边添加资源文件方式添加资源文件,应该就可以使用了。

    相关文章

      网友评论

        本文标题:iOS 将个人framework上传至私有pod库

        本文链接:https://www.haomeiwen.com/subject/tuwwcqtx.html