私库

时间:2024-09-28 15:56:01编辑:阿奇

如何创建私有 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 false3.向本地仓库中添加创建 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}"end3).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的,当让你也可以用其他上面我提到的方式。如图所示,我们在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 caculatormaker3.在个人项目中的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' dopod ‘caculatemaker’end执行:pod install这样一来我们就可以使用这个私有库了!4.更新维护podspec。当我们的代码变动时,首先需要更新code Repository中的.podspec 文件的版本,然后push到 Spec Repository。

CocoaPods搭建私有库

前言 iOS组件化开发很重要的一个技术点:CocoaPods私有库的搭建。而且最近答应一个网友要写一篇关于《CocoaPods搭建私有库》相关的文章,于是结合网上的一些blog和实际操作,《CocoaPods搭建私有库》这篇文章就诞生了。 文章目录(即具体步骤) 一、创建一个spec Repo的私有远程仓库 和 一个存放pod所需的项目工程文件的远程仓库; 二、创建spec Repo; 三、创建pod的所需的项目工程文件,并上传到远程私有仓库; 四、向私有的spec Repo远程仓库中提交podspec; 五、使用自己创建的私有pod库; 具体步骤 一、创建一个spec Repo的私有远程仓库 和 一个存放pod所需的项目工程文件的远程仓库;(注:github创建私有项目是收费的,所以这里选择免费的“码云”) 创建XWSpec远程仓库,用来存放本地spec 创建XWPodProject远程仓库,用来存放项目工程文件 二、创建spec Repo; 前往文件夹 ~/.cocoapods/repos,打开终端,在终端切换到当前目录下,然后进行pod repo add操作,在终端输入: pod repo add XWSpec https://gitee.com/xw___/XWSpec.git 注: https://gitee.com/xw___/XWSpec.git 是spec Repo的私有远程仓库地址。 三、创建pod的所需的项目工程文件,并上传到远程私有仓库; 1、创建本地pod所需的项目工程文件 在终端,cd切换到某个目录下,这里我选择的是桌面上文件夹testPod目录下的,然后执行pod lib create XWPodLib如图: 然后进到到XWPodLib里面找到Classes中的"ReplaceMe.m"文件删除,然后将自己所需要的文件放到这里目录下,如下图: 接下来最重要的一步,也是很容易忽略的一步,不然提交后检查会出现很多问题。 具体步骤: (1)cd 到Example文件下,然后pod install下,更新Example项目的pod。 (2)打开example中的项目,找到项目中的podspec文件,更改spec。 修改完成后,cd 到XWPodLib目录下,然后验证本地podspec文件有效性,终端命令如下: pod lib lint XWPodLib.podspec 2、本地项目文件上传到远程仓库中 将本地项目与远程仓库相关联,使用终端命令: git remote add origin 远程仓库地址 push到远程的时候出现这种问题,于是就先pull ,于是就出现了下图的问题(即拒绝合并不相关的历史,确实本地新加的内容还从未和线上连接过): 之后输入如下命令(即告诉允许合并不相关的历史内容): git pull origin master --allow-unrelated-histories 解决一下冲突就可以了。解决冲突后上传到远程仓库。 这样远程仓库就有我们本地的项目了 然后进行.podspec文件本地和远程有效性的验证,终端命令如下: pod spec lint XWPodLib.podspec 注意: 如果私有库中依赖私有库,则验证podspec文件的时候需要加上–sources参数,否则会出现找不到你依赖的私有库,示例如下图: 显示我们没有远程仓库打标签,这里需要重点注意的是,我们给打的标签值要与podspec文件中的版本号一致。 打标签的步骤如图: 之后,再次使用pod spec lint XWPodLib.podspec,进行.podspec文件本地和远程有效性的验证 四、向私有的spec Repo远程仓库中提交podspec; 使用 pod repo push XWSpec XWPodLib.podspec 命令把私有库添加到私有repo中。 注意:仍然在本项目的目录路径下进行操作: 前往文件夹 ~/.cocoapods/repos去查看XWSpec目录下的文件如下: 之后,可以通过终端命令查看第三方框架仓库源,命令如下: pod repo 然后使用 pod search XWPodLib 就可以搜索出来了。 到此,创建私有库成功了。 五、使用自己创建的私有pod库; 使用source 指定: 然后跳转到项目目录,执行终端命令pod install,之后就可以使用了。 CocoaPods开源库的搭建 CocoaPods搭建私有库 CocoaPods搭建私有库遇到问题 CocoaPods私有库的升级维护 SKStoreReviewController之程序内评价 App应用程序图标的动态更换 开源框架 MGJRouter_Swift iOS的MVP设计模式 iOS插件化 iOS FMDB的使用 Swift之ReactiveSwift OC之ReactiveCocoa OC之ReactiveCocoa进阶 iOS 性能考虑

上一篇:悲伤恋歌

下一篇:没有了