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

为了利用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的使用(二)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容