Xcode 9.0.1 及更高版本的 100 多个“在 MapKit 和 VectorKit 中实现的类”警告

Posted

技术标签:

【中文标题】Xcode 9.0.1 及更高版本的 100 多个“在 MapKit 和 VectorKit 中实现的类”警告【英文标题】:100+ "Class implemented in both MapKit and VectorKit" warnings with Xcode 9.0.1 and above 【发布时间】:2018-04-01 19:39:36 【问题描述】:

在运行我的项目(甚至不使用MapKit)时,我的控制台收到了超过一百个类重复警告的垃圾邮件:

objc[6377]:类 ___MKPlaceBusinessInfoItemAccessibility_super 在 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/ios.simruntime/Contents/Resources/RuntimeRoot 中实现/System/Library/AccessibilityBundles/MapKit.axbundle/MapKit (0x12f128f00) 和 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources /RuntimeRoot/System/Library/AccessibilityBundles/VectorKit.axbundle/VectorKit (0x12f2187b0)。将使用两者之一。哪一个是未定义的。

这些警告在 Xcode 9.0.0不存在,我只在 Xcode 9.0.1 及更高版本上遇到此问题。 p>

我知道这是一个错误,I found a radar 就是关于这个问题的。有没有办法在不影响其他 SDK 警告可见性的情况下消除这些警告?

【问题讨论】:

升级到 Xcode 9.0.2 导致这个问题对我来说消失了。 【参考方案1】:

这实际上是当前 iOS 框架中的一个错误,与您的应用程序、模块缓存、库等中的任何内容无关。这似乎是不确定的原因是它仅在 Accessibility Layer 存在时才存在活动的,它不在模拟器上,除非在非常特殊的情况下。我知道的三个:

辅助功能检查器已开启 UI 仪表测试 OSX 的 VoiceOver 已开启(其他 AT 也一样)

要消除这种情况,您应该:

退出辅助功能检查器(如果已打开) 打开模拟器 硬件->“擦除所有内容和设置” 重新运行应用程序。 绝对不要使用 Accessibility Inspector 运行此模拟器 从字面上看,永远不要在这个模拟器上运行 UI 测试,它也依赖于辅助功能层来完成他们的工作,虽然我不认为这样做会导致错误一直存在,直到你再次“擦除所有......” ,它只会出现在该测试运行中。

每次执行最后两个要点之一时,您都必须再次清除数据...

核心问题是 MapKit 和 VectorKit 都链接到核心可访问性包,但显然没有动态地这样做,所以这些包都包含在两个模块中。尽管非常冗长且令人沮丧,但可以非常安全地忽略此类警告。

不幸的是,没有其他解决方法...如果您不需要 iOS 11 功能,也许您可​​以下载旧版本的模拟器。或者只是不运行仪器测试/辅助功能检查器/VoiceOver/我希望他们尽快解决这个问题!

【讨论】:

唯一合理的答案。不会修改Xcode的人解决不了问题。 擦除所有内容和设置模拟器对我有用。我没有打开 Accessibility Inspector,也不知道如何找到它或知道它的存在。对于好奇的人,它位于 Open Developer Tools 下的 XCode 菜单中。 擦除内容和设置甚至不能提供短期修复。当我在正在运行的模拟器窗口中单击时,错误消息就会返回。 在实际设备上运行时也会出现问题(我的情况是 iPhone 6 和 iOS 11.1.2),而不仅仅是在模拟器上。 在模拟器中没有问题,但在 iPhone 5s 中似乎知道如何修复它【参考方案2】:

在 9.0.1 上遇到了同样的问题。

您应该退出 Xcode 和所有模拟器。 运行rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache。 再次启动 Xcode。

这个问题已经为我解决了。

【讨论】:

很抱歉,它不起作用。这个错误会出现,但稍后会出现:( 关键还是要退出模拟器。我发现当我不这样做时(只是退出 Xcode),问题又出现了。似乎问题出在模拟器上,而不是其他因素。【参考方案3】:

我不在乎模拟器中的可访问性,所以我只是重命名了其中一个重复文件,这样就不会被发现了:

mv /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/AccessibilityBundles/MapKit.axbundle/MapKit /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/AccessibilityBundles/MapKit.axbundle/MapKit_

哈哈

【讨论】:

谢谢,这行得通。现在我不必小心我不小心启动了一些可再次激活警告混乱的辅助功能选项:) 您将收到关于缺少课程的单一警告,但比数百条垃圾邮件更好!【参考方案4】:

重置 iOS 模拟器为我解决了这个问题。 模拟器 -> 硬件 -> 擦除所有内容和设置...

【讨论】:

这对我有用,而无需使用 ModuleCache。 这很接近,但缺少一个关键的难题:)【参考方案5】:

完全相同的问题,就我而言,我尝试删除 DerivedData 文件夹中的所有文件,但仍然无法正常工作。

后来我发现如果我切换到另一种模拟器,例如从“iPhone 8”切换到“iPhone 8 plus”,警告就会消失。

所以,只需从模拟器列表中删除“iPhone 8”模拟器,然后再次添加“iPhone 8”模拟器即可。

不确定问题是否会再次出现,因为这也是我第三次处理这个问题。

【讨论】:

这是Xcode的错误,不能修改Xcode。所以,你不能解决问题。不要再浪费你的时间了,除非退回到 Xcode 9.0【参考方案6】:

如您所见,CoreSimulator/Applications/Xcode.app 有问题。 Apple Xcode Developer 在MapKitVectorKit 中都定义了这个符号,这是根本错误。

你不能修改 Xcode,所以只有 Apple 的 Staff 可以解决它。

只是别再浪费时间了,除了退回到 Xcode 9.0

【讨论】:

【参考方案7】:

解决了!

-在模拟器上 - 硬件 ----删除所有内容和设置 -关闭xcode和模拟器 -删除~/Library/Developer/Xcode/DerivedData/ModuleCache的内容 - 启动 xcode...

【讨论】:

【参考方案8】:

我的情况有点不同:我在运行 XCUITest 时遇到了这个问题。 启动 XCUITest 进程后,目标应用程序在启动时崩溃。 但是,在我删除了所有 Web 代理后,这个问题就解决了!

【讨论】:

以上是关于Xcode 9.0.1 及更高版本的 100 多个“在 MapKit 和 VectorKit 中实现的类”警告的主要内容,如果未能解决你的问题,请参考以下文章

WatchOS 动态通知不适用于 Xcode 11.1 及更高版本 - 未调用 didReceive

iOS 7 及更高版本 (8.4) 中不推荐使用 SegmentedControlStyle | Xcode 6.4

QuartzCore 框架与 Xcode 5 及更高版本中的 UIKit 框架捆绑在一起? [复制]

默认情况下,新版本的 Xcode(3.2.5 及更高版本)不构建分发二进制文件

Xcode 13 正式版发布,来看看有什么新特性

iOS之深入解析Xcode 13(iOS 15)正式版发布的新特性