Исключение NSInvalidArgumentException из OIDAuthorizationService при использовании входа в Google в SwiftUI

#ios #swift #xcode #swiftui #google-signin

#iOS #swift #xcode #swiftui #google-вход

Вопрос:

У меня ужасный день с этой незнакомой ошибкой

     2020-08-15 10:00:38.630941 0100 Wicrypt[44349:3718177] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' [OIDAuthorizationService presentAuthorizationRequest:presentingViewController:callback:]: unrecognized selector sent to class 0x106b47af0'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000107dfb4b2 __exceptionPreprocess   242
    1   libobjc.A.dylib                     0x0000000107a4b26e objc_exception_throw   48
    2   CoreFoundation                      0x0000000107e09f12 __CFExceptionProem   0
    3   CoreFoundation                      0x0000000107dff9e8 ___forwarding___   1479
    4   CoreFoundation                      0x0000000107e01a18 _CF_forwarding_prep_0   120
    5   Wicrypt                             0x0000000106aac8d2 -[GIDSignIn authenticateInteractivelyWithOptions:]   626
    6   Wicrypt                             0x0000000106aacd5f -[GIDSignIn authenticateWithOptions:]   74
    7   Wicrypt                             0x0000000106aac59a -[GIDSignIn signInWithOptions:]   509
    8   Wicrypt                             0x0000000106aabde6 -[GIDSignIn signIn]   64
    9   Wicrypt                             0x000000010671810b $s7Wicrypt18GoogleSignInScreenV4bodyQrvg7SwiftUI9TupleViewVyAE0J0PAEE5frame5width6height9alignmentQr12CoreGraphics7CGFloatVSg_AqE9AlignmentVtFQOyAE6SpacerV_Qo__AiEEAjklMQrAQ_AqStFQOyAE6VStackVyAGyAE4TextV_AZtGG_Qo_AuzE6ButtonVyAZGtGyXEfU_yycfU0_   91
    10  SwiftUI                             0x00000001095e1d91 $s7SwiftUI18WrappedButtonStyle33_AEEDD090E917AC57C12008D974DC6805LLV4BodyV4bodyQrvgyycAA09PrimitivedE13ConfigurationVcfu_yycfu0_TA   17
    11  SwiftUI                             0x000000010989c000 $s7SwiftUI25PressableGestureCallbacksV8dispatch5phase5stateyycSgAA0D5PhaseOyxG_SbztFyycfU_   32
    12  SwiftUI                             0x0000000109657bac $sIeg_ytIegr_TR   12
    13  SwiftUI                             0x00000001094dc901 $sIeg_ytIegr_TRTA   17
    14  SwiftUI                             0x00000001094fbcd9 $sIeg_ytIegr_TRTA.1980   9
    15  SwiftUI                             0x0000000109657bcc $sytIegr_Ieg_TR   12
    16  SwiftUI                             0x0000000109657bac $sIeg_ytIegr_TR   12
    17  SwiftUI                             0x000000010964a791 $sIeg_ytIegr_TRTA   17
    18  SwiftUI                             0x000000010964a044 $s7SwiftUI6UpdateO3endyyFZ   436
    19  SwiftUI                             0x0000000109688a9d $s7SwiftUI19EventBindingManagerC4sendyySDyAA0C2IDVAA0C4Type_pGF   301
    20  SwiftUI                             0x0000000109ac2a9c $s7SwiftUI18EventBindingBridgeC4send_6sourceySDyAA0C2IDVAA0C4Type_pG_AA0cD6Source_ptFTf4nen_nAA22UIKitGestureRecognizerC_Tg5   2060
    21  SwiftUI                             0x0000000109ac0782 $s7SwiftUI22UIKitGestureRecognizerC4send025_062C14327F4C9197D92807A7H6DF7F3BLL7touches5event5phaseyShySo7UITouchCG_So7UIEventCAA10EventPhaseOtF   66
    22  SwiftUI                             0x0000000109ac15e3 $s7SwiftUI22UIKitGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtFToTm   131
    23  SwiftUI                             0x0000000109ac0858 $s7SwiftUI22UIKitGestureRecognizerC12touchesEnded_4withyShySo7UITouchCG_So7UIEventCtFTo   40
    24  UIKitCore                           0x000000011388b2f5 -[UIGestureRecognizer _componentsEnded:withEvent:]   217
    25  UIKitCore                           0x0000000113dd2162 -[UITouchesEvent _sendEventToGestureRecognizer:]   674
    26  UIKitCore                           0x000000011387f6fb __47-[UIGestureEnvironment _updateForEvent:window:]_block_invoke   70
    27  UIKitCore                           0x000000011387f380 -[UIGestureEnvironment _updateForEvent:window:]   489
    28  UIKitCore                           0x0000000113d84bb8 -[UIWindow sendEvent:]   4752
    29  UIKitCore                           0x0000000113d5e7dd -[UIApplication sendEvent:]   408
    30  UIKitCore                           0x0000000113dee8c0 __processEventQueue   15007
    31  UIKitCore                           0x0000000113de5398 __eventFetcherSourceCallback   106
    32  CoreFoundation                      0x0000000107d69b04 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__   17
    33  CoreFoundation                      0x0000000107d69a43 __CFRunLoopDoSource0   157
    34  CoreFoundation                      0x0000000107d69187 __CFRunLoopDoSources0   222
    35  CoreFoundation                      0x0000000107d63c68 __CFRunLoopRun   882
    36  CoreFoundation                      0x0000000107d63542 CFRunLoopRunSpecific   538
    37  GraphicsServices                    0x0000000111c15db3 GSEventRunModal   139
    38  UIKitCore                           0x0000000113d4014e -[UIApplication _run]   912
    39  UIKitCore                           0x0000000113d451b1 UIApplicationMain   101
    40  Wicrypt                             0x00000001066f786b main   75
    41  libdyld.dylib                       0x000000010e009411 start   1
)
libc  abi.dylib: terminating with uncaught exception of type NSException
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' [OIDAuthorizationService presentAuthorizationRequest:presentingViewController:callback:]: unrecognized selector sent to class 0x106b47af0'
terminating with uncaught exception of type NSException
CoreSimulator 732.7 - Device: iPhone 11 (7A79AEEA-ED4B-4DCD-BC33-81C73615B7A7) - Runtime: iOS 14.0 (18A5332e) - DeviceType: iPhone 11
  

