iOS 建立自己本地cocoapod库

目录

<h2 id=1>创建与维护</h2>

下面详细分为7个步骤来学习和掌握这项技能

<h3 id="1.1">创建并设置一个私有的Spec Repo</h3>

  1. 首先我们在github上建立一个自己的仓库 LocalPod(仓库名字任意)

  2. 在本地创建Spec Repo

     # pod repo add [Private Repo Name] [对应的.git url]
     $ pod repo add LocalPod https://github.com/Maoyis/LocalPod.git
    

进入 ~/.cocoapods/repos 目录此时就能看到我们自己的pod仓库了

MyPodFolder.png

PS: 如果有其他合作人员共同使用这个私有Spec Repo的话在他有对应Git仓库的权限的前提下执行相同的命令添加这个Spec Repo即可。

<h3 id="1.2">创建PodLib(针对从零创建lib)</h3>

建好本地仓库后我们来建一个自己的库(lib), 如果已经有一个lib只需要添加并配置相应的podspec文件就行可忽略此步直接到下一阶段。不过看看总不会有坏处的(๑•ᴗ•๑)

  1. 创建一个lib(库),详见pod lib创建自己的lib。开始前首先得给我们的lib建一个版本库(git,svn都行)创建一个

  2. 跳转到一个用来保存自己库的文件夹下来创建一个lib(推荐单独创建一个专门用来保存自己的库),并在该目录执行

     #pod lib create [libName]
     $ pod lib create QXFullGestureView
    

执行后正常情况下会有一个交互:
lib使用的语言swif/ObjeC

是否创建一个demo

选择什么测试框架 [ Specta / Kiwi / None ]

是否进行UI测试

类的前缀

然后就会在该目录创建一个lib

libFolder.png
  1. 添加相关要生成lib的文件到Pod文件夹:(libName)/(libName)/Classes, 当然还要删除ReplaceMe.m文件(只要在提交前删除掉就好)
addFile.png
  1. 该步骤非必要,主要正对pod lib creat时创建过demo时观察变化

     $cd Example
     $pod update
    

此时再展开工程会发现文件已经添加到了项目中,但却在开发模式pod文件加下(Development Pods)。

developPod.png

<h3 id="1.3">创建lib所对应的podspec文件-(针对已存在的lib)</h3>

官方教程

  1. 在lib文件夹下执行
    pod spec create QXFullGestureView https://github.com/Maoyis/MyLibrary.git

<h3 id="1.4">配置podspec与验证</h3>

  1. 配置MyLibrary.podspec(ruby文件)详情

     s.name             = 'QXFullGestureView ' ##名字必须与libname相同
     s.version          = '0.1.0'     #版本必须为0.0.0格式
     s.summary          = 'all gesture view' #关于库的一个简短描述
     s.description      = <<-DESC
     TODO: 备注文字(较长描述)
                                 DESC
     #是否支持arc
     s.requires_arc = true
     #文件主页
     s.homepage         = 'https://github.com/Maoyis/QXFullGestureView '
     #开源协议
     s.license          = { :type => 'MIT', :file => 'LICENSE' }
     #作者信息
     s.author           = { 'Maoyis' => 'xxxxxx@qq.com' }
     #源文件所在网络路径
     s.source           = { :git => 'https://github.com/Maoyis/QXFullGestureView .git', :tag => s.version.to_s }
     #支持版本
     s.ios.deployment_target = '7.0'
     #公开头文件名
     s.public_header_files = 'Pod/Classes/**/*.h'
     #依赖的框架
     s.frameworks = 'UIKit', 'MapKit'
     #依赖库
     s.dependency 'AFNetworking', '~> 2.3'
    
  2. 完成上面主要配置(并非所有配置)后,验证一下这个文件是否可用。执行:

     #测试podspec检查是否存在问题
     $ pod lib lint 
     //通过结果
      -> QXFullGestureView (0.1.0)
    
     QXFullGestureView passed validation.
     
     
     # 如果失败也可以试试, 针对无法正确找到lib.podspec
     $ pod lib lint --source https://github.com/Maoyis/QXFullGestureView .git
           
     #如果有警告可以忽略
      $ pod lib lint --allow-warnings 
    

<h3 id="1.5">本地测试与提交</h3>

  1. 准备:创建一个项目(如果没pod lib创建或没创建demo 否则跳过步骤1)配置Podfile

platform :ios, '7.0'

pod 'MyLibrary', :path => '……/podTest/QXFullGestureView ' #指定路径

pod 'MyLibrary', :podspec => '……/QXFullGestureView .podspec' #指定podspec文件


