前言
上次讲了如何把自己的工具传上Cocoapods上,然后pod下来使用,这样能很便利的维护自己的工具库。但是,Cocoapods上的库大家都能访问,自己的项目还行,如果是公司的,那就不能公开于众,如果因为你公开的原因而使公司出现损失,你是要付责任的,所以要搭建自己的索引库。
准备工作
在GitHub上,建立私有库是要钱的,所以推荐下码云吧,地址:https://gitee.com,可以免费私有库。不过这边也是相对安全,最好还是公司内网搭建下gitlab,我们写demo当然没关系,放在GitHub都无所谓的。我还是用GitHub公开演示吧。
本地私有库
创建一个Classes
文件夹,里面放上你的工具类,你问我为什么叫Classes
,我只能说约定俗成吧,而且到后面快速下载模板的时候也是叫Classes
,如果你非要叫其他的名字也行,记得在spec
文件里修改就行。
然后在你Classes
的同级目录下,建一个项目,一般用来测试你的组件化模块的。
再然后创建描述文件,在终端进入文件夹,然后创建描述文件,pod spec create LocalTest
修改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
,在打开项目,你会发现
工具库已经导进去了。
这个项目主要是用来测试自己的工具库的,当确认没有bug的时候,就可以传到远程,下面就会讲远程私有库。(对了,如果你在Classes里加了新文件,不需要拖到测试项目里,只要让测试项目pod更新下就行。)
快速创建组件
在上面,我们已经创建里一个工具组件,并且创建了测试工程测试。这样场景经常发生,所以pod给我们提供了这样一个模板下载,这样能快速创建一个组件。现在重新开一个文件夹,尝试下快速创建的Demo。命令:pod lib create SpeedTest
,最后一个组件名你随便改。在生成模板的时候会问你几个问题,自己翻译下吧,就不多做解释了。
回答完需求后就会很快生成一个项目。
你会看到在我们的组件(SpeedTest)文件里帮我们创建好了Classes
和Assets
,Assets
里可以放图片。也帮我们建好了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
,结果出错了:
其中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个问题后,发现验证通过了。
本地验证通过后进行远程验证,代码是:pod spec lint
,结果出错,还是tag值的问题,所以忽略它,给命令加后缀:pod spec lint --allow-warnings
至此,一个组件就完成了。
建立私有索引库
pod的管理,依赖于索引库,我们可以在终端查看下有几个索引库pod repo
一般没有建过的话,只有一个官方的。
接下来我们创建自己的索引库。首先,在远程创建一个库,用来放索引库的。随便起个名,我这边就叫STRepos了。创建完后与本地的索引库关联:pod repo add STRepos https://github.com/harryphone/STRepos.git
,关联成功后再pod repo
,你就会发现多出来一个
这样索引库就好啦,现在我们要把工具库中的spec文件传给它后,我们就能使用了:pod repo push STRepos SpeedTest.podspec
这里提交到本地后自动会提交给远程,我这里输入了一次账号和密码。
我们也可以去本地看下文件:/Users/hyf/.cocoapods/repos/STRepos/SpeedTest/0.1.0/SpeedTest.podspec
(记得打开隐藏文件,远程库也有了,自己看下)
验证下成果,pod search SpeedTest
,找下自己的库,看下找不找的到(如果你成功了还是搜不到库,把这个文件删了,在搜下就有了:/Users/hyf/Library/Caches/CocoaPods/search_index.json
)
在主项目导入组件
到最后一步啦,建立一个主项目,创建一个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
结语
不出意外的话,一个自己的基础组件就弄完了。等我累计了一定的组件化经验后,我还会发一篇高级应用。