在xcode中的两个不同目标中添加具有不同体系结构的现有框架?

问题描述 投票:0回答:1

我有一个框架。它具有模拟器的体系结构以及设备的体系结构。当我们尝试上传代码应用商店时,该应用不允许这样做,并且错误摘要会从框架中删除模拟器架构。然后,我们运行lipo命令删除模拟器拱门。现在我们有两个框架副本。

  1. MyFramework.framework(不带模拟器拱门)
  2. [MyFramework.framework(带有所有拱门)

我曾考虑过创建两个目标,一个目标使用的框架没有模拟器的架构,而另一个框架则使用所有的架构。但是,由于两个框架在捆绑包中具有相同的名称,因此Xcode始终考虑不使用模拟器拱门的框架。所以我无法在模拟器中运行它?

关于如何在不同目标中添加不同体系结构框架的任何建议?

ios xcode target
1个回答
0
投票

而不是建议您使用此脚本来删除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

如果您的框架文件随附文档等,则可能已在其中包含该脚本的某些版本。 (当我遇到这个问题时,就是这种情况。)

  • 将该脚本作为.sh文件添加到您的项目中
  • 在“嵌入框架”阶段之后,在目标的构建阶段中添加“运行脚本”阶段。 (矿山目前是最后一个阶段)。
  • 将“ shell”行设置为/bin/sh
  • 将命令设置为/bin/sh <path to the script file>

现在,您将可以在SIM卡上运行,并且可以毫无问题地提交到商店。

© www.soinside.com 2019 - 2024. All rights reserved.