基于Cocoapods实现组件化

1、前言

在平常项目开发过程当中,不论是单一产品线仍是多个产品线的开发团队项目,都须要统一对通用的工具类、通用的业务模块进行解耦抽离,这样才能保证项目结构的健壮性以及可重塑造性。那么对于这些模块,如何才能更好的实现管理? 就须要借助是iOS平台当前最流行的包管理工具- Cocoapodsios

本文主要介绍如何经过cocoapods的方式实现工具类私有库、公有库、和Framework的过程。git

本文图解:github

条件准备:sql

2、注册Cocoapods帐户

想要建立一个开源pod库, 首先咱们须要注册CocoaPods,基于Cocoapods已经安装好的前提下,这里是使用trunk 方式,只须要在终端执行:app

pod trunk register 邮箱地址 '用户名' --verbose

如: pod trunk register xxxxxx@qq.com 'allenlas' --verbose
复制代码

通常会使用GitHub邮箱和用户名,固然这个能够自由选择,注册以后,在邮箱中会收到确认邮件,在浏览器中点击连接确认即注册成功, 成功以后能够终端执行:框架

pod trunk me    //检测是否注册成功
复制代码

查看注册信息,之后可使用该开源Pod库发布工具,也能够经过此方式查看已经发布过的pods:

AllenLASdeMac-Pro:~ allenlas$ pod trunk me
  - Name:     yourname
  - Email:    youremail@qq.com
  - Since:    December 11th, 2017 02:29
  - Pods:
    - XKCocoapods
  - Sessions:
    - December 11th, 2017 02:29 -     April 24th, 2018 20:34. IP: 113.119.196.232 Description:
    macbook mini
AllenLASdeMac-Pro:~ allenlas$ 
复制代码

2、公有库和私有库

公有库和私有库差别化:
建立公有Pod库或者私有Pod库, 实际上原理是同样的, 都是基于git服务和repo协议。
不同的是, 二者的版本索引查询方式不同,公有库的podspec由CocoaPods/Specs管理,而内部私有使用的pod库须要本身创建一个仓库来管理podspec.
复制代码
2.1 搭建公有仓库
Cocoapods是托管在Github平台上的,全部的Pods也都是托管在github上,因此本文也基于Github平台的方式制做公有库,目前Github也支持免费建立私有仓库,其用法和公有库大致相同
复制代码
建立仓库

信息详解:
1. Repository name:  开源库的名字 (必填)
   
   2. Description : 开源库的功能做用描述
   
   3. Public: 开源仓库
   
   4. Private: 私有仓库,收费(若是是公司内部使用的话这里推荐你们使用私有的仓库)
 
   5. Initialize this repository with a README: readme文件,建议勾选进行建立,这是对该库完整的一个说明文档
   
   6. gitgnore: 看状况自行选择类型
   
   7. License类型: MIT License (建议使用)
复制代码
添加tag:
建立仓库成功后,能够在其主页,选择release,添加tag

Repository主页 -> release -> create tag
复制代码

以下:

image

全部信息准备彻底以后,能够经过客户端GitHub Desktop,将项目clone到本地。

2.2 基于cocoapods 自动建立工程
命令:
pod lib create 项目名称
复制代码

在clone下来的项目目录路径下,打开终端,执行:

AllenLASdeMac-Pro:~ allenlas$ cd /Users/allenlas/Documents/GitHub/XKCocoapods
AllenLASdeMac-Pro:~ allenlas$ pod lib create XKCocoapods
复制代码

执行结果以下:

image

问题模版详解:
# 你想使用哪一个平台?
一、What platform do you want to use?? [ iOS / macOS ]
iOS
# 库语言选择?
二、What language do you want to use?? [ Swift / ObjC ]
ObjC
# 是否须要一个demo工程,用于调试Pod?
三、Would you like include a demo application with your library? [ Yes / No ]
Yes
# 你要使用哪一个测试框架?
四、Which testing frameworks will you use? [ Specta / Kiwi / None ]
None
# 是否要UI测试?
五、Would you like to do view based testing? [ Yes / No ]
NO
# 类名前缀?
六、What is your class prefix?
XK
复制代码
项目结构以下:

固然对于项目结构包含多一层模版文件,基于结构简洁,能够将项目的全部文件上升一个级别,直接在本地仓库的根路径下:

2.3 配置podspec

信息详解:

Pod::Spec.new do |s|
  #库名称
  s.name             = 'XKCocoapods'
  
  #指定支持的平台和版本,不写则默认支持全部的平台,若是支持多个平台,则使用下面的deployment_target定义
  spec.platform = :ios
  
  #版本号
  s.version          = '1.0.0'
  
  #库简短介绍
  s.summary          = 'iOS 公有库'
  
  #开源库描述 
  s.description      = <<-DESC
