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
检查每个框架的两件事:
如果框架的Mach-O类型是"静态库",则不应将其放入嵌入框架中; 如果Mach-O类型是"动态库",它应该放在嵌入框架中.
在我的例子中,我手动添加了SocketRocket,它既有静态库目标,又有动态库目标,具有相同的框架名称.删除静态库目标并仅嵌入动态库框架后,问题就消失了.
注意:
如果您无权访问源项目,则可以使用此方法手动检查它是动态还是静态框架:https://stackoverflow.com/a/32591983/308315
a. *_*lar 18
仔细检查构建阶段 - >复制捆绑资源以获取不存在的框架或其他二进制文件.
就我而言,它是我添加的第三方库(Parse).
Ke *_*ang 16
在我的情况下,我有一个框架手动拖入我的项目,它列在General- > Embedded Binaries,这会导致错误Found an unexpected Mach-O header code: 0x72613c21.之后,我从它移动Embedded Binaries到Linked 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 没有其他方法可以解决它。
我有同样的问题.我做了几件事,我的问题就消失了.我相信我的问题与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"
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)
对我来说,我在Carthage /usr/local/bin/carthage copy-frameworks运行脚本中有Fabric二进制文件。
删除这些内容后,它解决了该问题。
我正在使用Xcode Version 9.4.1 (9F2000)
在 XCode 11 中,单击项目文件,选择您的目标,然后在 General 选项卡上展开 Frameworks、Libraries 和 Embedded Content,将 Embed & Sign 更改为 Do Not Embed。
编辑:这看起来在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上.
看看这个Apple文档 Embedding Frameworks in An App转到Embedded Static Libraries部分,他们解释这个错误是这样的:
这是由于将静态库放置在看起来像框架的包结构中引起的;这种包装有时被第三方框架开发人员称为静态框架。由于这些情况下的二进制文件是一个静态库,应用程序无法将其嵌入应用程序包中。
它们还提供了一种修复方法:
您可以通过识别静态框架并将其从嵌入式二进制文件部分中删除来解决此错误。
您可以按照检查二进制链接中的说明完成此操作
将以下脚本添加到存档的后操作中帮助我克服了这个问题。它删除了不相关的静态框架。
# 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
2021 年!更新
这是这个的技巧:
Pods_Runner.framework标记为Embed & SignPods_Runner.framework设为Do Not Embed。学分:lifenautjoe