当我尝试使用Distribute APP选项创建IPA文件时。它给出了“ IPA处理失败”错误。
我已经检查了日志文件:IDEDistribution.standard.logfile。
2019-08-06 18:36:52 +0000警告:配置问题:平台iPhoneSimulator.platform没有任何非模拟器SDK; 忽略它扫描IPA ... 2019-08-06 18:36:52 +0000断言失败:otool输出中预期有4个弓形:/var/folders/4t/rpjk7pd55t16jfrd32y98gf0lb2t68/T/IDEDistributionOptionThinning.~~~a4cZJc/Payload/demo .app / Frameworks / AppAuth.framework / AppAuth:马赫标题魔术cputype cpusubtype限制文件类型ncmds sizeofcmds标志MH_MAGIC_64 X86_64 ALL 0x00 DYLIB 23
3680 NOUNDEFS DYLDLINK TWOLEVEL NO_REEXPORTED_DYLIBS加载命令0
Dil*_*hra 58
我遇到了同样的问题。我使用这个脚本解决了这个问题。
请按照相同的步骤操作。
构建阶段 -> 加号按钮 -> 创建新的运行脚本阶段
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"
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
Run Code Online (Sandbox Code Playgroud)
小智 14
为了解决类似的问题,我使用了以下内容:
Build PhasesEmbed Frameworks与Embed App Extensions部分我已经添加Run script与下面的脚本: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
Run Code Online (Sandbox Code Playgroud)
我从这里获取的脚本:https : //medium.com/@maximbilan/ios-submission-unsupported-architectures-issues-733917a98cc3,感谢 Daniel Kennet!
另外,请注意此脚本也可能导致编译错误。在这种情况下,这是解决方案:在添加运行脚本致命错误后构建 Xcode 项目时出错:lipo: input file
最后,我还注意到在本地编译应用程序时必须关闭此脚本(在开发设备/模拟器上)
希望有帮助!
小智 8
在 Xcode 11 中存档时,似乎不允许使用 i386 或 x86_64 架构的动态库。我通过从上述框架中删除这些架构来修复它
您应该检查Embed Frameworks以下Xcode > build阶段。
如果此处介绍了您的框架,则不能i386\x86_64在框架中使用。因为将Embed Frameworks复制到应用程序。为了控制应用程序的大小,Embed Frameworks需要最简化的框架。
您可以Link Binary With Libraries用来介绍您的框架,如下所述:https : //github.com/Carthage/Carthage/issues/1046
请注意,您需要添加一个新的运行脚本并向其中添加您的框架,否则它将崩溃。
| 归档时间: |
|
| 查看次数: |
5243 次 |
| 最近记录: |