组件化之远程私有库

前言

上次讲了如何把自己的工具传上Cocoapods上,然后pod下来使用,这样能很便利的维护自己的工具库。但是,Cocoapods上的库大家都能访问,自己的项目还行,如果是公司的,那就不能公开于众,如果因为你公开的原因而使公司出现损失,你是要付责任的,所以要搭建自己的索引库。

准备工作

在GitHub上,建立私有库是要钱的,所以推荐下码云吧,地址:https://gitee.com,可以免费私有库。不过这边也是相对安全,最好还是公司内网搭建下gitlab,我们写demo当然没关系,放在GitHub都无所谓的。我还是用GitHub公开演示吧。

本地私有库

创建一个Classes文件夹,里面放上你的工具类,你问我为什么叫Classes,我只能说约定俗成吧,而且到后面快速下载模板的时候也是叫Classes,如果你非要叫其他的名字也行,记得在spec文件里修改就行。

image.png

然后在你Classes的同级目录下,建一个项目,一般用来测试你的组件化模块的。

image.png

再然后创建描述文件,在终端进入文件夹,然后创建描述文件,pod spec create LocalTest

image.png

修改podspec文件

Pod::Spec.new do |s|

  s.name         = "LocalTest"
  s.version      = "0.0.1"
  s.summary      = "LocalTest" 
  s.description  = "A short description of LocalTest."
  s.homepage     = "http://EXAMPLE/LocalTest"
  s.license      = { :type => "MIT", :file => "FILE_LICENSE" }
  s.author       = { "harryphone" => "harryphone@163.com" }
  s.source       = { :git => "", :tag => "#{s.version}" }
  s.source_files = "Classes", "Classes/**/*"

end

因为是本地的,所以除了s.source_files外,其余都不是很重要。然后进入项目文件夹,pod init创建podfile文件,修改文件。

pod ‘LocalTest’, :path => ‘../’

在pod跟上路径就行(相对路径),然后pod install,在打开项目,你会发现

image.png

工具库已经导进去了。

这个项目主要是用来测试自己的工具库的,当确认没有bug的时候,就可以传到远程,下面就会讲远程私有库。(对了,如果你在Classes里加了新文件,不需要拖到测试项目里,只要让测试项目pod更新下就行。)

快速创建组件

在上面,我们已经创建里一个工具组件,并且创建了测试工程测试。这样场景经常发生,所以pod给我们提供了这样一个模板下载,这样能快速创建一个组件。现在重新开一个文件夹,尝试下快速创建的Demo。命令:pod lib create SpeedTest,最后一个组件名你随便改。在生成模板的时候会问你几个问题,自己翻译下吧,就不多做解释了。

image.png

回答完需求后就会很快生成一个项目。


image.png

你会看到在我们的组件(SpeedTest)文件里帮我们创建好了ClassesAssetsAssets里可以放图片。也帮我们建好了example的测试工程,连git管理也帮我们创建了。
我们就去GitHub创建名字一样的组件库,关联下提交上去(本地关联远程库git remote add origin 远程地址,并在第一次push的时候加上-u让master建立关联: git push -u origin master

等上传完毕后可以修改spec文件了。

Pod::Spec.new do |s|

  s.name             = 'SpeedTest'
  s.version          = '0.1.0'
  s.summary          = 'SpeedTest.'
  s.description      = 'A description of SpeedTest.'
  s.homepage         = 'https://github.com/harryphone/SpeedTest'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'harryphone' => 'harryphone@163.com' }

  s.source           = { :git => 'https://github.com/harryphone/SpeedTest.git', :branch => 'master' }
## 这里不支持ssh的地址,只支持HTTP和HTTPS,最好使用HTTPS
## 正常情况下我们会使用稳定的tag版本来访问,如果是在开发测试的时候,不需要发布release版本,直接指向git地址使用
## 待测试通过完成后我们再发布指定release版本,使用如下方式
## s.source           = { :git => 'https://github.com/harryphone/SpeedTest.git', :tag => s.version.to_s }



  s.ios.deployment_target = '9.0'
  s.source_files = 'SpeedTest/Classes/**/*'
  
  # s.resource_bundles = {
  #   'SpeedTest' => ['SpeedTest/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  # s.dependency 'AFNetworking', '~> 2.3'

end

这里spec文件就比较严了,如果不合格会提交失败的。所以需要用pod的工具验证下,先是本地验证pod lib lint,结果出错了:

image.png

其中warn说我没有打tag值,红色警告说我用了swift的代码,明明全是OC的代码(有点无语)。
第一个警告,可以在发布release版本时打上tag值并提交到远程,注意tag值要和spec文件中version一致。现在嘛,忽略它,在命令后面加上后缀,变成这样pod lib lint --allow-warnings
第二个问题,在终端里直接运行

`echo "4.1" > .swift-version`

4.1替换成你当前的swift版本
至于解释嘛,给你来段英文的: It will create a swift version file in your pod-project folder. And then you can run the lint command to validate your podspec.

解决了这2个问题后,发现验证通过了。


image.png

本地验证通过后进行远程验证,代码是:pod spec lint,结果出错,还是tag值的问题,所以忽略它,给命令加后缀:pod spec lint --allow-warnings

image.png

至此,一个组件就完成了。

建立私有索引库

pod的管理,依赖于索引库,我们可以在终端查看下有几个索引库pod repo

image.png

一般没有建过的话,只有一个官方的。
接下来我们创建自己的索引库。首先,在远程创建一个库,用来放索引库的。随便起个名,我这边就叫STRepos了。创建完后与本地的索引库关联:pod repo add STRepos https://github.com/harryphone/STRepos.git,关联成功后再pod repo,你就会发现多出来一个

image.png

这样索引库就好啦,现在我们要把工具库中的spec文件传给它后,我们就能使用了:pod repo push STRepos SpeedTest.podspec

image.png

这里提交到本地后自动会提交给远程,我这里输入了一次账号和密码。

我们也可以去本地看下文件:/Users/hyf/.cocoapods/repos/STRepos/SpeedTest/0.1.0/SpeedTest.podspec(记得打开隐藏文件,远程库也有了,自己看下)

验证下成果,pod search SpeedTest,找下自己的库,看下找不找的到(如果你成功了还是搜不到库,把这个文件删了,在搜下就有了:/Users/hyf/Library/Caches/CocoaPods/search_index.json

image.png

在主项目导入组件

到最后一步啦,建立一个主项目,创建一个podfile文件,将自己的工具库pod进来。

# source 'https://github.com/harryphone/STRepos.git'
# source 'https://github.com/CocoaPods/Specs.git'

## 当没有source的时候,默认都是官方的地址,就是https://github.com/CocoaPods/Specs.git。所以想要pod自己的私有库时,需要写上自己的索引库地址。如果你还想要加上AFNetworking的话,官方的索引库地址也得加上。


target 'MainAPP' do
    pod 'SpeedTest', :source => ‘https://github.com/harryphone/STRepos.git’

end

结语

不出意外的话,一个自己的基础组件就弄完了。等我累计了一定的组件化经验后,我还会发一篇高级应用。

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

推荐阅读更多精彩内容