Giter VIP home page Giter VIP logo

react-native-apple-authentication's Introduction

React Native Apple Authentication

NPM downloads NPM version License

Chat on Discord Follow on Twitter


A well typed React Native library providing support for Apple Authentication on iOS and Android, including support for all AppleButton variants.

apple-auth

Prerequisites to using this library

The @invertase/react-native-apple-authentication library will not work if you do not ensure the following:

  • You are using React Native version 0.60 or higher.

  • (iOS only) You have setup react-native iOS development environment on your machine (Will only work on Mac). If not, please follow the official React Native documentation for getting started: React Native getting started documentation.

  • (iOS only) You are using Xcode version 11 or higher. This will allow you to develop using iOS version 13 and higher, when the APIs for Sign In with Apple became available.

  • Once you're sure you've met the above, please follow our Initial development environment setup guide.

Version 2.0.0 breaking changes

Version 2 added Android support and introduced a few breaking changes with how methods are accessed. Please see the Migration Guide.

Installation

yarn add @invertase/react-native-apple-authentication

(cd ios && pod install)

You will not have to manually link this module as it supports React Native auto-linking.

Expo usage

To enable the Sign In with Apple capability in your app, set the ios.usesAppleSignIn property to true in your project's app config:

{
  "expo": {
    "ios": {
      "usesAppleSignIn": true
    }
  }
}

You may also need to run npx expo prebuild.

Usage

Below are simple steps to help you get up and running. The implementation differs between iOS an Android, so if you're having trouble, be sure to look through the docs. Please skip and head to the full code examples noted below if you prefer to see a more complete implementation:

iOS

1. Initial set-up

Import the appleAuth (API documentation) module and the AppleButton (API documentation) exported member element from the @invertase/react-native-apple-authentication library. Setup an event handler (onPress) to kick start the authentication request.

// App.js

import React from 'react';
import { View } from 'react-native';
import { AppleButton } from '@invertase/react-native-apple-authentication';

async function onAppleButtonPress() {

}

function App() {
  return (
    <View>
      <AppleButton
        buttonStyle={AppleButton.Style.WHITE}
        buttonType={AppleButton.Type.SIGN_IN}
        style={{
          width: 160, // You must specify a width
          height: 45, // You must specify a height
        }}
        onPress={() => onAppleButtonPress()}
      />
    </View>
  );
}

2. Implement the login process

// App.js

import { appleAuth } from '@invertase/react-native-apple-authentication';

async function onAppleButtonPress() {
  // performs login request
  const appleAuthRequestResponse = await appleAuth.performRequest({
    requestedOperation: appleAuth.Operation.LOGIN,
    // Note: it appears putting FULL_NAME first is important, see issue #293
    requestedScopes: [appleAuth.Scope.FULL_NAME, appleAuth.Scope.EMAIL],
  });

  // get current authentication state for user
  // /!\ This method must be tested on a real device. On the iOS simulator it always throws an error.
  const credentialState = await appleAuth.getCredentialStateForUser(appleAuthRequestResponse.user);

  // use credentialState response to ensure the user is authenticated
  if (credentialState === appleAuth.State.AUTHORIZED) {
    // user is authenticated
  }
}

3. Event Listener

Set up event listener for when user's credentials have been revoked.

// App.js

import React, { useEffect } from 'react';
import { View } from 'react-native';
import { appleAuth, AppleButton } from '@invertase/react-native-apple-authentication';

function App() {
  useEffect(() => {
    // onCredentialRevoked returns a function that will remove the event listener. useEffect will call this function when the component unmounts
    return appleAuth.onCredentialRevoked(async () => {
      console.warn('If this function executes, User Credentials have been Revoked');
    });
  }, []); // passing in an empty array as the second argument ensures this is only ran once when component mounts initially.

  return (
    <View>
      <AppleButton onPress={() => onAppleButtonPress()} />
    </View>
  );
}

4. Implement the logout process

There is an operation appleAuth.Operation.LOGOUT, however it does not work as expected and is not even being used by Apple in their example code. See this issue for more information

So it is recommended when logging out to just clear all data you have from a user, collected during appleAuth.Operation.LOGIN.

Android

1. Initial set-up

Make sure to correctly configure your Apple developer account to allow for proper authentication on Android. You can checkout our guide for more info.

// App.js

import React from 'react';
import { View } from 'react-native';
import { appleAuthAndroid, AppleButton } from '@invertase/react-native-apple-authentication';

async function onAppleButtonPress() {
}

// Apple authentication requires API 19+, so we check before showing the login button
function App() {
  return (
    <View>
      {appleAuthAndroid.isSupported && (
        <AppleButton
          buttonStyle={AppleButton.Style.WHITE}
          buttonType={AppleButton.Type.SIGN_IN}
          onPress={() => onAppleButtonPress()}
        />
      )}
    </View>
  );
}

2. Implement the login process

// App.js

import { appleAuthAndroid } from '@invertase/react-native-apple-authentication';
import 'react-native-get-random-values';
import { v4 as uuid } from 'uuid'

async function onAppleButtonPress() {
  // Generate secure, random values for state and nonce
  const rawNonce = uuid();
  const state = uuid();

  // Configure the request
  appleAuthAndroid.configure({
    // The Service ID you registered with Apple
    clientId: 'com.example.client-android',

    // Return URL added to your Apple dev console. We intercept this redirect, but it must still match
    // the URL you provided to Apple. It can be an empty route on your backend as it's never called.
    redirectUri: 'https://example.com/auth/callback',

    // The type of response requested - code, id_token, or both.
    responseType: appleAuthAndroid.ResponseType.ALL,

    // The amount of user information requested from Apple.
    scope: appleAuthAndroid.Scope.ALL,

    // Random nonce value that will be SHA256 hashed before sending to Apple.
    nonce: rawNonce,

    // Unique state value used to prevent CSRF attacks. A UUID will be generated if nothing is provided.
    state,
  });

  // Open the browser window for user sign in
  const response = await appleAuthAndroid.signIn();

  // Send the authorization code to your backend for verification
}

