环境:XCode 7.0.1模块:Objective-C Bundle类型:框架
嗨,我正在尝试创建一个支持armv7,armv7s,arm64,i386和x86_64的框架 . 我正在使用聚合来制作胖库 . 在聚合脚本中,我运行两个xcodebuild命令1.用于armv7,armv7s和arm64以及2.用于i386和x86_64架构 . 另外,我在目标构建设置下设置了Enable Bitcode = YES和Other C Flags = -fembed-bitcode . 作为预防性的消息,我在xcodebuild命令中添加了ENABLE_BITCODE = YES和OTHER_CFLAGS =“ - fembed-bitcode”选项
我的xcode构建命令如下 -
#Build The framework Target for iPhoneOS
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${AN_TARGET}"
ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphoneos
BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"
CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}" SYMROOT="${SYMROOT}"
ARCHS="armv7 armv7s arm64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION
#Build The framework Target for iPhoneSimulator
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${AN_TARGET}"
ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphonesimulator
BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"
CONFIGURATION_BUILD_DIR="${IPHONE_SIMULATOR_BUILD_DIR}" SYMROOT="${SYMROOT}"
ARCHS="i386 x86_64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION
在运行上面两个命令之后,我将这两个构建组合在一起,使用下面的命令创建一个胖框架二进制文件
# create a fat Framework
lipo -create
"${IPHONE_DEVICE_BUILD_DIR}/${PROJECT_NAME}.framework/${PROJECT_NAME}"
"${IPHONE_SIMULATOR_BUILD_DIR}/${PROJECT_NAME}.framework/${PROJECT_NAME}" -
output "${FRAMEWORK_FOLDER}/${AN_END_USER_FRAMEWORK_NAME}"
我面临的问题是在创建lipo之后,我无法在启用bitcode的应用程序中使用它 . 运行 otool -l framework_binary | grep -LLVM
后,我看不到bitcode启用标志或__LLVM .
Lipo从脂肪二进制中移除了bitcode . 有没有办法在运行lipo命令时保留bitcode?
更正:根据Nestor的回复,我运行otool命令为 otool -l -arch armv7 framework_binary | grep LLVM
,令我惊讶的是,我可以看到segname __LLVM clang . 但是,当我将相同的胖框架二进制文件集成到我的项目中时,它在模拟器上构建正常,但在设备上运行时会抛出以下错误 - ld:'MyBinary'不包含bitcode . 您必须在启用bitcode(Xcode设置ENABLE_BITCODE)的情况下重建它,从供应商处获取更新的库,或禁用此目标的bitcode . 对于架构armv7
4 回答
令人高兴的是,这只是
otool
报道的一个问题,而不是lipo
;你必须添加-arch
参数:资料来源:http://www.openradar.me/radar?id=6301306440384512
这很奇怪,没有太多文档可以做到这一点,最后我使用这个命令:
将BITCODE_GENERATION_MODE = bitcode标志添加到xcodebuild命令
尝试使用存档作为手臂切片而不是构建
之后运行lipo合并模拟器和手臂 .
然后运行
otool -arch arm64 -l myLipoOutput.a
,它应该工作 .它看起来像是Xcode 7.0.1中的一个错误 . 我有同样的问题,并将Xcode降级到版本7修复它 .
Update: 实际上它可能是Xcode 7中的一个在7.0.1中修复的错误 - this SO answer为我解决了这个问题 .