Google Sign In ne fonctionne pas sur iOS 10 Beta 7 avec Xcode 8 beta 6

J'ai une application dans l'App Store qui a fonctionné parfaitement bien jusqu'à ce que les premiers betas d'iOS 10 (je ne suis pas exactement sûr lequel). Il fonctionne également parfaitement sur iOS 9.3.

Cependant, je ne suis pas en train de tester sur iOS 10 beta 7 et la connection google est complètement cassée. J'utilise la dernière version de GIDSignIn de cocoapods .

Voici mon code:

 [GIDSignIn sharedInstance].clientID = [[ParseFetcher sharedInstance] getRandomParseK]; [GIDSignIn sharedInstance].delegate = sharedInstance; [GIDSignIn sharedInstance].uiDelegate=sharedInstance; [GIDSignIn sharedInstance].scopes = [NSArray arrayWithObjects:@"https://www.googleapis.com/auth/youtube",@"https://www.googleapis.com/auth/youtube.force-ssl", nil]; [[GIDSignIn sharedInstance] signIn]; 

Voici à quoi cela ressemble sur l'appareil:

capture d'écran 1

Il rest juste coincé comme ça.

Si je clique sur le button Actualiser en haut, il essaie de se rafraîchir et rest bloqué ici pour toujours.

capture d'écran 2

Cliquez sur le button Terminé pour renvoyer mon application.

Il n'y a pas d'erreurs consignées dans la console.

Cependant, lorsque je lance la même application sur un simulateur iOS 10, le safari view controller ne s'ouvre même pas. Rien ne se passe du tout. Mais la console enregistre cette longue histoire verbeuse dont les éléments suivants semblent les plus utiles, mais je n'ai aucune idée de ce qui ne va pas:

 nw_endpoint_resolver_receive_report [8 i.ytimg.com:443 in_progress resolver (satisfied)] received child report:[8.1 206.248.149.148:443 waiting path (satisfied)] 2016-08-22 23:19:51.531570 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_connection_endpoint_report [8.1 206.248.149.148:443 waiting path (satisfied)] reported event path:satisfied 2016-08-22 23:19:51.531909 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_proxy_handler_should_use_proxy Looking up proxy for hostname: <nil>, ifindex: 0 2016-08-22 23:19:51.533116 XXXXAPPNAMEXXXXXXX[4561:195631] [] -[NWConcrete_nw_endpoint_flow startWithHandler:] [8.1 206.248.149.148:443 waiting socket-flow (satisfied)] 2016-08-22 23:19:51.533548 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_flow_setup_socket [8.1 206.248.149.148:443 in_progress socket-flow (satisfied)] creating socket 2016-08-22 23:19:51.534108 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_flow_attach_protocols [8.1 206.248.149.148:443 in_progress socket-flow (satisfied)] 2016-08-22 23:19:51.534672 XXXXAPPNAMEXXXXXXX[4561:195631] [] __nwlog_err_simulate_crash simulate crash already simulated "nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available" 2016-08-22 23:19:51.535415 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available, dumping backtrace: [x86_64] libnetcore-856.1.8 0 libsystem_network.dylib 0x000000010c6e280e __nw_create_backtrace_ssortingng + 123 1 libnetwork.dylib 0x000000010e0d5194 nw_socket_add_input_handler + 3002 2 libnetwork.dylib 0x000000010e0b2db8 nw_endpoint_flow_attach_protocols + 3768 3 libnetwork.dylib 0x000000010e0b1dd5 nw_endpoint_flow_setup_socket + 563 4 libnetwork.dylib 0x000000010e0b0b34 -[NWConcrete_nw_endpoint_flow startWithHandler:] + 2612 5 libnetwork.dylib 0x000000010e0cbd11 nw_endpoint_handler_path_change + 1261 6 libnetwork.dylib 0x000000010e0cb740 nw_endpoint_handler_start + 570 7 libnetwork.dylib 0x000000010e0e3003 nw_endpoint_resolver_start_next_child + 2240 8 libdispatch.dylib 0x000000 2016-08-22 23:19:51.535995 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_flow_attach_protocols [8.1 206.248.149.148:443 in_progress socket-flow (satisfied)] Attached flow protocol 2016-08-22 23:19:51.536475 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_resolver_receive_report [8 i.ytimg.com:443 in_progress resolver (satisfied)] received child report:[8.1 206.248.149.148:443 in_progress socket-flow (satisfied)] 