MacOS

This library works on MacOS 10.15+ if using in conjunction with react-native-macos.

Web (not react-native-web, but that may come as a follow-on, this is pure web at the moment)

1. Initial set-up

  • Ensure you follow the android steps above.
  • Install the web counterpart yarn add react-apple-signin-auth in your web project.

2. Implement the login process on web

import AppleSignin from 'react-apple-signin-auth';

/** Apple Signin button */
const MyAppleSigninButton = ({ ...rest }) => (
  <AppleSignin
    /** Auth options passed to AppleID.auth.init() */
    authOptions={{
      clientId: 'SAME AS ANDROID',
      redirectURI: 'SAME AS ANDROID',
      scope: 'email name',
      state: 'state',
      /** sha256 nonce before sending to apple to unify with native firebase behavior - https://github.com/invertase/react-native-apple-authentication/issues/28 */
      nonce: sha256('nonce'),
      /** We have to usePopup since we need clientSide authentication */
      usePopup: true,
    }}
    onSuccess={(response) => {
      console.log(response);
      // {
      //     "authorization": {
      //       "state": "[STATE]",
      //       "code": "[CODE]",
      //       "id_token": "[ID_TOKEN]"
      //     },
      //     "user": {
      //       "email": "[EMAIL]",
      //       "name": {
      //         "firstName": "[FIRST_NAME]",
      //         "lastName": "[LAST_NAME]"
      //       }
      //     }
      // }
    }}
  />
);

export default MyAppleSigninButton;

3. Verify serverside

  • Send the apple response to your server.
  • See Serverside Verification
  • Ensure that you pass the clientID as the web service ID, not the native app bundle. Since the project utilizes the service ID for authenticating web and android.

Serverside verification

Nonce

  • Based on the Firebase implementation guidelines the nonce provided to appleAuth.performRequest (iOS) and appleAuthAndroid.configure (Android) is automatically SHA256-hashed.
  • To verify the nonce serverside you first need to hash the nonce value, ie:
    crypto.createHash('sha256').update(nonce).digest('hex');
  • The nonce can then be easily compared serverside for extra security verification, ie:
    import crypto from 'crypto';
    import appleSigninAuth from 'apple-signin-auth';
    
    appleIdTokenClaims = await appleSigninAuth.verifyIdToken(id_token, {
      /** sha256 hex hash of raw nonce */
      nonce: nonce ? crypto.createHash('sha256').update(nonce).digest('hex') : undefined,
    });

API Reference Documentation

All API documentation is generated by typedoc, and is available in the typedocs folder

FAQs

  1. Why does full name and email return null?

     const appleAuthRequestResponse = await appleAuth.performRequest({
       requestedOperation: appleAuth.Operation.LOGIN,
       requestedScopes: [appleAuth.Scope.FULL_NAME, appleAuth.Scope.EMAIL],
     });
    • For testing purposes, to be receive these again, go to your device settings; Settings > Apple ID, iCloud, iTunes & App Store > Password & Security > Apps Using Your Apple ID, tap on your app and tap Stop Using Apple ID. You can now sign-in again and you'll receive the full name and `email.
    • Keep in mind you can always access the email property server-side by inspecting the id_token returned from Apple when verifying the user.
  2. How to change button language? (iOS)

    • Native Apple Button component reads language value from CFBundleDevelopmentRegion at Info.plist file. By changing CFBundleDevelopmentRegion value you can change default language for component.
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    • For supporting multi language, you can add CFBundleAllowMixedLocalizations key to Info.plist.
    <key>CFBundleAllowMixedLocalizations</key>
    <string>true</string>
  3. How do I get the email after the first login?

    • You can get the email address by parsing the JWT token that's returned from any authentication, like so:
    import { appleAuth } from '@invertase/react-native-apple-authentication';
    import { jwtDecode } from 'jwt-decode';
    
    const appleAuthRequestResponse = await appleAuth.performRequest({
      requestedOperation: appleAuth.Operation.LOGIN,
      requestedScopes: [appleAuth.Scope.EMAIL, appleAuth.Scope.FULL_NAME]
    });
    // other fields are available, but full name is not
    const { email, email_verified, is_private_email, sub } = jwtDecode(appleAuthRequestResponse.identityToken)

Troubleshooting

The operation couldn’t be completed. (com.apple.AuthenticationServices.AuthorizationError error 1000.)
Case 1:

Check that the connection settings have been made correctly. The setup can be found here: Initial Setup

Case 2:

If you are using the function getCredentialStateForUser on a simulator, this error will always be triggered, for the reason that this function verifies the authenticity of the device.

You must test your code on a real device.

Case 3:

If you are using a simulator, go to Manage Apple Account.

Search for "Devices", select "Simulator" and press "Remove from Account".

show-devices

remove-from-manager

It should work fine.

"invalid_client" in Android webview

Make sure to read the Android services setup docs.

Case 1:

The clientId you passed to appleAuthAndroid.configure doesn't match the Service ID you setup in your Apple developer console.

Case 2:

Your Service ID is attached to the wrong Primary App ID, and therefore uses the incorrect Sign In with Apple key.

Case 3:

The redirectUri you passed to appleAuthAndroid.configure doesn't match one of the return URLs or domains/subdomains you added in your Apple developer console. The URL must match exactly, and cannot contain a query string.

License


Built and maintained by Invertase.

react-native-apple-authentication's People

Contributors

a-tokyo avatar asabhaney avatar bell-steven avatar dburdan avatar doublethefish avatar h-des avatar habovh avatar krrevilla avatar lukebars avatar magrinj avatar maheshwarimrinal avatar mifi avatar mikehardy avatar mitsuharu avatar mrousavy avatar nhnam avatar nishidaryu416 avatar piersonmarks avatar pvinis avatar quintonc avatar radko93 avatar rennard avatar russellwheatley avatar salakar avatar sdcoffey avatar sercanuste avatar skantus avatar tony95271 avatar tranminhnhat1005 avatar yuri-lomashko-itechart avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

react-native-apple-authentication's Issues

