62

iOS 开发创建CocoaPods公有库以及subspec分支功能

 5 years ago
source link: http://www.cocoachina.com/ios/20181112/25433.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、主要内容

  • 1.1、阐述用CocoaPods使用框架的过程图

  • 1.2、开发框架项目的创建

  • 1.3、创建框架描述 spec

  • 1.4、上传 spec 到gitHub的远程索引库

  • 1.5、查看自己在CocoaPods的注册信息

  • 1.7、使用自己的框架

二、阐述用CocoaPods使用框架的过程图

3ueymiZ.png!web

阐述用CocoaPods使用框架的过程图

三、开发框架项目的创建

3.1、在gitHub创建一个仓库,名字自己起,我在这里取名为 JKGCDTimer,并生成其 https链接: https://github.com/JoanKing/JKGCDTimer.git

NB7B7bu.png!web

新建仓库入口

Yz67rmz.png!web

框架信息填写

nMNBZ3M.png!web

创建成功

  • 3.2、cd 进入桌面 ,在终端 clone 项目

git clone https://github.com/JoanKing/JKGCDTimer.git
  • 3.3、在你clone生成的JKGCDTimer文件夹里面创建项目 JKGCDTimer

提示: clone生成的文件夹名字必须和项目的名字一致

byM3EfB.png!web

在你clone生成的JKGCDTimer里面创建项目 JKGCDTimer

  • 3.4、在JKGCDTimer项目里面创建一个文件夹 JKGCDTimer

AJzQJbu.png!web

  • 3.5、上传JKGCDTimer本地的文件 到本地仓库

// 进入本地文件夹
cd 文件夹路径  // 我这里是 cd 上图画红线的JKGCDTimer
// 把文件添加到 暂缓区
git add .
// 把代码提交到本地仓库 // 如果没建立本地 git ,那么久 `git init`建立本地的git仓库
git commit -m '提交内容说明'
  • 3.6、把本地的代码提交到github仓库

// 查看仓库名字
git remote 
// 添加关联仓库
git remote add origin https://github.com/JoanKing/JKRichText.git
//推送到github仓库 
git push origin master
  • 3.7、提示:如果在 2.5中的git remote add origin ---- 报错:fatal: remote origin already exists,处理办法如下

  • 1、先输入$ git remote rm origin

  • 2、再输入$ git remote add origin https://github.com/JoanKing/JKRichText.git 就不会报错了!

  • 3、如果输入$ git remote rm origin 还是报错的话,error: Could not remove config section ‘remote.origin’. 我们需要修改gitconfig文件的内容

  • 4、找到你的github的安装路径,找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那一行删掉就好了!

  • 3.8、3.5与3.6可以使用Xcode提交

fueYBbB.png!web

3.5 与 3.6 可以使用Xcode提交

提示:第一次提交会 弹出框 让你输入你的 gitHub名字与密码

四、创建框架描述 spec 文件

  • 4.1、有关 spce 文件里面的内容不懂的可以查看CocoaPods Guides

a2EvquR.png!web

CocoaPods Guides

  • 4.2、创建spec 文件(create后面的名字一般是你仓库的名字)

cd 进入桌面JKRichText文件夹
// 创建 spec 文件
pod spec create JKRichText

bAVzYbu.png!web

创建spec 文件

  • 4.3、修改刚刚创建的 spec 文件,我创建的是 JKGCDTimer.podspec

YRbQNf3.png!web

修改刚刚创建的 `spec` 文件

  • 4.4、spec里面的具体内容,也可以到 guides.cocoapods 的 podspec查看

iAzmIf6.png!web

spec里面的具体内容

Pod::Spec.new do |spec|
   spec.name         = 'Reachability'
   spec.version      = '3.1.0'
   spec.license      = { :type => 'BSD' }
   spec.homepage     = 'https://github.com/tonymillion/Reachability'
   spec.authors      = { 'Tony Million' => '[email protected]'}
   spec.summary      = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
   spec.source       = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
   spec.source_files = 'Reachability.{h,m}'
   spec.framework    = 'SystemConfiguration'
   s.ios.deployment_target = "8.0"