Я установил необходимый делегат

 GIDSignIn.sharedInstance()?.delegate = googleDelegate
  

Я также правильно настроил контроллер представления

 GIDSignIn.sharedInstance()!.presentingViewController = window.rootViewController
  

Ближайший ресурс, который я видел, это: https://openid.github.io/AppAuth-iOS/docs/latest/category_o_i_d_authorization_service_07_i_o_s_08.html#details

Пожалуйста, любая помощь или ссылка будут полезны

Комментарии:

1. Действительно, в OIDAuthorizationService классе такого метода не определеноgithub.com/openid/AppAuth-iOS/blob /…

2. Пожалуйста, обновите свой пост полным стеком аварийных вызовов

3. @EugeneDudnyk Я обновил аварийный стек

4. @EugeneDudnyk Я не понимаю, как AppAuth-iOS был вовлечен во все это, я просто пытался реализовать вход Google в SwiftUI

5. AppAuth — это зависимость cocoapods.org/pods/GoogleSignIn

Ответ №1:

Это может быть необходимым шагом из документов, если вы не используете pods:

 Add the ObjC linker flag to the app target's build settings:

Other Linker Flags: $(OTHER_LDFLAGS) -ObjC
  

Комментарии:

1. Кажется, это правильное решение, если не используются pods и если платформа AppAuth уже включена. Установка Other Linker Flags в Project > Build Settings > Linker значение $(OTHER_LDFLAGS) -ObjC решает эту проблему.

Ответ №2:

Вызываемый метод присутствует в этом файле.

Если ваша среда выполнения не может найти этот метод, это означает, что этот файл не включен в проект.

Если вы используете CocoaPods, этот файл должен быть автоматически включен для ios платформы. Пожалуйста, убедитесь, что вы указали

 platform :ios, '13.0'
  

в вашем Podfile .

Комментарии:

1. Спасибо. Я только что попробовал это с pod, и это работает нормально, я пытался все это время без pod

Ответ №3:

Нам не нужно добавлять -ObjC в OTHER_LINKER_FLAGS или включать AppAuthCore.framework в «Связанные фреймворки и библиотеки» целевого приложения.

Достаточно добавить только AppAuth.framework. (и в связанной фазе запуска сценария carthage copy-frameworks.)»

(Основано на комментарии Раткинса на форуме Git AppAuth)