成功提交我的应用程序后,“符号文件过多”


198

我今天下载了Xcode 6 GM,并向应用商店提交了两个Swift应用。两者都通过了所有上传前验证以及所有其他必须通过并成功提交的内容。但是后来我收到了苹果公司的两封电子邮件……每个程序一封,他们都说:

亲爱的开发人员,

我们发现您最近交付的“ xxxxxxxx”有一个或多个问题(我的应用名称已删除)。交付成功,但是您不妨在下一次交付中更正以下问题:

符号文件太多-这些符号在任何二进制[1431D977-72BC-308F-AB71-71529F25400B.symbols,158C72A7-98AC-3F07-B2BE-88427591B413.symbols,44973EAC-563E-340C-B549-55A5014A68BA.symbols中都没有对应的切片,678BF06F-0C3D-3A09-BFBF-699C7079FECD。符号,90907DDB-0400-38ED-BB5F-0C12333C0624。符号,93B79949-5757-374A-97B9-825AE1A61B7D。符号,ABA05220-4FB0-397F-AFBB。 -4422-32B8-8C40-CF9B45A2CCC6。符号,B0CC9F7D-C542-3E18-A518-B28B7ECABE80。符号,BF6A4C3B-6FA5-3C51-8404-19C2F132458D.symbols,C9D6E078-89A-69-69 -3845-BAD5-F6E51045D396.Symbols,D4967AA3-8FB0-3712-B0DE-7F4144AF8F4B.symbols,D813B314-AD37-31D4-B675-442052994495.symbols,DF42A13F-08D8-3E71-B221-FC357E0B60F5。 -8F7D-C49A36CD5C65.Symbols]

解决问题之后,可以使用Xcode或Application Loader将新的二进制文件上载到iTunes Connect。

问候,

App Store团队

我猜想这真的与我或我的应用程序无关...这只是第一天Swift应用程序提交的怪癖?两个应用程序仍处于“等待批准”模式。我当然想不出我能改变什么以使他们所说的一切消失!还有其他人提交Swift应用程序并得到答复吗?认为我应该忽略它,等一下会发生什么?


我的话和Invalid Swift Support。知道为什么我会得到这个吗?我正在使用最新的Xcode。
Dehli 2014年

同样的问题,我的应用无法提交审核。由于此问题。有人解决了吗?
yudun1989

1
同样的问题在这里。仍然提交审查。.让我们看看会发生什么:)
dandoen 2014年

我的两个Swift应用程序都刚刚被App Store批准...所以我想我什么都不担心!哇... :)
吉姆·巴伯

Answers:


127

如果要在项目归档文件中包含库的调试信息,但不包含二进制文件,则会发生这种情况。

  1. 在Xcode中打开管理器窗口
  2. 右键单击出现此问题的档案,然后选择“在Finder中显示”。
  3. 右键单击存档文件,然后选择“显示软件包内容”
  4. 在“ dSYMs”文件夹中,您将看到几个文件。如果在这些文件上运行dwarfdumpconsole命令,您将获得UUID字符串列表:

    dwarfdump -u MyFile.dSYM

我确定您会从Apple的电子邮件中找到一些匹配的UUID。

为避免出现此警告,您只需在归档dSYM文件中包含应用程序的文件,而不包括库。为此,您需要更改库的构建配置以不生成dSYM文件。只需在配置中搜索“调试信息格式”,然后将其从更改DWARF with dSYM FileDWARF仅。

例如,在下面的屏幕截图中,您将找到Stripe iOS框架。

Xcode项目设置屏幕截图


13
dwarfdump -u *在文件夹中看到所有的UUID
乔恩·

@Jon ooooh为什么我一一制作后看到它?:) 不管怎样,谢谢!
塞鲁宾斯(Serj Rubens)

6
删除dSYM文件是否意味着在Crashlytics(或任何其他崩溃报告工具)上不再将与第三方相关的任何崩溃标记为符号?
Eugenio

但是,如果使用firebase \ fabric,则应使用dsym文件查看站点上的崩溃日志。他们仍在进行此更改吗?
Mattia Lancieri,

88

如果在使用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

它将仅将所有Pod目标(而非主应用程序目标)的Debug Information Format设置为DWARF。


@wzbozon是的,我只想仔细检查。因为这样做之后,Crashlyticts停止工作。谢谢!
塞萨尔·罗德里格斯

