创建私有 CocoaPods 仓库

一、概述


CocoaPods是iOS,Mac下优秀的第三方包管理工具,类似于java的maven,给我们项目管理带来了极大的方便。个人或公司在开发过程中,会积累很多可以复用的代码包,有些我们不想开源,又想像开源库一样在CocoaPods中管理它们,那么通过私有仓库来管理就很必要。对于CocoaPods还不太熟悉的,建议参考一下唐巧的博客或者直接到CocoaPods的官网看看:https://cocoapods.org/

二、概念


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

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

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

小结:以AFNetWorking为例,如果只创建AFNetWorking的code repository,而不将code repository中的.Podspec文件上传到spec repository的话,你在自己的工程引入AFN的时候压根用不了。

三、步骤


创建私有的CocoaPods仓库之前需要先制作CocoaPods依赖库,所以步骤分两步:

1.制作CocoaPods依赖库,也就是代码库。

2.创建私有 CocoaPods 仓库。

小结:1.制作依赖库也就是在自己的服务器或者github等远端第三方服务器创建一个仓库,用来保存.podspec、LICENSE、README.md以及代码文件和一些资源文件。

          2.创建私有 CocoaPods 仓库也就是在自己的服务器或者github等远端第三方服务器创建一个仓库,用来接受并存放.podspec文件,来管理自己的私库。

四、制作 CocoaPods 依赖库


当我们使用了类似于AFNetWorking这样的Pods 依赖库以后, 你一定对创建自己的依赖库很有兴趣吧,现在我们就来尝试一下,以一个简单 caculatorMaker 为例自己创建一个 Pods 依赖库。

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

       因为GitHub的私有仓库是收费的,我还不是GitHub的付费用户,所以我使用了其他Git服务,我使用的是gitlab(我们公司是基于内网的,当然你也可以基于外网),当然还有其他的可供选择开源中国、CODING、Bitbucket以及CSDN Code.

2.clone 仓库到本地

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

cd ~

git clone http://njGitrepo/xxx/caculatemaker.git

完成后,我们进入到 ~/caculatemaker 目录,这时候你看到是一个空文件夹,这由于我用的是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 的描述文件。这里我们依赖库的描述文件名称应该为 caculatormaker.podspec。

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

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

                  b.执行命令行创建。

 我们使用命令行:

pod spec create caculatormaker

我们发现这个是ruby文件,里面有很多东西是我们不需要的,我们可以用文本编辑器打开并删除我们不需要的内容。

Pod::Spec.new do |s|  

s.name            = 'caculatemaker'  

s.version          = '0.1.0'  

s.summary          = 'just test'  s.description      = <<-DESC                     

                                                                                 Testing Private Podspec.                        

                                                                                  DESC 

 s.homepage        = 'http://njgitrepo/wushuanghong/caculatemaker'  

# s.screenshots    = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' 

 s.license          = { :type => 'MIT', :file => 'LICENSE' }  

s.author          = { 'shuanghong.wu' => 'shuanghong.wu@qq.com' } 

 s.source          = { :git => 'http://njGitrepo/wushuanghong/caculatemaker.git' ,:tag => s.version}  

s.ios.deployment_target = '8.0'

s.source_files  = "Classes", "Classes/**/*.{h,m}", "caculator/**/*.{h,m}"

end

          3).README.md

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

          4).LICENSE 文件

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

4.提交修改到code Repository

经过前面步骤,我们已将在本地的 git 仓库添加了不少文件,现在我们只要将他们提交到 gitlab上就可以。在此之前我们需要对刚才添加的 pod 进行一下验证:

pod lib lint

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

pod lib lint --allow-warnings

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

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

git push origin master

如果以上的操作都没有问题的话,gitlab上应该可以看到类似下面的内容:

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

五、创建私有 CocoaPods 仓库


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

跟第四步中的创建code Repository一样,我们创建Spec Repository也是基于gitlab的,当让你也可以用其他上面我提到的方式。

如图所示,我们在gitlab上创建一个空的仓库,命名为wshSpecs,这个仓库是用来存放我们自己所有的私有库的spec文件,就如同官方的https://github.com/CocoaPods/Specs是用来存放所有官方的specs文件一样。

终端执行命令:

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

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

pod repo add REPO_NAME SOURCE_URL

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

这里用的是https地址,当然你也可以用git地址,不过这样有可能失败。如果失败,很大因素是你githubssh在本地没有配置好,配置方法可以看这里:Generating SSH keys,成功后可以看得到.cocoapods目录如下图所示:

至此,我们已经在本地得到我们自己的私有仓库 wshSpecs ,这是一个空的仓库。

注意:这里我需要介绍一下上面的master文件夹里面到底是什么东西:

            a. 进入到这个目录

                在Finger前往文件夹中输入  ~/.cocoapods, 显示的内容就是上图的界面。

            b.点开master文件夹下面的spec目录,其下存放的就是所有提交到 CocoaPods 的开源库的 podspec 文件的集合。

其结构如下图所示:

其组成方式:

specName -- version -- specName.podspec

( master 里现在是 specName.podspec.json,这个 .json 文件就是 podspec 文件加了个后缀。我们可以采用 pod ipc spec 这个命令来将 spec 文件转换成 .json)

那这个文件夹是如何来得呢?其实,这个文件夹是在你安装了 CocoaPods 后,第一次执行 pod install 时, CocoaPods 通过命令 pod setup 来建立的(这条命令会自动执行)。


2.添加 刚才第四步创建的 caculatormaker.podspec 到你的 Spec Repository。

在前面验证通过的基础上,我们接着执行命令:

pod repo push wshSpecs caculatormaker.podspec

按照平时使用 CocoaPods 的习惯,我们添加依赖库之前会先搜索一下库,让我们执行一下命令:

pod search caculatormaker


3.在个人项目中的Podfile中增加刚刚制作的好的Pod并使用。

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

pod init

建立后修改 Podfile 文件内容如下:

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

source ‘http://njGitrepo/wushuanghong/wshSpecs.git’        #私有仓库地址

use_frameworks!

target 'TestPodDemo' do

pod ‘caculatemaker’

end

执行:

pod install

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

4.更新维护podspec。

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

六、参考资料


Private Pods

Creating a Private CocoaPod

Developing Private In-House Libraries with CocoaPods

http://www.jianshu.com/p/ddc2490bff9f

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

推荐阅读更多精彩内容