一、背景
随着业务的扩展、项目体积的增大,
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//\./ } )
declare new
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插件实现二进库打包等方式很多,可以参考我的上一篇文档。
回顾2022,展望2023,我正在参与2022年终总结征文大赛活动」