美文网首页
iOS组件化 Cocoapods详解之---创建私有仓库篇

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

作者: 那一片阳光 | 来源:发表于2018-01-15 11:11 被阅读590次

    在组件化的路上实现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' => '937542864@qq.com' }
      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详解之---创建私有仓库篇

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