VoiceOver is calling private APIs (AXXMIGSetAttributeValue, AXBBundleManager) which are subsequently triggering the garbage collector to reap (objc_collect). My guess is that this reaping is the source
of the problem. Apple’s Accessibility Inspector and Accessibility Verifier work fine on QuickBooks but VoiceOver is doing something different than either of them. As far as I can tell the private AXXBundleManager methods only get called by VoiceOver. I
can’t get those methods to be called in any other way.
I’m not sure where to take this from here. It looks like a VoiceOver problem to me. Apple may be able to provide some guidance. NSAccessibilityDebugLogLevel runtime arguments do not provide any additional
information. Here’s the backtrace when the hang occurs.
* thread #1: tid = 0x1b42e4, 0x00007fff849d9b16 libsystem_kernel.dylib`syscall_thread_switch + 10, queue = 'com.apple.main-thread, stop reason = signal SIGSTOP
frame #0: 0x00007fff849d9b16 libsystem_kernel.dylib`syscall_thread_switch + 10
frame #1: 0x00007fff8b4a0df6 libsystem_platform.dylib`_OSSpinLockLockSlow + 63
frame #2: 0x00007fff847942dc Foundation`-[NSBundle finalize] + 285
frame #3: 0x00007fff85237f8a libobjc.A.dylib`finalizeOneObject(void*, void*) + 50
frame #4: 0x00007fff82b981a9 libauto.dylib`Auto::foreach_block_do(auto_zone_cursor*, void (*)(void*, void*), void*) + 41
frame #5: 0x00007fff85237eca libobjc.A.dylib`batchFinalize(_malloc_zone_t*, void (*)(auto_zone_cursor*, void (*)(void*, void*), void*), auto_zone_cursor*, unsigned long, void (*)(void*, void*))
+ 51
frame #6: 0x00007fff82b98179 libauto.dylib`Auto::Zone::invalidate_garbage(unsigned long, void**) + 73
frame #7: 0x00007fff82ba98e4 libauto.dylib`Auto::ThreadLocalCollector::finalize_local_garbage_now(Auto::ThreadLocalCollector*) + 132
frame #8: 0x00007fff82ba976b libauto.dylib`Auto::ThreadLocalCollector::process_local_garbage(void (*)(Auto::ThreadLocalCollector*)) + 427
frame #9: 0x00007fff82ba9f51 libauto.dylib`Auto::ThreadLocalCollector::collect(bool) + 289
frame #10: 0x00007fff82b80f29 libauto.dylib`auto_zone_collect + 393
frame #11: 0x00007fff85236dbe libobjc.A.dylib`objc_collect + 482
frame #12: 0x00007fff847950a5 Foundation`+[NSBundle allFrameworks] + 1024
frame #13: 0x0000000113bb5b53 AccessibilityBundles`-[AXBBundleManager _subBundlesForBundle:] + 103
frame #14: 0x0000000113bb6184 AccessibilityBundles`-[AXBBundleManager _processesBundlesToLoad:] + 276
frame #15: 0x0000000113bb6273 AccessibilityBundles`-[AXBBundleManager loadAXBundleForBundle:] + 82
frame #16: 0x0000000113bb62c7 AccessibilityBundles`-[AXBBundleManager loadAXBundles] + 50
frame #17: 0x00007fff861a5bf6 HIServices`_AXXMIGSetAttributeValue + 306
frame #18: 0x00007fff861aecb6 HIServices`_XSetAttributeValue + 573
frame #19: 0x00007fff8618d8f4 HIServices`mshMIGPerform + 211
frame #20: 0x00007fff8d1dc8d9 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41
frame #21: 0x00007fff8d1dc84e CoreFoundation`__CFRunLoopDoSource1 + 478
frame #22: 0x00007fff8d1cd886 CoreFoundation`__CFRunLoopRun + 1830
frame #23: 0x00007fff8d1ccf25 CoreFoundation`CFRunLoopRunSpecific + 309
frame #24: 0x00007fff86de4a0d HIToolbox`RunCurrentEventLoopInMode + 226
frame #25: 0x00007fff86de47b7 HIToolbox`ReceiveNextEventCommon + 479
frame #26: 0x00007fff86de45bc HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 65
frame #27: 0x00007fff8b63b26e AppKit`_DPSNextEvent + 1434
frame #28: 0x00007fff8b63a8bb AppKit`-[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 122
frame #29: 0x00007fff8b62e9bc AppKit`-[NSApplication run] + 553
frame #30: 0x00007fff8b6197a3 AppKit`NSApplicationMain + 940
frame #31: 0x00000001008e2210 QuickBooks 2015`main(argc=3, argv=0x00007fff5fbff878) + 112 at main.m:59
frame #32: 0x00007fff8c6d85fd libdyld.dylib`start + 1
frame #33: 0x00007fff8c6d85fd libdyld.dylib`start + 1