ios - 在 xcode 中的两个不同目标中添加具有不同架构的现有框架?

标签 ios xcode target

我有一个框架。它具有模拟器的架构和设备的架构。当我们尝试上传代码应用程序商店时,它不允许并且错误汇总以从框架中删除模拟器拱门。然后我们运行 lipo 命令来删除模拟器拱门。现在我们有两个框架副本。

  1. MyFramework.framework(不带模拟器拱门)
  2. 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/

相关文章:

ios - 视频播放GPUImage和swift

ios - ScrollView 向上移动一个 uitextfield 而不是其他

ios - XCTestCase 不支持项目类

css - 如何在使用 ">"定位类时添加悬停过渡

ios - 检测运行目标是App Extension还是iOS App

ios - NSMutableArray 中的 NSDictionary 在我的整个 for 循环中发生变化

ios - Facebook Messenger 撰写预定义消息

ios - 在 iOS 7.1 应用程序 xcode 5.1 中获取数字百分比时遇到问题

ios - 在 x 秒后快速删除标签

css - 选择一个 anchor (<a>) 和一个具有相同 :target 的 ID-ed div