iOS组件化 - 制作pod上传自己的Github

一.前言

  • 随着公司项目的不断迭代,业务的天马行空。工程的代码量和业务逻辑也越来越复杂,原始的开发模式和架构已经无法满足我们的业务发展速度,想分离出一个模块更是困难。直到组件化的诞生,这也是我们为什么要拥抱组件化的原因。
    不得不说组件化带来的优点还有有目共睹的:
    场景 如:
    • 聪明的产品张三有一天说:我们的IM业务日活、留存数据非常好,所以我们想单独拆出这个业务做个马甲包。
    • 大厂~项目管理说我们的项目是否做业务之间隔离了没有。
    • 随着业务不断增加,编译速度和打包速度越来越慢。
    • 大厂~多个业务多人同时开发,等等。
  • 哈哈!以上都是题外话,下面开始正文。

组件化分类:
共有库 - 所有人都能使用。(\color{red}{本文以共有库为例})。
私有库 - 公司内部拥有特殊权限才能使用。
framework - 公私都有,动态库静态库。只能看到.h文件。

二.步骤

准备工作:
Github账号一个(上传组件工程用的)
安装CocoaPods(创建并验证pod用的)
安装Git 命令行 (首次上传组件工程用的)
安装Github Desktop或者SourceTree(后续更新组件用的,Git命令使用熟练者忽略此项)


1.创建共有库

  • 首先在Github创建一个新的Repository。(你的Pods最终是要托管在Github平台上的,所以先在Github上创建一个空的Repository。)
    \color{red}{注意:“JHIMComponets”名字组成;JH = 项目前缀,Componets = 组件}
    如:JHIMComponets = IM组件化模块,这个看个人不强制。

    repository.png

  • 下图为创建成功后的样子


    JHIMComponets.png

2.注册Cocoapods账户

  • 想要创建一个开源pod库, 首先我们需要注册CocoaPods,基于Cocoapods已经安装好的前提下,这里是使用trunk 方式,只需要在终端执行:
pod trunk register 邮箱地址 '用户名' --verbose

如: pod trunk register xxxxxx@yeah.com 'JadeXH' --verbose

一般会使用GitHub邮箱和用户名,当然这个可以自由选择,注册之后,在邮箱中会收到确认邮件,在浏览器中点击链接确认即注册成功(小编遇到点击链接地址后显示:Internal server error 提示,不用理他直接验证)。成功之后可以终端执行:

pod trunk me    //验证是否注册成功

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

yourname@Jade-for-MacBook-Pro podTest % pod trunk me
  - Name:     yourname
  - Email:    yourname@yeah.net
  - Since:    March 28th, 02:32
  - Pods:     None
  - Sessions:
    - March 28th, 02:32 - August 4th, 04:13. IP: 124.126.200.29

3.在本地创建pod库

  • 利用pod命令创建了名为JHIMComponets的Pod库
    \color{red}{\normalsize{注意:这个名字要和你Github创建的Repository Name一致}}
cd yourname@Jade-for-MacBook-Pro downloads % 
# cd到downloads目录下载,这个不强制请随意。
yourname@Jade-for-MacBook-Pro downloads % pod lib create JHIMComponets
# 执行 pod lib create JHIMComponets
  • 执行完上述命令之后,会问你几个问题,按需求填写即可


    pod create.png
# 你想使用哪个平台?
1、What platform do you want to use?? [ iOS / macOS ]
iOS
# 库语言选择?
2、What language do you want to use?? [ Swift / ObjC ]
ObjC
# 是否需要一个demo工程,用于调试Pod?
3、Would you like include a demo application with your library? [ Yes / No ]
Yes
# 你要使用哪个测试框架?
4、Which testing frameworks will you use? [ Specta / Kiwi / None ]
None
# 是否要UI测试?
5、Would you like to do view based testing? [ Yes / No ]
NO
# 类名前缀?
6、What is your class prefix?
JH
  • 到这里pod库就创建完成了,它会自己打开刚才创建的pod库。
    目录结构如下图:


    pod.png
  • (1)配置podspec
    配置详解:
Pod::Spec.new do |s| 
  #库名称
  s.name             = 'JHIMComponets'
  #版本号
  s.version          = '0.1.0'
  #库简短介绍
  s.summary          = 'A short description of JHIMComponets.'
  #开源库描述 
  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC
  #开源库地址,或者是博客、社交地址等
  s.homepage         = 'https://github.com/JadeXH/JHIMComponets'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  #开源协议
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  #开源库作者
  s.author           = { 'yourname' => 'yourname@yeah.net' }
  #源库资源文件
  s.source           = { :git => 'https://github.com/JadeXH/JHIMComponets.git', :tag => s.version.to_s }
  #社交网址
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
  #开源库最低支持
  s.ios.deployment_target = '9.0'
  #源库资源文件
  s.source_files = 'JHIMComponets/Classes/**/*'
  #添加资源文件
  # s.resource_bundles = {
  #   'JHIMComponets' => ['JHIMComponets/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  #依赖的系统库 多个用逗号隔开
  # s.frameworks = 'UIKit', 'MapKit'
  #引入第三方依赖库
  # s.dependency 'AFNetworking', '~> 2.3'
