iOS 组件化-远程私有库(实操)

远程私有库(实操)

本教程一步一步教会如何制作自己的远程私有库,一步一步实操,制作过程还是有点小繁琐的。

目录:


写在前面:所需要的几种仓库

  1. 主工程(宿主工程)仓库 【1个】

  2. 组件仓库 【1个或多个】

    • 功能组件
    • 业务组件
  3. 索引仓库 【1个或多个】
    如果是多个,可按项目来分类或自定义分类。每个索引仓库可管理多个组件仓库。


〇、准备工作-创建远程私有索引库(管理私有组件spec文件)

创建远程私有仓库存放私有的spec文件并将源添加到本地索引库repo

因为spec文件中保存着库的源码地址,而我们制作的远程私有库是不希望别人看到源码的,所以要将spec文件也变为私有。这样,就需要另一个专门管理多个spec的远程私有仓库。

  1. 在远程创建一个专用存放多个spec文件的远程私有仓库

  2. 先查看本地repo
    $ pod repo

  3. 将这个仓库地址添加到本地repo源
    两种方式:01-https方式;02-ssh方式(ssh方式需提前配置SSH
    $ pod repo add YourName git@xxx.git
    ‘YourName’为给spec源起的名称

  4. 再次查看本地repo
    $ pod repo
    可以发现,本地多了一个刚添加的源

  5. 补充命令:

    • 删除本地repo
      $ pod repo remove name
    • 更新本地的Pod 索引库的缓存信息
      $ pod repo update [--verbose]

一、远程私有组件库制作、发布与使用

第一步 创建本地私有组件库

  1. 手动创建 (按照本地私有库的步骤一步一步手动配置)

    1. cd进入到将要创建仓库的文件夹
      # 全局设置默认分支为master (可设置可不设置)
          $ git config --global init.defaultBranch master
      # 使用init命令初始化本地仓库
          $ git init
      
    2. 创建并配置.podspec文件
    3. 创建库对应的测试工程
    4. 测试工程可以使用pod本地依赖的方式引入私有库来使用
  2. 使用模板自动创建一个库和对应的测试工程

    1. 创建
      $ pod lib create xxx
    2. 测试工程使用pod本地依赖的方式引入私有库来使用

第二步、创建远程私有仓库并与本地组件仓库关联

  1. 创建远程私有仓库,用于存储库源码

  2. 将本地和远程关联
    $ git remote add origin git@xxx.git
    没有输出就表示关联成功

  3. 将远程仓库pull到本地
    $ git pull
    关联成功后,一定要先做这步pull操作!否则会出现分支冲突的问题

  4. 本地添加文件,提交代码

    $ git add .
    $ git commit -m '描述'
    $ git push
    

注意:

  1. 一般会出现这样的提示
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 <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master

这里系统给了2中提示,如果先用方式二git branch --set-upstream-to=origin/<branch> master来处理,即

$ git branch --set-upstream-to=origin/master master

之后提示

Branch 'master' set up to track remote branch 'master' from 'origin'.

设置好了之后,再进行拉取

$ git pull

或者直接用方式一git pull <remote> <branch> 的方式处理,如:

$ git pull git@xxx.git 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

问题解决。

  1. 还可能出现以下情况
    • 如果本地已经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
      • 综上所述,还是用第一种方法吧!!!

第三步、配置spec文件与发布

  1. 查看本地repo源,并找到管理spec的源
    $ pod repo

  2. 配置spec文件

    • version
    • homepage 其url使用远程私有库主页
    • licence
    • source
      • ①git 设置为仓库的地址
      • ②tag: s.version.to_s
    • source_files
  3. commit提交代码并push到远程仓库

  4. 给库打tag,并将tag推送push到远程仓库

    1. 查看tag
      $ git tag
    2. 设置tag 【跟version一致!】
      $ git tag '0.1.1'
    3. 将设置好的tag推送到远程
      $ git push --tags
    4. 补充命令:删除某个tag并将改动推送到远程
      01-本地删除tag
      $ git tag -d 0.1.1
      02-将删除改动推送到远端
      $ git push origin :0.1.1
  5. 检测验证spec文件

    1. 验证本地spec文件
      $ pod lib lint --verbose --no-clean
      注意homepage的设置
    2. 验证远程spec文件
      $ pod spec lint --verbose --no-clean
      远程必须要有对应版本的tag

      提示:-> xxx (0.1.0)
      验证成功会提示:xxx.podspec passed validation.

  6. 发布,将spec文件push到远程私有索引库

    1. 查看本地源
      $ pod repo
    2. 发布,将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
    3. 本地源对应的文件夹中,也会出现刚提交的库及版本文件夹
  7. 搜索远程私有库
    $ pod search xxx
    注意:如果私有库提交成功但还是搜索不到,有可能是CocoaPods缓存的问题资源库-Caches-CocoaPods-search_idnex.json,可以将索引文件删除,重新执行search命令,会重新生成本地索引文件。

  8. 更新远程私有库

    1. 修改库代码
    2. 更新xxx.podspec文件中的version
    3. 提交代码commit并push到远程
    4. 给库打新的tag,对应新的version,并push --tags
    5. 验证spec $ pod spec lint
    6. 发布 $ pod repo push YourName xxx.podspec

第四步、使用远程私有库

发布成功之后,库的测试工程和主工程都可以按照远程pod的方式来使用远程私有库

  1. 配置Podfile文件
    远程私有库不能像公有库那样直接pod使用,需要在Podfile文件中设置远程私有库的源

    1. 查看源
      $ pod repo
    2. Podfile文件中,target外层设置远程私有库的源(一般在文件一开始设置)
      source 'git@xxx.git'
  2. 安装远程私有库
    $ pod install


二、远程私有库依赖别的框架

  1. 修改spec文件中的s.dependency
    s.dependency 'AFNetworking', '~> 3.0'

  2. 提交、tag、验证、发布

  3. 使用远程私有库

    1. Podfile文件中要同时添加所依赖的别的框架的源
      source 'https://xxxxx' #远程私有库源
      source 'https://xxxxx' #其他框架源
      
    2. 重新安装
      $ pod install

三、单个子库的安装

  • 首先,CocoaPods中默认只有两层文件结构,要想在pod安装之后的文件系统中分层次显示,需要给库设置子库分类。

  • 其次,设置好子库之后,如果仅仅某个子库依赖别的框架,那么只给这个子库设置依赖。

  1. 配置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配置放在对应的子库下。
  2. 走更新远程私有库步骤
    提交、tag、验证、发布

  3. 搜索
    $ pod search xxxxx

  4. 单独使用子库
    Podfile文件中这样使用
    pod 'xxxxx/MyAFNetworkingTool'
    注意:如果子库引用了第三方库,还需要在Podfile中设置第三方库的源URL

  5. 安装使用
    $ pod install



因为spec文件中保存着库的源码地址,而我们制作的远程私有库是不希望别人看到源码的,所以要将spec文件也变为私有。这样,就需要另一个专门管理多个spec的远程私有仓库。

  1. 注册
    1. 首先使用您的电子邮件注册一个账户。这样的话就会在当前的设备上开启一个会话。建议再会话中添加描述信息,便于区分。
      $ pod trunk register youremail@xxx.com 'NAME名称' [--description='描述-比如你的设备'] [--verbose] [--allow-warnings]
      中括号内容可以省略;--verbose为显示一些详细信息到控制台
    2. 单击电子邮件刚收到的链接,以验证Trunk账户和当前计算机之间的链接。
    3. 列出会话
      $ pod trunk me
  2. 提交
    $ pod trunk push xxx.podspec
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容