一、背景
随着业务的扩展、项目体积的增大,
CocoaPods
组件库越来越多,每次重新编译的时分速度越来越慢,这给我们提出了需求提高编译速度的需求。二进化计划许多,本次主要讲一起发布源码库和二进化库入门。
二、详细实现过程
第一步:
创立pod 工程
pod lib create GGZBUsinessKit
第二步:
创新新的scheme,这一步很重要,用于后续xcodebuild打包
第三步
将新的scheme设置static framwork格局
第四步:
在GGZBUsinessKit的Development Pods目录下创立测验文件
GGZBUsinessKit.h是二进制揭露头文件 GGZTest类是测验文件 留意:需求把需求外部引用的文件参加public header ,打framework静态库才会拷贝到headers目录下
第五步:
新建GGZBUsinessKit-binary.podspec二进制对应的podspec文件,执行framework的路径,核心信息如下,详细信息看我下面的github里信息即可。
s.ios.vendored_frameworks = 'GGZBUsinessKit/Frameworks/GGZBUsinessKit.framework'
第六步:
脚本编译本地的静态库二进制
# 编译
function** build_framework {
echo "======build_framework start======"
#若支撑bitCode,需加参数:-fembed-bitcode
xcodebuild -workspace ${workspace}.xcworkspace -scheme ${scheme} -sdk iphoneos -configuration "Release" OTHER_CFLAGS="-fembed-bitcode" BUILD_DIR="../${build_dir}" build || exit 1
xcodebuild -workspace ${workspace}.xcworkspace -scheme ${scheme} -sdk iphonesimulator -configuration "Release" ONLY_ACTIVE_ARCH=NO EXCLUDED_ARCHS="arm64" OTHER_CFLAGS="-fembed-bitcode" BUILD_DIR="../${build_dir}" build || exit 1
#删除模拟器arm64架构(第二种方法)
#cd /Users/gegaozhao/Desktop/person/工程化1/GGZBUsinessKit/Example/build/Release-iphonesimulator/GGZBUsinessKit/GGZBUsinessKit.framework
#lipo -remove arm64 ${framework_name} -o ${framework_name}
#cd ../../../../
#CURRENT_DIR=$(cd $(dirname $0); pwd)
echo "======build_framework end======"
}
# 兼并
function** build_fat_framework {
echo "======build_fat_framework start======"
mkdir -p ${out_dir}/
cp -R ${build_dir}/Release-iphoneos/${framework_name}/${framework_name}.framework ${out_dir}
lipo -create ${build_dir}/Release-iphonesimulator/${framework_name}/${framework_name}.framework/${framework_name} ${build_dir}/Release-iphoneos/${framework_name}/${framework_name}.framework/${framework_name} -output ${out_dir}/${framework_name}.framework/${framework_name} || exit 1
echo "======build_fat_framework end======"
}
# 将最终的二进制库转移到最终目录下
function** store_final_framework {
echo "======build final framework start======"
if [ -d ${final_framework_dir} ];**then**
echo "删除 ${final_framework_dir}"
rm -R ${final_framework_dir}
fi
echo "创立 ${final_framework_dir}"
mkdir ${final_framework_dir}
cp -R ${out_dir}/${framework_name}.framework ${final_framework_dir}
echo "======build final framework end======"
}
留意:iOS10之后模拟器会包含arm64架构,兼并生成fat库会提示模拟器架构和真机架构抵触,这儿需求模拟器二进制库的arm64架构剔除下!
第七步:
发布二进制库和源码脚本
# 装备podspec版别号
function podspec_verion_config {
echo "======build_config start======"
old_build_version=`grep -E 's.version.*=' ../GGZBUsinessKit.podspec | tr -d "'a-z= " | sed "s/\.//1"`
increment_version $old_build_version
replae_podspec_version
echo "======build_config end======"
}
#最后一个数字+1
function increment_version {
declare -a part=( ${1//\./ } )
declarenew
declare -i carry=1
CNTR=${#part[@]}-1
len=${#part[CNTR]}
new=$((part[CNTR]+carry))
part[CNTR]=${new}
build_version="${part[*]}"
echo "new version is: ${build_version// /.}"
}
#详细看github里详细代码
function replae_podspec_version {
echo "最新版别:${build_version// /.}"
new="${build_version// /.}"
python3 ../increase_version_podspec.py "../${pod_source_name}.podspec" "${new}"
python3 ../increase_version_podspec.py "../${pod_binary_name}.podspec" "${new}"
}
# 检测是否需求提交信息 && 有的话就进行提交长途库房 && 打tag提交到长途
function detect_code_commit {
echo "======detect_code_commit start======"
git add ../
git commit -m '提交静态库和更新后的代码逻辑'
git push --**set**-upstream origin
echo "======detect_code_commit start======"
}
# 打tag
function push_new_tag {
echo "======add_new_tag start======"
git tag "${build_version// /.}"
git push origin --tags
echo "======add_new_tag end ======"
}
# pod发布
function** pod_release_publish {
cd ../
echo "======pod source publish start======"
pod repo push GGZSpec ${pod_source_name}.podspec --use-libraries --allow-warnings --skip-import-validation --skip-tests --verbose
echo "======pod source publish end======"
echo "======pod binary publish start======"
pod repo push GGZSpec ${pod_binary_name}.podspec --use-libraries --allow-warnings --skip-import-validation --skip-tests --verbose
echo "======pod binary publish end======"
}
这儿先去提交修正信息,打tag,然后发布二进制库和源码库
三、其他
代码详细信息:github.com/GE-GAO-ZHAO…
四、后语
二进化计划这儿采用双源形式,使用xcodebuild打的静态库,还有其他方法如ruby环境变量和官方cocoapods插件实现二进库打包等方法许多,可以参考我的上一篇文档。