1、概述
CocoaPods是iOS,Mac下优秀的第三方包管理工具,给我们项目管理带来了极大的方便。个人或公司在开发过程中,会积累很多可以复用的代码包,有些我们不想开源,又想像开源库一样在CocoaPods中管理它们,那么通过gitLib创建私有仓库来管理代码就很必要。
2、概念
- Code Repository是代码仓库,包代码上传到这个仓库。
- Spec Repository是配置仓库,所有的配置按照包名、版本号分门别类的存放在这个仓库。这个仓库只用来存放.Podspec文件,不存放代码。
3、实现思路
创建私有的CocoaPods仓库之前需要先制作CocoaPods依赖库,所以步骤分两步:
- 创建私有CocoaPods仓库,也就是版本库。
- 创建CocoaPods依赖库,也就是代码库。
4、实现步骤
创建版本库
*** GitLab创建Specs Repo仓库
*** 在终端把远程的私有版本库添加到本地索引
$ pod repo add MySpecs http://gitlab.xxx.com/xx/MySpecs.git
这时,~/.cocoapods/reposrepos下会生成文件夹CCSpecs-
创建代码库
- 先cd到要创建项目的目录然后执行
$ pod lib create MyCategory
- 先cd到要创建项目的目录然后执行
What platform do you want to use?? [ iOS / macOS ]
> iOS
What language do you want to use?? [ Swift / ObjC ]
> ObjC
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> No
What is your class prefix?
> My
在回到Example路径下,重新执行pod install操作$ pod install
- 通过Cocoapods创建出来的目录本身就在本地的Git管理下,我们需要做的就是给它添加远端仓库,同样去GitLab拿到HTTP地址,然后cd到MyCategory目录
$ git add .
$ git commit -s -m "Initial Commit of Library"
- 编辑podspec文件,直接双击MyCategory.podspec文件打开进行编辑
Pod::Spec.new do |s|
s.name = "MyCategory" #名称
s.version = "0.1.0" #版本
s.summary = "常用类别" #简介
s.description = "集合了开发中常用的类别,包括NSSting、UIView、NSObject、NSArray、NSDictionary……" #详细描述
s.homepage = "http://gitlab.xxx.com/xx/MyCategory" #主页地址
#
s.license = { :type => 'MIT', :file => 'LICENSE' } #开源协议
# s.license = { :type => "MIT", :file => "FILE_LICENSE" }
#
s.author = { "iBlocker" => "iblocker@jianshu.com" } #作者
# Or just: s.author = "iBlocker"
# s.authors = { "iBlocker" => "MyCategory" }
#
# s.platform = :ios
s.platform = :ios, "8.0" #支持的平台及版本
# When using multiple platforms
# s.ios.deployment_target = "5.0"
# s.osx.deployment_target = "10.7"
# s.watchos.deployment_target = "2.0"
# s.tvos.deployment_target = "9.0"
#
# 代码地址
s.source = { :git => "http://gitlab.xxx.com/xx/MyCategory.git", :tag => s.version.to_s }
# 代码源文件地址,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则用逗号分开,如果需要在项目中分组显示,这里也要做相应的设置
# s.source_files = "MyCategory", "MyCategory/**/*.{h,m}"
s.subspec 'Foundation' do |ss|
ss.source_files = 'MyCategory/Classes/Foundation/*.{h,m}'
ss.dependency 'MyCategory/UIKit'
end
s.subspec 'UIKit' do |ss|
ss.source_files = 'MyCategory/Classes/UIKit/*.{h,m}'
# ss.dependency 'MyCategory/Foundation'
end
# s.exclude_files = "MYCategory/Exclude"
# s.public_header_files = "Classes/**/*.h"
# s.resource = "icon.png" #资源路径
# s.resources = "Resources/*.png"
# s.preserve_paths = "FilesToSave", "MoreFilesToSave"
s.framework = "UIKit" #使用到的系统库
# s.frameworks = "UIKit", "Foundation"
# s.library = "iconv"
# s.libraries = "iconv", "xml2"
s.requires_arc = true #是否使用ARC,如果指定具体文件,则具体的问题使用ARC
# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
# s.dependency "JSONKit", "~> 1.4" #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency
- 编辑完podspec文件后,需要验证一下这个文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,不过xcode的WARNING是可以存在的,验证需要执行一下命令
$ pod lib lint
当看到以下输出说明成功了
```
-> MyCategory (0.1.0)
MyCategory passed validation.
```
- 因为podspec文件中获取Git版本控制的项目还需要tag号,所以我们要打上一个tag
$ git status
$ git add .
$ git commit -m '编辑spec文件'
#添加远端仓库 若已存在远端仓库,则跳过添加
$ git remote add origin http://gitlab.xxx.com/xx/MyCategory.git
#提交到远端
$ git push origin master
$ git tag -m "first release" "0.1.0" (MyCategory.podspec文件中的tag值保持一致)
#推送tag到远端仓库
$ git push --tags
-
向Spec Repo提交podspec注意
- 向Spec Repo提交podspec必须确保podspec通过验证无误!!!
- 按规范删掉无用的注释
提交
$ pod repo push MySpecs MyCategory.podspec
注:该内容非本人原创,流程已经验证,若有侵权,私信立删!