为多种体系结构构建框架(arm64,armv7,armv7s)

时间:2018-02-22 09:29:47

标签: ios ios-frameworks

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

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

这是框架目标:

enter image description here

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

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:0)

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

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}