REMARQUE: iOS 9.3 fonctionne parfaitement. Se produit également sur tous les appareils – testé sur iPhone 6s et iPhone 5s.

L'exemple de projet iOS de Google SignIn a également le même problème.

Il returnne:

 "Error Domain=com.google.GIDSignIn Code=-2 "keychain error" UserInfo={NSLocalizedDescription=keychain error}" 

Cela semble être un bug.

J'utilise (encore) le SDK Google+ pour la connection (1.7.1), et il fonctionne également sur iOS 10 beta 7. Je pensais passer à GIDSignIn car GPPSignIn est obsolète. mais je suppose que je vais attendre la prochaine bêta …

Activez "Keychain Sharing" dans l'onglet des capacités de votre cible et cela fonctionnera.

Je ne suis pas sûr si c'est ce que les autres font face mais je l'ai résolu en ajoutant un [self.view layoutIfNeeded] . Je sais que c'est bizarre mais c'est ce qui a fonctionné pour moi, je ne suis pas sûr de savoir pourquoi.

J'utilisais un conteneur de vue personnalisé à l'intérieur duquel je montrais le controller de connection de Google en tant qu'enfant. Donc avant d'append le controller de vue personnalisé au conteneur, je devais faire [self.view layoutIfNeeded] car sinon la présentation de la vue n'avait pas encore été définie, donc sdk de google utilise probablement la largeur / hauteur quelque part à l'intérieur.

Je ne suis pas sûr si c'est la bonne solution, mais il semble avoir résolu mon problème.

Je suis capable de find une solution dans mon cas en fixant mon code pour présenter correctement une sous-vue. Avant que j'obtienne cet avertissement mais je l'ai ignoré:

 Warning :-Presenting view controllers on detached view controllers is discouraged 

jusqu'à ce que j'ai vu la réponse de Pranoy C. Mon code est structuré de la même manière qu'un conteneur de vue est utilisé pour présenter des sous-vues qui contiennent le button Google. Il n'utilisait pas correctement le conteneur pour présenter une sous-vue. J'ai donc suivi le guide d'Apple , en particulier ce bloc:

 - (void) displayContentController: (UIViewController*) content { [self addChildViewController:content]; content.view.frame = [self frameForContentController]; [self.view addSubview:self.currentClientView]; [content didMoveToParentViewController:self]; } 

Une fois l'avertissement parti, Google a commencé à fonctionner correctement.

En ce qui concerne la cause première de ce problème, je ne suis pas encore tout à fait sûr, mais l'avertissement semble être un indice. Cela concerne les controllers de vue détachés. (Je ne suis pas super expérimenté dans le encoding iOS, donc si quelqu'un a plus de connaissances avec les vues, les controllers de vue, n'hésitez pas à entrer.)

Notre problème était des plugins tiers essayant d'intégrer automatiquement dans notre délégué de l'application. Pour nous, c'était CleverTap (la fonction autoIntegrate() ).

Ne rien faire Il suffit de définir le clientID pendant le lancement de l'application. Comme Donné dans le code ci-dessous:

import FBSDKLoginKit import GoogleSignIn import GGLCore

AppLelegate de la class @UIApplicationMain: UIResponder, UIApplicationDelegate {

 var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { var ConfigError : NSError? GGLContext.sharedInstance().configureWithError(&ConfigError) assert(ConfigError == nil, "Error Configuration with Google services: \(ConfigError)") GIDSignIn.sharedInstance().clientID = "679401366566-8107g2n11hpnqas58m9v8rk7hl2lgl7s.apps.googleusercontent.com" // Here You Have To Change Your App ID let fbDelegate = FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) print("DidFinish") return fbDelegate }