iOS解耦与模块化之路 -制作自己的Spec私有库

来源:互联网 发布:三国群英传ol 知乎 编辑:程序博客网 时间:2024/06/10 10:52

最近公司项目进入趋于稳定的状态,需要做项目解耦与模块化的工作,听说app还将要拆分为6个app,慌不择路。以这篇文章为起始,记录一下这次项目的模块化之路的重要环节。

首先看一下我们项目私有库目前制作与完成情况:

这里写图片描述

下面开始动手制作属于自己的私有库:

一、配置文件podspec

podspec文件相当于私有库的配置文档,下面先进行podspec的相关讲解
执行命令pod spec crate [项目名] ,可得到一个spec文件,打开后如下:

这里写图片描述

解释如下:

Pod::Spec.new do |s|   s.name             = 'LBCategory'                       #名称  s.version          = '1.0.0'                            #版本号  s.summary          = 'A libraries of LBCategory.'       #简短介绍  s.description      = <<-DESC                            #详细介绍                       category file Private Podspec about LBCategory.                       DESC  s.homepage         = 'http://******/****/LBCategory.git'   #主页,这里要填写访问到的GitLab上的地址  #s.license                                                 #开源协议  s.author           = { '杨庆人' => ‘**@lianj.com' }         #作者信息  s.source           = { :git => 'http://******/****/LBCategory.git', :tag => s.version.to_s }   #项目地址与tag,这里不支持ssh的地址,只支持HTTP和HTTPS s.ios.deployment_target = '8.0' #s.requires_arc   #是否使用ARC,如果指定具体文件,则具体的文件使用ARC  s.source_files = 'Source/Class/**/*'    #代码源文件地址,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则用逗号分开  s.resource     = 'Source/Resource/*     #资源文件地址,最好打包成bunldle  s.public_header_files = 'Source/Classes/**/*.h'     #公开头文件地址  s.frameworks = 'UIKit','Foundation'     #所需的framework,多个用逗号隔开  s.dependency 'AFNetworking', '~> 2.3'  s.dependency 'LBLoadingView'    #依赖关系,该项目所依赖的其他库(包括公开库和自己的私有库)end
// 注:私有库可以依赖CocoaPods上的第三方库,也可以依赖自己制作的其他Spec私有库

当需要构造多个子Spec时,可添加如下配置

s.subspec 'LBCategorySubspec' do |ss|ss.source_files = 'Source/Class/LBCategory_Object/**/*.{h,m}'ss.public_header_files = 'Source/Class/LBCategorySubspec/*.h'ss.dependency 'MJExtension'ss.dependency 'LBCoreKit/LBCategory'ss.ios.deployment_target = '8.0'ss.frameworks = 'UIKit','Foundation'ss.libraries = 'objc'   #<objc/>...end

二、新建工程

pod lib create NAME

新建一个私有库模板工程,配置.podspec文件,新增class、resource目录,其中class中存放项目代码文件,resource中存放资源文件,最好打包成bundle,在工程的Podfile文件进行配置:

这里写图片描述

其中sources的意思是要引导自有库从这两个仓库里校验,如果本私有库使用了另外的私有库,则一定要加入私有库的source引导;而pod 'LBUIKit', :path => './'  指向项目该目录下的.podspec文件。

在工程demo中测试私有库,如测试通过,则可以进行下一步了。

三、GitLab创建工程

在gitLab中创建一个项目,拿到一个项目提交的路径,扫描添加本地已经存在的仓库,配置远程仓库,则可以提交推送到远程仓库,打上与项目版本一致的tag:
这里写图片描述

四、验证与推送

// 在项目目录下进行私有库校验pod lib lint --sources='git@xxx**xxx:iOSComponent/Spec.git,https://github.com/CocoaPods/Specs.git'  --use-libraries --allow-warnings
  • —sources:如项目中使用了私有库,则一定要要加上—sources私有仓库地址,这点在二中已经进行了说明,而一旦加入了私有库地址,也需要加上cocoapods公开库地址,因为私有库也依赖了公开库
  • –use-libraries:如果引用的第三方私有或公有库用到静态库,需要用–use-libraries,配合以上进行校验
  • –allow-warnings:项目验证一般都会有warning,只要没有error,则可以使用–allow-warnings命令,配合以上进行校验

私有库校验通过则可进行push操作了

//  推送Spec私有库pod repo push Spec  --sources='git@xxx**xx:iOSComponent/Spec.git,https://github.com/CocoaPods/Specs.git'  --use-libraries --allow-warnings

进行私有库push,push完成,就可以在你们的项目中使用自己做的私有库啦!

pod 'LBCategory'#pod 'LBCategory/LBCategory_UIKit'    #或者使用部分私有库

这里写图片描述

注:

  • 制作私有库时,pod lib lint验证操作是不需要提交远程仓库的,进行的是本地校验;只有在推送的时候,才会去远程仓库拉取对应的版本代码进行验证并推送
  • 制作私有库时,可以依赖CocoaPods上的第三方库,也可以依赖自己制作的其他Spec私有库
  • 每次更新私有库,需要重新打包上传,升级版本与远程仓库tag,需要重新进行检验和推送
  • 更新完私有仓库,可使用pod update对本地仓库的进行更新,也主动到~.cocoapods/repos/Spec目录下进行git pull拉取,然后再进行pod update –no-repo-update
  • -

end

原创粉丝点击