我们已经构建了一个带有几个本机绑定的Xamarin应用程序(iOS,Android)。该应用程序在设备和模拟器上运行良好,我们能够建立一个没有任何问题的存档(显然)。
问题是当我们想要将构建上传到app store时(使用app loader或xcode 7.3.1),我们收到以下错误:
ERROR ITMS-90085: “No architectures in the binary. Lipo failed to detect any architectures in the bundle executable.”
在应用程序上运行lipo -info会产生以下响应:
Architectures in the fat file: NameOfMyApp.iOS.app/NameOfMyApp.iOS are: armv7 arm64
在发布此问题之前,我们已经彻底搜索了一个答案,并确认了以下内容:
如果有人有任何想法,将非常感谢帮助!
谢谢, 甲
答案 0 :(得分:2)
事实证明我们在项目中做了一些本机绑定。 在其中一个绑定中,我们在项目的根目录中包含了一个框架,该框架是一个包含子文件夹的文件夹,其中包含lib.a. 事实证明,在编译时,整个框架文件夹结构被复制到生成的IPA中,这导致了问题。 解决方案是简单地提取lib.a并将其移动到项目的根目录并删除框架文件夹。 由此产生的IPA不再具有框架文件夹,并且提交过程没有出现故障。
答案 1 :(得分:2)
有时可能会在您赶时间并忘记将构建环境更改为通用iOS设备进行存档时发生此错误!
答案 2 :(得分:1)
我最近因完全不同的原因遇到了此错误。我们正在使用此really popular script在提交应用商店之前从我们的应用中删除未使用的架构。
问题在于,如果您包括watch应用程序并使用Xcode 10进行构建,则此脚本将完全错误地执行操作!它在ARCHS
变量中查找所有体系结构,并从胖二进制文件中删除所有其他体系结构,问题是
在XCode 9中,脚本将跳过监视内容,但现在错误地将其删除。
我通过将脚本更改为仅删除模拟器体系结构来解决该错误。
EXTRACTED_ARCHS=()
GOOD_ARCHS=()
PRESENT_ARCHS=($(lipo -archs "$FRAMEWORK_EXECUTABLE_PATH"))
if [[ "${#PRESENT_ARCHS[@]}" -lt 2 ]]
then
echo "Framework is not a Fat binary, skipping..."
continue
fi
for ARCH in "${PRESENT_ARCHS[@]}"
do
if [[ "$ARCH" != x86_64 && "$ARCH" != i386 ]]
then
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
GOOD_ARCHS+=("$ARCH")
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
fi
done
答案 3 :(得分:0)
就我而言,该错误有点误导。它与架构无关,只是找不到二进制本身。
我正在使用add_library
通过CMake生成应用扩展。 CMake将扩展的可执行文件从MyExtension
重命名为libMyExtension.so
。
由于“ CFBundleExecutable必须与捆绑目录名称减去扩展名相匹配。”,因此我不得不调整CMakeLists.txt文件,以防止扩展名的可执行文件被重命名:
set_target_properties(${APPEX_NAME} PROPERTIES
XCODE_ATTRIBUTE_EXECUTABLE_SUFFIX ""
XCODE_ATTRIBUTE_EXECUTABLE_PREFIX ""
)
答案 4 :(得分:-3)
就我而言,
将每个框架的“嵌入和签名”更改为“不嵌入”。
然后重新启动Xcode。无需使用Pod更新或Pod分解。