在Xcode 7中找到了一个意外的Mach-O头代码:0x72613c21

pzs*_*602 49 validation frameworks store dynamic

我有一个使用ObjC动态框架的Swift项目,框架必须与我的项目链接并嵌入到我的项目中.项目在设备中运行正常,当提交到App Store时,验证期间发生错误: Found an unexpected Mach-O header code: 0x72613c21

以下是验证日志:

2015-10-12 02:32:33 +0000 [MT] Beginning distribution assistant for archive: MusicFans, task: Validate
2015-10-12 02:32:33 +0000 [MT] Automatically selecting the only availaable distribution method <IDEDistributionMethodiOSAppStoreValidation: 0x7f851c1d96c0>
2015-10-12 02:32:34 +0000 [MT] [OPTIONAL] Didn't find archived user entitlements for <DVTFilePath:0x7f851b42db10:'/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 ??8.29.xcarchive/Products/Applications/MusicFans.app/Frameworks/libswiftDispatch.dylib'>: Error Domain=NSCocoaErrorDomain Code=4 "Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 ??8.29.xcarchive/Products/Applications/MusicFans.app/Frameworks/libswiftDispatch.dylib" did not contain a "archived-expanded-entitlements.xcent" resource." UserInfo={NSLocalizedDescription=Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 ??8.29.xcarchive/Products/Applications/MusicFans.app/Frameworks/libswiftDispatch.dylib" did not contain a "archived-expanded-entitlements.xcent" resource.}
2015-10-12 02:32:34 +0000 [MT] [OPTIONAL] Didn't find archived user entitlements for <DVTFilePath:0x7f8529a08050:'/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 ??8.29.xcarchive/Products/Applications/MusicFans.app/wavpack.framework'>: Error Domain=NSCocoaErrorDomain Code=4 "Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 ??8.29.xcarchive/Products/Applications/MusicFans.app/wavpack.framework" did not contain a "archived-expanded-entitlements.xcent" resource." UserInfo={NSLocalizedDescription=Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 ??8.29.xcarchive/Products/Applications/MusicFans.app/wavpack.framework" did not contain a "archived-expanded-entitlements.xcent" resource.}
2015-10-12 02:32:34 +0000 [MT] [OPTIONAL] Didn't find archived user entitlements for <DVTFilePath:0x7f850da13de0:'/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 ??8.29.xcarchive/Products/Applications/MusicFans.app/FLAC.framework'>: Error Domain=NSCocoaErrorDomain Code=4 "Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 ??8.29.xcarchive/Products/Applications/MusicFans.app/FLAC.framework" did not contain a "archived-expanded-entitlements.xcent" resource." UserInfo={NSLocalizedDescription=Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 ??8.29.xcarchive/Products/Applications/MusicFans.app/FLAC.framework" did not contain a "archived-expanded-entitlements.xcent" resource.}
2015-10-12 02:33:07 +0000 [MT] Canceled distribution assistant
Run Code Online (Sandbox Code Playgroud)

如果我从项目的嵌入式框架部分中删除动态框架,那么它可以通过验证,但由于我的动态框架缺少图像而在设备中运行时崩溃,任何想法?BTW,动态框架已禁用bitcode,因此我的项目也禁用了bitcode,并且没有进行编码.

Cos*_*syn 48

检查每个框架的两件事:

  1. 框架的Mach-O类型(在框架目标的Build Settings中)

Mach-O的

  1. 是否通过将其置于Build Phases - > Embed Frameworks(或复制捆绑资源,如.brooks hollar所提到的)来复制框架

嵌入框架

如果框架的Mach-O类型是"静态库",则不应将其放入嵌入框架中; 如果Mach-O类型是"动态库",它应该放在嵌入框架中.

在我的例子中,我手动添加了SocketRocket,它既有静态库目标,又有动态库目标,具有相同的框架名称.删除静态库目标并仅嵌入动态库框架后,问题就消失了.


注意:

如果您无权访问源项目,则可以使用此方法手动检查它是动态还是静态框架:https://stackoverflow.com/a/32591983/308315


