Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

100+ "Class implemented in both MapKit and VectorKit" warnings with Xcode 9.0.1 and above

Tags:

xcode

xcode9

While running my project (which doesn't even use MapKit), my console gets spammed with more than a hundred class duplicate warnings:

objc[6377]: Class ___MKPlaceBusinessInfoItemAccessibility_super is implemented in both /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) and /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). One of the two will be used. Which one is undefined.

These warnings were not present with Xcode 9.0.0, I am only experiencing this on Xcode 9.0.1 and above.

I am aware that this is a bug and I found a radar that is about this issue. Is there a way to silence these warnings without affecting the visibility of other SDK warnings?

like image 215
Tamás Sengel Avatar asked Oct 20 '17 15:10

Tamás Sengel


3 Answers

This is actually a bug in the current iOS Framework and has nothing to do with anything in your app, module cache, libraries, etc. The reason this appears to be non deterministic is that it is only there when the Accessibility Layer is active, which it isn't on the simulator, except under very specific circumstances. The three I'm aware of:

  • The Accessibility Inspector is on
  • UI Instrumented Testing
  • VoiceOver for OSX is On (other ATs as well)

To get this to go away you should:

  • Exit Accessibility Inspector (if it's on)
  • Open Simulator
  • Hardware -> "Erase All Content and Settings"
  • Re run application.
  • Literally NEVER run this simulator with the Accessibility Inspector
  • Literally NEVER run UI tests on this simulator, which also rely on the Accessibility Layer to do their work, though I don't think doing so will cause the error to stick around until you "Erase all...." again, it will just be present for that test run.

Every time you do one of those last two bullet points, you will have to clear the data again...

The core issue is that MapKit and VectorKit both link to core accessibility bundles, but apparently have not done so dynamically, so those bundles are included in both modules. Such warnings are very safely ignored, though very verbose and frustrating.

Unfortunately there is no other fix for this... maybe you could download an old version of the simulator if you don't need iOS 11 features. Or just don't run instrumented tests/Accessibility Inspector/VoiceOver/I HOPE THEY FIX THIS SOON!

like image 95
ChrisCM Avatar answered Nov 18 '22 16:11

ChrisCM


I don't give a damn about accessibility in the simulator so I just renamed one of the duplicate files so it wouldn't be found:

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_

lol

like image 4
Nuthatch Avatar answered Nov 18 '22 14:11

Nuthatch


Got the same issue on 9.0.1.

  • You should quit Xcode and all Simulators.
  • Run rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache.
  • Start Xcode again.

This issue was solved for me.

like image 10
Ilya Krigouzov Avatar answered Nov 18 '22 14:11

Ilya Krigouzov