前言
iOS开发者,会经常使用CocoaPods管理第三方库。但是,无论是组件化开发还是需要创建公司内部的类库,我们都可以制作自己私有的CocoaPods库。本文就是详细说明私有库创建流程。
创建流程
私有检索库的创建
我们创建CocoaPods公有库时需要向公共的Spec库进行注册的。私有库则需要我们自己来创建Spec仓库。这个Spec库存储的是私有库的检索信息,版本信息等等,一定要与私有库本身区分开。
1,创建远程Spec仓库
首先,我们需要创建一个存放Spec检索库的远程仓库
2,将Spec远程仓库添加到本地:
$ pod repo add JiaSpecRepo https://github.com/skykywind/JiaSpecRepo.git
然后我们可以在 /Users/jiafujia/.cocoapods/repos/JiaSpecRepo
找到clone的仓库:
私有库的创建
有了检索库,我们就可以创建私有代码库了。
创建代码库远程仓库
这里我们创建一个新的远程仓库,名字为PrivateLib
:
创建支持CocoaPods的项目
我们可以在已经存在的项目添加支持Cocoapods的文件,也可以新建项目。打开终端,通过以下命令创建新的工程:
- Pod创建私有库项目
$ pod lib create PrivateLib
然后会有如下几个问题需要你自定义:
What platform do you want to use?? [ iOS / macOS ]
> iOS
What language do you want to use?? [ Swift / ObjC ]
> Swift
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
Which testing frameworks will you use? [ Quick / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> Yes
- 编辑
PrivateLib.podspec
文件
现根据自己项目的情况编辑版本信息,描述信息,以及其他内容,详见CocoaPods官网文档
#
# Be sure to run `pod lib lint PrivateLib.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'PrivateLib'
s.version = '0.1.0'
s.summary = 'Here is Summary of PrivateLib.'
s.description = <<-DESC
Here is a long description of your private lib. we can write details of the lib.
DESC
s.homepage = 'https://www.jianshu.com/u/0d7345536bf2'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'skykywind' => '824214765@qq.com' }
s.source = { :git => 'https://github.com/skykywind/PrivateLib.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0'
s.swift_version = '4.2' // 指定Swift 版本
s.source_files = 'PrivateLib/Classes/**/*' // 项目代码存放的文件路径
end
编辑完成之后,我们来验证一下是否能通过:
$ pod lib lint PrivateLib.podspec
如果不能通过验证,终端会提示你哪个字段信息有问题,修改之后在进行验证就好了。
- 添加代码
打开PrivateLib.xcworkspace
, 我们删除默认的ReplaceMe.swift
文件, 在PrivateLib->PrivateLib->Classes
文件夹下,我创建了一个MyClass
类作为示例,这里也就是添加私有代码的地方:
import Foundation
public class MyClass {
public init() {
}
public func sayHello() {
print("Hello world")
}
}
- 测试代码
添加完我们的代码后,可以在Example项目中进行测试。在Example目录下,使用下面命令(每次修改私有库代码都需要重新pod install
):
$ pod install
然后在Example的中调用:
import UIKit
import PrivateLib
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let myClass = MyClass()
myClass.sayHello()
}
}
如果运行成功我们就可以继续进行了。
- 提交本地代码
打开终端,使用git指令提交代码
# 关联远程仓库
$ git remote add origin https://github.com/skykywind/PrivateLib.git
# 添加全部修改
$ git add .
# 提交修改
$ git commit -a -m "0.1.0"
# 拉取远程仓库代码(先拉取一下远程的代码,避免冲突)
$ git pull origin master
# 推送到远程仓库
$ git push origin master
# 制作Tag
$ git tag 0.1.0
# 发布Tag
$ git push origin 0.0.1
- 向私有Spec检索库注册自己的spec,并验证是否成功:
# JiaSpecRepo是我们最开始创建的检索库名称
$ pod repo push JiaSpecRepo PrivateLib.podspec
//验证远程
$ pod spec lint PrivateLib.podspec
成功之后我们会在JiaSpecRepo文件夹看到我们发布的版本Users/username/.cocoapods/
目录内:
同时,也可以在远程仓库去查看是否发布成功。
私有库的使用
创建一个新的iOS项目 TestDemo
,在项目目录下:
$ pod init
然后通过Xcode或者其他编辑器,编辑Podfile
文件,参考如下:
source 'https://github.com/skykywind/JiaSpecRepo.git'
# 如果需要引入公共资源的库,也要添加下面的公共检索库地址
# source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
target 'TestDemo' do
pod 'PrivateLib', '~> 0.1.0'
end
私有库的更新
如果是更新自己的私有库,比如修改了代码,添加了新的依赖库,我们需要重新更新.spec的版本,创建新的Tag号并push到检索库(重复发布步骤)。
如果是更新自己本地检索库,可以执行以下命令:
//更新所有repo
$ pod repo update
// 更新某个spec
$ pod repo [spec库名]
// 添加新的检索库到本地
pod repo add [Specs Name] [Specs git仓库地址]