我有一个框架。它具有模拟器的体系结构以及设备的体系结构。当我们尝试上传代码应用商店时,该应用不允许这样做,并且错误摘要会从框架中删除模拟器架构。然后,我们运行lipo命令删除模拟器拱门。现在我们有两个框架副本。
我曾考虑过创建两个目标,一个目标使用的框架没有模拟器的架构,而另一个框架则使用所有的架构。但是,由于两个框架在捆绑包中具有相同的名称,因此Xcode始终考虑不使用模拟器拱门的框架。所以我无法在模拟器中运行它?
关于如何在不同目标中添加不同体系结构框架的任何建议?
而不是建议您使用此脚本来删除buid期间不需要的体系结构,而不是使用lipo命令来创建框架的单独版本:
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
如果您的框架文件随附文档等,则可能已在其中包含该脚本的某些版本。 (当我遇到这个问题时,就是这种情况。)
/bin/sh
/bin/sh <path to the script file>
现在,您将可以在SIM卡上运行,并且可以毫无问题地提交到商店。