我尝试将针对arm64,armv7和armv7s的项目构建上传到TestFlight。它正在使用另一个项目的框架。但是frameowork似乎只为arm64而不是arm64(file was built for arm64 which is not the architecture being linked (armv7)
)构建。
问题是如何使框架包含所有体系结构?我希望将项目分开。而且我不关心模拟器。我想确保它是为了发布而构建的。
这是框架目标:
编辑:我的项目是基于Cordova的。所以它使用的是一个使用预构建框架的插件。有一些说明用于构建一个包含模拟器和设备的胖框架,然后将其与lipo
连接起来。我需要的是我不具备的设备架构。这是否意味着我需要arm64,armv7和armv7s中的三个设备才能将它们连接起来?
答案 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}