pod install
  1. 编写代码,导入lib验证是否可以正常使用

     pod lib lint
    

由于人处于开发阶段,此时再展开工程会发现文件已经添加到了项目中,但却在开发模式Development Pods文件夹下(Development Pods)。

  1. 将lib提交到远端仓库

     #跳转到lib目录下
     $cd [libFolder] 
     
     #由于lib已经在git版本控制下就不需要初始化,直接添加文件提交
     $ git add .
     $ git commit -s -m "Initial Commit of Library"
     
     #添加远端仓库(这里要用到第二个空仓库存储lib区别第一个用来存储本地Spec Repo)
     $ git remote add origin https://github.com/Maoyis/QXFullGestureView .git           
     
     #提交到远端仓库
     $ git push origin master  
    
  2. 由于podspec文件中获取Git版本控制的项目还需要tag号,所以我们要打上一个tag,

     $ git tag -m "release 0.1.0" "0.1.0"
     $ git push --tags     #推送tag到远端仓库   
    

接下来我们就要发布测试版为正式版了(提交自己的podspec到私有或公有Spec Repo)

<h3 id="1.6">向私有的Spec Repo中提交自己的podspec</h3>

  1. 提交podspec到自己的Spec Repo

     #pod repo [第一步建立的本地仓库] [要上传的podspec]
     $ pod repo push LocalPod QXFullGestureView.podspec
    

执行完毕后本地查看本地仓库就可以看到对应的 文件夹/版本文件夹/上传的podspec

屏幕快照 2017-05-18 下午11.33.12.png

并且你会看到

    Pushing the `QXSpecRepo' repo
    To https://github.com/Maoyis/LocalPod.git

对,他还会自动推送最新的Space Repo 到绑定的版本控制中心

屏幕快照 2017-05-18 下午11.47.06.png
  1. 搜索自己的lib

     pod searchQXFullGestureView
    

到这里一个属于自己的pod库就大功告成了

<h3 id="1.7">在自己项目中使用</h3>

这里既不赘述了,唯一需要注意的是pod install、Updat默认不会去本地Pod文件夹查找lib,只会默认在master文件夹中寻找
所以我们必须在Podfile文件中加入查找源

    #我们自己的私有spec仓库的地址
source 'https://github.com/Maoyis/LocalPod.git'  
#官方仓库的地址
source 'https://github.com/CocoaPods/Specs.git' 
屏幕快照 2017-05-18 下午8.49.21.png

<h3 id="1.8">更新维护podspec</h3>

  1. 添加新文件到Classes, 修改对应的podspec配置

  2. 验证配置无误

     $pod lib lint
    
  3. 更新demo调用(非必要影响步骤)
    pod update

  4. 提交到远端代码托管服务器

     $ git add .
     $ git commit -m"new version"
     $ git push origin master
     # 打上新tag
     $ git tag -m"version 1.0.1" "1.0.1"
     $ git push --tags
    
  5. 提交本地pod仓库

     $ pod repo push QXSpecRepo MyLibrary.podspec
    

<h2 id="2"> 移除本地仓库</h2>

    # pod repo remove [Private Repo Name]
    $ pod repo remove QXSpecRepo

删除前:

remove_before.png

删除后:

MyPodFolder.png

<h2 id="3">移除本地仓库中的lib.podspec</h2>

前往~/.cocoapods/repos 将其对应文件夹文件夹删除,更新本地仓库

 $ git add --all .
 $ git commit -m "remove unuseful pods"
 $ git push origin master

<h2 id="4">Trunk发布自己的Pods</h2>

  1. 注册Trunk获取推送资格

     #通过邮箱和用户名注册
     #pod trunk register [your mailbox] [your Name] --description='mybook'
     $ pod trunk register youaolanyi@foxmail.com Maoyis --description='mybook'
    
  2. 等到到一份邮件,点击邮件中的链接后验证是否可以查到自己信息:

     pod trunk me
    
  3. 完成准备工作后就可以push spec到cocoapod了

     #在工程根目录(包含有.podspec)    
     pod trunk push *.podspec
    

pod trunk push 命令会首先验证你本地的podspec文件(是否有错误),之后会上传spec文件到trunk,最后会将你上传的podspec文件转换为需要的json文件。


上传结果
  1. 更新本地repo

     #更新方式有多种,个人觉得这个比较保险
     pod setup
    
  2. 查看本地文件夹(~/.cocoapods/repos/master/Specs)中repo master是否同步了自己的库

<h2 id="5">参考申明</h2>

  1. 《使用Cocoapods创建私有podspec》
  2. 官方文档
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容