远程私有库(实操)
本教程一步一步教会如何制作自己的远程私有库,一步一步实操,制作过程还是有点小繁琐的。
目录:
写在前面:所需要的几种库
〇、准备工作-创建远程私有索引库管理私有组件spec文件
-
一、远程私有组件库制作、发布与使用
- 创建本地私有库
- 创建远程私有库并关联本地私有库
- 配置spec文件与发布
- 使用远程私有库
二、远程私有库依赖别的框架
三、单个子库的安装
写在前面:所需要的几种仓库
主工程(宿主工程)仓库 【1个】
-
组件仓库 【1个或多个】
- 功能组件
- 业务组件
索引仓库 【1个或多个】
如果是多个,可按项目来分类或自定义分类。每个索引仓库可管理多个组件仓库。
〇、准备工作-创建远程私有索引库(管理私有组件spec文件)
创建远程私有仓库存放私有的spec文件并将源添加到本地索引库repo
因为spec文件中保存着库的源码地址,而我们制作的远程私有库是不希望别人看到源码的,所以要将spec文件也变为私有。这样,就需要另一个专门管理多个spec的远程私有仓库。
在远程创建一个专用存放多个spec文件的远程私有仓库
先查看本地repo
$ pod repo
将这个仓库地址添加到本地repo源
两种方式:01-https方式;02-ssh方式(ssh方式需提前配置SSH)
$ pod repo add YourName [email protected]
‘YourName’为给spec源起的名称再次查看本地repo
$ pod repo
可以发现,本地多了一个刚添加的源-
补充命令:
- 删除本地repo
$ pod repo remove name
- 更新本地的Pod 索引库的缓存信息
$ pod repo update [--verbose]
- 删除本地repo
一、远程私有组件库制作、发布与使用
第一步 创建本地私有组件库
-
手动创建 (按照本地私有库的步骤一步一步手动配置)
- cd进入到将要创建仓库的文件夹
# 全局设置默认分支为master (可设置可不设置) $ git config --global init.defaultBranch master # 使用init命令初始化本地仓库 $ git init
- 创建并配置.podspec文件
- 创建库对应的测试工程
- 测试工程可以使用pod本地依赖的方式引入私有库来使用
- cd进入到将要创建仓库的文件夹
-
使用模板自动创建一个库和对应的测试工程
- 创建
$ pod lib create xxx
- 测试工程使用pod本地依赖的方式引入私有库来使用
- 创建
第二步、创建远程私有仓库并与本地组件仓库关联
创建远程私有仓库,用于存储库源码
将本地和远程关联
$ git remote add origin [email protected]
没有输出就表示关联成功将远程仓库pull到本地
$ git pull
关联成功后,一定要先做这步pull操作!否则会出现分支冲突的问题-
本地添加文件,提交代码
$ git add . $ git commit -m '描述' $ git push
注意:
- 一般会出现这样的提示
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/ master
这里系统给了2中提示,如果先用方式二git branch --set-upstream-to=origin/
来处理,即
$ git branch --set-upstream-to=origin/master master
之后提示
Branch 'master' set up to track remote branch 'master' from 'origin'.
设置好了之后,再进行拉取
$ git pull
或者直接用方式一git pull
的方式处理,如:
$ git pull [email protected] master
需要注意的是,不管用那种方式都需要拉取,拉取就可能会有下面的提示:
“refusing to merge unrelated histories”(拒绝合并无关历史记录)
,还有一堆提示
hint: Pulling without specifying how to reconcile divergent branches is
hint: discouraged. You can squelch this message by running one of the following
hint: commands sometime before your next pull:
hint:
hint: git config pull.rebase false # merge (the default strategy)
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
那我们就按照提示使用命令git config pull.rebase false # merge (the default strategy)
,即
$ git config pull.rebase false
会发现还是提示“refusing to merge unrelated histories”(拒绝合并无关历史记录)
这时候可以允许合并不同的版本,使用下面的命令
$ git pull origin master --allow-unrelated-histories
这样会将远程仓库的下载下来,但是会发生不同版本的冲突。
一般是发生在 README.md
文件,所以我们就要打开这个文件来解决冲突。
解决冲突之后,正常提交代码
$ git add .
$ git commit -m '描述'
最后推送代码
$ git push --set-upstream origin master
或者
$ git push -u origin master
问题解决。
- 还可能出现以下情况
- 如果本地已经commit提交过代码,那么使用如下方式
- 本地修改代码commit
- 关联远程
$ git remote add origin https://xxxxx.git
- push到远程仓库
$ git push -u origin master
- 如果出现错误如 【 ![rejected] master -> master (non-fast-forward) error:failed to pus some refs to xxxxxx】之类的,有两种解决方法:
- 第一种,先备份,再拉取覆盖本地(一定先踏马的备份!!)
- 备份代码
- 强制拉取到本地
$ git pull --rebase origin master
- 推送
$ git push origin master
- 第二种,强制推送覆盖远程文件(这个命令在团队开发的时候最好不要用,否则可能会有踏马的‘生命, 危, 险. Danger to life’)
$ git push -f origin master
- 综上所述,还是用第一种方法吧!!!
- 第一种,先备份,再拉取覆盖本地(一定先踏马的备份!!)
- 如果本地已经commit提交过代码,那么使用如下方式
第三步、配置spec文件与发布
查看本地repo源,并找到管理spec的源
$ pod repo
-
配置spec文件
version
-
homepage
其url使用远程私有库主页 licence
-
source
- ①git 设置为仓库的地址
- ②tag: s.version.to_s
source_files
- 等
commit提交代码并push到远程仓库
-
给库打tag,并将tag推送push到远程仓库
- 查看tag
$ git tag
- 设置tag 【跟version一致!】
$ git tag '0.1.1'
- 将设置好的tag推送到远程
$ git push --tags
- 补充命令:删除某个tag并将改动推送到远程
01-本地删除tag
$ git tag -d 0.1.1
02-将删除改动推送到远端
$ git push origin :0.1.1
- 查看tag
-
检测验证spec文件
- 验证本地spec文件
$ pod lib lint --verbose --no-clean
注意homepage的设置 - 验证远程spec文件
$ pod spec lint --verbose --no-clean
远程必须要有对应版本的tag提示:
-> xxx (0.1.0)
验证成功会提示:xxx.podspec passed validation.
- 验证本地spec文件
-
发布,将spec文件push到远程私有索引库
- 查看本地源
$ pod repo
- 发布,将spec提交到本地源关联的远程私有索引库
注意:$ pod repo push YourName xxx.podspec [--verbose] [--allow-warnings] # ‘YourName’为spec源的名称,使用【$ pod repo】命令可以查看 # ‘xxx.podspec’为组件的podspec文件名
- 如果出现错误,建议直接删除本地源,之后重新关联
- 如果为 repo not clean 的错误,如下:
[!] The repo 'YourName' at '../xxxxx/.cocoapods/repos/NAME' is not clean
则可以cd到对应路径下,执行clean命令来清理
$ git clean -f
- 本地源对应的文件夹中,也会出现刚提交的库及版本文件夹
- 查看本地源
搜索远程私有库
$ pod search xxx
注意:如果私有库提交成功但还是搜索不到,有可能是CocoaPods缓存的问题资源库-Caches-CocoaPods-search_idnex.json
,可以将索引文件删除,重新执行search命令,会重新生成本地索引文件。-
更新远程私有库
- 修改库代码
- 更新xxx.podspec文件中的version
- 提交代码commit并push到远程
- 给库打新的tag,对应新的version,并push --tags
- 验证spec
$ pod spec lint
- 发布
$ pod repo push YourName xxx.podspec
第四步、使用远程私有库
发布成功之后,库的测试工程和主工程都可以按照远程pod的方式来使用远程私有库
-
配置
Podfile
文件
远程私有库不能像公有库那样直接pod使用,需要在Podfile文件中设置远程私有库的源- 查看源
$ pod repo
- Podfile文件中,target外层设置远程私有库的源(一般在文件一开始设置)
source '[email protected]'
- 查看源
安装远程私有库
$ pod install
二、远程私有库依赖别的框架
修改spec文件中的s.dependency
s.dependency 'AFNetworking', '~> 3.0'
提交、tag、验证、发布
-
使用远程私有库
- Podfile文件中要同时添加所依赖的别的框架的源
source 'https://xxxxx' #远程私有库源 source 'https://xxxxx' #其他框架源
- 重新安装
$ pod install
- Podfile文件中要同时添加所依赖的别的框架的源
三、单个子库的安装
首先,CocoaPods中默认只有两层文件结构,要想在pod安装之后的文件系统中分层次显示,需要给库设置子库分类。
其次,设置好子库之后,如果仅仅某个子库依赖别的框架,那么只给这个子库设置依赖。
-
配置spec文件
在s.source_files
下面,做子库配置s.source_files = 'xxx/Classes/**/*' # 常用工具 s.subspec 'Tool' do |t| t.source_files = 'xxx/Classes/Tool/**/*' end # # 网络工具 s.subspec 'MyAFNetworkingTool' do |nt| nt.source_files = 'xxx/Classes/MyAFNetworkingTool/**/*' nt.dependency 'AFNetworking', '~> 3.0' end
注意:
- 注意
s.subspec
全部小写 - 每个子库中都要配置其
source_files
- 由于
MyAFNetworkingTool
才依赖AFN
,所以要保证安装了MyAFNetworkingTool
才会同时安装所依赖的AFN
,所以把对应的dependency
配置放在对应的子库下。
- 注意
走更新远程私有库步骤
提交、tag、验证、发布搜索
$ pod search xxxxx
单独使用子库
Podfile文件中这样使用
pod 'xxxxx/MyAFNetworkingTool'
注意:如果子库引用了第三方库,还需要在Podfile中设置第三方库的源URL安装使用
$ pod install
因为spec文件中保存着库的源码地址,而我们制作的远程私有库是不希望别人看到源码的,所以要将spec文件也变为私有。这样,就需要另一个专门管理多个spec的远程私有仓库。
- 注册
- 首先使用您的电子邮件注册一个账户。这样的话就会在当前的设备上开启一个会话。建议再会话中添加描述信息,便于区分。
$ pod trunk register [email protected] 'NAME名称' [--description='描述-比如你的设备'] [--verbose] [--allow-warnings]
中括号内容可以省略;--verbose为显示一些详细信息到控制台 - 单击电子邮件刚收到的链接,以验证Trunk账户和当前计算机之间的链接。
- 列出会话
$ pod trunk me
- 首先使用您的电子邮件注册一个账户。这样的话就会在当前的设备上开启一个会话。建议再会话中添加描述信息,便于区分。
- 提交
$ pod trunk push xxx.podspec