博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【iOS开发】在Xcode中做一个 a包合成脚本
阅读量:6273 次
发布时间:2019-06-22

本文共 2325 字,大约阅读时间需要 7 分钟。

目标

楼主最近做了一个静态库工程。因为.a库是会生成模拟器和真机两个不同的包的,最后使用的时候需要使用脚本把两个包合并成一个包。并且还要把头文件放好。每次都这样做,觉得非常蛋疼,于是就研究了一下shell脚本,写了一个能自动合成.a包,并且把头文件放好的脚本。这样就可以做一个懒人了。

这就是我们的目标。文件按照这种目录放好。

  • 所有文件放在MySDK里面
  • Headers里面存放所有的头文件
  • 真机和模拟器合并之后的 .a包在MySDK目录下

关于静态库的相关知识,请看这位朋友的文章

建立一个.a库工程

由于建立.a库工程并不是我们今天的重点,所以就简单的带过。

  • 1.建立一个叫做MySDK的静态库工程

  • 2.在MySDK类中写一个sayHello方法

建立一个Aggregate target

我们可以在Aggregate里面执行脚本

  • 1.添加一个target

  • 2.选择Aggregate,名字为HeCheng

  • 3.新建一个运行脚本

接下来我们就可以在Run Script里写我们的脚本了

写脚本

把下面的脚本复制到Run Script里面

if [ "${ACTION}" = "build" ]then#要build的target名target_Name=${PROJECT_NAME}    echo "target_Name=${target_Name}"#build之后的文件夹路径build_DIR=${SRCROOT}/build    echo "build_DIR=${build_DIR}"#真机build生成的头文件的文件夹路径DEVICE_DIR_INCLUDE=${build_DIR}/Release-iphoneos/include/${PROJECT_NAME}    echo "DEVICE_DIR_INCLUDE=${DEVICE_DIR_INCLUDE}"#真机build生成的.a文件路径DEVICE_DIR_A=${build_DIR}/Release-iphoneos/lib${PROJECT_NAME}.a    echo "DEVICE_DIR_A=${DEVICE_DIR_A}"#模拟器build生成的.a文件路径SIMULATOR_DIR_A=${build_DIR}/Release-iphonesimulator/lib${PROJECT_NAME}.a    echo "SIMULATOR_DIR_A=${SIMULATOR_DIR_A}"#目标文件夹路径INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}    echo "INSTALL_DIR=${INSTALL_DIR}"#目标头文件文件夹路径INSTALL_DIR_Headers=${SRCROOT}/Products/${PROJECT_NAME}/Headers    echo "INSTALL_DIR_Headers=${INSTALL_DIR_Headers}"#目标.a路径INSTALL_DIR_A=${SRCROOT}/Products/${PROJECT_NAME}/lib${PROJECT_NAME}.a    echo "INSTALL_DIR_A=${INSTALL_DIR_A}"#判断build文件夹是否存在,存在则删除if [ -d "${build_DIR}" ]thenrm -rf "${build_DIR}"fi#判断目标文件夹是否存在,存在则删除该文件夹if [ -d "${INSTALL_DIR}" ]thenrm -rf "${INSTALL_DIR}"fi#创建目标文件夹mkdir -p "${INSTALL_DIR}"#build之前clean一下xcodebuild -target ${target_Name} clean#模拟器buildxcodebuild -target ${target_Name} -configuration Release -sdk iphonesimulator#真机buildxcodebuild -target ${target_Name} -configuration Release -sdk iphoneos#复制头文件到目标文件夹cp -R "${DEVICE_DIR_INCLUDE}" "${INSTALL_DIR_Headers}"#合成模拟器和真机.a包lipo -create "${DEVICE_DIR_A}" "${SIMULATOR_DIR_A}" -output "${INSTALL_DIR_A}"#打开目标文件夹open "${INSTALL_DIR}"fi复制代码

运行程序

选中我们刚才创建的HeCheng 这个target,然后运行

程序会编译一段时间,这个工程的话大概就是10秒钟就可以了。完成之后程序会打开一个文件夹,就是我们所期待的MySDK文件夹了

我们这个脚本,将合成后的.a库和头文件都按照我们想要的方式放好了。其他工程要用这个SDK的话,既可以直接拉MySDK文件夹过去就可以了。如果你想要其他的放法,比如不要Headers文件夹,那就,改一下脚本就可以了。

什么?你不相信.a包已经合成了?

在终端使用命令 “lipo -info .a文件路径”,看到 armv7 i386 x86_64 arm64  说明已经合成成功了

脚本解释

  • 由于文章篇幅过长,所以我另开了一篇文章。请移步
  • 本章Demo已存放在GitHub上。Demo下载地址

转载地址:http://nmlpa.baihongyu.com/

你可能感兴趣的文章
阿里云RPA(机器人流程自动化)干货系列之六:客户端安装及激活
查看>>
我最喜欢的快速排序算法之一
查看>>
5G将为农村地区做些什么?
查看>>
【翻译】Sklearn 与 TensorFlow 机器学习实用指南 —— 第11章 训练深层神经网络(下)...
查看>>
SQLflow:基于python开发的分布式机器学习平台, 支持通过写sql的方式,运行spark, 机器学习算法, 爬虫...
查看>>
机器学习可行性与VC dimension
查看>>
Nacos 发布 1.0.0 GA 版本,可大规模投入到生产环境
查看>>
关于ovirt主机即做存储又兼虚拟机主机的官方文档说明
查看>>
grep匹配结尾字符串的特殊情况
查看>>
第三方农资电商平台大丰收获华创资本数亿元C轮融资
查看>>
“虎鲸跳跃” 完成300万美元Pre-A轮融资,投资方为蓝湖资本及险峰长青
查看>>
JSON简介
查看>>
深圳安泰创新完成数千万新一轮融资,贝森资本领投
查看>>
当 Kubernetes 遇到阿里云
查看>>
MongoDB与Java 经典面试题、课程,好资源值得收藏
查看>>
标普全球获准进入中国市场,本土评级机构压力山大!
查看>>
阿里云基础产品技术月刊 2019年1月
查看>>
Go 语言的垃圾回收演化历程:垃圾回收和运行时问题
查看>>
苹果收购硅谷创业公司 Silk Labs,将继续布局 AI 和 IoT
查看>>
Idea开发Tomcat应用的热部署配置
查看>>