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

11
我正在尝试将一个arm64、armv7和armv7s的项目构建上传到TestFlight。它正在使用另一个项目的框架。但是该框架似乎仅为arm64而不是armv7构建(文件是为arm64构建的,而不是被链接的架构(armv7))。

问题在于如何制作包含所有体系结构的框架?我想保持项目分离。并且我不关心模拟器。我希望确保它是为发布版本构建的。
这是框架目标:

enter image description here

编辑: 我的项目基于Cordova。因此,它使用利用预构建框架的插件。有一些指南可以构建一个包含模拟器和设备的fat framework,然后通过lipo连接它。我需要的是我没有的设备体系结构。这是否意味着我需要三个来自arm64、armv7和armv7s的设备才能将它们全部连接起来?
2个回答

14

苹果已经在iOS 11中停止对32位的支持。您无法在iOS 11上运行32位应用程序,也无法在32位处理器上运行iOS 11。因此,您必须将部署目标设置为早于iOS 11的iOS版本以便使用您的框架。


1
哇!你说得对,那就是缺少的东西。TestFlight接受了这个二进制文件。非常感谢你! - huggie
太棒了!肯定为我节省了时间。只是一个打字错误——应该是“部署目标”。 - akshay1188
非常感谢您的回答。我一直被类似的问题困扰,尝试了数十种不同的解决方案,历时约8个小时,但这就是有效的方法。我通常不在StackOverflow上发帖,但只是想表达我的感激之情。 :-) - Developer990

1
你可以尝试创建一个聚合目标,并编写一个脚本来支持所有平台。这是我项目中的示例脚本。
unset TOOLCHAINS #Xcode 7.3 BUG FIX  https://dev59.com/QVoV5IYBdhLWcg3weu11

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接