end
  • self.name  名字 = 'JKGCDTimer'

  • self.version  版本 = '0.0.1' (这个在后面会阐述)

  • self.summary 简介 = "JKGCDTimer."

  • s.description(详细的描述) = "JKGCDTimer,这个是详细的描述,内容一定要比 summary 长,不然会报错"

  • s.homepage(框架的首页地址) = "https://github.com/JoanKing/JKGCDTimer"

umqEfeF.png!web

框架的首页地址

  • s.license(协议) = "MIT"

  • s.author(作者) = { "JoanKingWC" => "[email protected]" },前面写名字,后面写邮箱地址

  • s.ios.deployment_target = "8.0"

  • s.source(代码真正存放的地址) = { :git => "代码仓库的地址", :tag => "#{s.version}" },前面写代码仓库的地址:https://github.com/JoanKing/JKGCDTimer,后面写 版本号的tag,tag是放到 releases 里面的,一定要有

67fUJbm.png!web

release存放的tag

  • s.source_files(指定在pod install下载的内容) = "JKGCDTimer", "JKGCDTimer/**/*.{h,m}" ,JKGCDTimer是下载的文件夹,**匹配的是目录,*.{h,m}是匹配的所有文件,* 是通配符,重要提醒:"JKGCDTimer/*/.{h,m}" 中的JKGCDTimer要与spec在一个目录下,我这里写的是如下:

s.source_files  = "JKGCDTimer", "JKGCDTimer/JKGCDTimer/JKGCDTimer/**/*.{h,m}"

Ub2yiae.png!web

s.source_files的解释

说明: 在pod install 导入项目的框架 仅仅是导入的 上图 3 文件夹 ,由此可知 s.source_files配置很重要

  • 4.5、提示:上面的内容咱们都写完了,还差最重要的 一 步,项目github仓库release里面还没有tag(tag就是对版本的别称),打tag如下:

// cd 进入 = JKGCDTimer 文件夹
cd JKGCDTimer
// 查看本地仓库有没有 tag
git tag
// 没有的话 设置tag,如果有的话就为当前master的打tag
git tag '0.0.1'
//  删除之前的 origin 项目关联
git remote rm origin
git remote add origin https://github.com/JoanKing/JKGCDTimer.git
// 提交指定 tag
git push origin 0.0.1   //  提交所有的标签 git push --tags

6RNrYzY.png!web

设置tag,并提交tag

ymINv2u.png!web

gitHub中JKRichText仓库releases里面就会多一个0.0.1的tag

提示:在pod install 的时候导入的是 release 对应 tag里面的 JKGCDTimer 文件夹

五、上传 spec 到gitHub的远程索引库

  • 5.1、在 guides.cocoapods里面有一个 Getting setup with Trunk,注册 trunk,它的作用是能够让我们把本地的 spec 文件上传到 gitHub的远程索引库

qQ3imyN.png!web

Getting setup with Trunk

// pod trunk register [email protected] 'Orta Therox' --description='macbook air'
// [email protected]: 写邮箱  ,下面是我写的
pod trunk register [email protected] 'IronMan' --description='咨询'

nI7RR36.png!web

注册trunk

  • 5.2、做完上面的,你的邮箱会收到一封邮件!,打开邮件上的链接

22QZnir.png!web

打开邮件上的链接

IFfequj.png!web

在终端执行你的库名的:spec 文件名

在终端执行你的库名的:spec 文件名

我要执行的是:pod trunk push JKGCDTimer.podspec

  • 5.3、在 二 中的 spec 内容要填好。可以执行下面的命令来检查是否符合要求 ,不能有任何警告或错误,出现的常见错误

pod spec lint JKRichText.podspec

5.3.1、spec 验证通过

iYrIf2Q.png!web

spec验证通过

  • 5.3.2、如果你出现了error,那就逐个处理,下面仅仅展示一个错误的处理

eQBvM32.png!web

错误

解决方案就是去xcode设置里面,将Command line Tools设置一下,在Xcode>preferences>Locations里面,设置之后再运行终端即可

