Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problem with LiveSDK + swift + cocoapods (loading xib) #74

Open
ammoqq opened this issue Jul 17, 2015 · 11 comments
Open

Problem with LiveSDK + swift + cocoapods (loading xib) #74

ammoqq opened this issue Jul 17, 2015 · 11 comments
Assignees

Comments

@ammoqq
Copy link

ammoqq commented Jul 17, 2015

Getting error:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle ... (loaded)' with name 'LiveAuthDialog_iPhone''

//in the place of ..., there is my simulator directory.

Important*
I tried manually drag & dropping the xibs into Copy Bundle Resources, but that helps with the error only partially. I am getting redirected to the xib i am supposed to, can log in, can click the Yes button on the permissions AND then im redirected to a blank webview page instead of going back to my app. Any ideas ?

Is there a way to fix this ? there is no info on readme except running pod install and it should work. Unfortunately it doesnt.

Please help

EDIT: I have the PhotoSky example working fine, but cannot do it in swift. The photoSky app works perfectly when i use my own client ID in it!

this is how i login in swift:
var live = LiveConnectClient(clientId: ClientID, delegate: self)
live.login(self, scopes: Scopes, delegate: self)

  1. i get the login and password screen, i sign in with my credentials.
  2. i get the permissions view where i can say yes or no to the asked permissions
  3. i click yes
  4. i get blank page... instead of being redirected to my app
@ammoqq
Copy link
Author

ammoqq commented Jul 20, 2015

Maybe im getting redirected to some blank error page
But im not sure if its true cause i cannot print it? Im banging my head into a wall please help
tried to print the error link but im getting app crash on NSLog([url absoluteString]) on the permissions screen and kinda cannot see the next url :(

#pragma mark UIWebViewDelegate methods

  • (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
    navigationType:(UIWebViewNavigationType)navigationType
    {
    NSURL *url = [request URL];

    NSLog([url absoluteString]);

    if ([[url absoluteString] hasPrefix: _endUrl])
    {
    [_delegate authDialogCompletedWithResponse:url];
    }

    // Always return YES to work around an issue on iOS 6 that returning NO may cause
    // next Login request on UIWebView to hang.
    return YES;
    }

@aclev
Copy link
Contributor

aclev commented Jul 20, 2015

Hi @ammoqq
Thanks for your interest! Currently we do not support swift/objective c interop . Can you set a break point in that method and check the value of request? I imagine you are getting a blank page without the NSLog because [request URL] is retuning nil so the check for _endUrl is never true. This means it won't every call authDialogCompletedWithResponse on the _delegate object.

@aclev aclev self-assigned this Jul 20, 2015
@ammoqq
Copy link
Author

ammoqq commented Jul 20, 2015

so this is my url after i press "YES" on the permissions screen:

2015-07-20 20:57:01.294 Ddukt[363:50716] https://account.live.com/Consent/Update?ru=https://login.live.com/oauth20_authorize.srf ... scope=wl.signin+wl.basic+wl.emails+wl.skydrive+wl.offline_access

2015-07-20 20:57:02.101 Ddukt[363:50716] https://login.live.com/oauth20_authorize.srf?lc=1045&display=ios_phone&response_type=code&redirect_uri= ... &res=success

2015-07-20 20:57:03.286 Ddukt[363:50716] https://login.live.com/oauth20_desktop.srf?code=CODE_HERE&lc=1045

//btw i can only get those values on device, cause on simulator it crashes with NSlog

@ammoqq
Copy link
Author

ammoqq commented Jul 20, 2015

and the result for the user is simply going from the page that asks for permissions to the blank page and nothing more
I just tested and it actually passes the _endUrl if but the delegate doesnt work somehow ? Cause i just got my print from inside of the if statement
[_delegate authDialogCompletedWithResponse:url];
this seems to not be called even though the if check is true

for example i made the code like that:

  • (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
    navigationType:(UIWebViewNavigationType)navigationType
    {
    NSURL *url = [request URL];

    NSLog(_endUrl);
    if ([[url absoluteString] hasPrefix: _endUrl])
    {
    NSLog(@"hi");
    [_delegate authDialogCompletedWithResponse:url];
    }
    NSString *path = [url absoluteString];
    NSLog(path);

    // Always return YES to work around an issue on iOS 6 that returning NO may cause
    // next Login request on UIWebView to hang.
    return YES;
    }

and the console says:
2015-07-20 21:12:07.725 Ddukt[371:52576] https://login.live.com/oauth20_desktop.srf
2015-07-20 21:12:07.726 Ddukt[371:52576] hi
2015-07-20 21:12:07.726 Ddukt[371:52576] https://login.live.com/oauth20_desktop.srf?code=CODE_HERE&lc=1045

EDIT: yes im postive! authDialogCompletedWithResponse:url this method never gets called (when i place NSLog inside the LiveAuthRequest.m, inside the authDialogCompletedWithResponse:url method is never called). Any idea why or how to fix that ?

@ammoqq
Copy link
Author

ammoqq commented Jul 20, 2015

maybe to make delegate work i need to do something like i do for example in google signInGPP?.delegate = self
but how would that look for livesdk LiveAuthDelegate ?
tried THIS:
var live = LiveConnectClient(clientId: ClientID, delegate: self)
live.delegate = self
live.login(self, scopes: Scopes, delegate: self)

but that won't compile

it is strange cause for example when starting to log in the method authCompleted(status: LiveConnectSessionStatus, session: LiveConnectSession!, userState: AnyObject!) {
IS CALLED once!
so i dont know what could be the cause ?

@aclev
Copy link
Contributor

aclev commented Jul 20, 2015

As I mentioned before we do not support swift/object c interop, I can't guarantee that the LiveSDK will work with swift. Can you tell me what the _delegate object looks like at that point? Is it nil?

@ammoqq
Copy link
Author

ammoqq commented Jul 20, 2015

yes it is null

I would be more than thankful for any clues or ideas how to tackle that, I can try to fix it myself but i have no idea how at the moment

@aclev
Copy link
Contributor

aclev commented Jul 20, 2015

It is possible that the delegate is getting dealloced before the response is sent. The delegate in the LiveAuthDialog is not the same delegate that you pass into LiveConnectClient. It is possible that the LiveConnectClientCore object is getting dealloced before the auth result is finished, this will result in it deallocing the delegate that you are seeing as nil. If you insert a breakpoint or NSLog statement in the dealloc of LiveConnectClientCore you will be able to see if this is actually the case.

@ammoqq
Copy link
Author

ammoqq commented Jul 20, 2015

well actually dealloc in LiveConnectClientCore is called before i even click yes in the webview!
so it goes like that :

  1. I press login button
  2. dealloc in LiveConnectClientCore is called
  3. i see the webview where i can press yes, but the object is already deallocated

@aclev
Copy link
Contributor

aclev commented Jul 20, 2015

If you want you can add a retain statement to line 96 in LiveConnectClient.m to try and fix the problem

_liveConnectClientCore = [[[LiveConnectClientCore alloc] initWithClientId:clientId
                                                                   scopes:[LiveAuthHelper normalizeScoers:scopes]
                                                                delegate:delegate
                                                               userState:userState] retain];

Warning: This may (and probably does) cause a memory leak. As I mentioned we do not support swift /objective c interop and at the time do not have plans to support it in the future.

@ammoqq
Copy link
Author

ammoqq commented Jul 21, 2015

ok great it indeed fixes the problem (yea i understand it isnt the best way)

Thanks for help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants