@@ -168,28 +168,36 @@ - (void)onNext:(NSString *)phoneNumber {
168
168
[provider verifyPhoneNumber: phoneNumberWithCountryCode
169
169
UIDelegate: self
170
170
completion: ^(NSString *_Nullable verificationID, NSError *_Nullable error) {
171
+ // Temporary fix to guarantee execution of the completion block on the main thread.
172
+ // TODO: Remove temporary workaround when the issue is fixed in FirebaseAuth.
173
+ dispatch_block_t completionBlock = ^() {
174
+ [self decrementActivity ];
175
+ self.navigationItem .rightBarButtonItem .enabled = YES ;
176
+
177
+ if (error) {
178
+ [_phoneNumberField becomeFirstResponder ];
179
+
180
+ UIAlertController *alertController = [FUIPhoneAuth alertControllerForError: error
181
+ actionHandler: nil ];
182
+ [self presentViewController: alertController animated: YES completion: nil ];
183
+
184
+ FUIPhoneAuth *delegate = [self .authUI providerWithID: FIRPhoneAuthProviderID];
185
+ [delegate callbackWithCredential: nil error: error result: nil ];
186
+ return ;
187
+ }
171
188
172
- [self decrementActivity ];
173
- self.navigationItem .rightBarButtonItem .enabled = YES ;
174
-
175
- if (error) {
176
- [_phoneNumberField becomeFirstResponder ];
189
+ UIViewController *controller =
190
+ [[FUIPhoneVerificationViewController alloc ] initWithAuthUI: self .authUI
191
+ verificationID: verificationID
192
+ phoneNumber: phoneNumberWithCountryCode];
177
193
178
- UIAlertController *alertController = [FUIPhoneAuth alertControllerForError: error
179
- actionHandler: nil ];
180
- [self presentViewController: alertController animated: YES completion: nil ];
181
-
182
- FUIPhoneAuth *delegate = [self .authUI providerWithID: FIRPhoneAuthProviderID];
183
- [delegate callbackWithCredential: nil error: error result: nil ];
184
- return ;
194
+ [self pushViewController: controller];
195
+ };
196
+ if ([NSThread isMainThread ]) {
197
+ completionBlock ();
198
+ } else {
199
+ dispatch_sync (dispatch_get_main_queue (), completionBlock);
185
200
}
186
-
187
- UIViewController *controller =
188
- [[FUIPhoneVerificationViewController alloc ] initWithAuthUI: self .authUI
189
- verificationID: verificationID
190
- phoneNumber: phoneNumberWithCountryCode];
191
-
192
- [self pushViewController: controller];
193
201
}];
194
202
}
195
203
0 commit comments