发布私有CocoaPod Spec

作者: 02ec002ab1b2 | 来源:发表于2015-12-01 11:26 被阅读1206次
    • 准备工作
    • 添加远程
    • 创建Pod项目工程文件
    • 向Pod文件夹中添加库文件和资源,并配置podspec文件
    • 提交podspec

    标签(空格分隔): 教程 PodSpec CocoaPods


    安装CocoaPods

    创建私有Spec Repo

    先来说第一步,什么是Spec Repo?它是所有的Pods的一个索引,
    就是一个容器,所有公开的Pods都在这个里面,它实际是一个Git仓库remote端在GitHub上,但是当你使用了Cocoapods后它会被clone到本地的~/.cocoapods/repos目录下,可以进入到这个目录看到master文件夹就是这个官方的Spec Repo了。这个master目录的结构是这个样子的

    ├── Specs
    └── [SPEC_NAME]
    └── [VERSION]
    └── [SPEC_NAME].podspec
    因此我们需要创建一个类似于master的私有Spec Repo。首先创建一个 Git仓库,这个仓库你可以创建私有的也可以创建公开的,需要注意的就是如果项目中有其他同事共同开发的话,你还要给他这个Git仓库的权限。这里我们使用阿里git:

    http://gitlab.alibaba-inc.com

    创建完成之后在Terminal中执行如下命令

    #pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
    $ pod repo add gd_repos http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/spec.git

    此时如果成功的话进入到~/.cocoapods/repos目录下就可以看到gr_repos这个目录了。至此第一步创建私有Spec Repo完成。

    创建Pod项目工程文件

    如果是有现有的组件项目,并且在Git的版本管理下,那么这一步就算完成了,可以直接进行下一步了。

    如果你的组件还在你冗余庞大的项目中,需要拆分出来或者需要自己从零开始创建一个组件库,那么使用Cocoapods进行创建,相关的文档介绍是Using Pod Lib Create。
    就拿我创建的AMProgressView为例,具体操作如下:

    $ mkdir AMProgressView
    $ cd AMProgressView
    $ pod lib create AMProgressView
    

    之后终端会出现四个问题,
    1.是否需要一个例子工程;
    2.选择一个测试框架;
    3.是否基于View测试;
    4.类的前缀;

    4个问题的具体介绍可以去看官方文档,
    我这里选择的是
    1.yes;
    2.Specta/Expecta;
    3.yes;
    4.AM。
    选择完这4个问题,自动执行pod install命令创建项目并生成依赖。
    执行
    [tree] (http://coderlt.coding.me/2016/03/16/mac-osx-tree/) AMProgressView -L 2
    可以看到如下目录结构。
    AMProgressView

    ├── AMProgressView.podspec
    ├── Example
    │ ├── AMProgressView
    │ ├── AMProgressView.xcodeproj
    │ ├── Podfile
    │ └── Tests
    ├── LICENSE
    ├── Pod
    │ ├── Assets
    │ └── Classes
    ├── README.md
    └── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
    7 directories, 5 files

    向Pod文件夹中添加库文件和资源,并配置podspec文件,

    把模块的共有组件放入Pod/Classes中,然后进入Example文件夹执行pod update命令,再打开项目工程可以看到,刚刚添加的组件已经在Pods子工程下Development Pods/PodTestLibrary中了,然后编辑demo工程,测试组件,我并没有使用提供的测试框架进行测试,这里就先不介绍了。

    注:这里需要注意的是每当你向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新执行一遍pod update命令。

    测试无误后需要将该项目添加并推送到远端仓库,并编辑podspec文件。

    通过Cocoapods创建出来的目录本身就在本地的Git管理下,我们需要做的就是给它添加远端仓库,同样去GitHub或其他的Git服务提供商那里创建一个私有的仓库,拿到HTTP地址,然后cd到AMProgressView目录
    执行一下步骤:

    git add .
    git commit -s -m "Initial Commit of Library"
    git remote add origin http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/AMProgressView.git  #添加远端仓库
    git push origin master    #提交到远端仓库
    

    因为podspec文件中获取Git版本控制的项目还需要tag号,所以我们要打上一个tag

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

    编辑podspec文件

    podspec文件

    # Be sure to run `pod lib lint AMProgressView.podspec' to ensure this is a
                # valid spec before submitting.
                #
                # Any lines starting with a # are optional, but their use is encouraged
                # To learn more about a Podspec se
                #http://guides.cocoapods.org/syntax/podspec.html
                
                Pod::Spec.new do |s|
                  s.name             = "AMProgressView"
                  s.version          = "0.0.1"
                  s.summary          = "提供进度条功能"
                
                # This description is used to generate tags and improve search results.
                #   * Think: What does it do? Why did you write it? What is the focus?
                #   * Try to keep it short, snappy and to the point.
                #   * Write the description between the DESC delimiters below.
                #   * Finally, don't worry about the indent, CocoaPods strips it!  
                  s.description      = <<-DESC
                                       * Markdown format.
                                       * Don't worry about the indent, we strip it!
                                       DESC
                
                  s.homepage         =      "http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/AMProgressView"
                  # s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
                  s.license          = 'MIT'
                  s.author           = { "test" => "hongru.qhr@alibaba-inc.com" }
                  s.source           = { :git => "http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/AMProgressView.git", :tag => s.version.to_s }
                  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
                
                  s.platform     = :ios, '7.0'
                  s.requires_arc = true
                
                  s.source_files = 'Pod/Classes/**/*'
                  s.resource_bundles = {
                    'AMProgressView' => ['Pod/Assets/*.png']
                  }
                  
                  # s.public_header_files = 'Pod/Classes/**/*.h'
                  s.frameworks = 'UIKit'
                  # s.dependency 'AFNetworking', '~> 2.3' #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency
                end
    

    编辑完podspec文件后,需要验证一下这个文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,
    不过xcode的WARNING是可以存在的,验证需要执行一下命令:

    $ pod lib lint
    

    当你看到:

     -> AMProgressView (0.0.1)
    PodTestLibrary passed validation.
    

    向Spec Repo提交podspec

    向Spec Repo提交podspec需要完成两点一个是podspec必须通过验证无误,在一个就是删掉无用的注释(这个不是必须的,为了规范还是删掉吧)。 向我们的私有Spec Repo提交podspec只需要一个命令

    $ pod repo push gd_repo AMProgressView.podspec  #前面是本地Repo名字 后面是podspec名字
    

    完成之后可以进入到~/.cocoapods/repos/gd_reps目录下查看

    AMProgressView
    ├── AMProgressView
    │   └── 0.0.1
    ├── AMProgressView.podspec
    ├── Example
    │   ├── AMProgressView
    │   ├── AMProgressView.xcodeproj
    │   ├── AMProgressView.xcworkspace
    │   ├── Podfile
    │   ├── Podfile.lock
    │   ├── Pods
    │   └── Tests
    ├── LICENSE
    ├── Pod
    │   ├── Assets
    │   └── Classes
    ├── README.md
    └── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
    
    12 directories, 5 files
    

    再去看我们的Spec Repo远端仓库,也有了一次提交,这个podspec也已经被Push上去了。至此,我们的这个组件库就已经制作添加完成了,使用pod search命令就可以查到我们自己的库了.

    pod search AMProgressView 
    -> AMProgressView (0.0.1)
       提供进度条功能
       pod 'AMProgressView', '~> 0.0.1'
       - Homepage: http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/AMProgressView
       - Source:  
       http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/AMProgressView.git
       - Versions: 0.0.1 [AMProgressView repo]
     
    

    在完成这一系列步骤之后,我们就可以在正式项目中使用这个私有的Pod了只需要在项目的Podfile里增加以下一行代码即可

    $ pod 'AMProgressView', '~> 0.0.1'
    

    然后执行pod update,更新库依赖,然后打卡项目可以看到,我们自己的库文件已经出现在Pods子项目中的Pods子目录下了,而不再是Development Pods。

    相关文章

      网友评论

      • 5483df6bef95:写了这么多做了无用功!你创建一个workspace本地关联git直接就搞定了
        5483df6bef95:@席锋 用pod都用傻了
      • b96acac40a08:pod search一下 结果是这样的
        Unable to find a pod with name, author, summary, or descriptionmatching
        help!!!

      本文标题:发布私有CocoaPod Spec

      本文链接:https://www.haomeiwen.com/subject/xopjhttx.html