Auth pop-up doesn't show

When I try to open the auth pop-up nothing happens, I only get "com apple authenticationservices authorizationerror error 1000" which doesn't really say anything when searching for it... Any thoughts?

Skärmavbild 2020-03-09 kl  15 28 19

`
onAppleButtonPress = async () => {
console.log(AppleAuthRequestOperation);
console.log(appleAuth);
console.log(AppleAuthRequestScope)
// sign in request

try {
  const responseObject = await appleAuth.performRequest({
    requestedOperation: AppleAuthRequestOperation.LOGIN,
    requestedScopes: [AppleAuthRequestScope.EMAIL, AppleAuthRequestScope.FULL_NAME],
  });
  
  console.log(responseObject);

  //authorization state request
  const credentialState = await appleAuth.getCredentialStateForUser(responseObject.user);

  if (credentialState === AppleAuthCredentialState.AUTHORIZED) {
    //user is authorized
  }
}
catch (error) {
  console.log(error)
}

}`

Style and Type not working?

Invariant Violation: View config not found for name RNAppleAuthButtonViewManagerBlackContinue.

Here's my snippet:

<AppleButton
              cornerRadius={5}
              style={styles.socialButtonStyle}
              buttonStyle={AppleButton.Style.BLACK}
              buttonType={AppleButton.Type.CONTINUE}
              onPress={() => this._handleAppleLogin()}
            />

No matter what combination of Style and Type I use, it does not work.

Compiler warnings

Compiler warnings aren't the first thing I go to fix, but with no outstanding module-specific bugs (the "logout causes login process" bug is upstream) this is the only significant issue I see with the library

⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:27:67: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

@property(nonatomic, strong, nullable) void (^completion)(NSError *, NSDictionary *);
  ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:27:83: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

@property(nonatomic, strong, nullable) void (^completion)(NSError *, NSDictionary *);
                                                                  ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:29:4: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (instancetype)initWithCompletion:(void (^)(NSError *error, NSDictionary *authorizationCredential))completion andNonce:(NSString *)nonce;
                                                                                  ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:29:54: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (instancetype)initWithCompletion:(void (^)(NSError *error, NSDictionary *authorizationCredential))completion andNonce:(NSString *)nonce;
   ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:29:75: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (instancetype)initWithCompletion:(void (^)(NSError *error, NSDictionary *authorizationCredential))completion andNonce:(NSString *)nonce;
                                                     ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:29:43: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (instancetype)initWithCompletion:(void (^)(NSError *error, NSDictionary *authorizationCredential))completion andNonce:(NSString *)nonce;
                                                                          ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:29:131: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (instancetype)initWithCompletion:(void (^)(NSError *error, NSDictionary *authorizationCredential))completion andNonce:(NSString *)nonce;
                                          ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:31:78: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (void)performRequestsForAuthorizationController:(ASAuthorizationController *)authorizationController;
                                                                                                                                  ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:31:52: 'ASAuthorizationController' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

- (void)performRequestsForAuthorizationController:(ASAuthorizationController *)authorizationController;
                                                                             ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthModule.m:86:4: 'ASAuthorizationAppleIDRequest' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  (ASAuthorizationAppleIDRequest *) appleIdRequest
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthModule.m:43:23: @available does not guard availability here; use if (@available) instead [-Wunsupported-availability-guard]

      @"isSupported": @available(iOS 13.0, *) ? @(YES) : @(NO),
  ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthModule.m:44:35: @available does not guard availability here; use if (@available) instead [-Wunsupported-availability-guard]

      @"isSignUpButtonSupported": @available(iOS 13.2, *) ? @(YES) : @(NO),
                      ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthModule.m:53:19: 'ASAuthorizationAppleIDProviderCredentialRevokedNotification' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

             name:ASAuthorizationAppleIDProviderCredentialRevokedNotification
                                  ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthModule.m:62:22: 'ASAuthorizationAppleIDProviderCredentialRevokedNotification' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

                name:ASAuthorizationAppleIDProviderCredentialRevokedNotification
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthModule.m:74:3: 'ASAuthorizationAppleIDProvider' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  ASAuthorizationAppleIDProvider *appleIdProvider = [[ASAuthorizationAppleIDProvider alloc] init];
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthModule.m:74:55: 'ASAuthorizationAppleIDProvider' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  ASAuthorizationAppleIDProvider *appleIdProvider = [[ASAuthorizationAppleIDProvider alloc] init];
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthModule.m:75:26: 'ASAuthorizationAppleIDProviderCredentialState' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  id completionBlock = ^(ASAuthorizationAppleIDProviderCredentialState credentialState, NSError *_Nullable error) {
                                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthModule.m:90:3: 'ASAuthorizationController' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  ASAuthorizationController *authorizationController = [
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthModule.m:91:8: 'ASAuthorizationController' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

      [ASAuthorizationController alloc] initWithAuthorizationRequests:@[
  ^~~~~~~~~~~~~~~~~~~~~~~~~


▸ Compiling RNAppleAuthButtonViewManager.m

⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonView.h:21:36: 'ASAuthorizationAppleIDButton' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

@interface RNAppleAuthButtonView : ASAuthorizationAppleIDButton
       ^~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:40:73: 'ASAuthorizationAppleIDButtonTypeSignIn' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeSignIn authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhite];
           ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:40:137: 'ASAuthorizationAppleIDButtonStyleWhite' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeSignIn authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhite];
                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:59:73: 'ASAuthorizationAppleIDButtonTypeContinue' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeContinue authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhite];
                                                                                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:59:139: 'ASAuthorizationAppleIDButtonStyleWhite' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeContinue authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhite];
                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:98:73: 'ASAuthorizationAppleIDButtonTypeSignIn' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeSignIn authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhiteOutline];
                                                                                                                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:98:137: 'ASAuthorizationAppleIDButtonStyleWhiteOutline' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeSignIn authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhiteOutline];
                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:117:73: 'ASAuthorizationAppleIDButtonTypeContinue' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeContinue authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhiteOutline];
                                                                                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:117:139: 'ASAuthorizationAppleIDButtonStyleWhiteOutline' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeContinue authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhiteOutline];
                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:155:73: 'ASAuthorizationAppleIDButtonTypeSignIn' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeSignIn authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleBlack];
                                                                                                                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:155:137: 'ASAuthorizationAppleIDButtonStyleBlack' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeSignIn authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleBlack];
                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:174:73: 'ASAuthorizationAppleIDButtonTypeContinue' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeContinue authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleBlack];
                                                                                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m:174:139: 'ASAuthorizationAppleIDButtonStyleBlack' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeContinue authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleBlack];
                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


