我在我的项目中实现了一个新库(名为Eureka),现在我在尝试上传到App Store / TestFlight时遇到错误。
这些包括"不支持的架构","无效的段对齐"和"二进制文件无效..这个二进制文件似乎不是用Apple&#39构建的; s链接器"。
在实施Eureka之前,我没有遇到任何这些错误。我正在运行Xcode 7.3
我应该注意到我通过Carthage安装了框架。
答案 0 :(得分:3)
问题是Xcode为模拟器(i386)和设备(x86_64)预编译了动态库。您可以implement this run script删除未使用的架构。
答案 1 :(得分:1)
使用以下运行脚本代码从添加的库,框架中删除不受支持的体系结构。
项目名称->构建阶段->通过以下代码创建新的运行脚本。而已。编码愉快!
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
答案 2 :(得分:0)
dwarfdump --uuid path_to_dSYM_or_binary
这将为您提供UUID和切片的列表。您还会发现UUID将出现在Apple的崩溃报告中。
lipo -remove <architecture> -output <binary_name> <binary_name>