iOS组件化 Cocoapods详解之---创建私有仓库篇

在组件化的路上实现cocopods私有仓库

1.spec repository 和 code repository

大家很容易把spec repository 和 code repository弄混,我一开始就在这里挂起了好久。

1.code repository是代码仓库,我们把包代码上传到这个仓库。

2.spec repository是配置仓库,所有的配置按照包名、版本号分门别类的存放在这个仓库。这个仓库只用来存放spec文件,不存放代码。

2.创建私有的CocoaPods仓库。

1.创建并设置一个私有的Spec Repository。

我们创建Spec Repository是基于gitlab的,当让你也可以用其他的方式例如(开源中国、CODING、Bitbucket以及CSDN Code.)。我们在github上创建一个空的仓库,命名为MySpecs,这个仓库是用来存放我们自己所有的私有库的spec文件,就如同官方的https://github.com/CocoaPods/Specs是用来存放所有官方的specs文件一样。
终端命令执行:

pod repo add MySpecs http://njGitrepo/wushuanghong/MySpecs.git

注意:上面的命令的解释如下:

pod repo add REPO_NAME SOURCE_URL

其中的 REPO_NAME 是我们要添加的私有repo的名称(这里我们待会填的是: MySpecs),后面是仓库的 gitlab 地址。这里做的其实是创建的工作,也就是在~/.cocoapods/repo目录下添加了一个以你的私有repo为名的文件夹,但是并没有添加spec文件。

然后你可以到~/.cocoapods/repo文件中去看是否有MySpecs文件。如果有那么我们已经在本地得到我们自己的私有仓库 MySpecs ,这是一个空的仓库。

3.制作 CocoaPods 依赖库

1.创建并设置一个私有的code Repository。

当然如上我们还是使用的是gitlab(可以基于公司内网,也可以是外网)。

2.clone仓库到本地

为了方便向仓库中删减内容,需要将仓库 clone 到本地,这里有多种操作方式,可以选择你喜欢的一种,但是为了方便这边选择使用命令行。首先需要切换到你想在本地存储的目录,然后再 clone ,假设你放在用户的根目录上:

cd ~
git clone http://xxxx/xxx/PGQTestPodSpec.git

完成后,我们进入到 ~/PGQTestPodSpec 目录,这时候你看到是一个空文件夹,这由于我用的是gitlab创建的,没有像github网页那样在创建code Repository的时候可以勾选创建LICENSE和README.md文件。其实也不是什么都没有,实际上是有一个隐藏的 .git 文件,后续我们的所有文件都在这个目录下进行。

注意:打开隐藏目录,可以使用命令,接着需要重启一下 Finder, 可以按住 option + 右键 Finder 图标选择重启。

//打开隐藏的命令:
defaults write com.apple.finder AppleShowAllFiles -bool true

//关闭隐藏的命令:
defaults write com.apple.finder AppleShowAllFiles -bool false

3.向本地仓库中添加创建 Pods 依赖库所需的文件

这个代码库需要手动在外面创建好.podspec、LICENSE、README.md以及代码文件和一些资源文件并拖动到,当然你在其他的git服务上需要创建的基本都是这几种文件。

1).每个 Pods 依赖库必须有且仅有一个名称和依赖库名保持一致,后缀名为 .podspec 的描述文件。这里我们依赖库的描述文件名称应该为 PGQTestPodSpec.podspec。

2).创建这个.podspec 的描述文件有两种途径:

a.复制已有的 podspec 文件然后修改对应的参数。

b.执行命令行创建。

我们使用命令行:

pod spec create PGQTestPodSpec

编辑PGQTestPodSpec.podspec 里面有很多东西是我们不需要的,我们可以用文本编辑器打开并删除我们不需要的内容。

Pod::Spec.new do |s|
  s.name = 'PGQPodSpecTest'
  s.version = '0.0.1'
  s.license = 'MIT'
  s.summary = 'test'
  s.description  = <<-DESC
                            Test for personal pod spec
                     DESC

  s.homepage = 'http://121.196.211.217/wordoor_ios/PGQPodSpecTest'
  s.authors = { 'Loissoul' => '[email protected]' }
  s.source = { :git => ['http://121.196.211.217/wordoor_ios/PGQPodSpecTest.git'], :tag => "v#{s.version}" }

  s.platform     = :ios, '8.0'            #支持的平台及版本

  s.source_files =  'PodTestDemo/PodTestDemo/PodTest/**/*'
