Spotify EXC_BAD_EXE while second time tap on Login Button after dismiss LoginViewController

137 Views Asked by At

Hi i Intigrate SpotifyLib CocoaLibSpotify iOS Library 17-20-26-630 into my Project. I open its SPLoginViewController using Bellow Method:-

-(void)OpenSpotify
{ 
    NSError *error = nil;


    [SPSession initializeSharedSessionWithApplicationKey:[NSData dataWithBytes:&g_appkey length:g_appkey_size]
                                               userAgent:@"com.mycomp.spotify"
                                           loadingPolicy:SPAsyncLoadingImmediate
                                                   error:&error];
    if (error != nil) {
        NSLog(@"CocoaLibSpotify init failed: %@", error);
        abort();
    }

    [[SPSession sharedSession] setDelegate:self];
    [self performSelector:@selector(showLogin) withObject:nil afterDelay:0.0];

}

-(void)showLogin
{
    SPLoginViewController *controller = [SPLoginViewController loginControllerForSession:[SPSession sharedSession]];
    controller.allowsCancel = YES;
    //controller.view.frame=;
    [self presentViewController:controller animated:YES completion:nil];
}

At First time that Appear Spotify Login Screen. After that I tap On Cancel Button, and Try to open again login screen then i got crash EXC_BAD_EXE at this line. sp_error createErrorCode = sp_session_create(&config, &_session);

enter image description here

UPDATE

I Found exet where is got BAD_EXC

in this method

+(void)dispatchToLibSpotifyThread:(dispatch_block_t)block waitUntilDone:(BOOL)wait {

    NSLock *waitingLock = nil;
    if (wait) waitingLock = [NSLock new];

    // Make sure we only queue one thing at a time, and only
    // when the runloop is ready for it.
    [runloopReadyLock lockWhenCondition:1];

    CFRunLoopPerformBlock(libspotify_runloop, kCFRunLoopDefaultMode, ^() {
        [waitingLock lock];
        if (block) { @autoreleasepool { block(); } }
        [waitingLock unlock];
    });

    if (CFRunLoopIsWaiting(libspotify_runloop)) {
        CFRunLoopSourceSignal(libspotify_runloop_source);
        CFRunLoopWakeUp(libspotify_runloop);
    }

    [runloopReadyLock unlock]; // at hear when my debug poin reach after pass this i got bad_exc
    if (wait) {
        [waitingLock lock];
        [waitingLock unlock];
    }
}
1

There are 1 best solutions below

0
On

after doing lots of search i got Solution i check that whether the session already exists then i put if condition like:-

-(void)OpenSpotify
{

    SPSession *session = [SPSession sharedSession];
    if (!session) {
        NSError *error = nil;
        [SPSession initializeSharedSessionWithApplicationKey:[NSData dataWithBytes:&g_appkey length:g_appkey_size]
                                                   userAgent:@"com.mycomp.spotify"
                                               loadingPolicy:SPAsyncLoadingImmediate
                                                       error:&error];
        if (error != nil) {
            NSLog(@"CocoaLibSpotify init failed: %@", error);
            abort();
        }
        [[SPSession sharedSession] setDelegate:self];

    }
    [self performSelector:@selector(showLogin) withObject:nil afterDelay:0.0];

}
-(void)showLogin
{

    SPLoginViewController *controller = [SPLoginViewController loginControllerForSession:[SPSession sharedSession]];
    controller.allowsCancel = YES;
    [self presentViewController:controller animated:YES completion:nil];
}

Now no crash and working fine.