mEvyMb6.png!web

解决方案g

  • 5.4、若发布成功,会更新 master repo,会出现有类似如下信息:

B367fqU.png!web

发布成功提示

5.5、验证在CocoaPods上是否发布成功(也就是能够搜到),如果出现红色报错

7RBrMbU.png!web

搜不到的情况

  • 解决办法:重新 创建本地cocoapods搜索库 来解决:,先删除本地Cocoapods里面的search_index.json文件

control + shift + G  输入 ~/Library/Caches/CocoaPods/search_index.json

UfiyMr7.png!web

删除本地Cocoapods里面的`search_index.json`文件

  • 再次搜索时,会自动重新创建本地的索引库,也就是刚才删除的search_index.json 。时间会很慢,下载需要时间的,如果在搜一个框架找不到的时候,更新pod库:pod setup

  • 再次搜索 pod search 框架名,若能查找到,表示发布成功

MVbaI3a.png!web

发布成功

  • 5.6、如果你想在别人的电脑上也能search到你的项目,让别人电脑上更新 master repos,强制更新。

pod setup

提示:如果别人的cocoapods是最新的,你可以copy他的 master,control+shift + G 输入~/.cocoapods/repos/master,拷贝 master就好了

  • 5.7、也可以在Cocoapods官网查看你的框架的状态,输入框架的名字即可,一般官网存在延迟,发布后不能立即搜出来,可能要等到第二天。

eIbIJrn.png!web

在Cocoapods官网查看你的框架的状态

六、查看自己在CocoaPods的注册信息

pod trunk me

riIzeaJ.png!web

查看自己在CocoaPods的注册信息

七、使用自己的框架(cocoapods),下面我们新建一个项目(JKTest),来使用

7.1、创建项目 JKTest

7rErEzU.png!web

创建项目 JKTest

7.2、创建 Podfile 文件

cd  进入 JKTest
# 创建 Podfile 文件
pod init
# 在Podfile文件里面输入要导入的框架
pod 'JKGCDTimer', '~> 0.0.1'

Z7biamJ.png!web

Podfile的创建于导入框架

# 导入框架
pod install

AFfyAzj.png!web

成功导入 JKGCDTimer

八、补充:subspec分支功能

8.1、先看我后面又创建的一个框架 JKOCProjectTool ,我们的目的就是要在 JKOCProjectTool 框架里面创建一个文件夹 JKUiviewExtension

zM3Yf2Y.png!web

subspec分支功能效果

8.2、下面是我框架的结构

ZFraIfj.png!web

我框架的结构

8.3、下面是 spec 文件信息的内容

Pod::Spec.new do |s|
    s.name         = "JKOCProjectTool"
    s.version      = "0.0.7"
    s.summary      = "OCTool."
    s.description  = "这是一个很好用的OC的工具类,我会不断的更新的"
    s.homepage     = "https://github.com/JoanKing/JKOCProjectTool"
    s.license      = "Apache License 2.0"
    s.author             = { "JoanKingWC" => "[email protected]" }
    s.ios.deployment_target = "8.0"
    s.source       = { :git => "https://github.com/JoanKing/JKOCProjectTool.git", :tag => "#{s.version}" }
    # s.public_header_files = 'JKOCProjectTool/JKOCProjectTool.h'
    s.source_files = 'JKOCProjectTool/JKOCProjectTool.h'
    s.subspec 'JKUiviewExtension' do |ss|
         ss.source_files = 'JKOCProjectTool/JKUiviewExtension/**/*'
         # ss.public_header_files = 'JKOCProjectTool/JKUiviewExtension/UIView+JKUiviewExtension.h'
    end
end

BN3eMjM.png!web

spec内容的配置

提示:s.source_files 路径的寻找是以 JKOCProjectTool.podspec 为基准的,如果框架与JKOCProjectTool.podspec同目录的话直接写框架的文件夹名字,如若你有疑惑可以,CocoaPods搜JKOCProjectTool 看我的写法。

作者:IIronMan

链接:https://www.jianshu.com/p/b5a037a8e7c0


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK