阅读 251

iOS 组件化 - 私有库创建

首先回顾一下Git 和 Pod 的常用命令

  • Git 常用命令
#初始化
git init                                            #创建
git clone /path/to/repository                       #检出
git config --global user.email "you@example.com"    #配置email
git config --global user.name "Name"                #配置用户名

#操作
git add <file>                  #文件添加,A → B
git add .                       #所有文件添加,A → B

git commit -m "代码提交信息"      #文件提交,B → C
git commit --amend              #与上次commit合并, *B → C

git push origin master          #推送至master分支, C → D
git pull                        #更新本地仓库至最新改动, D → A
git fetch                       #抓取远程仓库更新, D → C

git log                         #查看提交记录
git status                      #查看修改状态
git diff                        #查看详细修改内容
git show                        #显示某次提交的内容

#撤销操作
git reset <file>                #某个文件索引会回滚到最后一次提交, C → B
git reset                       #索引会回滚到最后一次提交, C → B
git reset --hard                #索引会回滚到最后一次提交, C → B → A

git checkout                    #从index复制到workspace, B → A
git checkout -- files           #文件从index复制到workspace, B → A
git checkout HEAD -- files      #文件从local repository复制到workspace, C → A

#分支相关
git checkout -b branch_name         #创建名叫“branch_name”的分支,并切换过去
git checkout master                 #切换回主分支
git branch -d branch_name           #删除名叫“branch_name”的分支
git push origin branch_name         #推送分支到远端仓库
git merge branch_name               #合并分支branch_name到当前分支(如master)
git rebase                          #衍合,线性化的自动, D → A

#冲突处理
git diff                                    #对比workspace与index
git diff HEAD                               #对于workspace与最后一次commit
git diff <source_branch> <target_branch>    #对比差异
git add <filename>                          #修改完冲突,需要add以标记合并成功

#其他
gitk                                #开灯图形化git
git config color.ui true            #彩色的 git 输出
git config format.pretty oneline    #显示历史记录时,每个提交的信息只显示一行
git add -i                          #交互式添加文件到暂存区
复制代码
  • Pod 常用命令
pod repo push 本地私有库 xxx.podspec	#把当前库的索引,加入到私有索引库中并同步到远程索引库
pod lib create [仓库名]	#在本地创建一个基于pod模板的git仓库
pod lib lint		#pod本地库验证
pod spec lint		#pod远程库验证
pod repo push 		#索引库名 podspec文件名:命令执行会先将pod索引添加到本地的索引库,然后会自动推送到远程的索引库

pod search		#该命令用来搜索可以使用的pod依赖库,搜索结果中会向我们展示怎么在pod中使用该依赖库
pod init		#创建Podfile文件
pod install		#会根据podfile.lock文件中指定的pod依赖库的版本去拉去项目的pod依赖库。在首次执行pod install命令时,如果不存在podfile.lock文件会生成,podfile.lock文件,并且同时生成xcworkspace文件和pods文件夹。 切换到工程目录执行
pod update		#这个命令会检查podfile.lock文件中的pod依赖库的版本,并进行更新,会重新生成一个podfile.lock文件
pod setup		#用来初始化cocoapod的环境,在我们刚安装完cocoapod时,我们可以使用pod setup命令来初始化pod的运行环境,具体实现:是通过在`~/.cocoapods/repos下创建一个目录,该目录是通过clonehttps://github.com/CocoaPods/Specs的public master分之得到的pod仓库,在一些企业开发中,经常会有自己的pod仓库,只需将这些仓库使用下一行的命令添加到该目录下即可:
pod repo add NAME URL[branch]	#使用自己的pod仓库,会有更快的pod依赖库的操作速度。

复制代码

创建私有库完整步骤如下:

一 .创建私有库的索引库

需要区分两个概念:

  1. 私有库:指的是我们真正放置组件代码的地方
  2. 索引库:存放spec文件的地方,用于索引到代码的位置 索引库好比指针,私有库就好比对象。指针中存放对象的地址,通过地址可以找到对象。

二. 将创建的索引库添加到本地cocoapods仓库

  1. 创建私有库 liszRepo,用以存放索引

  2. 在本地添加一个自己的远程索引库