▸ Compiling RNAppleAuthButtonView.m

⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonView.h:21:36: 'ASAuthorizationAppleIDButton' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

@interface RNAppleAuthButtonView : ASAuthorizationAppleIDButton
                                                                                                                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonView.m:22:50: 'ASAuthorizationAppleIDButtonType' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

- (instancetype)initWithAuthorizationButtonType:(ASAuthorizationAppleIDButtonType)type authorizationButtonStyle:(ASAuthorizationAppleIDButtonStyle)style {
           ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthButtonView.m:22:114: 'ASAuthorizationAppleIDButtonStyle' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

- (instancetype)initWithAuthorizationButtonType:(ASAuthorizationAppleIDButtonType)type authorizationButtonStyle:(ASAuthorizationAppleIDButtonStyle)style {
^


▸ Compiling RNAppleAuthASAuthorizationDelegates.m

⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:27:67: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

@property(nonatomic, strong, nullable) void (^completion)(NSError *, NSDictionary *);
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:27:83: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

@property(nonatomic, strong, nullable) void (^completion)(NSError *, NSDictionary *);
                                                                  ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:29:4: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (instancetype)initWithCompletion:(void (^)(NSError *error, NSDictionary *authorizationCredential))completion andNonce:(NSString *)nonce;
                                                                                  ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:29:54: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (instancetype)initWithCompletion:(void (^)(NSError *error, NSDictionary *authorizationCredential))completion andNonce:(NSString *)nonce;
   ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:29:75: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (instancetype)initWithCompletion:(void (^)(NSError *error, NSDictionary *authorizationCredential))completion andNonce:(NSString *)nonce;
                                                     ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:29:43: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (instancetype)initWithCompletion:(void (^)(NSError *error, NSDictionary *authorizationCredential))completion andNonce:(NSString *)nonce;
                                                                          ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:29:131: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (instancetype)initWithCompletion:(void (^)(NSError *error, NSDictionary *authorizationCredential))completion andNonce:(NSString *)nonce;
                                          ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:31:78: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]

- (void)performRequestsForAuthorizationController:(ASAuthorizationController *)authorizationController;
                                                                                                                                  ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.h:31:52: 'ASAuthorizationController' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

- (void)performRequestsForAuthorizationController:(ASAuthorizationController *)authorizationController;
                                                                             ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.m:33:71: 'ASAuthorizationController' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

- (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller {
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.m:39:34: 'ASAuthorizationController' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization {
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.m:39:103: 'ASAuthorization' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization {
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.m:46:34: 'ASAuthorizationController' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error {
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.m:55:52: 'ASAuthorizationController' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

- (void)performRequestsForAuthorizationController:(ASAuthorizationController *)authorizationController {
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.m:63:57: 'ASAuthorizationAppleIDCredential' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

- (NSDictionary *)buildDictionaryFromAppleIdCredential:(ASAuthorizationAppleIDCredential *)appleIdCredential {
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.m:41:3: 'ASAuthorizationAppleIDCredential' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  ASAuthorizationAppleIDCredential *appleIdCredential = authorization.credential;
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.m:48:9: format string is not a string literal (potentially insecure) [-Wformat-security]

  NSLog(error.localizedDescription);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


▸ Compiling RCTConvert+ASAuthorizationAppleIDRequest.m

⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.h:23:4: 'ASAuthorizationAppleIDRequest' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

+ (ASAuthorizationAppleIDRequest *)appIdRequestFromDictionary:(NSDictionary *)requestOptions;
        ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:22:4: 'ASAuthorizationAppleIDRequest' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

+ (ASAuthorizationAppleIDRequest *)appIdRequestFromDictionary:(NSDictionary *)requestOptions {
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:53:4: 'ASAuthorizationOpenIDOperation' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

+ (ASAuthorizationOpenIDOperation)authorizationOperationForInteger:(NSNumber *)operationInteger {
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:83:22: 'ASAuthorizationAppleIDRequest' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

RCT_CUSTOM_CONVERTER(ASAuthorizationAppleIDRequest *, ASAuthorizationAppleIDRequest, [self appIdRequestFromDictionary:[self NSDictionary:json]]);
^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:23:3: 'ASAuthorizationAppleIDProvider' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  ASAuthorizationAppleIDProvider *appleIdProvider = [[ASAuthorizationAppleIDProvider alloc] init];
                                               ^



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:23:55: 'ASAuthorizationAppleIDProvider' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  ASAuthorizationAppleIDProvider *appleIdProvider = [[ASAuthorizationAppleIDProvider alloc] init];
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:24:3: 'ASAuthorizationAppleIDRequest' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  ASAuthorizationAppleIDRequest *appleIdRequest = [appleIdProvider createRequest];
                                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:55:12: 'ASAuthorizationOperationImplicit' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

    return ASAuthorizationOperationImplicit;
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:57:12: 'ASAuthorizationOperationLogin' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

    return ASAuthorizationOperationLogin;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:59:12: 'ASAuthorizationOperationRefresh' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

    return ASAuthorizationOperationRefresh;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:61:12: 'ASAuthorizationOperationLogout' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

    return ASAuthorizationOperationLogout;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:65:10: 'ASAuthorizationOperationImplicit' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

  return ASAuthorizationOperationImplicit;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:73:39: 'ASAuthorizationScopeEmail' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

      [scopesArrayConverted addObject:ASAuthorizationScopeEmail];
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



⚠️  /Users/mike/work/Kullki/ksocialscore/packages/public-app/node_modules/@invertase/react-native-apple-authentication/ios/RNAppleAuthentication/RCTConvert+ASAuthorizationAppleIDRequest.m:75:39: 'ASAuthorizationScopeFullName' is only available on iOS 13.0 or newer [-Wunguarded-availability-new]

      [scopesArrayConverted addObject:ASAuthorizationScopeFullName];
                                      ^~~~~~~~~~~~~~~~~~~~~~~~~

Auth failed with com.apple.AuthenticationServices.AuthorizationError error 1000

I'm testing this on a simulator with iOS 13.2.2 (Sign-in with Apple available)

I get the Apple Sign-in button and the auth popup shows up perfectly.

Upon entering password, I get the following error

Error: The operation couldn’t be completed. (com.apple.AuthenticationServices.AuthorizationError error 1000.)
fn@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:10740:45
getCredentialStateForUser@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:136852:53
_callee2$@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:115753:116
tryCatch@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:2040:23
invoke@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:2215:32
tryCatch@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:2040:23
invoke@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:2116:30
http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:2126:21
tryCallOne@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:11791:16
http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:11892:27
_callTimer@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:38368:17
_callImmediatesPass@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:38404:19
callImmediates@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:38623:33
callImmediates@[native code]
__callImmediates@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:11229:35
http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:11006:34
__guard@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:11212:15
flushedQueue@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:11005:21
flushedQueue@[native code]
invokeCallbackAndReturnFlushedQueue@[native code]

Does it even work on simulators? What am I missing here?

Thank you.

Android Support

What's the best way to do sign-up/sign-in with Apple on Android?
Is there a plan to add Android support via webview in this project?

Module can crash if incorrect args sent in to performRequest

[Note: edited by @mikehardy to show the library bug] Notice that the call is made twice to performRequest, and the second time, the result of the first time is sent in, so it's not correct code - no - but it should not crash?

I am using the sample code and running it on a device.
My code is

		const requestOptions = await appleAuth.performRequest({
		  requestedOperation: AppleAuthRequestOperation.LOGIN,
		  requestedScopes: [AppleAuthRequestScope.EMAIL, AppleAuthRequestScope.FULL_NAME],
		});

		const { user } = await appleAuth.performRequest(requestOptions);
		console.log("USER: " + user);


		// use credentialState response to ensure the user is authenticated
		try {
			const credentialState = await appleAuth.getCredentialStateForUser(user);
			if (credentialState === AppleAuthCredentialState.AUTHORIZED) {
				alert("Authenticated");
			}
		  } catch (error) {
			console.log(error)
		  }  
	  }

I get the following error:

2020-01-03 21:38:22.104481+0530 AppName[694:345218] RNAppleAuth -> didCompleteWithAuthorization
2020-01-03 21:38:22.115798+0530 AppName[694:345218] -[NSNull length]: unrecognized selector sent to instance 0x1fc3dfe28
2020-01-03 21:38:22.135 [fatal][tid:main] Exception '-[NSNull length]: unrecognized selector sent to instance 0x1fc3dfe28' was thrown while invoking performRequest on target RNAppleAuthModule with params (
        {
        authorizationCode = "c8df4be7ea0f246858121cdd0608d070d.0.nzuu._Z1X8-y1l5iJraKXbRnLNg";
        authorizedScopes =         (
        );
        email = "<null>";
        fullName =         {
            familyName = "<null>";
            givenName = "<null>";
            middleName = "<null>";
            namePrefix = "<null>";
            nameSuffix = "<null>";
            nickname = "<null>";
        };
        identityToken = "eyJraWQiOiJBSURPUEsxIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoib3JnLnZyaWRoYW1tYS5tZWRpdGF0aW9uYXBwIiwiZXhwIjoxNTc4MDY4MzAxLCJpYXQiOjE1NzgwNjc3MDEsInN1YiI6IjAwMDk0NC41NmY1ZjA3ZWI4Zjc0MjBhOWVlMWMyM2U0ODkwZWEwZC4wODI1Iiwibm9uY2UiOiJkNDg0MjYyMzU4ZDNmYmZjZjFkMTMyOTQ1ZWI2ODcyNGY5Y2MxMzQwZTlmNWQzZjQ4MTVhNmUwMjNhMTQxZmNhIiwiY19oYXNoIjoiMHpWRlFiQXBpUUVpVm43c245ckhtUSIsImVtYWlsIjoiZ2F1cmF2X21haW5pQGhvdG1haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiYXV0aF90aW1lIjoxNTc4MDY3NzAxfQ.GNgdXNBA546CMukCC1moibuRos67GZf64xLaVV_sUK4fXnDCGVSQNiRwBKePEbrp-dofdzN59PkYaKB4ApB_lL0g-P6tAWtGysAztpf4o2EkJZLbXXKP4i_HbkGk0hd1-oYuzKI04VIfDwaOd7mXneOYkNElBUAJKFTzY8Bs0d1_FPpsAPKqfVB07GDsUMA-AZ_SBweJgUnkRaQF-e5SkyPtOTdmKvEyjPHetSMPR_J8BpT54Y6eWxnuCXfu-PDuxwHlEqGp1EUbDBEsxDmGXX5OFbQQFpTSznznfCAsxBSflnbtDJMlUrWEH1lwsiWSKgUpZj6CtgAKKhX8hJ8D7A";
        nonce = "N8Yz1iciBtzB.206UmzLYGCgeDUVs-VJ";
        realUserStatus = 1;
        requestedOperation = 0;
        requestedScopes =         (
        );
        state = "<null>";
        user = "000944.56f5f07eb8f7420a9ee1c23e4890ea0d.0825";
    },
    750,
    751
)

Manually setup

I'm currently using react-native 0.59.9. I setup this manually, but not success. Please support us with manual setup steps.
Thank you!

onCredentialRevoked callback not called after app restart

I am using the onCredentialRevoked listener to check if the logged in user revoked access to the app. This works fine when the user logs in and revokes access to the app while the app is still in the background (without closing the app once).

But when I reopen the app it doesn't fire the callback of the listener anymore. These are the reproduce steps:

  1. Login using Sign In with Apple
  2. Close the app completely and start it again.
  3. Add the onCredentialRevoked listener because you want to check if the logged in user is still valid.
  4. Revoke access to the app. You'll see that the callback of the onCredentialRevoked listener is never called.

I tried to fix this problem myself but I'm stuck. It appears that the observer is set in RNAppleAuthModule.m. So adding the listener itself works but it appears that the observer never calls the onCredentialRevoked method (in the same file).

Automatic merge when existing account with email&password provider on Firebase

Hi! First of all I'm aware that this question probably should be targeted towards firebase auth module, but I'm posting this here to see if anyone else have stumbled upon this issue.

When I perform this code snippet and choosing "Share my Email" and I already have an existing “email & password-provider” on Firebase with the same email as the one I have on my Apple ID, the providers automatically merge.

const appleAuthRequestResponse = await appleAuth.performRequest({
				requestedOperation: AppleAuthRequestOperation.LOGIN,
				requestedScopes: [AppleAuthRequestScope.EMAIL, AppleAuthRequestScope.FULL_NAME],
})
const { user, email, nonce, identityToken } = appleAuthRequestResponse
const appleCredential = firebase.auth.AppleAuthProvider.credential(identityToken, nonce)
const userCredential = await firebase.auth().signInWithCredential(appleCredential)

If I instead were to use for example Facebook sign in through react-native-fbsdk to sign in with these lines:

const credential = firebase.auth.FacebookAuthProvider.credential(accessToken)
firebase.auth().signInWithCredential(credential)

the auth module correctly throws an error ‘auth/account-exists-with-different-credentials’ since it detects that an account already occupies the email-address on firebase.

The issue is that I cannot stop the merge from happening during the sign in flow, unless I manually prevent it by looking up the authenticated Apple email's firebase login providers in-between the request and the sign-in.

I’d wish to be able to handle an error such as auth/account-exists-with-different-credentials even when signing in with Apple, but unfortunately nothing gets thrown.

Is this behaviour intended?

Edit:
react-native-firebase version 5.6.0
Firebase/Auth version 6.15.0

Kind Regards, Jonathan

responseObject.fullName is null after sign in with Apple ID

Xcode version: 11.2.1
React Native version: 0.60.3
@invertase/react-native-apple-authentication version: 0.1.1

Here is an example of my code

async function onAppleButtonPress() {
  // sign in request
  const responseObject = await appleAuth.performRequest({
    requestedOperation: AppleAuthRequestOperation.LOGIN,
    requestedScopes: [AppleAuthRequestScope.EMAIL, AppleAuthRequestScope.FULL_NAME],
  });

  //authorization state request
  const credentialState = await appleAuth.getCredentialStateForUser(responseObject.user);

  if (credentialState === AppleAuthCredentialState.AUTHORIZED) {
    //user is authorized
    console.log(responseObject)
    console.log(responseObject.fullName)
    alert("authorized")
  }
}

responseObject.fullName return null after successfully sign in with Apple ID.
empty name

Logout launching Apple Sign In process

I'm testing this on a simulator with iOS 13.2.2

The Apple Sign In process is working (with Firebase). However when I call the Logout process the Apple Sign In dialog opens and must be canceled to complete logout process.

My logout code:

  const appleAuthRequestResponse = await appleAuth.performRequest({
    requestedOperation: AppleAuthRequestOperation.LOGOUT
  })
  .catch((error) => {
    console.log("Caught logout error..", error)
  })
 //Sign out of Firebase

When called the Apple dialog below is shown. The actual Sign out of Firebase code is not executed until user hits cancel on Apple dialog.

Not sure how to logout without opening dialog?

Simulator Screen Shot - iPhone 11 - 2019-12-11 at 11 14 41

An email and fullName return null on some devices on same iCloud account.

I have tested on my devices that syncing the same iCloud and face the problem that the seconds' devices cannot get an email and full name when the first device signed in.

Scenario:

  1. Sign in on iOS simulator at first (worked).
  2. Sign in on iPhone 7 device (worked).
  3. Sign in on iPhone 11 Pro device (not worked, get null data).

[DOCUMENTATION] Expand installation section to include pod directions

Description

Add directions to run pod install after adding the dependency. The new #installation section would look something like this:

## Installation

\```bash
yarn add @invertase/react-native-apple-authentication
\```

Once the dependency is added, install the pod from within your project's `ios` directory:

\```bash
cd ios/ && pod install
\```

You will not have to manually link this module as it supports React Native auto-linking.

Reasoning

I was unable to get the library working, because I forgot to install the pods. Additionally, issues #13 and #19 could potentially have been avoided had the documentation included the pod instructions.


I am willing to make these changes, but I wanted to open this issue to give the maintainers an opportunity to comment and discuss.

Apple Sign in full name and email getting null

I have tried with apple sign in but in response i just got the following response values

user : "045724.ffbe415432436t3653565656435.1539"
identityToken : "eyJraWQiOiJBSURPUEsxIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnRhbmdvLm"
email : null
fullName:
{ namePrefix: null,
givenName: null,
familyName: null,
nickname: null,
middleName: null,
nameSuffix: null },

authorizationCode : "fwdsdffsfc414c55ecccd74912bc42d3b8757ff744.0.nxsu.RD8zl-in4lrAPErGexxr2w"

realUserStatus: 1
state: null,
authorizedScopes: [],

so here is the problem i got email,fullName are null.

So anyone have solution. ?
thanks in advanced.

Credential State request returned with error: Error Domain=AKAuthenticationError Code=-7001 "(null)"

Hey guys, I am using this library to handle apple sign in, and when I call

const appleAuthRequestResponse = await appleAuth.performRequest({
        requestedOperation: AppleAuthRequestOperation.LOGIN,
        requestedScopes: [AppleAuthRequestScope.EMAIL, AppleAuthRequestScope.FULL_NAME],
      }).then(async(data)=>{
        console.log(data)
        const credentialState = await appleAuth.getCredentialStateForUser(data.user)
        console.log(credentialState)
        if (credentialState === AppleAuthCredentialState.AUTHORIZED) {
          
        }
      })

to get the authentication state of the current user, I get the above error in the title saying the credential state is null. However, when I log the data that is returned from performRequest, I can see all the info like token, email, name.

In the data object that is returned, I notice that the key 'state' = null, but the key 'realUserStatus' = 1. When I log credentialState into the console when running on a real device, it shows up as 1. So does that mean this part - getCredentialStateForUser only works on real devices and not the simulator? And that in the simulator, it is returning the key 'state', while on an actual device, it is returning the key 'realUserStatus'?

Any help is appreciated!

Implementation

Hi, just to confirm before I jump in implementation, do I have to upgrade react-native-firebase from 5.5.5 to 6.x.x. in order to use this module?
Thanks!

Apple auth identity token null.

I am using this function and getting null in identityToken.

onAppleButtonPress() {
    appleAuthRequestResponse = appleAuth.performRequest({
      requestedOperation: AppleAuthRequestOperation.LOGIN,
      requestedScopes: [AppleAuthRequestScope.EMAIL, AppleAuthRequestScope.FULL_NAME],
    });
  
    const { identityToken, nonce } = appleAuthRequestResponse;
  
    if (identityToken) {
        appleCredential = firebase.auth.AppleAuthProvider.credential(identityToken, nonce);
  
        userCredential = firebase.auth().signInWithCredential(appleCredential);
  
      console.log('Firebase authenticated via Apple, UID: ${userCredential.user.uid}');
    } else {
      // handle this - retry?
      console.log(appleAuthRequestResponse) // -> result = {"_40": 0, "_55": null, "_65": 0, "_72": null}
    }
  }

Can anyone help?

Expo support

Hey all!
Straight to the point - does this support Expo projects? I gave it a quick attempt but I'm getting to some errors which look like it doesn't.
And a follow up in case it doesn't - is it possible to make it work with Expo? If not, what would be a (simple) workaround for that?

Thanks in advance for any input :)

Error: The supplied auth credential is malformed, has expired or is not currently supported.

Xcode Version: 11.3.1
React Native Version: 0.60.3
@invertase/react-native-apple-authentication version: 0.1.1
React Native Firebase: 5.6.0

import appleAuth, {
  AppleAuthRequestOperation,
  AppleAuthRequestScope,
  AppleAuthError
} from "@invertase/react-native-apple-authentication";
import firebase, { AuthCredential } from "react-native-firebase";

const loginWithApple = (): Promise<AuthCredential> => {
  return new Promise(async (resolve, reject) => {
    try {
      const appleAuthRequestResponse = await appleAuth.performRequest({
        requestedOperation: AppleAuthRequestOperation.LOGIN,
        requestedScopes: [
          AppleAuthRequestScope.EMAIL,
          AppleAuthRequestScope.FULL_NAME
        ]
      });

      const {
        user: newUser,
        email,
        nonce,
        identityToken
      } = appleAuthRequestResponse;

      if (identityToken) {
        const appleCredential = firebase.auth.AppleAuthProvider.credential(
          identityToken,
          nonce
        );
        resolve(appleCredential);
      } else {
        // no token - failed sign-in?
      }
      console.warn(`Apple Authentication Completed, ${newUser}, ${email}`);
    } catch (error) {
      if (error.code === AppleAuthError.CANCELED) {
        // eslint-disable-next-line no-console
        console.warn("User canceled Apple Sign in.");
      } else {
        // eslint-disable-next-line no-console
        console.error(error);
      }
      reject(error);
    }
  });
};

export default loginWithApple;

I am passing the credentials in the firebase auth:

firebaseUser = await firebase.auth().signInWithCredential(credential);

Getting the following error:

Error: The supplied auth credential is malformed, has expired or is not currently supported at createErrorFromData

Let me know what am I missing here?

IdentityToken can be null in some scenarios

Hi, first of all thank you for this lib, and just one question, as I can see from your documentation and Apple Sign example this field identityToken can be null im some scenarios, so I wonder what are those scenarios (what causes them), and how should we handle them, by retrying the sign process?
Thanks in advance!

[Question] Does hiding email also hide a user's name?

Hi,

Trying apple sign in on the simulator, if I hide email but decide to share my name, I don't get the user's name at all.

displayName is null
username is null, etc.

Am I missing something? Does hiding email always hide a user's name?

appleAuth.isSupported always false

Hi! Thanks for great plugin!

I faced with strange behaviour. appleAuth.isSupported always false.
Phone 6s, iOS 13.2.3,
macOS 10.15.2,
react-native 0.61.2

Jest mock or config suggestion?

Hey guys,

I appreciate your work!
I am currently configuring my project to work with Jest I know this might be beyond your problem but I came across this error when I run npm run test (I am using jest, of course) in my project.

I could probably use jest.mock but I prefer cleaner solution. Any suggestion?

FYI, below is the error I got.

Jest encountered an unexpected token

    This usually means that you are trying to import a file which Jest cannot 
parse, e.g. it's not plain JavaScript.

    By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".

    Here's what you can do:
     • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
     • If you need a custom transformation specify a "transform" option in your config.
     • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.

    You'll find more details and examples of these config options in the docs:
    https://jestjs.io/docs/en/configuration.html

    Details:

 /Users/{my_path}/node_modules/@invertase/react-native-apple-authentication/lib/index.js:18
    import version from './version';
    ^^^^^^

    SyntaxError: Unexpected token import

appleAuth.isSupported returning always false

Version - 0.2.0
Ios simulator version - 13
RN version - 0.60.3

appleAuth.isSupported always returning false.

` if (appleAuth.isSupported) {
          // performs login request
          const appleAuthRequestResponse = await appleAuth.performRequest({
            requestedOperation: AppleAuthRequestOperation.LOGIN,
            requestedScopes: [AppleAuthRequestScope.EMAIL, AppleAuthRequestScope.FULL_NAME],
          });

          // get current authentication state for user
          const credentialState = await appleAuth.getCredentialStateForUser(appleAuthRequestResponse.user);

          // use credentialState response to ensure the user is authenticated
          // tslint:disable-next-line:tsr-detect-possible-timing-attacks
          if (credentialState === AppleAuthCredentialState.AUTHORIZED) {
            this.showAlert('User Authenticated');
            // user is authenticated
          } else {
            this.showAlert(t('myAccount:facebookEmailPermissionsError'));
          }
        } else {
          const majorVersionIOS = parseInt(Platform.Version, 10);
       
         this.showAlert(t('Device wont support Apple authentication ' + majorVersionIOS));
        }`

Please find attached error message.

Simulator Screen Shot - iPhone 11 Pro - 2020-04-06 at 13 18 02

SHA256 Nonce

I noticed in this library the nonce provided to appleAuth.performRequest is automatically SHA256-hashed. I didn't see this documented anywhere which can lead to some confusion when building out server-side verification.

Is there a reason for this beyond a Firebase Auth requirement? Unless I'm overlooking something, it would be nice to allow passing raw values for use with other implementations.

undefined is not an object (evaluating '_reactNativeFirebase.default.auth.AppleAuthProvider.credential')

I went through the initial setup and the docs on-site (https://rnfirebase.io/docs/v5.x.x/auth/social-auth) but getting this error after "RNAppleAuth -> didCompleteWithAuthorization":

undefined is not an object (evaluating '_reactNativeFirebase.default.auth.AppleAuthProvider.credential')

React native: 0.61.1 (edit)
RNFirebase: v5.5.6 (edit)
Xcode: 11.3.1 (edit)
Simulator: iPhone 11 - iOS 13

Can someone please help figure out what's going on?

onLogout show Sign in with Apple ID window

Xcode version: 11.2.1
React Native version: 0.60.3
@invertase/react-native-apple-authentication version: 0.1.1

Sign in with Apple ID window is shown when I click on the logout button.

Here is an example of my code

async function onLogout() {
  // performs logout request
  const appleAuthRequestResponse = await appleAuth.performRequest({
    requestedOperation: AppleAuthRequestOperation.LOGOUT,
  });

  // get current authentication state for user
  const credentialState = await appleAuth.getCredentialStateForUser(appleAuthRequestResponse.user);

  // use credentialState response to ensure the user credential's have been revoked
  if (credentialState === AppleAuthCredentialState.REVOKED) {
    // user is unauthenticated
  }
}

<TouchableOpacity onPress={() => onLogout()}>
  <Text>Logout</Text>
</TouchableOpacity>

Apple login with 'Hide My Email' does not return the mirror email generated by Apple

I have a problem. I don't know if it is an issue or not. Recently Apple made an update that allows user to hide their email by generating a new email that forwards all emails to the hidden one. My problem is when I try to performRequest:

const appleAuthRequestResponse = await appleAuth.performRequest({
requestedOperation: AppleAuthRequestOperation.LOGIN,
requestedScopes: [AppleAuthRequestScope.EMAIL, AppleAuthRequestScope.FULL_NAME],
});

The response should contain user's email and it is null. The same request works perfectly for 'Share my email' option. I think that in appleAuthRequestResponse.email should be the hidden email, as it is the shared one. Am I wrong?

flutter: Instance of 'AuthorizationResult' flutter: Sign in failed: The operation couldn’t be completed. (com.apple.AuthenticationServices.AuthorizationError error 1000.)

If a device or simulator logged in with apple credential then Sign in with Apple working proper, but if device or simulator not logged in with apple credential and try to login using Sign in with Apple then Alert comes with two options Cancel and Setting ,if tapping on Setting option then it takes you a screen where you enter Apple Email and password and Behind it, It throws an Error like below,
flutter: Sign in failed: The operation couldn’t be completed. (com.apple.AuthenticationServices.AuthorizationError error 1000.)

AppleButton not displayed at all

Hi,

Whatever style I chose the button can't be displayed. I tried on 0.1.1 and 0.2.0 with no results

The debugger is returning this error:

2020-03-24 07:20:16.064 [info][tid:main][RNGestureHandlerManager.m:136] [GESTURE HANDLER] Initialize gesture handler for root view <RCTRootContentView: 0x7fe811e07560; reactTag: 1; frame = (0 0; 414 896); gestureRecognizers = <NSArray: 0x600000217c60>; layer = <CALayer: 0x600000c70de0>>
2020-03-24 07:20:16.066454+0100 Komak[68712:406604] [LayoutConstraints] Unable to simultaneously satisfy constraints.
	Probably at least one of the constraints in the following list is one you don't want. 
	Try this: 
		(1) look at each constraint and try to figure out which you don't expect; 
		(2) find the code that added the unwanted constraint or constraints and fix it. 
	(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x600002f28d70 h=--& v=--& RNAppleAuthButtonView:0x7fe811e24050.width == 0   (active)>",
    "<NSLayoutConstraint:0x600002f29450 RNAppleAuthButtonView:0x7fe811e24050.width >= 130   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600002f29450 RNAppleAuthButtonView:0x7fe811e24050.width >= 130   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2020-03-24 07:20:16.067318+0100 Komak[68712:406604] [LayoutConstraints] Unable to simultaneously satisfy constraints.
	Probably at least one of the constraints in the following list is one you don't want. 
	Try this: 
		(1) look at each constraint and try to figure out which you don't expect; 
		(2) find the code that added the unwanted constraint or constraints and fix it. 
	(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x600002f293b0 h=--& v=--& RNAppleAuthButtonView:0x7fe811e24050.height == 0   (active)>",
    "<NSLayoutConstraint:0x600002f2d950 RNAppleAuthButtonView:0x7fe811e24050.height >= 30   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600002f2d950 RNAppleAuthButtonView:0x7fe811e24050.height >= 30   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

Side note : the apple login method works flawlessly

Thanks!

Auth validation

As written in Apple docs, a client_id is needed in order to validate the auth. Where can I access it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.