end
  • 需要注意如图:


    podspec.png
  • Readme主要是介绍这个组件的用途和使用的,可以随时编辑。目前就确认一下自己的名字和邮箱就可以了。


    readme.png
  • 协议文件,也是确认一下自己的名字和邮箱就可以了。


    licence.png
  • (2)添加自己的类
    打开pod库目录:

new.png

删除ReplaceMe -> 创建JHIMComponet简单类,声明一个打印函数,方便后续测试。
\color{red}{注意:创建类文件一定要放到class目录下}


#import "JHIMComponet.h"

@implementation JHIMComponet

- (void)printJHIMComponet {
    NSLog(@"printJHIMComponet*****");
}

@end
  • 这时cd进入Example路径下执行pod install命令,看看是否能将刚刚添加的库文件引入到工程中
yourname@Jade-for-MacBook-Pro downloads % cd /Users/yourname/Downloads/JHIMComponets/Example
yourname@Jade-for-MacBook-Pro Example % pod install
pods.png

如果成功会在项目组Pods中看到。

4.项目上传与发布

cd到你的项目路径下,将项目上传到Github中(即刚刚创建的JHIMComponets共有库中)依次使用下列命令行,不要遗漏。

//
yourname@Jade-for-MacBook-Pro Example % cd /Users/yourname/Downloads/JHIMComponets

# 添加github项目路径
yourname@Jade-for-MacBook-Pro JHIMComponets % git remote add origin https://github.com/JadeXH/JHIMComponets.git
# 添加文件
yourname@Jade-for-MacBook-Pro JHIMComponets % git add .
# 将暂存区里的改动给提交到本地的版本库
yourname@Jade-for-MacBook-Pro JHIMComponets % git commit -m "first commit"
# 创建分支main
yourname@Jade-for-MacBook-Pro JHIMComponets % git branch -M main
# 提交版本号并push到main分支
yourname@Jade-for-MacBook-Pro JHIMComponets % git push -u origin main

#注意这里的版本号要与.podspec中的版本号保持一致
yourname@Jade-for-MacBook-Pro JHIMComponets % git tag 0.1.0
yourname@Jade-for-MacBook-Pro JHIMComponets % git push origin 0.1.0

在执行git push -u origin main的时候如果遇到需要输入用户名和密码:

Username for 'https://github.com': JadeXH
Password for 'https://JadeXH@github.com': 

\color{red}{\normalsize{需要注意的是:}}这个密码不是你Github的登录密码,而是需要生成一个access tokens。

生成token步骤:需要在Github个人设置页 -> Settings -> Developer settings -> Personal access tokens 中创建一个token。


settings.png

1.设置token的有效期,访问权限等
2.选择要授予此令牌token的范围或权限。
3.要使用token从命令行访问仓库,请选择repo。
4.要使用token从命令行删除仓库,请选择delete_repo
5.其他根据需要进行勾选


token.png

delete.png

点击Generate token生成的token(ghp_zR7Zm44QK*************Ui7zikChgv2bxMNZ)。

注意:
记得把你的token保存下来,因为你再次刷新网页的时候,你已经没有办法看到它了。然后把这个token直接粘贴到命令行提示输入密码处就ok了。


执行完所有git命令行后打开浏览器输入https://github.com/JadeXH/JHIMComponets就看到你的pod库已经push上去了。

update.png

5.使用与验证

  • 新建个带pod的项目,把我们做好的JHIMComponets加入podfile文件。
# Uncomment the next line to define a global platform for your project
 platform :ios, '9.0'

target 'podTest' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for podTest
  pod 'JHIMComponets',:git =>"https://github.com/JadeXH/JHIMComponets.git"
  
  
  target 'podTestTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'podTestUITests' do
    inherit! :search_paths
    # Pods for testing
  end
end
  • 执行pod install
yourname@Jade-for-MacBook-Pro podTest % pod install
Analyzing dependencies
Pre-downloading: `JHIMComponets` from `https://github.com/JadeXH/JHIMComponets.git`
Downloading dependencies
Installing JHIMComponets (0.1.0)
Removing JHComponents
Generating Pods project
Integrating client project
Pod installation complete! There are 9 dependencies from the Podfile and 9 total pods installed.
  • 引入头文件并打印结果


    import.png
print.png

6.版本更新与维护

  • 现在的JHIMComponets库已经在Github上托管了,以后维护这个项目就可以了(开始本地创建的JHIMComponets项目就可以删除了),管理Github仓库,\color{blue}{两种方案任选}
  • 也可以使用Github Desktop
    下载Github Desktop登录你的用户名密码,File ->Clone Repository


    Github Desktop.png

    其实Github Desktop更加可视化一些,上面History就是刚才git命令行的记录。


    desk.png

6.总结

  • 终于写完了,哇哦!凌晨了。写这篇文章初心也是为了加深印象,如果碰巧也能帮到您还请点个赞,制作不易。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容