成功提交我的应用程序后出现“符号文件过多”
Posted
技术标签:
【中文标题】成功提交我的应用程序后出现“符号文件过多”【英文标题】:"Too many symbol files" after successfully submitting my apps 【发布时间】:2014-09-09 23:50:13 【问题描述】:我今天下载了 Xcode 6 GM 并向应用商店提交了两个 Swift 应用。两者都通过了所有上传前验证以及他们必须通过并成功提交的所有其他内容。但后来我收到了两封来自 Apple 的电子邮件……每个程序都发了一封电子邮件,他们都这样说:
尊敬的开发者,
我们发现您最近交付的“xxxxxxxx”(我的应用名称已删除)存在一个或多个问题。您的交付成功,但您可能希望在下次交付时更正以下问题:
符号文件过多 - 这些符号在任何二进制文件中都没有对应的切片 [1431D977-72BC-308F-AB71-71529F25400B.symbols, 158C72A7-98AC-3F07-B2BE-88427591B413.symbols, 44973EAC-563E-340C-B549- 55A5014A68BA.symbols,678BF06F-0C3D-3A09-BFBF-699C7079FECD.symbols,90907DDB-0400-38ED-BB5F-0C12333C0624.symbols,93B79949-5757-374A-97B9-825AE1A61B7D.symbols,ABA05220-4FB0-397F-AFBB-08774A82F4CA。符号,AD70F02A-4422-32B8-8C40-CF9B45A2CCC6.symbols,B0CC9F7D-C542-3E18-A518-B28B7ECABE80.symbols,BF6A4C3B-6FA5-3C51-8404-19C2F132458D.symbols,C9D6E078-8E2A-39D9-8DEE-476916A69CEE.symbols, CF5320DF-AB31-3845-BAD5-F6E51045D396.symbols,D4967AA3-8FB0-3712-B0DE-7F4144AF8F4B.symbols,D813B314-AD37-31D4-B675-442052994495.symbols,DF42A13F-08D8-3E71-B221-FC357E0B60F5.symbols,F5F636C2- F0E0-3CA7-8F7D-C49A36CD5C65.symbols]
纠正问题后,您可以使用 Xcode 或 Application Loader 将新的二进制文件上传到 iTunes Connect。
问候,
App Store 团队
我猜这真的与我或我的应用程序无关......这只是 Swift 应用程序提交的第一天的一个怪癖?这两个应用程序仍处于“等待批准”模式。我当然想不出我可以改变什么来让他们说的话消失!还有其他人提交 Swift 应用程序并得到响应吗?认为我应该忽略它并等待看看会发生什么?
【问题讨论】:
我这么说和Invalid Swift Support
。知道为什么我会得到这个吗?我正在使用最新的 Xcode。
同样的问题,我的应用无法提交审核。因为这个问题。有人解决了吗?
这里有同样的问题。无论如何都提交了审查..让我们看看会发生什么:)
我的两个 Swift 应用程序都刚刚获得 App Store 的批准......所以我想我担心什么!呼... :)
【参考方案1】:
如果您在项目存档中包含库的调试信息但不包含二进制文件,则会发生这种情况。
-
在 Xcode 中打开管理器窗口
右键单击存在此问题的存档并选择“在 Finder 中显示”。
右键单击存档文件并选择“显示包内容”
在“dSYMs”文件夹中,您会看到几个文件。如果您在这些文件上运行dwarfdump
console command,您将获得一个 UUID 字符串列表:
dwarfdump -u MyFile.dSYM
我相信您会从 Apple 的电子邮件中找到一些匹配的 UUID。
为避免此警告,您只需要在存档中包含应用程序的 dSYM
文件,而不是库。为此,您需要更改库的构建配置以不生成 dSYM
文件。只需在配置中搜索“调试信息格式”并将其从DWARF with dSYM File
更改为DWARF
即可。
例如,在下面的屏幕截图中,您会发现 Stripe ios 框架。
【讨论】:
dwarfdump -u *
在文件夹中查看所有 UUID
@Jon ooooh 为什么我一个一个做了之后才看到? :) 无论如何,谢谢!
删除 dSYM 文件是否意味着在 Crashlytics(或任何其他崩溃报告工具)上将不再符号化与第 3 方相关的任何崩溃?
但是,如果您使用 firebase \ fabric,则应使用 dsym 文件查看站点上的崩溃日志。他们是否仍能适应这种变化?【参考方案2】:
如果您在使用 CocoaPods 时遇到此问题,请将其添加到您的 Podfile:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['DEBUG_INFORMATION_FORMAT'] = 'dwarf'
end
end
end
它会将调试信息格式设置为 DWARF 仅适用于您的所有 Pod 目标(不是主应用程序目标)
【讨论】:
@wzbozon 是的,我只是要求仔细检查一下。因为在我这样做之后,Crashlyticts 停止工作。谢谢! Crashlytics 应继续为您的应用工作,因为此脚本仅更改 pod 的构建设置。 我同意。但是您不会看到 pod 的报告。也可以只为某些 pod 设置 DWARF 和 dSYM 文件,例如开发 pod。 @Stan 你是说 Crashlytics 会继续工作吗? Cesar Rodriguez 似乎在说这行不通。 这为我解决了。别忘了pod install
【参考方案3】:
如果您使用的是 CocoaPods,并且您的应用设置为仅使用 arm64(即项目的 info.plist 中只有 arm64)
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>arm64</string>
</array>
那么您可以尝试在您的 Podfile 中添加以下脚本来解决此问题。
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
config.build_settings['ARCHS'] = 'arm64'
end
end
end
与
将所有项目的目标(不是 Pod 中的目标)设置为仅 arm64
CocoaPods Github issue reference
【讨论】:
大概你现在也应该包含 arm64e 了吧? 我会为模拟器添加 arm64s。它会在发布版本中自动删除。【参考方案4】:我遇到这个问题是因为项目具有有效的架构 arm64,其中 CocoaPods 目标具有有效的架构 arm64、armv7 和 armv7s。
要检查哪个目标具有哪个有效架构,请按照以下步骤操作
-
在 Xcode -> 窗口 -> 管理器中
选择存档并在 Finder 中显示
在 .xcarchive 文件上,显示包内容
打开终端并给出dSYMs文件夹的路径。
输入命令dwarfdump --uuid *
,它将显示具有有效架构的 UUID 列表。
UUID 将与 Apple 的警告电子邮件匹配
主项目和可可豆荚目标假设具有相同的有效架构。这样就可以解决问题了。
【讨论】:
我认为它最好地解释了正在发生的事情。我只对具有 armv7 架构的库发出这些警告,因为我的项目仅针对 arm64 构建。如果我应该将 armv7 添加到项目中或将其从 Pod 中删除,问题仍然存在。【参考方案5】:通过启用位码为我工作 - 它在之前关闭
启用位码 - 是
【讨论】:
【参考方案6】:以上帮助解决了问题,但无法解决。我们在 iOS 12 有项目,但 pods 10 - 导致一堆 armv7 文件。将 pod 更新到 iOS 12 立即解决。
【讨论】:
【参考方案7】:通过为我的所有目标设置相同的“常规”=>“部署信息”=>“部署目标”来解决相同的问题。
【讨论】:
【参考方案8】:在 Xcode 中,在 Build Settings 中查找“Strip Debug Symbols during Copy” (COPY_PHASE_STRIP)。启用后,调试符号会从您的 .app 并放入 .dSYM 文件中。否则你的 .app 包含这些 符号。 (默认情况下,调试符号从发布版本中删除 出于混淆的原因。您可能不应该更改此设置 用于发布配置。)
确保在项目构建设置中选中此选项
https://possiblemobile.com/2015/03/symbolicating-your-ios-crash-reports/
【讨论】:
【参考方案9】:我的问题是我的build.xcconfig
文件中有一行。
我不得不删除
IPHONEOS_DEPLOYMENT_TARGET = 11.0
将项目设置为仅针对 arm64(而不是 arm7)构建。
按照@miOS
的步骤,我可以看到 pods 项目正在为两者构建。
【讨论】:
***.com/a/49063850/3293172 iOS 11 放弃了对 armv7 和 armv7s 的支持,因此如果您的部署目标 >= iOS 11.0,则只需要 arm64。【参考方案10】:对我来说,一切都很简单。我有同样的问题,一周不知道该怎么办。
提交存档申请后,您将在小弹出窗口中看到分发证书。它后面有一个复选框,您应该取消选中它。之后,您将提交它并收到有关符号文件的电子邮件。但这不是问题。这只是一个警告;不是错误!如果您取消选中该复选框,您的应用程序将被正确发送。希望对你有帮助。
复选框和弹出窗口的屏幕截图:
【讨论】:
我真的希望你能更详细....我不知道你在说什么复选框或弹出窗口。也许是屏幕截图? gyazo.com/6d7bb2035979cb75253ba92a40e8d898我好像看到了,就是这个 是的,但这会从包中删除所有符号,因此您不会收到符号化的崩溃报告? (他们现在甚至使用 TestFlight 在 App Store 应用程序中提供符号化的崩溃报告吗?) 这不是问题的有效解决方案。这是在避免症状,而不是解决问题。有关如何上传不需要的符号的说明,请参阅 Mikhails 答案。此答案阻止上传 任何 符号,从而通过 iTunesConnect 破坏崩溃符号 不要那样做,否则你将无法在 App Store 上分析你的应用程序的崩溃错误以上是关于成功提交我的应用程序后出现“符号文件过多”的主要内容,如果未能解决你的问题,请参考以下文章