我将我的应用提交到应用商店并收到以下警告(不是错误):
符号文件太多 - 这些符号没有相应的切片 任何二进制文件[XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX.symbols, XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX.symbols]
是什么导致了这个问题?我该如何解决?它会给Crashlytics的崩溃报告带来问题吗?
答案 0 :(得分:27)
我遇到同样的问题,这就是为什么会发生这种情况和解决方案。
短版:由于项目设置不当,正在生成冗余dSYM文件。就我而言,"项目"由一个主要的xcproject和几个cocoapod项目组成,后者的Build Setting\Valid Architectures
设置比前者更广泛。因此,XCode正在为该pod项目生成冗余dSYM文件,而Apple检测到这些dSYM文件是无用的,因为主项目被设置为更受限制的级别。
一堆废话版本:
转到Window
- > Organizer
并选择您提交的存档版本和right click
- > Show in finder
以找到该.xcarchive文件。然后使用terminal
导航到.xcarchive(它是一个像.app这样的包)然后到dSYMs
目录,运行dwarfdump --uuid *
以显示该dSYM文件的uuids。检查抱怨电子邮件中的uuid是否在列表中。电子邮件说这些dSYM文件是多余的,因此我们应该在构建存档时阻止它们生成。
对我来说,我在我的应用程序中使用了AFNetworking和其他第三方框架,并通过CocoaPods将它们添加到项目(或更精确地工作空间)中。我需要保证我的应用程序不会安装在任何早于iPhone5的设备上,所以我只在Valid Architectures
项目的arm64
设置了Build Setting
。在这种情况下,我还应该为Valid Architectures
项目目标设置Pod
相同(可能有多个目标取决于您通过Pod添加了多少个框架)。通过这样做,Pods
项目在构建过程中不会产生冗余的dSYM文件。完成所有targets
设置后,转到Product
- > Archive
进行重新存档。您应该再次检查dSYM文件的uuid(s)。
我希望自己能理解:)
答案 1 :(得分:2)
此设置不会影响Crashlytics报告。
答案 2 :(得分:0)
假设您的目标是iOS 11,但您的cocoapods框架的最低部署目标小于iOS 11,然后在podfile的末尾添加此目标:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
end
end
end
答案 3 :(得分:-5)
在构建设置中禁用bitcode。
我遇到了类似的问题,并确定启用bitcode会在app存档中生成BCSymbolMaps。 禁用bitcode可以解决问题。