为多种架构构建框架(arm64、armv7、armv7s)

Build framework for multiple architectures (arm64, armv7, armv7s)

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

问题是如何制作包含所有架构的框架?我想让项目分开。我不喜欢模拟器。我想确保它是为发布而构建的。

这是框架目标:

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

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

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

unset TOOLCHAINS #Xcode 7.3 BUG FIX  

# 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}