创建Aggregate的target

在Build Phases 添加Run Script,内容为

scriptFile=${SRCROOT}/universalA.sh
sh ${scriptFile}

universalA.sh放在工程根目录,内容为:

if [ "${ACTION}" = "build" ]then
echo "合并模拟器真机库"
target_Name=${PROJECT_NAME}echo "target_Name=${target_Name}"
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}.aecho "DEVICE_DIR_A=${DEVICE_DIR_A}"
#模拟器build生成的.a文件路径
SIMULATOR_DIR_A=${build_DIR}/Release-iphonesimulator/lib${PROJECT_NAME}.aecho "SIMULATOR_DIR_A=${SIMULATOR_DIR_A}"
#目标文件夹路径
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}echo "INSTALL_DIR=${INSTALL_DIR}"
#目标头文件文件夹路径
INSTALL_DIR_Headers=${SRCROOT}/Products/${PROJECT_NAME}/Headersecho "INSTALL_DIR_Headers=${INSTALL_DIR_Headers}"
#目标.a路径
INSTALL_DIR_A=${SRCROOT}/Products/${PROJECT_NAME}/lib${PROJECT_NAME}.aecho "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
#模拟器build
echo "开始编译iphonesimulator"
xcodebuild -target ${target_Name} -configuration Release -sdk iphonesimulator
#真机build
echo "开始编译iphoneos"
xcodebuild -target ${target_Name} -configuration Release -sdk iphoneos
#复制头文件到目标文件夹
echo "拷贝头文件"
echo "头文件路劲:"${DEVICE_DIR_INCLUDE}
cp -R ${DEVICE_DIR_INCLUDE} ${INSTALL_DIR_Headers}#合成模拟器和真机.a包
echo "开始合并.a库"
lipo -create "${DEVICE_DIR_A}" "${SIMULATOR_DIR_A}" -output "${INSTALL_DIR_A}"#打开目标文件夹
open "${INSTALL_DIR}"fi

如果是framework:

内容为:

# Sets the target folders and the final framework product.
# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
# 例如: FMK_NAME = "MyFramework"
FMK_NAME=${PROJECT_NAME}
# Install dir will be the final output to the framework.
# The following line create it in the root folder of the current project.
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
# Working dir will be deleted after the framework creation.
WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
# -configuration ${CONFIGURATION}
# Clean and Building both architectures.
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build
# Cleaning the oldest.
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
rm -r "${WRK_DIR}"
open "${INSTALL_DIR}"

合并模拟器和真机的静态库动态库aggregate相关推荐

  1. 制作模拟器和真机通用静态库

    通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac和iPhone的CPU不同,才造成了这种情况. 为了模拟器与真机之间切换调试的方便,制作通用版本非常有必要. 现在有 ...

  2. XCode 创建:静态库 动态库 Framework

    目录 使用 XCode 创建 .a 格式的静态库 使用 XCode 创建 .framework 格式的静态库 使用 XCode 创建 .dylib 格式的动态库 使用 XCode 创建 .framew ...

  3. Android识别模拟器,判断是模拟器还是真机

    文章目录 前言 原理 禁止模拟器安装apk 代码识别 验证 最后 前言 对于android开发者来说,模拟器是开发工具,但是对用户来说,可能就是薅羊毛.找漏洞的赚钱工具. 不管是活动风控还是内容保护等 ...

  4. Android Screen Monitor抓取模拟器与真机界面

    ASM(Android Screen Monitor)下载地址: https://code.google.com/archive/p/android-screen-monitor/ 获取ASM.jar ...

  5. iOS判断是模拟器还是真机

    [代码]iOS判断是模拟器还是真机 #if TARGET_IPHONE_SIMULATOR//模拟器 #elif TARGET_OS_IPHONE//真机 #endif 转载于:https://www ...

  6. 模拟器与真机的程序差别J2ME

    1. S60机器上文字需要设置如 public static final Font smallFont    = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_P ...

  7. Xcode无法启动模拟器或者真机

    这次遇到一个让人求生不得求死不能的事情,有个工程run后啥米都没发生,包括模拟器和真机都没有反应,我把头都快抓破了,着实的蛋疼,差点没重装xcode,最后终于在一位大神的感召下重生了,其实都是手贱的原 ...

  8. Appium移动端自动化测试--搭建模拟器和真机环境一

    目录 模拟器--安装Android Studio及Android SDK 模拟器--更改VDM默认存储路径 真机(Android)环境设置 真机--开启开发者模式 真机-- 打开USB调试 真机连接- ...

  9. 移动端自动化测试appium(6)--搭建模拟器和真机环境

    模拟器–安装Android Studio及Android SDK 推荐直接安装Android Studio,然后使用Android Studio安装SDK. 启动SDK Manager,安装自己所需要 ...

最新文章

  1. LayUI 走了,JDK17 来了
  2. ubuntu下php服务器搭建_Ubuntu服务器下搭建php运行环境的方法
  3. 【深度学习】基于PyTorch的模型训练实用教程之数据处理
  4. Mac 新建unix可执行文件
  5. php获取分辨率赋值,php如何获取客户端分辨率?实例教程
  6. linux上安装spark_hadoop_java_scala
  7. Linux-Shell基础(变量,字符串,数组)
  8. 数据结构 - 单链表(Linked List)实现在内存中实现数据以链表形式生成并根据序号排序
  9. 红橙Darren视频引申 第一次写NDK项目(Android studio 4.1.1)
  10. mysql数据库创建交叉表查询_sql – 我需要知道如何创建交叉表查询
  11. matlab imf1,NGPM_v1.4y GA多目标优化的程序 带约束 里面有教程 matlab 272万源代码下载- www.pudn.com...
  12. C#调用天气查询服务
  13. eclipse插件开发的打包
  14. CSS半透明磨砂效果实现
  15. 电磁干扰、电磁兼容性和电磁屏蔽区别及联系
  16. 第十一章:如何拆分项目目标?
  17. springboot网吧管理系统
  18. [*CTF2022]web题目复现及wp
  19. rust外服组建战队_rust怎么把人拉入队伍 | 手游网游页游攻略大全
  20. 启动hadoop组件时报错:(Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password))

热门文章

  1. MQTT 心跳和keepalive配置
  2. mybatis简化实现思路
  3. 5793. 【NOIP2008模拟】小S练跑步
  4. Mac OS X 下查看和设置JAVA_HOME
  5. Easyui combobox下拉框默认选中第一项
  6. linux平台下防火墙iptables原理(转)
  7. iOS常用动画 类封装
  8. 博问问题内容页面的前端优化
  9. c# 一些控件常用屬性
  10. MATLAB【六】 ———— matlab 随机散斑模拟