CocoaPods创建自己的公开库和私有库

时间:2024-03-23 20:15:51

相信大家对cocoaPods都很了解,大家也经常使用cocoaPods,那么我们经常使用的AFN、SDwebImage 等等,他们是怎么公开出来的呢?这样做有什么好处呢?我们可不可以自己公开一个库呢?下面就说一下我们建立自己的公开和私有库。

为什么要使用Cocoapods来管理第三方库呢?

  • 传统使用第三方库的劣势

    1、使用一个第三方SDK,需要在工程里面添加一堆配置,少添加一步配置就会报一大堆错误。这个时候为了排查少了哪一个步骤,只能从头开始重做一遍,太浪费时间和精力。有些配置还不好配置,就更使人烦躁郁闷了。

    2、如果使用的第三方SDK有比较重要的更新,想使用最新的SDK只能到官方下载最新的SDK,重新导入到自己的项目工程中。

    3、如果公司有多个项目,每一个工程都这样配置一遍,这是多么痛苦的领悟呀。

  • 使用Cocoapods管理第三方库的优势

    1、我们可以避免上诉的问题,使用方便。

    2、方便我们自己管理,只需要更新版本就行了,以前的库还可以保留让他人使用。、

一.创建自己的公有库

创建公有库比较简单,大家一般公开的公有库是放在github上,不过也可以放在码云上(不过一定要设置为公有)

1.公有库的spec都是放在github上的,地址:https://github.com/CocoaPods/Specs.git。大家用pod setup或者pod update的时候都是从这个地址把spec索引更新到本地电脑上的。大家想要公开的公有库描述文件**.podspec文件都是先通过trunk服务器同步到github服务上的,也就是说github上的这个spec永远是最新的。接下来我们一步一步创建自己的公开库

首先要注册trunk。

trunk需要CocoaPods 0.33版本以上,用pod --version,相信大家的pod版本都是很新的版本,比这高,现在最新的版本已经是1.6.1啦。

如果版本低的话,需要升级,升级命令为:

sudo gen install cocoapods

pod setup

查看自己是否注册过Trunk,命令为:

pod trunk me

CocoaPods创建自己的公开库和私有库

如上图显示,如果注册过是这样显示,如果没注册过则用以下命令注册:

// 加上--verbose可以输出详细debug信息,方便出错时查看。

pod trunk register [email protected]163.com "zhangyqyx" --verbose

 

"zhangyqyx" 里面代表你的用户名,最好起一个好的名字

[email protected]163.com 代表你的邮箱

注册完成之后会给你的邮箱发个邮件,进入邮箱邮件里面有个链接,需要点击确认一下,或者复制链接地址到浏览器打开。

验证完以后用pod trunk me命令校验以下。

2.创建一个项目,网上的教程最终有两种方案,大家看的多了,有点眼花,头晕,最后一头雾水,其实两种方案都可以,第一种先在github或者码云上创建项目,然后git clone 到本地。第二种就是本地创建工程,git init ,但是也需要提前在github或者码云上建一个项目,把项目地址与本地的项目管理起来。这样修改完工程就可以提交的github或者码云上了。相关命令如下:

在github或者码云上创建公开的项目。license 的时候选择“MIT”

3.将项目clone到本地,并增加想要公开的的库文件。

4.cd到你的项目目录下,创建podspec文件,命令如下:

pod spec create Publib

5.编辑.podspec文件

Pod::Spec.new do |s|

  s.name         = "Publib"

  s.version      = "0.0.1"

  s.ios.deployment_target = '8.0'

  s.summary      = "简介"

  s.homepage     = "https://github.com/zhangyqyx/ZYRunTimeCoT"

  s.social_media_url = 'https://www.baidu.com'

  s.license      = "MIT"

  # s.license    = { :type => "MIT", :file => "FILE_LICENSE" }

  s.author       = { "zyq" => "[email protected]" }

  s.source       = { :git => 'https://github.com/zhangyqyx/ZYRunTimeCoT.git', :tag => s.version}

  s.requires_arc = true

  s.source_files = 'runtime/*'

  #s.public_header_files = 'runtime/TFRuntimeManager.h'

 

end

接下来讲解一下每行代码的含义

s.name:名称,pod search 搜索的关键词,注意这里一定要和.podspec的名称一样,否则报错

s.version:版本号

s.ios.deployment_target:支持的pod最低版本

