组件化:Cocoapods 创建自己的公开库、私有库

简介

1.创建公开库
2.创建私有库(私有库不需要注册Trunk)
3.更新维护

创建公开库

1.注册Trunk

$pod trunk me

image

没有注册过,需要注册trunk

注册
// 加上--verbose可以输出详细debug信息,方便出错时查看。
//developeng@163.com -- 自己的邮箱
//developeng         -- 自己的用户名称(随意起)
pod trunk register developeng@163.com "developeng" --verbose

image

注册完成之后会给你的邮箱发个邮件,进入邮箱邮件里面有个链接,需要点击确认一下
image

注册成功后可以再查看一下个人信息pod trunk me

image

2. 代码托管到平台上

将代码托管到在github或者coding,SVN,公司私有服务器等,这里采用github

项目目录:image

创建远程仓库,将代码托管到github上
(创建远程仓库时可勾选 Choose a license
选择 MIT License,不勾选后面添加也可以)

本地文件初始化仓库

进入源代码根目录:

$cd /Users/zhaopeng/Desktop/JAwork/Swift/DPPhotoBrowser 

git初始化仓库:

$git init

创建Podspec文件

pod spec create DPPhotoBrowser

image

此时目录下多了DPPhotoBrowser.podspec 文件

编辑DPPhotoBrowser.podspec文件:

Pod::Spec.new do |spec|

    spec.name         = "DPPhotoBrowser"
    spec.version      = "0.0.1"
    spec.summary      = "图片放大查看,图片保存"
    spec.homepage     = "https://github.com/developeng/DPPhotoBrowser"
    spec.license      = "MIT"
    spec.author             = { "developeng" => "developeng@163.com" }
    spec.swift_version  = "5.0"
    spec.platform     = :ios, "10.0"
    spec.source       = { :git => "https://github.com/developeng/DPPhotoBrowser.git", :tag => spec.version }
    spec.source_files  = "DPPhotoBrowser/DPPhotoBrowser/*.swift"
    spec.frameworks = "UIKit", "Foundation"
    spec.requires_arc = true
    spec.dependency 'Kingfisher', '~> 6.1.0'

end

各个参数含义

==spec.name==: –名称,pod search 搜索的关键词,注意这里一定要和.podspec的名称一致。

==spec.version==: – 版本号

==spec.summary==: – 库的作用简介

==spec.homepage==:– 项目主页地址

==spec.license==: – 许可证

==spec.author==:–作者

==spec.swift_version==:–swift版本

==spec.platform==:–库运行的平台和系统的最低版本

==spec.source==:–项目的地址

==spec.source_files==:–需要包含的源文件

==spec.frameworks==:–声明了库所依赖的系统核心库

==spec.requires_arc==:–是否支持ARC

==spec.dependency==:–我们开发的库中也可能还依赖第三方库

常见的写法:

1.dependency:写法

spec.dependency = 'AFNetworking' , 'SDWebImage'

2.source_files: 写法

'DPPhotoBrowser/*'
'DPPhotoBrowser/DPPhotoBrowser/*.{h,m,swift}'
'DPPhotoBrowser/**/*.h'

'*'表示匹配所有文件

'*.{h,m,swift}' 表示匹配所有以.h,.m,.swift结尾的文件

'**' 表示匹配所有子目录

如果前面没有选择创建这个LICENSE文件, 创建LICENSE(许可证/授权)文件,此文件必须要有
创建一个文件名字命名为LICENSE,内容为:只需要把前面的版权改一下就行了,后面的都一样

MIT License

Copyright (c) 2021 developeng

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

如果修正后,仍然报和之前相同的错误,可尝试:

$pod cache list //查看缓存
$pod cache clean --all //清除缓存
$pod cache clean 'DPPhotoBrowser' --all //将删除所有已安装的“DPPhotoBrowser”的pods

上传到Git
将包含配置好的 .podspec, LICENSE 的项目提交 Git

$cd /Users/zhaopeng/Desktop/JAwork/Swift/DPPhotoBrowser 
$git add .
$git commit -m "提交项目"
$git push origin main

打 tag版本

//本地打tag版本,(此处验证加v会报错)
$git tag "0.0.1"

//将tag推送到远程仓库
$git push --tags

//如果tag打错了,需要删除如何操作:
//查看tags
$git tag

//删除本地tags(例如:git tag -d 0.0.1)
$git tag -d + 分支名称就会删除本地的分支

//删除远程分支(例如:git push origin :refs/tags/0.0.1)
$git push origin :refs/tags/分支名称

