iOS创建远程库流程(脚本打tag)

706 阅读3分钟

图片.png

第一部分:私有库制作流程

1. 搭建私有库之前必须要先创建索引库

  • 首先检查当前电脑的索引库: ➜ pod repo

图片.png

2.远程没有索引库,创建索引库并关联本地

若github上还没有索引库,则在github上创建一个新的库,这个库用来保存私有库的podspec文件,所以我们一般起名字最好是 xxxSpec用以区分这个库的作用。 创建本地索引库,然后将其于刚才创建的远程索引库相关联,注意!!!此时的远程索引库是*空的!空的!空的!*但是必须得有master分支,所以你可以添加一个readme文件。

新增命令

1.显示repo本地资源库列表

➜ pod repo / pod repo list

2.增加repo

➜ pod repo add XXXSpec 刚才创建的远程索引库的github的地址

3.移除repo

➜ pod repo remove XXXSpec

============ 【操作】==============

➜ pod repo add mySpec github.com/xxxx/TestSp…
Cloning spec repo mySpec from http://github.com/xxxx/TestSpec.git
➜ pod repo

第二部分:私有库制作流程

1.创建本地私有库(代码库)

// 使用CocoaPods格式化创建(自定义远程库名称:LibName)
➜ pod lib create LibName

图2.png

2.本地验证

a. 私有库中无其他依赖库

➜ pod lib lint --allow-warnings
➜ pod lib lint QYCQRCode.podspec --allow-warnings

b. 私有库中有依赖私有库、三方库时,需要添加源地址

配置 --sources 下载源
// 精简版
➜ pod lib lint --allow-warnings --sources='github.com/xxxx/TestSp…'
// 全版
➜ pod lib lint QYCCommon.podspec --allow-warnings --sources='github.com/xxxx/TestSp…'

3.提交私有库代码 + 打tag(脚本操作)

a.根据需要配置修改podspec

手动在github上创建远程私有库(配置LibName.podspec)

s.homepage、s.source 远程库地址(s.homepage不含.git后缀)

b.本地代码与远程pod库建立关联

➜ cd 本地代码文件路径

// 初始.git文件
➜ git init

// README创建文件
➜ touch README.md

// 本地贮存 git add .
➜ git add README.md

// 本地提交代码
➜ git commit -m "Initial commit"

// 设置主分支
➜ git branch -M master

// 关联远程库
➜ git remote add origin github.com/xxxx/TestSp…

// 推送变更至远程分支
➜ git push -u origin master

c.生成脚本文件,并放在相应文件夹下,终端执行下面脚本

使用脚本与工程文件(_Pods.xcodeproj)同级目录下(命名为publish.sh),终端执行

➜ sh publish.sh

============= 脚本代码如下(直接全部copy即可) =============

#!/usr/bin/env bash
#Config Color
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color
#const
source1=https://github.com/CocoaPods/Specs.git
commitText=""
tag=""
result=`find ./ -maxdepth 1 -type f -name "*.podspec"`
SpecName=${result}
#pull代码
pull() {
    echo -e "${GREEN}\n第一步:准备pull代码${NC}⏰⏰⏰"
    #先拉代码
    if git pull; then
        echo -e "${GREEN}pull代码成功${NC}🚀🚀🚀"
    else
        echo -e "${RED}pull代码失败,请手动解决冲突${NC}🌧🌧🌧"
        exit 1
    fi
}
#替换podspec的Tag
updatePodspec() {
    echo -e "${GREEN}\n第二步:修改 s.version = ${tag} ${NC}⏰⏰⏰"
    sed -i '' s/"s.version[[:space:]]*=[[:space:]]*\'[0-9a-zA-Z.]*\'"/"s.version = \'${tag}\'"/g ${SpecName}
}
#本地验证Lib
localVerifyLib(){
    echo -e "${GREEN}\n第三步:开始本地验证:pod lib lint ${NC}⏰⏰⏰"
    if ! pod lib lint --skip-import-validation --allow-warnings --use-libraries --sources="${source1}"; then echo -e "${RED}验证失败${NC}🌧🌧🌧"; exit 1; fi
    echo -e "${GREEN}验证成功${NC}🚀🚀🚀"
}
#push代码,tag
pushAndTag(){
    echo -e "${GREEN}\n第四步:准备提交代码${NC}⏰⏰⏰"
    git add .
    if ! git commit -m ${commitText}
    then
        echo -e "${RED}git commit失败${NC}🌧🌧🌧"
        exit 1
    fi
    if ! git push
    then
        echo -e "${RED}git push失败${NC}🌧🌧🌧"
        exit 1
    fi
    echo -e "${GREEN}提交代码成功${NC}🚀🚀🚀"
    echo -e "${GREEN}\n第五步:准备打Tag${NC}⏰⏰⏰"
    if git tag ${tag}
    then
        git push --tags
        echo -e "${GREEN}打Tag成功${NC}🚀🚀🚀"
    else
        echo -e "${RED}打Tag失败${NC}🌧🌧🌧"
        exit 1
    fi
}
#远程验证
remoteVerifyLib(){
    echo -e "${GREEN}\n可省步:开始远程验证:pod spec lint ${NC}⏰⏰⏰"
    if ! pod spec lint --skip-import-validation --allow-warnings --use-libraries --sources="${source1}"; then echo -e "${RED}验证失败${NC}🌧🌧🌧"; exit 1; fi
    echo -e "${GREEN}验证成功${NC}🚀🚀🚀"
}
#发布库
publishLib(){
    echo -e "${GREEN}\n第六步:准备发布${tag}版本${NC}⏰⏰⏰"
    if ! pod trunk push ${SpecName} --allow-warnings; then echo -e "${RED}发布${tag}版本失败${NC}🌧🌧🌧"; exit 1; fi
    echo -e "${GREEN}发布${tag}版本成功${NC}🚀🚀🚀"
}

#发布二进制
publishBinary(){
    echo -e "${GREEN}\n第七步:准备发布${tag}二进制版本${NC}⏰⏰⏰"
    echo -e "${GREEN}发布${tag}二进制版本成功${NC}🚀🚀🚀"
}
publish(){
    #
    echo -e "${GREEN}请输入提交内容:${NC}"
    read a
    commitText=${a}
    #
    echo -e "${GREEN}请输入tag:${NC}"
    read b
    tag=${b}
    #
    if [ -z "$commitText" ]; then
        echo -e "${RED}提交内容不能为空${NC}🌧🌧🌧"
        exit 1
    fi

    if [ -z "$tag" ]; then
        echo -e "${RED}提交Tag不能为空${NC}🌧🌧🌧"
        exit 1
    fi
    
    if [ -z "$SpecName" ]; then
        echo -e "${RED}请配置podspec的名称${NC}🌧🌧🌧"
        exit 1
    fi
    
    #
    pull
    #
    updatePodspec
    #
    localVerifyLib
    #
    pushAndTag
    #
    remoteVerifyLib
    #
    publishLib
    #
    publishBinary
}
publish