【问题标题】:Build framework for multiple architectures (arm64, armv7, armv7s)为多种架构构建框架(arm64、armv7、armv7s)
【发布时间】:2018-08-02 02:09:12
【问题描述】:

我正在尝试将针对 arm64、armv7 和 armv7s 的项目构建上传到 TestFlight。它正在使用来自另一个项目的框架。但该框架似乎只为 arm64 而不是 arm64 (file was built for arm64 which is not the architecture being linked (armv7)) 构建。

问题是如何使框架包含所有架构?我想保持项目分开。而且我不关心模拟器。我想确保它是为发布而构建的。

这是框架目标:

编辑:我的项目基于 Cordova。所以它使用了一个利用预构建框架的插件。那里有构建胖框架的说明,包含模拟器和设备,然后将其与lipo 连接。我需要的是我没有的设备的架构。这实际上是否意味着我需要 arm64、armv7 和 armv7s 中的三个设备才能将它们完全连接起来?

【问题讨论】:

    标签: ios ios-frameworks


    【解决方案1】:

    Apple 已停止在 iOS 11 中支持 32 位。您既不能在 iOS 11 上运行 32 位应用程序,也不能在 32 位处理器上运行 iOS 11。因此,您必须为您的框架将 Deployment Target 设置为早于 iOS 11 的 iOS 版本。

    【讨论】:

    • 哇!你是对的,那是缺少的。 TestFlight 接受了二进制文件。非常感谢!
    • 太棒了!肯定节省了我的时间。只是一个错字 - 它应该是 Deployment Target
    • 非常感谢您的回答。我一直遇到类似的问题,在 8 小时内尝试了数十种不同的解决方案后,这就是有效的方法。我通常从不在 StackOverflow 上发帖,只是想表达我对此的感激之情。 :-)
    【解决方案2】:

    您可以尝试创建一个聚合目标并编写一个支持所有平台的脚本。这是我的一个项目中的示例脚本。

    unset TOOLCHAINS #Xcode 7.3 BUG FIX  http://stackoverflow.com/questions/36184930/xcodebuild-7-3-cant-enable-bitcode
    
    # define output folder environment variable
    
    C_PROJECT_NAME="<<YOUR_FRAMEWORK_NAME>>"
    
    UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
    
    # Step 1. Build Device and Simulator versions
    xcodebuild -target <<YOUR_FRAMEWORK_NAME>> ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
    
    xcodebuild -target <<YOUR_FRAMEWORK_NAME>> ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 -arch x86_64 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
    
    mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
    
    rm -rf ./${C_PROJECT_NAME}.framework
    cp -R ${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/${C_PROJECT_NAME}.framework ./
    
    # Step 2. Create universal binary file using lipo
    
    lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${C_PROJECT_NAME}.framework/${C_PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${C_PROJECT_NAME}.framework/${C_PROJECT_NAME}"
    
    mv ${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME} ./${C_PROJECT_NAME}.framework/${C_PROJECT_NAME}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      相关资源
      最近更新 更多