验证.podspec文件

$pod spec lint DPPhotoBrowser.podspec

//--verbose 如果验证失败会报错误信息
$pod spec lint DPPhotoBrowser.podspec --verbose

//项目可能同时依赖了本地的framework与.a这个时候要在校验spec文件的时候加参数  --allow-warnings
$pod lib lint --allow-warnings

image
通过验证

发布podspec

$pod trunk push DPPhotoBrowser.podspec

出现这种情况就说明你发布成功了,等待审核

image

验证仓库

1.执行pod search xxx

$pod search DPPhotoBrowser

image

审核通过,如果报错未发现可能还处于审核中,需等待,可以通过其他辅助手段去验证;

1、执行 pod trunk me 命令,看看有没有你的库

$pod trunk me

image

创建私有库(私有库不需要注册Trunk)

1.创建一个私有的项目(可以是公司自己的git管理工具、也可以是码云上的)

2.创建.podspec(同上)

3.编辑.podspec文件(同上)

4.上传到Git

5.打tag

6.验证.podspec文件

7.添加一个私有库并和项目地址做绑定

1.新建一个我们保存podspec文件的远端仓库(可以命名为MyRepo),用来存储、管理和维护specs文件
https://xxx/MyRepo.git

2.绑定
//MyRepo: MyRepo用来存放所有私有库各个版本的描述文件
//https://github.com/developeng/DPPhotoBrowser.git --自己的项目地址(第一步创建的)

$pod repo add MyRepo https://github.com/developeng/DPPhotoBrowser.git

//查看在 Finder 目录cd  ~/.cocoapods/repos, 可以发现增加了一个 MyRepo 的储存库
或者 pod repo list

8.向私有的库里添加podspec文件(将我们的代码仓库的描述信息,push 到我们的版本仓库中)

  先更新下我们的版本库 pod repo update MyRepo (要不然会报错)

$pod repo update MyRepo
$pod repo push MyRepo xxxx.podspec
或者
$pod repo push MyRepo ~/Desktop/xxx/xxx.podspec --allow-warnings
//~/Desktop/xxx/xxx.podspec 为xxx.podspec文件路径
//作用:1.在本地repo/MyRepo仓库添加我们的podspec文件  2.在我们的远端存放podspec仓库里push最新的podspec文件

9.新建项目进行验证

xcode新建项目 在podfile中添加

source 'https://xxx/MyRepo.git' //**注意**此链接是版本库的地址,而不是代码库的地址(一定要写),
source 'https://github.com/CocoaPods/Specs.git'//若有还使用了公有的pod库,需要把公有库地址也带上

platform :ios, '9.0'

target 'MyPodTest' do
use_frameworks!

pod 'DPPodTestDemo', '~> 0.0.1'  #私有库
pod 'AFNetWorking'#开源库
end

执行 pod install 命令时:

1.会拉取远程 Podflie 中source标记的版本库 到本地的repos 文件夹中
2.在 版本库 中搜索我们pod ‘DPPodTestDemo’ 的 DPPodTestDemo.podspec 文件。
3.根据 DPPodTestDemo.podspec 文件中描述的源码地址下载并整合到项目中

也可以直接指定私有库地址

pod 'DPPodTestDemo', :git => 'https://xxx/DPPodTestDemo.git' #指定私有库远程仓库地址,还可以指定tag,committed等

更新维护

1.对源码打tag,然后push到远端仓库

$git tag "0.0.2"
$git push --tags

2.修改podspec文件,根据你代码改动修改,tag和目录结构等,保证准确度
image

3.验证podspec有效性,跟上面一致。进行本地验证,不通过继续修改直至通过,推送到远端私有库(验证之前需要将tag和podspec推送到远端,否则会找不到报错)

$pod spec lint DPPhotoBrowser.podspec --allow-warnings

4.再次向repo提交podspec文件

//私有库提交
$pod repo push MyRepo xxxx.podspec
或者
$pod repo push MyRepo ~/Desktop/xxx.podspec --allow-warnings

//公开库提交
$pod trunk push DPPhotoBrowser.podspec

注意:我公开库提交的时候报错:

[!] Unable to accept duplicate entry for: XXXXX (0.0.1)

image

是因为podspec 修改后没有保存,导致没有提交到远端,保存一下,然后提交到远端,再次提交push即可

5.查看

//查看在 Finder 目录cd  ~/.cocoapods/repos, 可以发现增加了一个 MyRepo 的储存库
或者 pod repo list