gpt4 book ai didi

ios - 是否可以使用 bitcode 创建一个通用的 iOS 框架?

转载 作者:可可西里 更新时间:2023-11-01 03:08:45 25 4
gpt4 key购买 nike

据我了解,bitcode 允许生成具有中间二进制格式的二进制文件。所以这是编译到 ARM 或 x64 架构之前的步骤。

从 iOS 8 开始,可以为 iOS 创建“真正的”.framework 文件。但是,默认情况下,框架文件仅针对一种架构(模拟器、iPhone)编译。当一个人想要分发一个 .framework 文件时,最好提供一个与 iOS 模拟器兼容并且可以部署到 iPhone 的文件。可以找到使用 lipo 创建此类胖文件的不同脚本示例。

但是,是否可以仅分发编译为 bitcode 的 .framework 而不必创建具有不同架构的 fat 文件?

不幸的是,即使为我的 .framework 启用了位码:

  • 根据目标架构默认创建不同的文件
  • 即使似乎为框架目标启用了“存档”菜单,我也找不到结果,即使在我的管理器 View 中也是如此

我是否误解了 bitcode 的概念,或者我错过了什么?

最佳答案

您需要提供一个通用的平面框架。这是由 lipo 创建的.

  • 启用位码,Targets->Build Setting->Enable BitcodeYes
  • 添加构建目标以创建通用框架

    创建一个 Aggregate将以下脚本定位并复制到 Build Phrase -> Run Script :

    ######################    # Options    ######################    #verbose    set -x    REVEAL_ARCHIVE_IN_FINDER=false    FRAMEWORK_NAME="${PROJECT_NAME}"    SIMULATOR_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework"    DEVICE_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework"    UNIVERSAL_LIBRARY_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal"    FRAMEWORK="${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework"    ######################    # Build Frameworks    ######################    # Build for simulator    xcodebuild -target ${PROJECT_NAME} -sdk iphonesimulator -configuration ${CONFIGURATION} ARCHS="i386 x86_64" ONLY_ACTIVE_ARCH=NO clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator    # Build for device    xcodebuild -scheme ${PROJECT_NAME} -sdk iphoneos -configuration ${CONFIGURATION} ARCHS="armv7 armv7s arm64" ONLY_ACTIVE_ARCH=NO clean archive CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos    ######################    # Create directory for universal    ######################    rm -rf "${UNIVERSAL_LIBRARY_DIR}"    mkdir "${UNIVERSAL_LIBRARY_DIR}"    mkdir "${FRAMEWORK}"    ######################    # Copy files Framework    ######################    cp -r "${DEVICE_LIBRARY_PATH}/." "${FRAMEWORK}"    ######################    # Make an universal binary    ######################    lipo "${SIMULATOR_LIBRARY_PATH}/${FRAMEWORK_NAME}" "${DEVICE_LIBRARY_PATH}/${FRAMEWORK_NAME}" -create -output "${FRAMEWORK}/${FRAMEWORK_NAME}" | echo    # For Swift framework, Swiftmodule needs to be copied in the universal framework    if [ -d "${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then    cp -f ${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${FRAMEWORK}/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo    fi    if [ -d "${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then    cp -f ${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${FRAMEWORK}/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo    fi    ######################    # On Release, copy the result to release directory    ######################    OUTPUT_DIR="${PROJECT_DIR}/build/${FRAMEWORK_NAME}-${CONFIGURATION}-iphoneuniversal/"    rm -rf "$OUTPUT_DIR"    mkdir -p "$OUTPUT_DIR"    cp -r "${FRAMEWORK}" "$OUTPUT_DIR"    if [ ${REVEAL_ARCHIVE_IN_FINDER} = true ]; then    open "${OUTPUT_DIR}/"    fi

注意

  • bitcode 只打包在 archive 上为 iphoneos SDK 构建

  • otool -l -arch arm64 <yourframework_binary>|grep __LLVM检查是否包含位码,如果你没有指定 arch参数,不会有__LLVM , 自 otool只需打印一个主机架构(模拟器)。

关于ios - 是否可以使用 bitcode 创建一个通用的 iOS 框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35586516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com