a. *_*lar 18

仔细检查构建阶段 - >复制捆绑资源以获取不存在的框架或其他二进制文件.

就我而言,它是我添加的第三方库(Parse).

  • 如果单击“显示日志”按钮,然后查看“详细”日志文件,您可能会看到违规框架的名称。至少它在我身边。 (2认同)

Ke *_*ang 16

在我的情况下,我有一个框架手动拖入我的项目,它列在General- > Embedded Binaries,这会导致错误Found an unexpected Mach-O header code: 0x72613c21.之后,我从它移动Embedded BinariesLinked Frameworks and Libraries,问题就解决了.


Ruf*_*rza 12

如果您(可能但不一定)使用 FirebaseSDK(尤其是 Analytics)并在运行、存档和上传时遇到 Mach-O 错误,请尝试以下操作:

将此添加为构建后操作脚本

rm -rf "${TARGET_BUILD_DIR}/${TARGET_NAME}.app/Frameworks/FirebaseAnalytics.framework"
rm -rf "${TARGET_BUILD_DIR}/${TARGET_NAME}.app/Frameworks/GoogleAppMeasurement.framework"
rm -rf "${TARGET_BUILD_DIR}/${TARGET_NAME}.app/Frameworks/FIRAnalyticsConnector.framework"
Run Code Online (Sandbox Code Playgroud)

如果您添加了小部件和/或其他插件扩展,也请添加这些行:

rm -rf "${TARGET_BUILD_DIR}/${TARGET_NAME}.app/PlugIns/FirebaseAnalytics.framework"
rm -rf "${TARGET_BUILD_DIR}/${TARGET_NAME}.app/PlugIns/GoogleAppMeasurement.framework"
rm -rf "${TARGET_BUILD_DIR}/${TARGET_NAME}.app/PlugIns/FIRAnalyticsConnector.framework"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

简要说明:以下引用来自https://github.com/firebase/firebase-ios-sdk/issues/6472下的相关讨论,解释了此问题背后的原因。

...所以现在 firebase 框架工件正在被复制到 ipa 的 /Frameworks 文件夹中并被嵌入。框架本身是静态框架......如果您手动从 xcarchive 中删除它们,一切都会按预期进行。

基本上这里的许多答案都指向正确的方向,但问题仍然存在,因为解决方案是每次都删除不需要的工件。目前(2021 年 1 月)AFAIK 没有其他方法可以解决它。

  • 这对我有用(即使你没有使用 firebase)。实际上这个答案对我没有帮助,我在这个评论中准确地找到了解决方案:https://github.com/firebase/firebase-ios-sdk/issues/6472#issuecomment-740186615 (3认同)
  • 这也对我有用,我正在使用带有 SPM 的 Firebase 和一个小部件,谢谢! (3认同)
  • 确保从选择框中的“从 [your_app_target] 提供构建设置”中选择您的应用程序。 (2认同)
  • 与@Luca相同:将Firebase与SPM(没有小部件)一起使用,这在存档和上传到AppSore时也对我有用。谢谢 ! (2认同)

Cod*_*ide 9

我有同样的问题.我做了几件事,我的问题就消失了.我相信我的问题与Cocoapods版本有关,但你可以在这里尝试几件事.

首先清理DerivedData:

1.关闭Xcode

2.转到./Users/YourFile/Library/Developer/Xcode/DerivedData

3.删除此文件夹中的所有内容

4.Run Xcode

5.Build与清洁

第二个出于某种原因,最新的可可豆荚版本为0.39,当我跑步时,我收到了警告 pod install