s.summary: 简介

s.homepage:项目主页地址

s.social_media_url:社交网址,这里我写的微博默认是百度,如果你写的是你自己的博客的话,你的podspec发布成功后会@你

s.license:许可证

s.author:作者

s.source:项目的地址

s.requires_arc: 是否支持ARC

s.source_files:需要包含的源文件

s.public_header_files:公开的头文件

//其他

s.resources: 资源文件

s.dependency:依赖库,不能依赖未发布的库,可以写多个依赖库

常见的写法:

1、dependency:写法

1

s.dependency = 'AFNetworking' 'SDWebImage'

2、source_files: 写法

1

2

3

'runtime/*'

'runtime/runtime/*.{h,m}'

'runtime/**/*.h'

  • '*'表示匹配所有文件

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

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

3、source: 常见写法

1

2

3

s.source = { :git => "https://github.com/zhangyqyx/ZYRunTimeCoT.git", :commit => "68defea" }

s.source = { :git => "https://github.com/zhangyqyx/ZYRunTimeCoT.git", :commit => "68defea", :tag => 1.0.0 }

s.source = { :git => "https://github.com/zhangyqyx/ZYRunTimeCoT.git", :tag => s.version }

  • commit => "68defea" 表示将这个Pod版本与Git仓库中某个commit绑定

  • tag => 1.0.0 表示将这个Pod版本与Git仓库中某个版本的comit绑定

  • tag => s.version 表示将这个Pod版本与Git仓库中相同版本的comit绑定

6.

如果前面没有选择创建这个LICENSE文件, 创建LICENSE(许可证/授权)文件,此文件必须要有

创建一个文件名字命名为LICENSE,内容为:只需要把前面的版权改一下就行了,后面的都一样

Copyright (c) 2013-2015 ZYRunTimeCoT (https://github.com/zhangyqyx/ZYRunTimeCoT)

 

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.

7.将所有代码以及配置好的podspec文件提交到git仓库。

8.git tag,给仓库代码打tag,命令如下:

git tag "0.0.1"

推送tag到远程仓库

git push --tags

9.验证.podspec文件,验证分两种,一种是本地验证,另一种是远程验证。

本地验证命令:pod lib lint ***.podspec  --allow-warnings

远程验证命令:pod spec lint ***.podspec  --allow-warnings

10,通过trunk发布podspec文件,这个文件先上传到trunk服务器,然后同步到github服务器的spec仓库里。

命令如下:

pod trunk push ****.podspec

可以增加参数:// --use-libraries --allow-warnings,有静态库的时候加--use-libraries

11.验证仓库,命令如下:

pod search 公有库名称。如:pod search AFNetworking(自己发布的公开库,会有延时。)

你可能会出现这种情况:

CocoaPods创建自己的公开库和私有库

解决 ,删除文件路径,重新生成

1

2

rm ~/Library/Caches/CocoaPods/search_index.json

pod setup

如果还是不行,估计是在你的项目还在审核中,你可以通过其他辅助手段去验证;

也可以通过git trunk me 验证是否审核通过。

公有库的的创建在这里就结束了

二.创建私有库。

一般在公司或者自己封装的库不想公开,让其他人知道的话,那就创建私有库,由于github上创建私有库是收费的,所以我们可以在码云或者自己公司的git服务器上创建。

1.创建私有的项目在码云或公司git服务器上。创建方法跟创建公有库一样,唯一属性设为私有。

2.git clone  私有项目到本地,方法跟公有库的git clone 一样。

3.在本地私有库项目根目录下创建.podspec文件,方法跟公有库的一样。

4.编辑.podspec文件,方法同公有库一样。

5.修改完将代码以及podspec文件上传到git服务器。

6.仓库打tag,方法同公有库。

7.验证.podspec文件,方法同公有库一样

8.在本地pod repo仓库增加一个自己的私有库,这一步很重要

pod repo add 私有spec名称 https://github.com/zhangyqyx/私有spec名称.git

9.向私有的库里添加podspec文件

pod repo push 私有spec库 私有库名称.podspec

10.新建一个项目进行验证。

xcode新建项目 在podfile中添加

pod '私有库名称', '~> 0.0.1'

如果提示 'unable to find a specification for'

需要在podfile文件中添加源地址

source 'https://github.com/zhangyqyx/私有库spec名称.git'