首页 文章

构建多个体系结构的框架(arm64,armv7,armv7s)

提问于
浏览
11

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

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

这是框架目标:

enter image description here

EDIT: 我的项目是基于Cordova的 . 所以它使用的是一个使用预构建框架的插件 . 有一些指令用于构建一个包含模拟器和设备的胖框架,然后将其与 lipo 连接起来 . 我需要的是我没有的设备架构 . 这是否意味着我需要arm64,armv7和armv7s中的三个设备才能将它们完全连接起来?

2 回答

  • 0

    Apple已停止在iOS 11中支持32位 . 您既不能在iOS 11上运行32位应用程序,也不能在32位处理器上运行iOS 11 . 因此,您必须将部署目标设置为适用于您的框架的iOS 11之前的iOS版本 .

  • 5

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

    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}
    

相关问题