App getting crash when click on GoogleSignIn button

I am using Google Sign-In SDK 4.0.1. When I press googleSignInButton then app will be crash. And gave below error, how to fix this:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Your app is missing support for the following URL schemes: com.googleusercontent.apps.107731993306-6s44u18onibp6gi0ddj94si1aifshhg6'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000101ac0d4b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000010110121e objc_exception_throw + 48
    2   CoreFoundation                      0x0000000101b2a2b5 +[NSException raise:format:] + 197
    3   xxxxx                           0x000000010084b3cb -[GIDSignIn signInWithOptions:] + 246
    4   xxxxx                           0x000000010084efc2 -[GIDSignInButton pressed] + 242
    5   UIKit                               0x00000001028f78bc -[UIApplication sendAction:to:from:forEvent:] + 83
    6   UIKit                               0x0000000102a7dc38 -[UIControl sendAction:to:forEvent:] + 67
    7   UIKit                               0x0000000102a7df51 -[UIControl _sendActionsForEvents:withEvent:] + 444
    8   UIKit                               0x0000000102a7ce4d -[UIControl touchesEnded:withEvent:] + 668
    9   UIKit                               0x0000000102965545 -[UIWindow _sendTouchesForEvent:] + 2747
    10  UIKit                               0x0000000102966c33 -[UIWindow sendEvent:] + 4011
    11  UIKit                               0x00000001029139ab -[UIApplication sendEvent:] + 371
    12  UIKit                               0x000000010310072d __dispatchPreprocessedEventFromEventQueue + 3248
    13  UIKit                               0x00000001030f9463 __handleEventQueue + 4879
    14  CoreFoundation                      0x0000000101a65761 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    15  CoreFoundation                      0x0000000101a4a98c __CFRunLoopDoSources0 + 556
    16  CoreFoundation                      0x0000000101a49e76 __CFRunLoopRun + 918
    17  CoreFoundation                      0x0000000101a49884 CFRunLoopRunSpecific + 420
    18  GraphicsServices                    0x00000001074cfa6f GSEventRunModal + 161
    19  UIKit                               0x00000001028f5c68 UIApplicationMain + 159
    20  xxxxxxxx                           0x00000001007c449f main + 111
    21  libdyld.dylib                       0x0000000104d5368d start + 1
    22  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException`

My AppDelegate.Swift is

class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {
public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
   if (error == nil) {

    let userId:NSString = user.userID as NSString;                  // For client-side use only!
    let idToken: NSString = user.authentication.idToken as NSString; // Safe to send to the server
    let fullName:NSString = user.profile.name as NSString;
    let givenName:NSString = user.profile.givenName as NSString;
    let familyName:NSString = user.profile.familyName as NSString;
    let email:NSString = user.profile.email as NSString;
    print(userId)
    print(userId,idToken,fullName,givenName,familyName,email)
    }

   else {
    print("\(error.localizedDescription)")
    }
}

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let kclientID:NSString = "107731993306-xxxxxxxxxxxxxxxxx.apps.googleusercontent.com"

   GIDSignIn.sharedInstance().clientID = kclientID as String!

    GIDSignIn.sharedInstance().delegate = self
    return true
}


func application(application: UIApplication,
                 openURL url: NSURL, options: [String: AnyObject], annotation:Any, sourceApplication:String?) -> Bool {

    return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication:sourceApplication, annotation: annotation)
} 

Please give me the solution. Why it is crashed?


Solution 1:

As the error clearly says, your app is missing support for the url schemes.

Add the following schemes to your info.plist

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>***Your bundle ID***</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>com.googleusercontent.apps.107731993306-6s44u18onibp6gi0ddj94si1aifshhg6</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>***Something here***</string>
        </array>
    </dict>
</array>

Check this url for your id => https://developers.google.com/identity/sign-in/ios/start-integrating

Your info.plist should look like ->

enter image description here

Solution 2:

You have to add a URL scheme to your project

  1. Open your project configuration: double-click the project name in the left tree view. Select your app from the TARGETS section, then select the Info tab, and expand the URL Types section
  2. Click the + button, and add a URL scheme -com.googleusercontent.apps.107731993306-6s44u18onibp6gi0ddj94si1aifshhg6

https://developers.google.com/identity/sign-in/ios/start-integrating#add_a_url_scheme_to_your_project

enter image description here

Solution 3:

I got that crash too. But accepted answer did not help me. I have fixed that crash in other way:

Double check that:

In AppDelegate straight DNS:

GIDSignIn.sharedInstance().clientID = "536164374389-ivga9a9at2g31nfmhpvdyhc98yf6afnr.apps.googleusercontent.com"

In Info.plist reverse DNS:

<string>com.googleusercontent.apps.536164374389-ivga9a9at2g31nfmhpvdyhc98yf6afnr</string>

Solution 4:

Xcode gives you a string - Put it here as in the below image

enter image description here

Solution 5:

I ran into similar problem. Try this method if other methods didn't help you.

There is a chance you implemented Google and Facebook login together as they are often implemented together.

The latest Google Dev docs make you implement the URL scheme using Your Project Target > Info > URL Types. While Facebook docs will tell you to implement the url scheme in info.plist file. When you implement in .plist file the other URL Schemes will be replaced. So implement all URL Schemes in Project's Target section.

Your project target will look like this

Hope someone finds this helpful