bogon:/ shaozhouli$ pod repo add liszRepo http://git.xxx-inc.com/lisz/liszRepo.git
复制代码
  • 执行该命令,可能会出现“fatal: Authentication failed for ”错误,解决方法如下:
    这个问题是因为权限鉴定失败
    1. 首先看一下git 配置:git config --list
    2. 去钥匙串中删除保存的账户信息
    3. 重新执行pod repo add 命令,输入正确地用户名和密码即可
复制代码
  • cocoapods 本地仓库路径为:
$ ~/.cocoapods/repos
复制代码

三. 创建模板

  • 创建模板的命令为:
$ pod lib create SYTool
复制代码
  • 按照提示,分别输入提示信息即可

四. 将我们自己的代码文件放入指定目录

  1. 把 包含有代码的Tool文件夹,拖入到Classes下
  2. 将Tool 目录,拖入到项目中的SYTool下

本地三方组件已制作完成,下面将之上传到线上

五. 将制作好的组件上传至GitLab

  1. 首先创建一个SYTool项目 (和liszRep的归属关系,尚未建立)
  2. 执行一下命令,上传模板文件
1. 进入本地仓库 SYTool 中
2. 本地仓库管理远程仓库:git remote add origin http://git.xxx-inc.com/lisz/SYTool.git
3. 将本地master与远端master关联起来 git push -u origin master(感觉没关联起来呢)
复制代码

至此,本地的模板已上传至该仓库

  1. 将组件的代码上传,因为上一步只上传了模板文件
$ git add . // 将工作区代码加入到暂存区
$ git commit  -m  '初始化' // 将暂存区代码加入到历史记录去
$ git push -u origin master // 将本地代码上传至仓库(是否可以不要-u?)
复制代码

六. 更改模板文件相关信息

修改 .podspec后缀的文件,更改:

  1. s.summary:显示在pod search 的简短描述
  2. s.version :版本号
  3. s.homepage:修改为创建组件仓库所在目录 git.xxx-inc.com/lisz
  4. s.source:修改为创建组件仓库地址 git.xxx-inc.com/lisz/SYTool…

七. 验证 spec 文件

pod lib lint 
复制代码

八. 给版本打一个分支

git tag 0.1.0
git push --tags
复制代码

九. 建立关联

当前podspec同步到本地私有库,并同步远程和本地索引库

pod repo push liszRepo SYTool.podspec
复制代码

该步骤可能会出现一个问题:

fatal: 无法读取远程仓库。 请确认您有正确的访问权限并且仓库存在。

解决办法

$ eval "$(ssh-agent -s)"
$ ssh-add
复制代码

参考:Git添加公钥到github后无权限(Permission denied)推送和抓取的解决方案

回顾创建私有库过程如下:

  1. 创建本地索引库:
pod repo add QinzRepo https://gitee.com/Qinz_323/QinzRepo.git 
复制代码
  1. 创建模板:
 pod lib create QinzTool
复制代码
  1. 进入工程下上传模板:
git remote add origin https://gitee.com/Qinz_323/Tool.git
git push -u origin master
复制代码
  1. 上传代码:
$ git add .
$ git commit  -m  '初始化'
$ git push -u origin master
复制代码
  1. 验证 spec 文件
$ pod lib lint  --private
复制代码
  1. 打tag
$ git tag 0.1.0
    $ git push  --tags
复制代码
  1. 建立关联
$ pod repo push QinzRepo QinzTool.podspec
复制代码

该步骤可能会出现以下错误:

您的配置中指定要合并远程的引用 'refs/heads/master', 但是没有获取到这个引用。 原因是私有索引库没有进行初始化,解决方案如下:

其它常见问题集锦:

  • podspec文件包含有 MRC 文件类
s.source_files  = "MCFoundation/**/*.{h,m}"
s.requires_arc = false
s.requires_arc = "MCFoundation/CommonComponent/**/*.{h,m}"
## 多目录时:s.requires_arc = [ "MCFoundation/CommonComponent/**/*",
"MCFoundation/CommonComponent1/**/*",
]
复制代码

参考以下文章:

iOS组件化探究之私有库的创建

常用pod命令

Git常用命令详解

Git常用命令和Git团队使用规范指南

git服务端搭建,并解决“您的配置中指定要合并远程的引用 'refs/heads/master'”问题

关注下面的标签,发现更多相似文章
评论