Gamecenter authentication issue
Asked Answered
P

1

7

So I've updated the way I authenticate players for gamecenter and I'm still getting a crash at start up.

This is the new way I authenticate:

- (void) authenticateLocalPlayer
{
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
    if (viewController != nil)
    {
        NSLog (@"user not logged in to GC");
    }
    else if ([GKLocalPlayer localPlayer].isAuthenticated)
    {
        NSLog(@"gamecenter authentication process succeeded");
    }
    else
    {
        NSLog(@"user not authenicated");
    }
};
}

Here's what is shown when it crashes:

2014-11-12 16:20:43.295 ZombieConga[7492:881764] -[GKLocalPlayerInternal name]: unrecognized       selector sent to instance 0x7974b8c0
2014-11-12 16:20:43.298 ZombieConga[7492:881764] *** Terminating app due to uncaught     exception 'NSInvalidArgumentException', reason: '-[GKLocalPlayerInternal name]: unrecognized   selector sent to instance 0x7974b8c0'
*** First throw call stack:
(
0   CoreFoundation                      0x01ef6946 __exceptionPreprocess + 182
1   libobjc.A.dylib                     0x01b8ea97 objc_exception_throw + 44
2   CoreFoundation                      0x01efe5c5 -[NSObject(NSObject) doesNotRecognizeSelector:] + 277
3   CoreFoundation                      0x01e473e7 ___forwarding___ + 1047
4   CoreFoundation                      0x01e46fae _CF_forwarding_prep_0 + 14
5   SpriteKit                           0x01a20f82 -[SKNode isEqual:] + 124
6   Foundation                          0x015f5612 +[NSObject(NSDelayedPerforming) cancelPreviousPerformRequestsWithTarget:] + 345
7   GameCenterFoundation                0x0b1ef11e -[GKPlayer postChangeNotification] + 45
8   GameCenterFoundation                0x0b209aa8 __52-[GKDaemonProxy setLocalPlayer:authenticated:reply:]_block_invoke + 922
9   libdispatch.dylib                   0x0237a30a _dispatch_call_block_and_release + 15
10  libdispatch.dylib                   0x0239ae2f _dispatch_client_callout + 14
11  libdispatch.dylib                   0x0238190e _dispatch_main_queue_callback_4CF + 606
12  CoreFoundation                      0x01e5095e __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 14
13  CoreFoundation                      0x01e0f760 __CFRunLoopRun + 2256
14  CoreFoundation                      0x01e0ebcb CFRunLoopRunSpecific + 443
15  CoreFoundation                      0x01e0e9fb CFRunLoopRunInMode + 123
16  GraphicsServices                    0x036dc24f GSEventRunModal + 192
17  GraphicsServices                    0x036dc08c GSEventRun + 104
18  UIKit                               0x0019f8b6 UIApplicationMain + 1526
19  ZombieConga                         0x000f898d main + 141
20  libdyld.dylib                       0x023c6ac9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

Why is it crashing?

Pettigrew answered 12/11, 2014 at 22:31 Comment(5)
add a All exceptions breakpoint you would get a better error descriptionSouter
@Souter All i got when i did that was: 2014-11-13 00:17:39.341 ZombieConga[7990:971858] -[GKLocalPlayerInternal name]: unrecognized selector sent to instance 0x7a920770Pettigrew
check out this #25754903Souter
Did you find anything yet? I am having the same issue.Diphenylhydantoin
@Diphenylhydantoin I found an answer to mine, mabye it will work for you to.Pettigrew
D
2

The solution for my game was quite strange (I don't understand it completely myself). By moving the call to [self authorizeLocalPlayer] until later in the lifecycle, such as when I first initialize the SKScene, rather than early in -(void)viewDidLoad, it prevented this crash.

I believe this has to do with an issue with threads, but I cannot be sure. Some changes I made to code, that seemed unrelated, having to do with multithreading caused this to break again (I had to change a call to performSelector:withObject:afterDelay: to [NSTimer scheduledTimerWith...].

Basically, this is a very hard to track down issue, that requires some messing around with. Sorry I could not be more specific :(

Diphenylhydantoin answered 20/11, 2014 at 0:20 Comment(2)
I had a performSelector:withobject:afterdelay in my main menu scene, which is the first scene that loads. By removing that, it now works. For some reason that is what was causing the crash.Pettigrew
@Pettigrew It took a while to solve that, because who would have thought that the perform selector would have caused it? They seem unrelated.Diphenylhydantoin

© 2022 - 2024 — McMap. All rights reserved.