[!] MY_TARTGET目标覆盖EMBEDDED_CONTENT_CONTAINS_SWIFT`Pods/Target Support Files/Pods/Pods.release.xcconfig'中定义的构建设置.这可能导致CocoaPods安装出现问题

我删除了所有已安装的cocoapods降级了cocoapods:

sudo gem uninstall cocoapods

然后安装旧版本:

sudo gem install cocoapods -v 0.38.1

这删除了警告,我能够删除错误,"意外的Mach-O头代码:0x72613c21"


Rae*_*ram 9

Scheme->Edit Scheme->Archive->Post Action->Click '+' -> New Run Script Action-> 粘贴下面的代码

LOGFILE="${ARCHIVE_PATH}/static-frameworks.log"
echo "Removing static frameworks from ${WRAPPER_NAME} archive" > $LOGFILE
find "${ARCHIVE_PRODUCTS_PATH}/Applications/${WRAPPER_NAME}" -name '*.framework' -print0 | while IFS= read -r -d '' fm; do
    name=$(basename "${fm}" .framework)
    target="${fm}/${name}"
    echo "Checking: ${fm}" >> $LOGFILE
    if file "${target}" | grep -q "current ar archive"; then
        rm -rf "${fm}"
        echo "Removed static framework: ${fm}" >> $LOGFILE
    fi
done
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Kub*_*bee 7

对我来说,我在Carthage /usr/local/bin/carthage copy-frameworks运行脚本中有Fabric二进制文件。

删除这些内容后,它解决了该问题。

我正在使用Xcode Version 9.4.1 (9F2000)


cat*_*ore 7

在 XCode 11 中,单击项目文件,选择您的目标,然后在 General 选项卡上展开 Frameworks、Libraries 和 Embedded Content,将 Embed & Sign 更改为 Do Not Embed。


Kil*_*ian 6

编辑:这看起来在Xcode 8 Beta 3中修复.

我目前正在使用Xcode 8 Beta 2和Swift 3以及纯swift Pod(这似乎导致了这个问题)遇到了这个问题.

将以下内容添加到我的Podfile已修复此问题.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO'
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

幸得此评论由渝澳GitHub上.


and*_*wan 6

看看这个Apple文档 Embedding Frameworks in An App转到Embedded Static Libraries部分,他们解释这个错误是这样的:

这是由于将静态库放置在看起来像框架的包结构中引起的;这种包装有时被第三方框架开发人员称为静态框架。由于这些情况下的二进制文件是一个静态库,应用程序无法将其嵌入应用程序包中。

它们还提供了一种修复方法:

您可以通过识别静态框架并将其从嵌入式二进制文件部分中删除来解决此错误。

您可以按照检查二进制链接中的说明完成此操作


Jor*_*ego 5

我不知道为什么,但是豆荚似乎以某种方式变成了嵌入式二进制文件。所以我不得不将其删除,再次安装pod,问题消失了。

在此处输入图片说明

  • 谢谢还不足以表达我的感激之情。 (2认同)

iam*_*rak 5

将以下脚本添加到存档后操作中帮助我克服了这个问题。它删除了不相关的静态框架。

# https://github.com/firebase/firebase-ios-sdk/issues/6472
LOGFILE="${ARCHIVE_PATH}/static-frameworks.log"
echo "Removing static frameworks from ${WRAPPER_NAME} archive" > $LOGFILE
find "${ARCHIVE_PRODUCTS_PATH}/Applications/${WRAPPER_NAME}" -name '*.framework' -print0 | while IFS= read -r -d '' fm; do
    name=$(basename "${fm}" .framework)
    target="${fm}/${name}"
    echo "Checking: ${fm}" >> $LOGFILE
    if file "${target}" | grep -q "current ar archive"; then
        rm -rf "${fm}"
        echo "Removed static framework: ${fm}" >> $LOGFILE
    fi
done
Run Code Online (Sandbox Code Playgroud)

Firebase问题的评论:https://github.com/firebase/firebase-ios-sdk/issues/6472#issuecomment-771351512


Akb*_*tov 5

2021 年!更新

这是这个的技巧:

  1. 构建应用程序并Pods_Runner.framework标记为Embed & Sign

在此输入图像描述

  1. 一旦建成。转到同一个地方并将Pods_Runner.framework设为Do Not Embed

在此输入图像描述

  1. 转到产品 -> 存档 -> 提交存档,一切都会按预期工作。

学分:lifenautjoe