Если проблема возникает в iOS 11 и выше, тогда я нашел это объяснение в документе журнала изменений платформы: https://cocoapods.org/pods/GoogleSignIn/changelog
Запись от 2017-10-17 - v4.1.1 заявляет:
Исправлена проблема, из-за которой GIDSignInUIDelegate signInWillDispatch: error: не был вызван в iOS 11. Обратите внимание, что предполагается, что ни signIn: presentViewController:, ни signIn: dimissViewController: не вызывается в iOS 11, поскольку SFAuthenticationSession не вызываетсяпредставленный контроллером представления приложения.
Согласно приведенному выше объяснению signInWillDispatch:error
действительно вызывается, но signIn:presentViewController:
и signIn:dimissViewController:
являются намеренно , не вызванными, потому что базовый SFAuthenticationSession
представляет и отклоняет поток входа через частный API, делая два метода обратного вызова бесполезными.Я полагаю, что эти методы остаются в протоколе GIDSignInUIDelegate
исключительно для обратной совместимости с iOS 10, где SFAuthenticationSession
не использовался, и поток входа мог быть представлен и отклонен от конкретного контроллера представления.
Однако, несмотря на то, что эти два метода никогда не вызываются в iOS 11 и выше, они все равно должны быть реализованы, когда объект делегата не является подклассом UIViewController
, в противном случае приложение вылетит.Очевидно, что не очень логично иметь реализованные методы, которые ничего не делают ...
Кстати, Google мог бы лучше обновлять свою документацию, потому что теперь это вводит в заблуждение: https://developers.google.com/identity/sign-in/ios/api/protocol_g_i_d_sign_in_u_i_delegate-p#a2b265097a3c78e7f82d57b2ccda11c39