ios - 我如何使用位码选项制作胖框架?

标签 ios xcode bitcode

环境:XCode 7.0.1 模块: objective-C bundle 类型:框架

您好,我正在尝试创建一个框架来支持 armv7、armv7s、arm64、i386 和 x86_64。我正在使用聚合来制作脂肪库。在聚合脚本中,我正在运行两个 xcodebuild 命令 1. 用于 armv7、armv7s 和 arm64 以及 2. 用于 i386 和 x86_64 架构。此外,我在目标build设置下设置了 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 之后,我无法在启用位码的应用程序中使用它。运行 otool -l framework_binary | 后grep -LLVM,我没有看到启用位码的标志或 __LLVM。

Lipo 从 fat 二进制文件中删除位码。有没有办法在运行 lipo 命令时保留位码?

更正:根据 Nestor 的回复,我将 otool 命令运行为 otool -l -arch armv7 framework_binary | grep LLVM 令我惊讶的是,我可以看到 segname __LLVM clang。但是,当我将相同的 fat 框架二进制文件集成到我的项目中时,它在模拟器上构建良好,但在设备上运行时抛出以下错误 - ld: 'MyBinary' 不包含位码。您必须在启用位码的情况下重建它(Xcode 设置 ENABLE_BITCODE),从供应商处获取更新的库,或者为此目标禁用位码。用于架构 armv7

最佳答案

幸运的是,这只是otool 报告的问题,而不是lipo;你必须添加 -arch 参数:

otool -arch arm64 -l myLipoOutput.a

来源:http://www.openradar.me/radar?id=6301306440384512

关于ios - 我如何使用位码选项制作胖框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33106117/

相关文章:

ios - 如何在 nevercode.io 上添加多个配置文件

ios - 如何从我的 iOS 应用程序发送邮件 - SWIFT

c - iOS 库到 BitCode

iphone - 在 core-data 中保存 unix timestamp 将其转换为负整数

ios - 在 Facebook 上发布多张照片,并在单个墙贴中发布状态消息

ios - 需要帮助在多个 View 上实现滚动条

ios - 在 Xcode 9.1 中将 watchOS 1 升级到 watchOS4 后 Enable Bitcode 未设置为 Yes

Xcode 在准备存档时花费太多时间来编译位代码

ios - iPhone 6/6s 和 5/5s 的图像分辨率

xcode - 如何修复 Xcode 4 无用的取消注释行为