New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

qcloudhive

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

qcloudhive

  • 0.1.0
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

hive iOS多模块管理工具

腾讯云终端团队,目前需要维护的产品线很多,保守估计目前有5个产品线。而在众多产品线中有非常多的公用模块,这里就涉及到这些共用模块的维护问题,同时还有众多产品线源码管理的问题。我们希望尽可能的复用各个模块,也希望脱离原始的手工维护的噩梦,能够有一个较为先进的代码和产品管理工具。于是hive这个工具就诞生了。

基于工具链:repo+git+cocoapods进行多模块管理和维护。

Install

工具链搭建

repo

参考:https://github.com/esrlabs/git-repo

mkdir ~/bin
PATH=~/bin:$PATH
git clone http://git.code.oa.com/stonedong/git-repo.git
cp git-repo/repo ~/bin/repo
chmod a+x ~/bin/repo

同时需要将~/bin目录添加到环境变量PATH中,请编辑文件~/.bashrc添加以下内容

export PATH=$PATH:~/bin

安装过程中出现问题可以参考: http://git.code.oa.com/stonedong/git-repo.git

关于repo的更多用法请参考:Repo command reference

Git

使用Xcode自带的Git。

Cocoapods

如果您当前的ruby版本低于2.2.0,请跟随文章《MAC Ruby版本需要升级至2.2.2以上》升级您的ruby。

[sudo] gem install cocoapods

hive 安装

git clone http://git.code.oa.com/qcloud-terminal/hive.git
cd hive
gem build qcloudhive.gemspec
sudo gem install qcloudhive-0.1.0.gem

如果您当前在开发网环境下,运行gem命令的时候,请加上代理:

sudo gem install qcloudhive-0.1.0.gem --http-proxy http://dev-proxy.oa.com:8080

如果在安装过程中出现权限问题,尤其是MAC OS 10.11以上的系统版本:

请按照以下方法关闭系统的保护:

附关闭方法:重启,开机按住Command + R,以Recovery分区启动,然后选择以下方式:图形化操作在Security Configuration中关闭Enforce System Integrity Protection命令行操作

csrutil disable

Usage

支持命令集

在使用之前请在Home目录下面建立.hiveconfig配置文件,内容为:

[CodeOA]
private_token = 您自己的git.code.oa.com上的private_token
team          = 您自己的团队名称例如[qcloud-terminal]

以.开头的文件在linux系统中为隐藏文件,创建文件可使用命令 touch ~/.hiveconfig。编辑文件推荐使用atom。安装了atom的命令行版本后,可以运行atom ~/.hiveconfig来编辑改文件

命令以以下方式运行:

hive [sub commnad namespace] [sub command] [parameters]

支持的命令集:

子命令空间子命令释义支持参数and more
moduleadd添加一个子模块到当前项目中-------该命令会检测codeoa上是否存在相关git仓库,不存在则创建对应的Git仓库,如果存在则将其添加到对应当前项目中,并检查其在cocoapods specs上的依赖关系,并以同样的相对路径将依赖引入到当前工程
-n name子模块名称(require)
-p path子模块在工程中的相对路径(option)
release发布当前模块到cocoapods specs----------------------------------------------
-n name子模块名称(require)
dislink删除对于某个模块的源码引用-------hive开发模式是方便在源码开发调试和pods发布版本之间切换的模式,使用该名后,将模块的源码引用从项目中移除
-n name子模块名称(require)
manifestpush提交本地对于repo的配置文件manifest的修改
frameworkbuild根据名称将当前项目中所有的模块打包成一个framework----------------------------------------------
-n name子模块名称(require)
projectinit初始化项目-------该命令会根据对应的名字创建一个新的项目包括:CodeOA上的Git仓库,用于存储repo配置,本地对应的目录。如果CodeOA上已经存在对应的仓库,则不会创建,直接Checkout。
-n name子模块名称(require)
productinit创建Demo工程------该命令回在当前目录下,根据对应的名称创建一个崭新的Demo工程
-n name子模块名称(require)
update更新Demo产品------该命令会在所有产品下面运行pod update命令
repostatus各子模块状态检查------
request将当前所在的模块提交Merge Request------
featurecommit在有修改的模块当中调用git commit -m------
-m message提交Commit Message(require)
push推送本地的修改到服务器------

