美文网首页pod & git
Cocoapod的使用(一)私有库构建

Cocoapod的使用(一)私有库构建

作者: 奚山遇白 | 来源:发表于2018-07-19 17:41 被阅读0次

    为了利用Cocoapod的进行私有仓库管理/打包/切换源码的功能,我们按照下图的规划一步一步进行实现


    步骤

    如何搭建一个私有仓库

    在开发过程中,我们经常会将功能性代码抽取出来以便复用,但有时我们并不想开源,那么我们就可以创建私有仓库来进行管理,另外这也为我们项目的组件化做了准备。
    私有仓库的实现能够很大程度上减少项目开发中的合并冲突,精简项目结构,而且有利于后期进行组件化。但是私有库管理相比较直接修复项目中的错误来说要复杂一些,不过为了简洁和复用,相信这点牺牲也是有必要的。
    那么,究竟如何搭建一个私有仓库呢?接着往下看:

    0.准备工作

    首先我们要知道,使用私有仓库来管理我们需要维护两个库:
    【1】一个私有的podRepo仓库,这就是我们的私有仓库管理中心,这个仓库用来存放我们所有私有库的.podspec文件
    【2】我们实际的代码工程,用来存放实际的功能库代码
    只有先理解了以上这一点才能进行我们之后的创建操作。

    1.创建私有podRepo仓库

    1.1首先当然是登录gitlab啦~

    此时需注意,如果你并没有添加SSH的话,会有这样一个提示:


    缺少SSH

    也就是由于缺少SSH key所以你不能使用SSH来拉取/推送代码,这就需要你将SSH key添加到gitlab啦,怎样添加呢?
    【1】打开终端,使用如下命令生成ssh公钥和私钥对

    ssh-keygen -t rsa -C 'xxx@xxx.com' 然后一路回车(-C 参数是你的邮箱地址)
    

    【2】打开~/.ssh/id_rsa.pub文件,这个文件中的内容就是你的SSH key
    【3】打开gitlab,找到User Settings-->SSH Keys--->Add an SSH Key


    添加SSH.png

    添加完成即可

    1.2创建新的项目

    在gitlab首页点击创建图标


    点击创建新的项目png
    设置项目说明.png

    点击创建


    空项目创建成功

    1.3克隆podRepo到本地

    使用命令行克隆

    git clone 项目地址 //例如 git clone git@gitlab.com:sunqy/SQYPodRepo.git
    

    结果如下:


    克隆podRepo到本地.png

    2.创建实际代码工程项目 (实际过程中踩坑,想绕过可直接阅读步骤3)

    创建过程与上一步一致,此处不再赘述。
    然后针对实际代码工程,我们还需要做以下操作:

    2.1添加readme文件

    readme文件主要是为了给读者以大致介绍该项目能做哪些事情,具体书写规范就不再赘述了。添加readme文件有两种方法:
    【1】直接在gitlab网页上点击添加:


    点击添加Reademe文件.png

    然后进入编写页面进行编写,编写完成后提交即可,当然gitlab还提供了多种模版可供快速完成多种设置文件:


    点击添加Reademe文件.png

    【2】使用命令行添加:


    命令行添加Reademe文件.png

    以下是我的添加记录:


    提交Reademe文件.png

    添加提交后的结果如下,可以看到已添加提交完成:


    提交结果.png

    2.2为项目添加LICENSE

    在2.1中已经可以看到readme文件旁边有对应 add LICENSE的按钮,点击然后进行配置即可

    2.3添加实际项目文件并提交

    【1】将提取完成的代码文件添加到项目中,项目类文件放入Classes文件夹中


    目录结构.png

    【2】提交,并且为当前提交打上tag,因为Cocoapods管理的库是根据git的tag来区分的不同版本的。

    $ git tag 0.0.1 # 在本地仓库打上tag
    $ git push --tags # 将tag标记推送到远程仓库
    

    2.4添加.podspec文件

    【1】创建.podspec文件

    pod spec create 项目名称 //例如:pod spec create SQYAlertView
    

    【2】编辑.podspec文件,进行相对应的配置,然后提交该文件

    此处需注意:
    1 .podspec文件中的s.version应和tag的版本一致;
    2 .podspec文件中的s.source_files和s.resource_bundles参数应与项目中的路径匹配

    3.把实际工程的.podspec文件推送到PodRepo私有库当中

    使用

    pod repo push SQYPodRepo SQYAlertView.podspec --allow-warnings
    --use-libraries //--allow-warnings表示允许warning,--use-libraries表示使用了libraries,当然这两个配置项也可以不写
    

    但是出现了如下错误:


    错误.png

    提示有未知错误导致验证失败,所以在提交.podspec文件之前最好先进行一下验证

    3.0验证podspec文件

    可以使用pod lib lint/pod spec lint 命令验证,两者的区别是pod lib lint = local, pod spec lint = local/remote,参考:lint

    验证发现了如下错误:

    验证出错.png
    一个自己傻白并不甜导致的一个坑:
    之前认为可以仅把该项目当作是一个代码管理仓库,所以可以并不创建工程project,仅放置功能代码文件即可,可是忽略了CocoaPods的定义。CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects.
    摘自here
    所以当我只是在项目中添加了功能代码文件,而并没有创建project的时候出现了如上图所示的错误。。。自己挖的坑。。。所以我们需要创建project,这样Cocoa才能帮助我们管理。所以步骤2中我们需要先创建项目:使用pod lib create SQYAlertView命令创建项目
    各项配置.png
    创建成功后的目录如下图:
    目录.png
    编辑.podspec文件和readme文件,以及功能代码文件后推送到remote即可,推送之前记得(如果推送失败,请注意这一句:Running pod install on your new library)

    然后回到这一步骤最开始的把实际工程的.podspec文件推送到PodRepo私有库当中

    推送.png

    查看远程SQYPodRepo项目可以看到


    终于成功了!!!

    因为涉及到删除项目新建所以这里附带说一下
    如何删除项目:
    点开需要删除的项目-Setting-General-Advanced setting-点击Expand-Remove project-在弹框中输入项目名称-点击confirm即可删除

    4.如何创建一个合法的项目,并且可以使用pod加载到工程中

    4.1创建一个项目SQYPodTest用来测试上述我们创建的pod私有仓库是否可用

    创建过程不再赘述

    4.2添加podfile文件,开始真正的使用

    【1】使用pod init添加podfile文件
    【2】编辑podfile文件,需要添加source和pod,


    编辑podfile文件.png

    然后执行pod install


    执行pod install.png

    【3】现在在SQYPodTest这个项目中就可以使用我们的私有工具库SQYAlertView啦


    具体使用.png

    5.尝试使用资源文件.xcasset/.xib/.xcdatamodel/.bundle

    我们在项目中加入.png/.xib,然后上传到远端,重新执行pod update,会发现虽然.png/.xib文件已经被上传到远端了,但是并没有被更新下来


    上传结果.png
    更新结果.png

    这是为什么呢?原因是因为pod是按照.podspec描述进行更新的,但是我们的.podspec的s.source_files和s.resource_bundles只是包含了.h/.m文件,而并没有包含.png/.xib等类型的文件,所以导致了这样的情况,我们只需修改.podspec重新上传更新即可


    fixPodSpec.png
    更新.png

    6.尝试将所有资源文件打包到一个bundle

    我们可以使用git bundle create命令来进行将整个项目打包。


    执行打包

    命令git bundle create repo.bundle HEAD master,其中repo.bundle为你打出来的bundle名称,如果你希望这个仓库可以在别处被克隆,你应该像例子中那样增加一个 HEAD 引用。master代表master分支
    然后对于这个.bundle文件,可以使用

    git clone repo.bundle repo
    

    命令克隆出整个项目以供你或者你的合作开发者使用。更详细的请参考以下文档:git打包

    7.不使用git的任何工具推送一个仓库,并且通过校验

    如果指的是使用命令行推送的话那么如下图所示操作即可:


    命令行推送流程

    8.上传错了一个版本该如何处理

    8.1重复打一个tag,这在手动操作情况下经常出现

    在同一个节点,如果标签1已经存在了


    tag1已存在

    这个时候想在这个节点再打一个标签1会收到提示


    tag1重复
    这就告知我们该标签已存在,随意更改可能会造成混乱,所以不可随意更改。
    但是假如打一个和tag1不同的标签是可以的,大家可以自从尝试。

    8.2本身.podspec文件写错了

    因为pod是按照.podspec去加载对应项目的,所以假如.podspec文件有错误,那么会导致不能正常加载正确的项目,例如s.version写错了就不加载正确版本,s.source_files写错了资源文件的访问就会有问题等等

    剩下的内容看这里

    Cocoapod的使用(二)

    相关文章

      网友评论

        本文标题:Cocoapod的使用(一)私有库构建

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