I am trying to get Game Center working under SDL in Yosemite. Specifically, to display the achievements window. My code (below) worked fine under Mavericks, but I am pretty sure that it was when Yosemite came out that the code no longer worked properly. Game Center will still authenticate on program launch, but when I open the achievements window, it displays for 1-2 seconds before the program crashes with the error “not running on main (AppKit) thread”. Has anyone gotten this error under Yosemite?
It seems like a pretty basic error, unfortunately I am not quite sure how to fix it…
Error: Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘not running on AppKit (main) thread’.
Assertion failure in void assertRunningOnAppKitThread()(), /SourceCache/ViewBridge/ViewBridge-105/ViewBridgeUtilities.m:535
An uncaught exception was raised
not running on AppKit (main) thread
Code for launching window:
@implementation GameCenterManager
NSWindow* keyWindow__;
- (void)showAchievementView
{
keyWindow__ = [NSApp keyWindow];
GKGameCenterViewController *gcViewController = [[GKGameCenterViewController alloc] init];
gcViewController.viewState = GKGameCenterViewControllerStateAchievements;
gcViewController.gameCenterDelegate = self;
GKDialogController *sdc = [GKDialogController sharedDialogController];
sdc.parentWindow = keyWindow__;
[sdc presentViewController: gcViewController];
}
- (void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController
{
GKDialogController *sdc = [GKDialogController sharedDialogController];
[sdc dismiss: self];
[keyWindow__ makeKeyWindow];
}
@end
And this is in the crash log, which I believe shows that some part of Game Center is running in a separate thread from the main one which might be causing the problem, but not sure how to fix that:
Thread 0:: Dispatch queue: com.apple.main-thread
0 com.apple.QuartzCore 0x00007fff97103096 CA::Layer::layout_if_needed(CA::Transaction*) + 524
1 com.apple.QuartzCore 0x00007fff97102e76 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 24
2 com.apple.QuartzCore 0x00007fff97102612 CA::Context::commit_transaction(CA::Transaction*) + 242
3 com.apple.QuartzCore 0x00007fff971023ae CA::Transaction::commit() + 390
4 com.apple.QuartzCore 0x00007fff97110f19 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 71
5 com.apple.CoreFoundation 0x00007fff92c18127 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
6 com.apple.CoreFoundation 0x00007fff92c18080 __CFRunLoopDoObservers + 368
7 com.apple.CoreFoundation 0x00007fff92c09bf8 CFRunLoopRunSpecific + 328
8 com.apple.HIToolbox 0x00007fff8e81456f RunCurrentEventLoopInMode + 235
9 com.apple.HIToolbox 0x00007fff8e8141ee ReceiveNextEventCommon + 179
10 com.apple.HIToolbox 0x00007fff8e81412b _BlockUntilNextEventMatchingListInModeWithFilter + 71
11 com.apple.AppKit 0x00007fff99da78ab _DPSNextEvent + 978
12 com.apple.AppKit 0x00007fff99da6e58 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 346
13 org.libsdl.SDL2 0x0000000100b1cf18 Cocoa_PumpEvents + 264 (SDL_cocoaevents.m:376)
14 org.libsdl.SDL2 0x0000000100b02140 SDL_PumpEvents_REAL + 48 (SDL_events.c:405)
15 org.libsdl.SDL2 0x0000000100b021d8 SDL_WaitEventTimeout_REAL + 56 (SDL_events.c:437)
16 org.libsdl.SDL2 0x0000000100b02197 SDL_PollEvent_REAL + 23 (SDL_events.c:418)
17 org.libsdl.SDL2 0x0000000100bd4974 SDL_PollEvent + 36 (SDL_dynapi_procs.h:157)
18 com.company.name 0x000000010013d717 C_Screen::frame() + 135
19 com.company.name 0x00000001001452f0 C_UI::start() + 64
20 com.company.name 0x000000010000828c C_Game::start() + 28
21 com.company.name 0x000000010000743c main + 684
22 com.company.name 0x0000000100007184 start + 52
Thread 1:: Dispatch queue: com.apple.libdispatch-manager
0 libsystem_kernel.dylib 0x00007fff97d3b232 kevent64 + 10
1 libdispatch.dylib 0x00007fff8d588a6a _dispatch_mgr_thread + 52
Thread 2:
0 libsystem_kernel.dylib 0x00007fff97d3a94a __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff96e8d3dd start_wqthread + 13
...
Thread 8 Crashed:: Dispatch queue: com.apple.root.utility-qos
0 libsystem_kernel.dylib 0x00007fff97d3a286 __pthread_kill + 10
1 libsystem_c.dylib 0x00007fff8fce99b3 abort + 129
2 libc++abi.dylib 0x00007fff8c36aa21 abort_message + 257
3 libc++abi.dylib 0x00007fff8c3929d1 default_terminate_handler() + 267
4 libobjc.A.dylib 0x00007fff967937d6 _objc_terminate() + 103
5 libc++abi.dylib 0x00007fff8c3900a1 std::__terminate(void (*)()) + 8
6 libc++abi.dylib 0x00007fff8c390113 std::terminate() + 51
7 libobjc.A.dylib 0x00007fff967935ff objc_terminate + 9
8 libdispatch.dylib 0x00007fff8d585c27 _dispatch_client_callout + 28
9 libdispatch.dylib 0x00007fff8d58888f _dispatch_root_queue_drain + 935
10 libdispatch.dylib 0x00007fff8d596fe4 _dispatch_worker_thread3 + 91
11 libsystem_pthread.dylib 0x00007fff96e8fa9d _pthread_wqthread + 729
12 libsystem_pthread.dylib 0x00007fff96e8d3dd start_wqthread + 13