上传到 App Store 时不支持的架构
Posted
技术标签:
【中文标题】上传到 App Store 时不支持的架构【英文标题】:Unsupported Architectures when uploading to App Store 【发布时间】:2016-04-05 01:31:41 【问题描述】:我在我的项目中实现了一个新库(名为 Eureka),现在尝试上传到 App Store/TestFlight 时出现错误。
这些包括“不支持的架构”、“无效的段对齐”和“二进制文件无效。这个二进制文件似乎不是用 Apple 的链接器构建的”。
在实施 Eureka 之前,我没有任何这些错误。我正在运行 Xcode 7.3
我应该注意我是通过 Carthage 安装框架的。
【问题讨论】:
@BraneDullet 该链接已在我下面的答案中提供 【参考方案1】:问题在于 Xcode 为模拟器 (i386) 和设备 (x86_64) 预编译了动态库。您可以implement this run script 删除未使用的架构。
【讨论】:
【参考方案2】:使用以下运行脚本代码从添加的库、框架中删除不受支持的架构。
项目名称 -> 构建阶段 -> 通过以下代码创建新的运行脚本。就是这样。编码愉快!!!
echo "Target architectures: $ARCHS"
APP_PATH="$TARGET_BUILD_DIR/$WRAPPER_NAME"
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"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")
FRAMEWORK_TMP_PATH="$FRAMEWORK_EXECUTABLE_PATH-tmp"
# remove simulator's archs if location is not simulator's directory
case "$TARGET_BUILD_DIR" in
*"iphonesimulator")
echo "No need to remove archs"
;;
*)
if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "i386") ; then
lipo -output "$FRAMEWORK_TMP_PATH" -remove "i386" "$FRAMEWORK_EXECUTABLE_PATH"
echo "i386 architecture removed"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
fi
if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "x86_64") ; then
lipo -output "$FRAMEWORK_TMP_PATH" -remove "x86_64" "$FRAMEWORK_EXECUTABLE_PATH"
echo "x86_64 architecture removed"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
fi
;;
esac
echo "Completed for executable $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")
done
【讨论】:
【参考方案3】:使用 dwarfdump 检查符号和切片匹配
dwarfdump --uuid path_to_dSYM_or_binary
这将为您提供 UUID 和切片的列表。您还会发现 UUID 会出现在 Apple 的崩溃报告中。
lipo 删除不需要的架构
lipo -remove <architecture> -output <binary_name> <binary_name>
【讨论】:
以上是关于上传到 App Store 时不支持的架构的主要内容,如果未能解决你的问题,请参考以下文章
Ant Media Server 的 iOS 框架不被 App Store 接受?
上传到 App Store 的最低 Xcode 版本(截至 2016 年 2 月)
上传到 App Store 失败:找不到“adamId - 平台”的版本
交付到 App Store 时,Fastlane 框架不支持的屏幕尺寸