一、背景

随着业务的扩展、项目体积的增大,CocoaPods组件库越来越多,每次重新编译的时分速度越来越慢,这给我们提出了需求提高编译速度的需求。二进化计划许多,本次主要讲一起发布源码库和二进化库入门。

二、详细实现过程

第一步:

创立pod 工程

    pod lib create GGZBUsinessKit

第二步:

创新新的scheme,这一步很重要,用于后续xcodebuild打包

iOS组件二进化之双源发布

iOS组件二进化之双源发布

第三步

将新的scheme设置static framwork格局

iOS组件二进化之双源发布

第四步:

在GGZBUsinessKit的Development Pods目录下创立测验文件

iOS组件二进化之双源发布
GGZBUsinessKit.h是二进制揭露头文件 GGZTest类是测验文件 留意:需求把需求外部引用的文件参加public header ,打framework静态库才会拷贝到headers目录下

iOS组件二进化之双源发布

第五步:

新建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插件实现二进库打包等方法许多,可以参考我的上一篇文档。