TODO: iOS 公有库制做
                       DESC
                       
  #开源库地址,或者是博客、社交地址等
  s.homepage         = 'https://github.com/ryanmans/XKCocoapods'
  
  #开源协议
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  
  #开源库做者
  s.author           = { 'ALLen、LAS' => 'xxxxxx@gmail.com' }
  
  #开源库GitHub的路径与tag值,GitHub路径后必须有.git,tag实际就是上面的版本
  s.source           = { :git => 'https://github.com/ryanmans/XKCocoapods.git', :tag => s.version }
  
  #社交网址
  s.social_media_url = 'https://juejin.im/'
  
  #开源库最低支持
  s.ios.deployment_target = '8.0'
  
  #源库资源文件
  s.source_files = 'XKCocoapods/Classes/**/*'
  
  #是否支持arc
  s.requires_arc = true
  
  #依赖系统库
  s.frameworks = 'Foundation'
  
  #开源库依赖库
  # s.dependency "Masonry", "~> 1.0"
  
  #添加系统依赖静态库
  #s.library = 'sqlite3', 'xml2'
  
  #添加依赖第三方的framework
  #s.vendored_frameworks = 'XXXX/XXXX/**/*.framework'
  
  #静态库.a
  s.vendored_library = 'XXXX/XXX/XXX.a', 'YYY/YYY/Y.a'
  
  #添加资源文件
  #s.resource = 'XXX/XXXX/**/*.bundle'
  
  #在 podspec 文件中添加 s.static_framework = true,CocoaPods 就会把这个库配置成static framework。同时支持 Swift 和 Objective-C
  #s.static_framework = true
end
复制代码

正式信息如图示:

image

引入工具类
进入根路径下的`XKCocoapods`下的Classes文件,将须要使用的XKCocoapods.h/m文件放入其中
复制代码

并在Example目录路径下,打开终端:

image

从上述信息中,能够看到工具类以及其所依赖的类库,已成功的添加到 演示的demo 项目中使用。

配置完 podspec的信息 且引入类库以后,须要更新提交到Github上,否则会验证上一次提交的信息
复制代码
2.4 验证podspec
命令:
1. pod lib lint --allow-warnings

2. pod spec lint --allow-warnings
复制代码

验证结果如图示:

验证过程当中,可能会遇到常见错误:

- ERROR | [iOS] file patterns: The `source_files` pattern did not match any file
复制代码

此错误的缘由是没有找到匹配的文件

解决办法:

1. 终端执行命令:

open /Users/allenlas/Library/Caches/CocoaPods/Pods/External/XKCocoaPods

2. 进入最近一个日志文件,将工具类放置和source_files文件路径对应的Classes目录中

  XKCocoapods文件-> classes目录 -> 添加XKCocoapods类
复制代码

如图示:

image

更新提交代码,从新验证 podspec 文件的可行性。

2.5 推送podspec到远程仓库
命令:
pod trunk push xxxxx.podspec 
复制代码

若是还没有注册过Cocoapods帐户,则须要参考上述方式,进行注册:

pod trunk register 邮箱地址 '用户名' --verbose

pod trunk me
复制代码

而后再将podspec 推送至远程仓库

如图示:

image

2.6 检查项目podspec是否上传成功
命令:
pod search xxxx(上传的项目名称)

如: pod search XKCocoapods
复制代码
常见错误:
[!] Unable to find a pod with name, author, summary, or description matching `XKCocoapods`
复制代码

解决方式:

须要更新本地的repo
执行命令 pod setup 或者 删除本地的搜索索引 rm ~/Library/Caches/CocoaPods/search_index.json
,再次执行 pod search XKCocoapods
复制代码

搜索成功后如图示:

3、制做framework

在制做公有库的过程,若是须要将添加进去的工具类打包成可运行的framework,则须要借助插件cocoapods-packager

安装命令:
sudo gem install cocoapods-packager
复制代码
3.1 打包podspec文件
命令:
# pod package 项目名.podspec --library --force 打包成.a文件。--force是指强制覆盖

# pod package 项目名.podspec --force 打包成.framework文件
复制代码
配置podspec文件:
//添加须要集成的framework
s.ios.vendored_frameworks = 'XKCocoapods/Classes/XKCocoapods.framework'
复制代码

如图示:

进入项目的根路径下,打开终端执行命令:

AllenLASdeMac-Pro:~ allenlas$ cd /Users/allenlas/Desktop/XKCocoapods
AllenLASdeMac-Pro:~ allenlas$ pod package XKCocoapods.podspec
复制代码

执行结果如图示:

打包以后,本地会多出一个XKCocoapods-1.0.0 文件

在其目录下ios文件中,拷贝XKCocoapods.framework , 将其放置 Classes 下,提交更新代码

注意: 每次有新的内容修改,记得在github新增tag,并修改podspec中的版本号,才验证podspec
复制代码

从新验证podspec

相关文章
相关标签/搜索