end

3).README.md

使用 github 的人应该都熟悉这个文件,它使一个成功的 github 仓库必不可少的一部分,使用 markdown 对仓库进行详细说明。

4).LICENSE 文件

CocoaPods 强制要求所有的 Pods 依赖库都必须有 license 文件,否则验证不会通过。 license 文件有很多中,详情可以参考 tldrlegal。前面我们已经选择创建了一个 MIT 类型的 license。

4.提交修改到code Repository

在提交之前我们先对需要添加的pod进行一下验证,验证有两种方式:

a.本地验证
pod lib lint

b.从本地和远程去验证 (我们通常使用这一种)
pod spec lint 

如果你刚才没有给PGQPodSpecTest.podspec的s.source指定tag,就有可能有warn警告,执行下面的命令:

pod lib lint --allow-warnings

如出现

  • fatal: Remote branch 0.0.1 not found in upstream origin
    - ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone https://github.com/xxx/PodTest.git /var/folders/14/95vmx0495_s5292ltvwpsc8h0000gn/T/d20170111-11240-1l3iq9n --template= --single-branch --depth 1 --branch 0.0.1
   
      Cloning into '/var/folders/14/95vmx0495_s5292ltvwpsc8h0000gn/T/d20170111-11240-1l3iq9n'...
warning: Could not find remote branch 0.0.1 to clone.
fatal: Remote branch 0.0.1 not found in upstream origin
) during validation.
      Analyzed 1 podspec.
      [!] The spec did not pass validation, due to 1 error.
[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run: 
    `echo "2.3" > .swift-version`.

这是因为在你托管代码的库里(这里是指github)找不到这个分支, 也就是在编辑 PGQPodSpecTest.podspec时, 里面的字段s.verson, s.source 中的 tag与github创建的release版本号不一致导致, 修改为一样即可!(如我上面的tag标注 即可)。

验证成功之后,我们只要把代码提交到 gitlab 仓库,就可以了,参考命令:

git add -A && git commit -m "add pod files"

git push origin master

到现在为止,我们的 CocoaPods 依赖库就已经准备好了,但是现在你还不能在你的工程中使用它。如果你想成为一个真正可用的依赖库,还需要最后一步操作:将刚才生产的 podspec 文件提交到 我们在上面创建的私有Spec Repository上。

5.提交podspec到私有Spec Repository
pod repo push MySpecs PGQPodSpecTest.podspec

pod push成功后,查找自己的框架找不到的解决方法,如pod push了xxx,然后pod search xxx
提示

[!] Unable to find a pod with name, author, summary, or description matching `xxx`

解决方法就是Finder前往资源库去删除缓存中的search_index.json(targetcloud修改成你自己的)

/Users/xxx/Library/Caches/CocoaPods删除search_index.json

然后再输入pod search(查看第三方框架仓库源 pod repo)时会重新创建这个search_index.json

按wq退出search

4.如何引用 CocoaPods 依赖库

1.让我们建立一个普通的工程,命名为 TestPodDemo,然后在终端 cd 到其目录路径下,添加一个 Podfile 文件:
建立后修改 Podfile 文件内容如下:

source 'https://github.com/CocoaPods/Specs.git'        #官方仓库地址

source ‘http://xxx/xxxx/PGQPodSpecTest.git’        #私有仓库地址

use_frameworks!

target 'TestPodDemo' do

pod ‘PGQPodSpecTest’

end

执行:

pod install

这样一来我们就可以使用这个私有库了!

2.更新维护podspec。

当我们的代码变动时,首先需要更新code Repository中的.podspec 文件的版本,然后push到 Spec Repository。

参考资料

Creating a Private CocoaPod

Developing Private In-House Libraries with CocoaPods

你可能感兴趣的:(iOS组件化 Cocoapods详解之---创建私有仓库篇)