第一部分:私有库制作流程
1. 搭建私有库之前必须要先创建索引库
- 首先检查当前电脑的索引库: ➜ pod repo
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.本地验证
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