用lipo合并模拟器Framework与真机Framework
来源:互联网 发布:单片机通信协议哪种好 编辑:程序博客网 时间:2024/05/22 00:35
源链接:http://devonios.com/xcode-lipo-framework.html
如果写了一个Framework,根据Build时选择的机器类型,会分为模拟器Framework和真机Framework,两者是不能混用的。
此时可以通过配置一个Run Script,在Script中使用lipo命令来合并两个版本的Framework,重新生成一个新的Framework,这个Framework将同时支持在模拟器和真机上运行。
首先,在配置Run Script前,我们可以先检查下,Framework的类型,既查看Framework支持的机器架构:
打开【windows】-【Projects】,左侧选择项目,右侧点击Derived Data,打开目录后进入Build的主目录:
这个两个目录下包含了生成的Framework文件夹,第一个是真机、第二个是模拟器(当前使用的是Debug模式)。
现在我们分别对这两个目录中的Framework进行检测:
Debug-iphoneos(真机)目录下的Framework(Framework其实是个文件夹,命令中要再往下一层,使用以项目名称命名的一个二进制文件)
MiniPC:~ lijl$ lipo -info /Users/lijl/Library/Developer/Xcode/DerivedData/SwiftCommon-dyhotzllcfgqjibahyytumthguvh/Build/Products/Debug-iphoneos/SwiftCommon.framework/SwiftCommon Architectures in the fat file: /Users/lijl/Library/Developer/Xcode/DerivedData/SwiftCommon-dyhotzllcfgqjibahyytumthguvh/Build/Products/Debug-iphoneos/SwiftCommon.framework/SwiftCommon are: armv7 arm64 MiniPC:~ lijl$
真机Framework的结果是:armv7 arm64。可见,如果把这个Framework运行在模拟器中,肯定会报错,因为模拟器架构是x86_64的(以目前最新的设备)
Debug-iphonesimulator(模拟器)目录下的Framework:
MiniPC:~ lijl$ lipo -info /Users/lijl/Library/Developer/Xcode/DerivedData/SwiftCommon-dyhotzllcfgqjibahyytumthguvh/Build/Products/Debug-iphonesimulator/SwiftCommon.framework/SwiftCommon Non-fat file: /Users/lijl/Library/Developer/Xcode/DerivedData/SwiftCommon-dyhotzllcfgqjibahyytumthguvh/Build/Products/Debug-iphonesimulator/SwiftCommon.framework/SwiftCommon is architecture: x86_64MiniPC:~ lijl$
模拟器Framework的结果是x86_64。可见这个库只能运行在模拟器中,真机设备是无法运行的。
接下来,我们要对这2个库(其实是Framework目录下2个可执行文件)进行合并。
在项目的Build Phases中,新建一个Run Script,输入下面内容:
(我测试了很久,下面这个修改后的Run Script会更加通用,不会出错)
if [ "${ACTION}" = "build" ]thenINSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.frameworkDEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.frameworkSIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.frameworkif [ -d "${INSTALL_DIR}" ]thenrm -rf "${INSTALL_DIR}"fimkdir -p "${INSTALL_DIR}"cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"#open "${DEVICE_DIR}"#open "${SRCROOT}/Products"fi
这段shell代码其实很简单,前面一大部分是申明一些目录路径,最后使用lipo命令进行合并操作。
在修改这个代码过程中,也许要学习下Xcode的全局变量,代码中那些${}值,都是Xcode自带的变量,详情请参考:Xcode环境变量。
现在,当项目再次Build时,就会在项目目录下面出现Products目录,里面包含了合并后的Framework文件夹。
使用lipo -info来检测下:
MiniPC:~ lijl$ lipo -info /Users/lijl/Documents/Self\ Project/Cocoa\ Touch\ Framework/SwiftCommon/Products/SwiftCommon.framework/SwiftCommon Architectures in the fat file: /Users/lijl/Documents/Self Project/Cocoa Touch Framework/SwiftCommon/Products/SwiftCommon.framework/SwiftCommon are: x86_64 armv7 arm64 MiniPC:~ lijl$
成功的集成了X86_64和arm,这样真机与模拟器都可以用啦
- 用lipo合并模拟器Framework与真机Framework
- 用lipo合并模拟器Framework与真机Framework【转载】
- 合并模拟器Framework与真机Framework
- lipo合并真机模拟器
- iOS开发之制作framework并将模拟器Framework与真机Framework合并
- 合并真机和模拟器两个framework
- 真机 模拟器 framework 终端合并
- ios framework 真机和模拟器合并
- lipo 模拟器.a 真机.a 合并
- iOS framework 合并真机和模拟器run Scripte
- Swift工程下,合并真机和模拟器framework
- iOS 关于真机和模拟器framework合并
- 合并真机和模拟器的framework的可执行文件
- iOS 合并真机和模拟器的.framework
- 对百度地图SDK中的真机framework和模拟器framework合并时遇到的问题
- iOS 自动生成framework并自动进行模拟器和真机framework合并
- 对百度地图SDK中的真机framework和模拟器framework合并时遇到的问题,sdkframework
- 关于真机模拟器framework和.a合并为通用的方法
- CPU测试
- Android 拍照或从本地相册选取图片
- Why Django paginator take long time to page?
- JZOJ 4604 树【NOIP2016模拟7.11】
- 终端,语言确定
- 用lipo合并模拟器Framework与真机Framework
- windows7 命令行下执行java 命令乱码
- 前端面试题(经典)
- CSS图像替换:文本缩进,负边距以及更多方法
- 常用时间格式的转化
- Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK
- 跳转语句break、continue. return
- Android Studio MAC版快捷键以及生命周期介绍
- HTML适配 css代码根据屏幕大小适配 导入自己想要的字体