Checkout一个项目:

在配置好工具链之后,就可以Checkout项目进行开发了。以QCloudSDK为例:

hive project init -n name

Checkout后记得将当前的项目切到正在开发的分支上,例如切到主分支:

repo start master --all

Crate a hive 项目

hive project init -n name

创建子模块命令

hive module add -n name

新版本不用指定--project-name 会自动从url中提取PATH部分作为projectname

同步配置文件manifest

hive manifest push

打包Framework命令

运行该命令,将会按照指定的名称,将产品目录下面所有的podspec合成并打包成一个framework,输出到当前目录

hive framework  build [-n framework-name]

添加已经存在的子模块到manifest命令

hive module add  -n[name]  -p [local relevete path]

添加完成后,需要进行拉取代码的话请使用命令

repo sync

该命令目前不会解决子模块的依赖问题,当引入一个模块之后,需要手动的将其依赖的其他子模块引入到工程之中!!!!!!!!。自动支持依赖将会在后续版本中支持。

创建DemoAPP命令

创建完成完成Demo APP不会自动添加到manifest里面,如果需要添加到manifest里面请调用add-module子命令

hive product create  -n[name]

开发模式简介

首先hive构建的是一整套组件化开发的基础工具链。所谓组件化开发,就是将程序按照功能打散成一个个组件。然后通过组件之间组合构建出一个产品,这个产品可能是APP也可能像云这样是Framework。同时还解决了一个协作的问题,每个组件都是一个git库,每个组件都有可能被多人开发,而一个产品会涉及到多个组件的调用。这种使用我们按照单个组件的维护看,我们使用git-flow的模式。master为发布分支,其他分支为开发分支。而从整体产品的角度看,则是所有组件的库统一切到一个分支。则构成了当前产品的开发环境。

比如COS产品,涉及到QCloudCore和QCloudHTTPMock模块,当两个模块都切到master分支的时候,就构成了COS产品的一个发布环境,当都切到check分支的时候,就构成了产品特性为**的开发环境。这里需要强调的是,master分支是不能提交更改的。只能通过merge-request的方式来合并其他分支的修改。

在开发的过程中,我们强烈建议引入CR,因此我们使用merge request的方式来强制CR。

从零创建一个项目

首先需要创建一个git repo用来保存manifest文件。这里以创建QCloudSDK项目为例:

hive project init -n QCloudSDK

project init命令会自动去git.code.oa.com上检查是否存在对应的项目,如果不存在则会调用接口创建该项目。

注意,腾讯云的终端同学,项目情使用QCLOUD前缀

建好之后便可添加依赖的模块或者创建demo项目

比如使用下述命令引入一个模块QCloudFileUtils,同样如果该模块不存在,则会新建该模块

hive module add -n  QCloudFileUtils

使用下述命令创建一个Demo

hive product init -n XXXX

demo会建立在当前目录下面,需要注意的是Demo不会添加到整个项目的依赖中,需要手工添加。

使用已有项目

通用如果你是使用已经存在的项目则可以直接

hive project init -n QCloudSDK
同步项目

当项目已经check到本地,需要下载远端的修改,执行下述名。

repo sync

在同步完成后,子模块的分支会切换到具体的commit版本上去,此时需要运行repo start [project name] --all 来重新切换分支

在同步的过程中会发生git的错误,当出现错误的时候请到对应的子模块的目录下面进行操作,清除相关错误:

  1. conflict冲突问题
  2. checkout错误
  3. 合并commit出错

修正完错误之后,再次运行repo sync命令

开发

在开发代码之前需要首先需要将需求涉及到的模块切到对应分支,比如现在我们有A,B,C三个模块,开发需求upload,现在需要修改A,B模块:

repo start upload A B

之后进行代码开发

提交

在提交之前使用,使用下述命令来检查各个模块的状态:

hive repo status

然后在各个模块中执行对应的操作之后,进行提交

FAQs

Package last updated on 19 Apr 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc