首页 > 解决方案 > 应用存档时出错:发现意外的 Mach-O 标头代码:0x72613c21

问题描述

我正在尝试将我们的应用存档到应用商店。但是当我这样做时,我收到了上述错误。

平台:iOS

操作系统版本:14.4.2

设备制造商/型号:iphone SE

React Native 版本(react-native -v):0.64 xcode 版本:12.4

我一直在与图书馆 react-native-background-fetch 背后的人取得联系,并向他询问了这个问题,但我认为问题背后还有另一个原因。

这是我第一次收到此错误,所以我不知道该怎么办。

IDEDistrubution.verbose.log

2021-04-22 14:55:50 +0000 无法从 macho 确定平台“/Users/joakimwennergren/Library/Developer/Xcode/Archives/2021-04-22/ActiveQuiz 2021-04-22, 16.54.xcarchive/Products /Applications/ActiveQuiz.app/ActiveQuiz-mobile-app/node_modules/react-native-background-fetch/ios/RNBackgroundFetch/TSBackgroundFetch.xcframework/ios-arm64_x86_64-maccatalyst/TSBackgroundFetch.framework”。失败并出现错误:“无法发现可执行文件/Users/joakimwennergren/Library/Developer/Xcode/Archives/2021-04-22/ActiveQuiz 2021-04-22, 16.54.xcarchive/Products/Applications/ActiveQuiz.app/ActiveQuiz 的平台-mobile-app/node_modules/react-native-background-fetch/ios/RNBackgroundFetch/TSBackgroundFetch.xcframework/ios-arm64_x86_64-maccatalyst/TSBackgroundFetch.framework/TSBackgroundFetch"

标签: iosxcodereact-native

解决方案


TL;DR:我制作了一个视频来展示如何解决问题https://www.youtube.com/watch?v=Ah9aXs9lTD0 - 以下是本文中共享的详细信息的较短版本:https: //christiantietze.de/posts/2021/07/mach-o-0x72613c21-static-library/


代码 0x72613c212 表示您在 app bundle 中嵌入了一个静态库。这不是必需的,因为静态库已经在构建时由链接器与您的应用程序二进制文件合并。

通常,.frameworkbundle 嵌入到应用程序包中,然后在您运行应用程序时加载。这些是动态库;静态库已经在应用程序二进制文件中,因此它们不需要再次与应用程序包一起提供。这就是 Xcode 抱怨的原因。

如何诊断

Apple 技术说明 (TN2435)对此进行了解释:

这个 [Found an unexpected Mach-O header code: 0x72613c21] 是由于将静态库放置在看起来像框架的捆绑结构中引起的;这种封装有时被第三方框架开发者称为静态框架。由于这些情况下的二进制文件是静态库,因此应用程序无法将其嵌入到应用程序包中。

从技术说明中,您可以通过以下方式确定二进制文件是否为静态库:

file <PathToAppFramework>/<FrameworkName>.framework/<FrameworkName>

输出可能类似于:

 Mach-O universal binary with 2 architectures
 
 <PathToLibrary> (for architecture armv7): current ar archive random library
 
 <PathToLibrary> (for architecture arm64): current ar archive random library

对于确实需要嵌入到应用程序中的动态库,输出会显示类似Mach-O 64-bit dynamically linked shared library x86_64

怎么修

如果您的file输出看起来相似,则解决方案是链接但不嵌入:

链接但不嵌入

这将立即在构建产品中包含静态库。


推荐阅读