我有一个框架。它具有模拟器的架构和设备的架构。当我们尝试上传代码应用程序商店时,它不允许并且错误汇总以从框架中删除模拟器拱门。然后我们运行 lipo 命令来删除模拟器拱门。现在我们有两个框架副本。
- MyFramework.framework(不带模拟器拱门)
- MyFramework.framework(包含所有拱门)
我想创建两个目标,一个具有没有模拟器拱门的框架,另一个具有所有拱门。 但由于两个框架在 bundle 中具有相同的名称,Xcode 始终考虑没有模拟器拱门的框架。所以我无法在模拟器中运行它?
关于如何在不同目标中添加不同架构框架有什么建议吗?
最佳答案
我建议使用此脚本在构建过程中删除不需要的架构,而不是使用 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
如果您的框架文件与文档等一起打包,则该脚本的某些版本可能已包含在其中。 (当我遇到这个问题时,我就是这种情况。)
- 将该脚本作为 .sh 文件添加到您的项目中
- 在“嵌入框架”阶段之后的目标构建阶段中添加“运行脚本”阶段。 (我的目前是最后一个阶段)。
- 将“shell”行设置为
/bin/sh
- 将命令设置为
/bin/sh <path to the script file>
现在您将能够在 SIM 卡上运行并毫无问题地提交到商店。
关于ios - 在 xcode 中的两个不同目标中添加具有不同架构的现有框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59490243/