发布私有CocoaPod Spec

  • 准备工作
  • 添加远程
  • 创建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" => "[email protected]" }
              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/'
            
              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。

你可能感兴趣的:(发布私有CocoaPod Spec)