Crashlytics应该继续为您的应用工作,因为此脚本仅更改Pod的构建设置。
斯坦(Stan)

1
我同意。但是您不会看到有关广告连播的报告。也可以只为某些Pod(例如开发Pod)设置带有dSYM File的DWARF。
Denis Kutlubaev

@Stan您是在说Crashlytics可以继续工作吗?塞萨尔·罗德里格斯(Cesar Rodriguez)似乎在说这行不通。
airowe

8
这为我解决了。别忘了pod install
firebear

17

如果您使用的是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

将所有项目的目标(不是Pods中的目标)设置为仅arm64

Xcode项目设置

CocoaPods Github问题参考


大概您现在也应该包括arm64e,不是吗?
shim

我将包括用于模拟器的arm64。系统会自动将其删除以进行发布。
Cyber​​gen

13

我有这个问题,因为该项目具有有效的架构arm64,其中CocoaPods目标具有有效的架构arm64,armv7和armv7s

要检查哪个目标具有哪种有效架构,请遵循以下步骤

  1. 在Xcode->窗口->管理器中
  2. 选择档案并在Finder中显示
  3. .xcarchive文件上,显示包内容
  4. 打开终端并给出dSYMs文件夹的路径。

  5. 输入命令dwarfdump --uuid *,它将显示具有有效架构的UUID列表。

UUID将与Apple的警告电子邮件匹配

主要项目和可可豆荚的目标假定具有相同的有效架构。通过这样做,它将解决问题。


我认为这可以最好地说明正在发生的事情。这些警告仅关于具有armv7架构的库,因为我的项目仅针对arm64构建。是否应该将armv7添加到项目或将其从Pod中删除仍然存在问题。
Ariel Bogdziewicz


1

上面的内容有助于解决问题,但无法解决。我们在iOS 12上有项目,但在pod 10上却产生了很多armv7文件。将pod更新到iOS 12即可立即解决。


0

通过为我的所有目标使用相同的“常规” =>“部署信息” =>“部署目标”,解决了相同的问题。


0

在Xcode中,在“构建设置”中查找“复制期间的条带调试符号”(COPY_PHASE_STRIP)。启用后,调试符号将从您的.app中省略,并放入.dSYM文件中。否则,您的.app包含这些符号。(默认情况下,出于混淆的原因,调试符号从发行版本中剥离。您可能不应该为发行版配置更改此设置。)

确保在项目“ 构建设置”中选中此选项

https://possiblemobile.com/2015/03/symbolicating-your-ios-crash-reports/


0

我的问题是build.xcconfig文件中的一行。我必须删除

IPHONEOS_DEPLOYMENT_TARGET = 11.0

这将项目设置为仅针对arm64(而非arm7)构建。按照步骤进行操作,@miOS我可以看到pods项目正在为这两个项目构建。


1
stackoverflow.com/a/49063850/3293172 iOS 11放弃了对armv7和armv7s的支持,因此如果部署目标> = iOS 11.0,则仅需要arm64。
Ariel Bogdziewicz

-2

对我来说,一切都很简单。我遇到了同样的问题,一个星期都不知道该怎么办。

提交存档的应用程序后,您会在小的弹出窗口中看到要分发的证书。后面有一个复选框,您应该取消选中它。之后,您将提交它并获得有关符号文件的电子邮件。但是没问题。这只是一个警告;没错!如果您取消选中该复选框,则将正确发送您的应用程序。希望对您有帮助。

复选框和弹出窗口的屏幕截图:

复选框和弹出窗口的屏幕截图


我真的希望您能更详细...。我不知道您在说什么复选框或弹出窗口。也许是屏幕截图?
路易·洪

gyazo.com/6d7bb2035979cb75253ba92a40e8d898我想我明白了,就是这个
Louis Hong

5
是的,但是这会删除包装中的所有符号,因此您将不会收到符号化的崩溃报告?(他们现在是否还使用TestFlight在App Store应用中提供了符号化的崩溃报告?)
Markus Rautopuro 2014年

30
这不是解决该问题的有效方法。这是在避免症状,而不是解决问题。有关如何上传不需要的符号的说明,请参见Mikhails答案。此答案防止上载任何符号,从而通过iTunesConnect破坏崩溃符号
JConway

2
请勿这样做,如果您这样做,将无法在App Store上分析您的应用程序是否发生崩溃错误
user924,18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.