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文件,来管理自己的私库。
当我们使用了类似于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上,那么继续下面的第五步。
1.创建并设置一个私有的Spec Repository。
跟第四步中的创建code Repository一样,我们创建Spec Repository也是基于gitlab的,当让你也可以用其他上面我提到的方式。
如图所示,我们在github上创建一个空的仓库,命名为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地址,不过这样有可能失败。如果失败,很大因素是你github的ssh在本地没有配置好,配置方法可以看这里: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。