×

iOS 建立自己本地cocoapod库

96
水在玩火
2017.05.18 23:51* 字数 1988

目录

<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. 官方文档
日记本
Web note ad 1