From 92d4d82823cfe47d21dd48e1b865fd6d74463757 Mon Sep 17 00:00:00 2001 From: Nemi Shah Date: Tue, 21 Nov 2023 11:35:32 +0530 Subject: [PATCH 1/9] Add google login snippets --- v2/thirdparty/custom-ui/thirdparty-login.mdx | 343 ++++++++++-------- .../custom-ui/thirdparty-login.mdx | 343 ++++++++++-------- .../custom-ui/thirdparty-login.mdx | 343 ++++++++++-------- 3 files changed, 600 insertions(+), 429 deletions(-) diff --git a/v2/thirdparty/custom-ui/thirdparty-login.mdx b/v2/thirdparty/custom-ui/thirdparty-login.mdx index d49f6c70e..eb88497c0 100644 --- a/v2/thirdparty/custom-ui/thirdparty-login.mdx +++ b/v2/thirdparty/custom-ui/thirdparty-login.mdx @@ -297,13 +297,15 @@ This flow is not applicable for web apps. -

Flow 1a: Authorization code grant flow (Sign in with Apple example)

+

Flow 1a: Authorization code grant flow

+ +

Sign in with Apple example

-

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

This involves setting up the [react-native-apple-authentication library](https://github.com/invertase/react-native-apple-authentication) in your app. Checkout their `README` for steps on how to integrate their SDK into your application. The minimum scope required by SuperTokens is the one that gives the user's email (In case of Apple, that could be the user's actual email or the proxy email provided by Apple - it doesn't really matter). @@ -313,7 +315,7 @@ Once the integration is done, you should call the `appleAuth.performRequest` fun -

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

:::info Coming Soon @@ -323,7 +325,7 @@ Coming Soon -

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

For iOS you use the normal sign in with apple flow and then use the id token to login with SuperTokens @@ -365,7 +367,7 @@ fileprivate class ViewController: UIViewController, ASAuthorizationControllerPre -

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

For flutter we use the [sign_in_with_apple](https://pub.dev/packages/sign_in_with_apple) package, make sure to follow the prerequisites steps to get the package setup. After setup use the snippet below to trigger the apple sign in flow. @@ -403,7 +405,7 @@ void loginWithApple() async { In the snippet above for Android we need to pass an additional `webAuthenticationOptions` property when signing in with Apple. This is because on Android the library uses the web login flow and we need to provide it with the client id and redirection uri. The `redirectUri` property here is the URL to which Apple will make a `POST` request after the user has logged in. The SuperTokens backend SDKs provide an API for this at `//callback/apple`. -

Additional steps for Android

+

Additional steps for Android

For android we also need to provide a way for the web login flow to redirect back to the app. By default the API provided by the backend SDKs redirect to the website domain you provide when initialising the SDK, we can override the API to have it redirect to our app instead. For example if you were using the Node.js SDK: @@ -580,7 +582,7 @@ In the code above we override the `appleRedirectHandlerPOST` API to check if the
-

Step 2) Calling the signinup API to consume the authorisation token

+

Step 2) Calling the signinup API to consume the authorisation token

@@ -629,127 +631,209 @@ On success, the backend will send back session tokens as part of the response he -

Flow 1b: Authorization code grant flow with PKCE

- -This is similar to flow 1a, except that you do **not** need to provide a client secret during backend init. This flow only works for providers which support the [PKCE flow](https://oauth.net/2/pkce/). +

Sign in with Google Example

-

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

-See the setup step for this in flow 1a. In addition to that, you need to configure the [react native auth library](https://github.com/invertase/react-native-app-auth) to also return the PKCE code verifier along with the authorization code. This can be done by setting the `usePKCE` boolean to `true` and also by setting the `skipCodeExchange` to `true` when configuring the react native auth library. +This involves setting up the [@react-native-google-signin/google-signin](https://github.com/react-native-google-signin/google-signin) in your app. Checkout their `README` for steps on how to integrate their SDK into your application. The minimum scope required by SuperTokens is the one that gives the user's email. -The minimum scope that is required by SuperTokens is one that gives you the user's email - in case of Google login, it is `"https://www.googleapis.com/auth/userinfo.email"`. +Once the library is set up, use `GoogleSignin.configure` and `GoogleSignin.signIn` to trigger the login flow and sign the user in with Google. Refer to [our example app](https://github.com/supertokens/supertokens-react-native/blob/master/examples/with-thirdparty/google.ts) to see the full code for this. + +```tsx +import { GoogleSignin } from "@react-native-google-signin/google-signin"; + +export const performGoogleSignIn = async (): Promise => { + GoogleSignin.configure({ + webClientId: "GOOGLE_WEB_CLIENT_ID", + iosClientId: "GOOGLE_IOS_CLIENT_ID", + }); + + try { + const user = await GoogleSignin.signIn({}); + const authCode = user.serverAuthCode; + + // Refer to step 2 + + return true; + } catch (e) { + console.log("Google sign in failed with error", e); + } + + return false; +}; +```
-

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

-You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on Android +Follow the official Google Sign In guide to set up their library and sign the user in with Google. Fetch the authorization code from the google sign in result. For a full example refer to [our example app](https://github.com/supertokens/supertokens-android/blob/master/examples/with-thirdparty/app/src/main/java/com/supertokens/supertokensexample/LoginActivity.kt#L62). -
+```kotlin +import androidx.activity.result.ActivityResult +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.util.Log +import com.google.android.gms.auth.api.signin.GoogleSignIn +import com.google.android.gms.auth.api.signin.GoogleSignInOptions - +class LoginActivity : AppCompatActivity() { + private lateinit var googleResultLauncher: ActivityResultLauncher -

Step 1) Fetching the authorisation token on the frontend

+ override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) -You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on iOS + googleResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + onGoogleResultReceived(it) + } + } -
+ private fun signInWithGoogle() { + val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) + .requestServerAuthCode("GOOGLE_WEB_CLIENT_ID") + .requestEmail() + .build() - + val googleClient = GoogleSignIn.getClient(this, gso) + val signInIntent = googleClient.signInIntent -

Step 1) Fetching the authorisation token on the frontend

+ googleResultLauncher.launch(signInIntent) + } -You can follow the guide for [flutter_appauth](https://pub.dev/packages/flutter_appauth) on how to use the PKCE flow with google sign in with Flutter + private fun onGoogleResultReceived(it: ActivityResult) { + val task = GoogleSignIn.getSignedInAccountFromIntent(it.data) + val account = task.result + val authCode = account.serverAuthCode + + // Refer to step 2 + } +} +```
-
+ -

Step 2) Calling the signinup API to consume the authorisation token

+

Step 1) Fetching the authorisation token on the frontend

- +For iOS we use the `GoogleSignIn` library, follow the [official guide](https://developers.google.com/identity/sign-in/ios/start-integrating) to set up the library and sign the user in with Google. Use the result of google sign in to get the authorization code. For a full example refer to [our example app](https://github.com/supertokens/supertokens-ios/blob/master/examples/with-thirdparty/with-thirdparty/LoginScreen/LoginScreenViewController.swift). -Once you have the authorisation code and PKCE verifier from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: +```swift +import UIKit +import GoogleSignIn -```bash -curl --location --request POST '^{form_apiDomain}^{form_apiBasePath}/signinup' \ ---header 'rid: ^{codeImportRecipeName}' \ ---header 'Content-Type: application/json' \ ---data-raw '{ - "thirdPartyId": "google", - "clientType": "...", - "redirectURIInfo": { - "redirectURIOnProviderDashboard": "^{form_apiDomain}^{form_apiBasePath}/callback/google", - "redirectURIQueryParams": { - "code": "...", - }, - "pkceCodeVerifier": "..." +fileprivate class LoginScreenViewController: UIViewController { + @IBAction func onGoogleCliked() { + GIDSignIn.sharedInstance.signIn(withPresenting: self) { signInResult, error in + guard error == nil else { return } + + guard let authCode: String = signInResult?.serverAuthCode as? String else { + print("Google login did not return an authorisation code") + return + } + + // Refer to step 2 + } } -}' +} ``` -:::important -- The `clientType` input is optional, and is required only if you have initialised more than one client in the provide on the backend (See the "Social / SSO login for both, web and mobile apps" section below). -- On iOS, `redirectURIOnProviderDashboard` doesn't matter and its value can be a universal link configured for your app. -- On Android, the `redirectURIOnProviderDashboard` should match the one configured on the Google cloud platform. -::: +
-The response body from the API call has a `status` property in it: -- `status: "OK"`: User sign in / up was successful. The response also contains more information about the user, for example their user ID, and if it was a new user or existing user. -- `status: "NO_EMAIL_GIVEN_BY_PROVIDER"`: This is returned if the social / SSO provider did not provider an email for the user. In this case, you want to ask the user to pick another method of sign in. Or, you can also override the backend functions to create a fake email for the user for this provider. -- `status: "GENERAL_ERROR"`: This is only possible if you have overriden the backend API to send back a custom error message which should be displayed on the frontend. -- `status: "SIGN_IN_UP_NOT_ALLOWED"`: This can happen due to automatic account linking. Please see our docs for account linking for more information. + -:::note -On success, the backend will send back session tokens as part of the response headers which will be automatically handled by our frontend SDK for you. -::: +

Step 1) Fetching the authorisation token on the frontend

- +For flutter we use the [google_sign_in](https://pub.dev/packages/google_sign_in) package, make sure to follow the prerequisites steps to get the package setup. After setup use the snippet below to trigger the google sign in flow. For a full example refer to [our example app](https://github.com/supertokens/supertokens-flutter/blob/master/examples/with-thirdparty/lib/screens/login.dart). ----------------- +```dart +import 'package:google_sign_in/google_sign_in.dart'; -

Flow 2: Via OAuth / Access token (Sign in with Google example)

+Future loginWithGoogle() async { + GoogleSignIn googleSignIn; - + if (Platform.isAndroid) { + googleSignIn = GoogleSignIn( + serverClientId: "GOOGLE_WEB_CLIENT_ID", + scopes: [ + 'email', + ], + ); + } else { + googleSignIn = GoogleSignIn( + clientId: "GOOGLE_IOS_CLIENT_ID", + serverClientId: "GOOGLE_WEB_CLIENT_ID", + scopes: [ + 'email', + ], + ); + } - + GoogleSignInAccount? account = await googleSignIn.signIn(); -

Step 1) Fetching the OAuth / access tokens on the frontend

+ if (account == null) { + print("Google sign in was aborted"); + return; + } -You can use the [react-native-app-auth library](https://github.com/FormidableLabs/react-native-app-auth) in your app to integrate with Google and get the user's access token. The minimum scope that is required by SuperTokens is one that gives you the user's email - in case of Google login, it is `"https://www.googleapis.com/auth/userinfo.email"`. + String? authCode = account.serverAuthCode; -:::important -When setting up on the Google dashboard, you need to generate OAuth credentials for an Android application which will be used for both iOS and Android. Google does not provide a client secret in this case, so on the backend, you can omit the `clientSecret` config in the `clients` array. -::: + if (authCode == null) { + print("Google sign in did not return a server auth code"); + return; + } -

Step 2) Calling the signinup API to use the OAuth tokens

+ // Refer to step 2 + } +``` + +
+ +
+ +

Step 2) Calling the signinup API to consume the authorisation token

-Once you have the `access_token` or the `id_token` from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: +Once you have the authorisation code from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: ```bash curl --location --request POST '^{form_apiDomain}^{form_apiBasePath}/signinup' \ --header 'rid: ^{codeImportRecipeName}' \ --header 'Content-Type: application/json; charset=utf-8' \ --data-raw '{ - "thirdPartyId": "google", + "thirdPartyId": "apple", "clientType": "...", - "oAuthTokens": { - "access_token": "..." - }, + "redirecURIInfo": { + "redirectURIOnProviderDashboard": "^{form_apiDomain}^{form_apiBasePath}/callback/apple", + "redirectURIQueryParams": { + "code": "...", + "user": { + "name":{ + "firstName":"...", + "lastName":"..." + }, + "email":"..." + } + } + } }' ``` :::important -- If you don't have the `access_token`, you can send the `id_token` instead. +- On iOS, the client id set in the backend should be the same as the bundle identifier for your app. - The `clientType` input is optional, and is required only if you have initialised more than one client in the provide on the backend (See the "Social / SSO login for both, web and mobile apps" section below). +- On iOS, `redirectURIOnProviderDashboard` doesn't matter and its value can be a universal link configured for your app. +- On Android, the `redirectURIOnProviderDashboard` should match the one configured on the Apple developer dashboard. +- The `user` object contains information provided by Apple. ::: The response body from the API call has a `status` property in it: @@ -764,75 +848,75 @@ On success, the backend will send back session tokens as part of the response he -
+

Flow 1b: Authorization code grant flow with PKCE

- +This is similar to flow 1a, except that you do **not** need to provide a client secret during backend init. This flow only works for providers which support the [PKCE flow](https://oauth.net/2/pkce/). -For Android, Google recommends you to use their [official Android library](https://developers.google.com/identity/sign-in/android/start-integrating), which follows "Flow 1a" in these docs. + -Essentially, the library will give you back a one time use auth code from Google which you can send to the `/signinup` API (as shown in Flow 1a -> Step 2) to exchange it with an access token and the user's information. + -:::important -On Google's dashboard, you need to create both a Web client and an Android for your app. The Android client will be used to interact with the native Google login APIs, the Web client will be used to request the authorization code when triggering the login flow with Google. +

Step 1) Fetching the authorisation token on the frontend

-You also need to provide the Android client with the SHA-1 fingerprint of your keystore to prevent errors when logging in. -::: +See the setup step for this in flow 1a. In addition to that, you need to configure the [react native auth library](https://github.com/invertase/react-native-app-auth) to also return the PKCE code verifier along with the authorization code. This can be done by setting the `usePKCE` boolean to `true` and also by setting the `skipCodeExchange` to `true` when configuring the react native auth library. + +The minimum scope that is required by SuperTokens is one that gives you the user's email - in case of Google login, it is `"https://www.googleapis.com/auth/userinfo.email"`. + +
+ + + +

Step 1) Fetching the authorisation token on the frontend

+ +You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on Android
-

Step 1) Fetching the OAuth / access tokens on the frontend

+

Step 1) Fetching the authorisation token on the frontend

-For iOS, you use the [official guide](https://developers.google.com/identity/sign-in/ios/start-integrating) for setting up Sign in with Google in your app. After the user successfully signs in, you can access the access token and id token from the Google signin result. +You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on iOS -```swift -import UIKit -import GoogleSignIn +
-fileprivate class ViewController: UIViewController { - func signInWithGoogle() { - let config = GIDConfiguration(clientID: "") + - GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { - user, error in - guard error == nil, let _user: GIDGoogleUser = user else { - // Sign in failed - return - } +

Step 1) Fetching the authorisation token on the frontend

- let accessToken = _user.authentication.accessToken - let idToken = _user.authentication.idToken +You can follow the guide for [flutter_appauth](https://pub.dev/packages/flutter_appauth) on how to use the PKCE flow with google sign in with Flutter - // TODO: See next step - } - } -} -``` +
-

Step 2) Calling the signinup API to use the OAuth tokens

+
+ +

Step 2) Calling the signinup API to consume the authorisation token

-Once you have the `access_token` or the `id_token` from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: +Once you have the authorisation code and PKCE verifier from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: ```bash curl --location --request POST '^{form_apiDomain}^{form_apiBasePath}/signinup' \ --header 'rid: ^{codeImportRecipeName}' \ ---header 'Content-Type: application/json; charset=utf-8' \ +--header 'Content-Type: application/json' \ --data-raw '{ "thirdPartyId": "google", "clientType": "...", - "oAuthTokens": { - "access_token": "...", - "id_token": "..." - }, + "redirectURIInfo": { + "redirectURIOnProviderDashboard": "^{form_apiDomain}^{form_apiBasePath}/callback/google", + "redirectURIQueryParams": { + "code": "...", + }, + "pkceCodeVerifier": "..." + } }' ``` :::important - The `clientType` input is optional, and is required only if you have initialised more than one client in the provide on the backend (See the "Social / SSO login for both, web and mobile apps" section below). -- If you have the `id_token`, you can send that along with the `access_token`. +- On iOS, `redirectURIOnProviderDashboard` doesn't matter and its value can be a universal link configured for your app. +- On Android, the `redirectURIOnProviderDashboard` should match the one configured on the Google cloud platform. ::: The response body from the API call has a `status` property in it: @@ -847,42 +931,19 @@ On success, the backend will send back session tokens as part of the response he -
+---------------- - +

Flow 2: Via OAuth / Access token

Step 1) Fetching the OAuth / access tokens on the frontend

-You can follow the instructions for the [official google login](https://pub.dev/packages/google_sign_in) library for flutter to set up your app for google login. After setting up, use the snippet below to login with google and get the access token and id token. - -```dart -import 'package:google_sign_in/google_sign_in.dart'; - -void loginWithGoogle() async { - GoogleSignIn _googleSignIn = GoogleSignIn( - scopes: [ - 'email', - ], - ); - - try { - var response = await _googleSignIn.signIn(); - - if (response == null) { - // Login was aborted - return; - } - - var authentication = await response.authentication; - String? accessToken = authentication.accessToken; - String? idToken = authentication.idToken; +1. Sign in with the social provider. The minimum required scope is the one that provides access to the user's email. You can use any library to sign in with the social provider. +2. Get the access token on the frontend. +3. Get the id token from the sign in result if it is available. - // TODO: See next step - } catch(e) { - // Google sign in failed - } -} -``` +:::info +If you are using a social provider that does not provide an access token on the frontend you can use "Flow 1a" in these docs instead. +:::

Step 2) Calling the signinup API to use the OAuth tokens

@@ -923,10 +984,6 @@ On success, the backend will send back session tokens as part of the response he
- - -
- ## Social / SSO login for both, web and mobile apps diff --git a/v2/thirdpartyemailpassword/custom-ui/thirdparty-login.mdx b/v2/thirdpartyemailpassword/custom-ui/thirdparty-login.mdx index c9305dc2a..f84ab90ed 100644 --- a/v2/thirdpartyemailpassword/custom-ui/thirdparty-login.mdx +++ b/v2/thirdpartyemailpassword/custom-ui/thirdparty-login.mdx @@ -300,13 +300,15 @@ This flow is not applicable for web apps. -

Flow 1a: Authorization code grant flow (Sign in with Apple example)

+

Flow 1a: Authorization code grant flow

+ +

Sign in with Apple example

-

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

This involves setting up the [react-native-apple-authentication library](https://github.com/invertase/react-native-apple-authentication) in your app. Checkout their `README` for steps on how to integrate their SDK into your application. The minimum scope required by SuperTokens is the one that gives the user's email (In case of Apple, that could be the user's actual email or the proxy email provided by Apple - it doesn't really matter). @@ -316,7 +318,7 @@ Once the integration is done, you should call the `appleAuth.performRequest` fun -

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

:::info Coming Soon @@ -326,7 +328,7 @@ Coming Soon -

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

For iOS you use the normal sign in with apple flow and then use the id token to login with SuperTokens @@ -368,7 +370,7 @@ fileprivate class ViewController: UIViewController, ASAuthorizationControllerPre -

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

For flutter we use the [sign_in_with_apple](https://pub.dev/packages/sign_in_with_apple) package, make sure to follow the prerequisites steps to get the package setup. After setup use the snippet below to trigger the apple sign in flow. @@ -406,7 +408,7 @@ void loginWithApple() async { In the snippet above for Android we need to pass an additional `webAuthenticationOptions` property when signing in with Apple. This is because on Android the library uses the web login flow and we need to provide it with the client id and redirection uri. The `redirectUri` property here is the URL to which Apple will make a `POST` request after the user has logged in. The SuperTokens backend SDKs provide an API for this at `//callback/apple`. -

Additional steps for Android

+

Additional steps for Android

For android we also need to provide a way for the web login flow to redirect back to the app. By default the API provided by the backend SDKs redirect to the website domain you provide when initialising the SDK, we can override the API to have it redirect to our app instead. For example if you were using the Node.js SDK: @@ -583,7 +585,7 @@ In the code above we override the `appleRedirectHandlerPOST` API to check if the
-

Step 2) Calling the signinup API to consume the authorisation token

+

Step 2) Calling the signinup API to consume the authorisation token

@@ -632,127 +634,209 @@ On success, the backend will send back session tokens as part of the response he -

Flow 1b: Authorization code grant flow with PKCE

- -This is similar to flow 1a, except that you do **not** need to provide a client secret during backend init. This flow only works for providers which support the [PKCE flow](https://oauth.net/2/pkce/). +

Sign in with Google Example

-

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

-See the setup step for this in flow 1a. In addition to that, you need to configure the [react native auth library](https://github.com/invertase/react-native-app-auth) to also return the PKCE code verifier along with the authorization code. This can be done by setting the `usePKCE` boolean to `true` and also by setting the `skipCodeExchange` to `true` when configuring the react native auth library. +This involves setting up the [@react-native-google-signin/google-signin](https://github.com/react-native-google-signin/google-signin) in your app. Checkout their `README` for steps on how to integrate their SDK into your application. The minimum scope required by SuperTokens is the one that gives the user's email. -The minimum scope that is required by SuperTokens is one that gives you the user's email - in case of Google login, it is `"https://www.googleapis.com/auth/userinfo.email"`. +Once the library is set up, use `GoogleSignin.configure` and `GoogleSignin.signIn` to trigger the login flow and sign the user in with Google. Refer to [our example app](https://github.com/supertokens/supertokens-react-native/blob/master/examples/with-thirdparty/google.ts) to see the full code for this. + +```tsx +import { GoogleSignin } from "@react-native-google-signin/google-signin"; + +export const performGoogleSignIn = async (): Promise => { + GoogleSignin.configure({ + webClientId: "GOOGLE_WEB_CLIENT_ID", + iosClientId: "GOOGLE_IOS_CLIENT_ID", + }); + + try { + const user = await GoogleSignin.signIn({}); + const authCode = user.serverAuthCode; + + // Refer to step 2 + + return true; + } catch (e) { + console.log("Google sign in failed with error", e); + } + + return false; +}; +```
-

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

-You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on Android +Follow the official Google Sign In guide to set up their library and sign the user in with Google. Fetch the authorization code from the google sign in result. For a full example refer to [our example app](https://github.com/supertokens/supertokens-android/blob/master/examples/with-thirdparty/app/src/main/java/com/supertokens/supertokensexample/LoginActivity.kt#L62). -
+```kotlin +import androidx.activity.result.ActivityResult +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.util.Log +import com.google.android.gms.auth.api.signin.GoogleSignIn +import com.google.android.gms.auth.api.signin.GoogleSignInOptions - +class LoginActivity : AppCompatActivity() { + private lateinit var googleResultLauncher: ActivityResultLauncher -

Step 1) Fetching the authorisation token on the frontend

+ override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) -You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on iOS + googleResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + onGoogleResultReceived(it) + } + } -
+ private fun signInWithGoogle() { + val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) + .requestServerAuthCode("GOOGLE_WEB_CLIENT_ID") + .requestEmail() + .build() - + val googleClient = GoogleSignIn.getClient(this, gso) + val signInIntent = googleClient.signInIntent -

Step 1) Fetching the authorisation token on the frontend

+ googleResultLauncher.launch(signInIntent) + } -You can follow the guide for [flutter_appauth](https://pub.dev/packages/flutter_appauth) on how to use the PKCE flow with google sign in with Flutter + private fun onGoogleResultReceived(it: ActivityResult) { + val task = GoogleSignIn.getSignedInAccountFromIntent(it.data) + val account = task.result + val authCode = account.serverAuthCode + + // Refer to step 2 + } +} +```
-
+ -

Step 2) Calling the signinup API to consume the authorisation token

+

Step 1) Fetching the authorisation token on the frontend

- +For iOS we use the `GoogleSignIn` library, follow the [official guide](https://developers.google.com/identity/sign-in/ios/start-integrating) to set up the library and sign the user in with Google. Use the result of google sign in to get the authorization code. For a full example refer to [our example app](https://github.com/supertokens/supertokens-ios/blob/master/examples/with-thirdparty/with-thirdparty/LoginScreen/LoginScreenViewController.swift). -Once you have the authorisation code and PKCE verifier from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: +```swift +import UIKit +import GoogleSignIn -```bash -curl --location --request POST '^{form_apiDomain}^{form_apiBasePath}/signinup' \ ---header 'rid: ^{codeImportRecipeName}' \ ---header 'Content-Type: application/json' \ ---data-raw '{ - "thirdPartyId": "google", - "clientType": "...", - "redirectURIInfo": { - "redirectURIOnProviderDashboard": "^{form_apiDomain}^{form_apiBasePath}/callback/google", - "redirectURIQueryParams": { - "code": "...", - }, - "pkceCodeVerifier": "..." +fileprivate class LoginScreenViewController: UIViewController { + @IBAction func onGoogleCliked() { + GIDSignIn.sharedInstance.signIn(withPresenting: self) { signInResult, error in + guard error == nil else { return } + + guard let authCode: String = signInResult?.serverAuthCode as? String else { + print("Google login did not return an authorisation code") + return + } + + // Refer to step 2 + } } -}' +} ``` -:::important -- The `clientType` input is optional, and is required only if you have initialised more than one client in the provide on the backend (See the "Social / SSO login for both, web and mobile apps" section below). -- On iOS, `redirectURIOnProviderDashboard` doesn't matter and its value can be a universal link configured for your app. -- On Android, the `redirectURIOnProviderDashboard` should match the one configured on the Google cloud platform. -::: +
-The response body from the API call has a `status` property in it: -- `status: "OK"`: User sign in / up was successful. The response also contains more information about the user, for example their user ID, and if it was a new user or existing user. -- `status: "NO_EMAIL_GIVEN_BY_PROVIDER"`: This is returned if the social / SSO provider did not provider an email for the user. In this case, you want to ask the user to pick another method of sign in. Or, you can also override the backend functions to create a fake email for the user for this provider. -- `status: "GENERAL_ERROR"`: This is only possible if you have overriden the backend API to send back a custom error message which should be displayed on the frontend. -- `status: "SIGN_IN_UP_NOT_ALLOWED"`: This can happen due to automatic account linking. Please see our docs for account linking for more information. + -:::note -On success, the backend will send back session tokens as part of the response headers which will be automatically handled by our frontend SDK for you. -::: +

Step 1) Fetching the authorisation token on the frontend

- +For flutter we use the [google_sign_in](https://pub.dev/packages/google_sign_in) package, make sure to follow the prerequisites steps to get the package setup. After setup use the snippet below to trigger the google sign in flow. For a full example refer to [our example app](https://github.com/supertokens/supertokens-flutter/blob/master/examples/with-thirdparty/lib/screens/login.dart). ----------------- +```dart +import 'package:google_sign_in/google_sign_in.dart'; -

Flow 2: Via OAuth / Access token (Sign in with Google example)

+Future loginWithGoogle() async { + GoogleSignIn googleSignIn; - + if (Platform.isAndroid) { + googleSignIn = GoogleSignIn( + serverClientId: "GOOGLE_WEB_CLIENT_ID", + scopes: [ + 'email', + ], + ); + } else { + googleSignIn = GoogleSignIn( + clientId: "GOOGLE_IOS_CLIENT_ID", + serverClientId: "GOOGLE_WEB_CLIENT_ID", + scopes: [ + 'email', + ], + ); + } - + GoogleSignInAccount? account = await googleSignIn.signIn(); -

Step 1) Fetching the OAuth / access tokens on the frontend

+ if (account == null) { + print("Google sign in was aborted"); + return; + } -You can use the [react-native-app-auth library](https://github.com/FormidableLabs/react-native-app-auth) in your app to integrate with Google and get the user's access token. The minimum scope that is required by SuperTokens is one that gives you the user's email - in case of Google login, it is `"https://www.googleapis.com/auth/userinfo.email"`. + String? authCode = account.serverAuthCode; -:::important -When setting up on the Google dashboard, you need to generate OAuth credentials for an Android application which will be used for both iOS and Android. Google does not provide a client secret in this case, so on the backend, you can omit the `clientSecret` config in the `clients` array. -::: + if (authCode == null) { + print("Google sign in did not return a server auth code"); + return; + } -

Step 2) Calling the signinup API to use the OAuth tokens

+ // Refer to step 2 + } +``` + +
+ +
+ +

Step 2) Calling the signinup API to consume the authorisation token

-Once you have the `access_token` or the `id_token` from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: +Once you have the authorisation code from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: ```bash curl --location --request POST '^{form_apiDomain}^{form_apiBasePath}/signinup' \ --header 'rid: ^{codeImportRecipeName}' \ --header 'Content-Type: application/json; charset=utf-8' \ --data-raw '{ - "thirdPartyId": "google", + "thirdPartyId": "apple", "clientType": "...", - "oAuthTokens": { - "access_token": "..." - }, + "redirecURIInfo": { + "redirectURIOnProviderDashboard": "^{form_apiDomain}^{form_apiBasePath}/callback/apple", + "redirectURIQueryParams": { + "code": "...", + "user": { + "name":{ + "firstName":"...", + "lastName":"..." + }, + "email":"..." + } + } + } }' ``` :::important -- If you don't have the `access_token`, you can send the `id_token` instead. +- On iOS, the client id set in the backend should be the same as the bundle identifier for your app. - The `clientType` input is optional, and is required only if you have initialised more than one client in the provide on the backend (See the "Social / SSO login for both, web and mobile apps" section below). +- On iOS, `redirectURIOnProviderDashboard` doesn't matter and its value can be a universal link configured for your app. +- On Android, the `redirectURIOnProviderDashboard` should match the one configured on the Apple developer dashboard. +- The `user` object contains information provided by Apple. ::: The response body from the API call has a `status` property in it: @@ -767,75 +851,75 @@ On success, the backend will send back session tokens as part of the response he -
+

Flow 1b: Authorization code grant flow with PKCE

- +This is similar to flow 1a, except that you do **not** need to provide a client secret during backend init. This flow only works for providers which support the [PKCE flow](https://oauth.net/2/pkce/). -For Android, Google recommends you to use their [official Android library](https://developers.google.com/identity/sign-in/android/start-integrating), which follows "Flow 1a" in these docs. + -Essentially, the library will give you back a one time use auth code from Google which you can send to the `/signinup` API (as shown in Flow 1a -> Step 2) to exchange it with an access token and the user's information. + -:::important -On Google's dashboard, you need to create both a Web client and an Android for your app. The Android client will be used to interact with the native Google login APIs, the Web client will be used to request the authorization code when triggering the login flow with Google. +

Step 1) Fetching the authorisation token on the frontend

-You also need to provide the Android client with the SHA-1 fingerprint of your keystore to prevent errors when logging in. -::: +See the setup step for this in flow 1a. In addition to that, you need to configure the [react native auth library](https://github.com/invertase/react-native-app-auth) to also return the PKCE code verifier along with the authorization code. This can be done by setting the `usePKCE` boolean to `true` and also by setting the `skipCodeExchange` to `true` when configuring the react native auth library. + +The minimum scope that is required by SuperTokens is one that gives you the user's email - in case of Google login, it is `"https://www.googleapis.com/auth/userinfo.email"`. + +
+ + + +

Step 1) Fetching the authorisation token on the frontend

+ +You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on Android
-

Step 1) Fetching the OAuth / access tokens on the frontend

+

Step 1) Fetching the authorisation token on the frontend

-For iOS, you use the [official guide](https://developers.google.com/identity/sign-in/ios/start-integrating) for setting up Sign in with Google in your app. After the user successfully signs in, you can access the access token and id token from the Google signin result. +You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on iOS -```swift -import UIKit -import GoogleSignIn +
-fileprivate class ViewController: UIViewController { - func signInWithGoogle() { - let config = GIDConfiguration(clientID: "") + - GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { - user, error in - guard error == nil, let _user: GIDGoogleUser = user else { - // Sign in failed - return - } +

Step 1) Fetching the authorisation token on the frontend

- let accessToken = _user.authentication.accessToken - let idToken = _user.authentication.idToken +You can follow the guide for [flutter_appauth](https://pub.dev/packages/flutter_appauth) on how to use the PKCE flow with google sign in with Flutter - // TODO: See next step - } - } -} -``` +
-

Step 2) Calling the signinup API to use the OAuth tokens

+
+ +

Step 2) Calling the signinup API to consume the authorisation token

-Once you have the `access_token` or the `id_token` from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: +Once you have the authorisation code and PKCE verifier from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: ```bash curl --location --request POST '^{form_apiDomain}^{form_apiBasePath}/signinup' \ --header 'rid: ^{codeImportRecipeName}' \ ---header 'Content-Type: application/json; charset=utf-8' \ +--header 'Content-Type: application/json' \ --data-raw '{ "thirdPartyId": "google", "clientType": "...", - "oAuthTokens": { - "access_token": "...", - "id_token": "..." - }, + "redirectURIInfo": { + "redirectURIOnProviderDashboard": "^{form_apiDomain}^{form_apiBasePath}/callback/google", + "redirectURIQueryParams": { + "code": "...", + }, + "pkceCodeVerifier": "..." + } }' ``` :::important - The `clientType` input is optional, and is required only if you have initialised more than one client in the provide on the backend (See the "Social / SSO login for both, web and mobile apps" section below). -- If you have the `id_token`, you can send that along with the `access_token`. +- On iOS, `redirectURIOnProviderDashboard` doesn't matter and its value can be a universal link configured for your app. +- On Android, the `redirectURIOnProviderDashboard` should match the one configured on the Google cloud platform. ::: The response body from the API call has a `status` property in it: @@ -850,42 +934,19 @@ On success, the backend will send back session tokens as part of the response he -
+---------------- - +

Flow 2: Via OAuth / Access token

Step 1) Fetching the OAuth / access tokens on the frontend

-You can follow the instructions for the [official google login](https://pub.dev/packages/google_sign_in) library for flutter to set up your app for google login. After setting up, use the snippet below to login with google and get the access token and id token. - -```dart -import 'package:google_sign_in/google_sign_in.dart'; - -void loginWithGoogle() async { - GoogleSignIn _googleSignIn = GoogleSignIn( - scopes: [ - 'email', - ], - ); - - try { - var response = await _googleSignIn.signIn(); - - if (response == null) { - // Login was aborted - return; - } - - var authentication = await response.authentication; - String? accessToken = authentication.accessToken; - String? idToken = authentication.idToken; +1. Sign in with the social provider. The minimum required scope is the one that provides access to the user's email. You can use any library to sign in with the social provider. +2. Get the access token on the frontend. +3. Get the id token from the sign in result if it is available. - // TODO: See next step - } catch(e) { - // Google sign in failed - } -} -``` +:::info +If you are using a social provider that does not provide an access token on the frontend you can use "Flow 1a" in these docs instead. +:::

Step 2) Calling the signinup API to use the OAuth tokens

@@ -926,10 +987,6 @@ On success, the backend will send back session tokens as part of the response he
- - -
- ## Social / SSO login for both, web and mobile apps diff --git a/v2/thirdpartypasswordless/custom-ui/thirdparty-login.mdx b/v2/thirdpartypasswordless/custom-ui/thirdparty-login.mdx index 6d01d464d..5d0e227a4 100644 --- a/v2/thirdpartypasswordless/custom-ui/thirdparty-login.mdx +++ b/v2/thirdpartypasswordless/custom-ui/thirdparty-login.mdx @@ -300,13 +300,15 @@ This flow is not applicable for web apps. -

Flow 1a: Authorization code grant flow (Sign in with Apple example)

+

Flow 1a: Authorization code grant flow

+ +

Sign in with Apple example

-

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

This involves setting up the [react-native-apple-authentication library](https://github.com/invertase/react-native-apple-authentication) in your app. Checkout their `README` for steps on how to integrate their SDK into your application. The minimum scope required by SuperTokens is the one that gives the user's email (In case of Apple, that could be the user's actual email or the proxy email provided by Apple - it doesn't really matter). @@ -316,7 +318,7 @@ Once the integration is done, you should call the `appleAuth.performRequest` fun -

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

:::info Coming Soon @@ -326,7 +328,7 @@ Coming Soon -

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

For iOS you use the normal sign in with apple flow and then use the id token to login with SuperTokens @@ -368,7 +370,7 @@ fileprivate class ViewController: UIViewController, ASAuthorizationControllerPre -

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

For flutter we use the [sign_in_with_apple](https://pub.dev/packages/sign_in_with_apple) package, make sure to follow the prerequisites steps to get the package setup. After setup use the snippet below to trigger the apple sign in flow. @@ -406,7 +408,7 @@ void loginWithApple() async { In the snippet above for Android we need to pass an additional `webAuthenticationOptions` property when signing in with Apple. This is because on Android the library uses the web login flow and we need to provide it with the client id and redirection uri. The `redirectUri` property here is the URL to which Apple will make a `POST` request after the user has logged in. The SuperTokens backend SDKs provide an API for this at `//callback/apple`. -

Additional steps for Android

+

Additional steps for Android

For android we also need to provide a way for the web login flow to redirect back to the app. By default the API provided by the backend SDKs redirect to the website domain you provide when initialising the SDK, we can override the API to have it redirect to our app instead. For example if you were using the Node.js SDK: @@ -583,7 +585,7 @@ In the code above we override the `appleRedirectHandlerPOST` API to check if the
-

Step 2) Calling the signinup API to consume the authorisation token

+

Step 2) Calling the signinup API to consume the authorisation token

@@ -632,127 +634,209 @@ On success, the backend will send back session tokens as part of the response he -

Flow 1b: Authorization code grant flow with PKCE

- -This is similar to flow 1a, except that you do **not** need to provide a client secret during backend init. This flow only works for providers which support the [PKCE flow](https://oauth.net/2/pkce/). +

Sign in with Google Example

-

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

-See the setup step for this in flow 1a. In addition to that, you need to configure the [react native auth library](https://github.com/invertase/react-native-app-auth) to also return the PKCE code verifier along with the authorization code. This can be done by setting the `usePKCE` boolean to `true` and also by setting the `skipCodeExchange` to `true` when configuring the react native auth library. +This involves setting up the [@react-native-google-signin/google-signin](https://github.com/react-native-google-signin/google-signin) in your app. Checkout their `README` for steps on how to integrate their SDK into your application. The minimum scope required by SuperTokens is the one that gives the user's email. -The minimum scope that is required by SuperTokens is one that gives you the user's email - in case of Google login, it is `"https://www.googleapis.com/auth/userinfo.email"`. +Once the library is set up, use `GoogleSignin.configure` and `GoogleSignin.signIn` to trigger the login flow and sign the user in with Google. Refer to [our example app](https://github.com/supertokens/supertokens-react-native/blob/master/examples/with-thirdparty/google.ts) to see the full code for this. + +```tsx +import { GoogleSignin } from "@react-native-google-signin/google-signin"; + +export const performGoogleSignIn = async (): Promise => { + GoogleSignin.configure({ + webClientId: "GOOGLE_WEB_CLIENT_ID", + iosClientId: "GOOGLE_IOS_CLIENT_ID", + }); + + try { + const user = await GoogleSignin.signIn({}); + const authCode = user.serverAuthCode; + + // Refer to step 2 + + return true; + } catch (e) { + console.log("Google sign in failed with error", e); + } + + return false; +}; +```
-

Step 1) Fetching the authorisation token on the frontend

+

Step 1) Fetching the authorisation token on the frontend

-You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on Android +Follow the official Google Sign In guide to set up their library and sign the user in with Google. Fetch the authorization code from the google sign in result. For a full example refer to [our example app](https://github.com/supertokens/supertokens-android/blob/master/examples/with-thirdparty/app/src/main/java/com/supertokens/supertokensexample/LoginActivity.kt#L62). -
+```kotlin +import androidx.activity.result.ActivityResult +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.util.Log +import com.google.android.gms.auth.api.signin.GoogleSignIn +import com.google.android.gms.auth.api.signin.GoogleSignInOptions - +class LoginActivity : AppCompatActivity() { + private lateinit var googleResultLauncher: ActivityResultLauncher -

Step 1) Fetching the authorisation token on the frontend

+ override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) -You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on iOS + googleResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + onGoogleResultReceived(it) + } + } -
+ private fun signInWithGoogle() { + val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) + .requestServerAuthCode("GOOGLE_WEB_CLIENT_ID") + .requestEmail() + .build() - + val googleClient = GoogleSignIn.getClient(this, gso) + val signInIntent = googleClient.signInIntent -

Step 1) Fetching the authorisation token on the frontend

+ googleResultLauncher.launch(signInIntent) + } -You can follow the guide for [flutter_appauth](https://pub.dev/packages/flutter_appauth) on how to use the PKCE flow with google sign in with Flutter + private fun onGoogleResultReceived(it: ActivityResult) { + val task = GoogleSignIn.getSignedInAccountFromIntent(it.data) + val account = task.result + val authCode = account.serverAuthCode + + // Refer to step 2 + } +} +```
-
+ -

Step 2) Calling the signinup API to consume the authorisation token

+

Step 1) Fetching the authorisation token on the frontend

- +For iOS we use the `GoogleSignIn` library, follow the [official guide](https://developers.google.com/identity/sign-in/ios/start-integrating) to set up the library and sign the user in with Google. Use the result of google sign in to get the authorization code. For a full example refer to [our example app](https://github.com/supertokens/supertokens-ios/blob/master/examples/with-thirdparty/with-thirdparty/LoginScreen/LoginScreenViewController.swift). -Once you have the authorisation code and PKCE verifier from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: +```swift +import UIKit +import GoogleSignIn -```bash -curl --location --request POST '^{form_apiDomain}^{form_apiBasePath}/signinup' \ ---header 'rid: ^{codeImportRecipeName}' \ ---header 'Content-Type: application/json' \ ---data-raw '{ - "thirdPartyId": "google", - "clientType": "...", - "redirectURIInfo": { - "redirectURIOnProviderDashboard": "^{form_apiDomain}^{form_apiBasePath}/callback/google", - "redirectURIQueryParams": { - "code": "...", - }, - "pkceCodeVerifier": "..." +fileprivate class LoginScreenViewController: UIViewController { + @IBAction func onGoogleCliked() { + GIDSignIn.sharedInstance.signIn(withPresenting: self) { signInResult, error in + guard error == nil else { return } + + guard let authCode: String = signInResult?.serverAuthCode as? String else { + print("Google login did not return an authorisation code") + return + } + + // Refer to step 2 + } } -}' +} ``` -:::important -- The `clientType` input is optional, and is required only if you have initialised more than one client in the provide on the backend (See the "Social / SSO login for both, web and mobile apps" section below). -- On iOS, `redirectURIOnProviderDashboard` doesn't matter and its value can be a universal link configured for your app. -- On Android, the `redirectURIOnProviderDashboard` should match the one configured on the Google cloud platform. -::: +
-The response body from the API call has a `status` property in it: -- `status: "OK"`: User sign in / up was successful. The response also contains more information about the user, for example their user ID, and if it was a new user or existing user. -- `status: "NO_EMAIL_GIVEN_BY_PROVIDER"`: This is returned if the social / SSO provider did not provider an email for the user. In this case, you want to ask the user to pick another method of sign in. Or, you can also override the backend functions to create a fake email for the user for this provider. -- `status: "GENERAL_ERROR"`: This is only possible if you have overriden the backend API to send back a custom error message which should be displayed on the frontend. -- `status: "SIGN_IN_UP_NOT_ALLOWED"`: This can happen due to automatic account linking. Please see our docs for account linking for more information. + -:::note -On success, the backend will send back session tokens as part of the response headers which will be automatically handled by our frontend SDK for you. -::: +

Step 1) Fetching the authorisation token on the frontend

- +For flutter we use the [google_sign_in](https://pub.dev/packages/google_sign_in) package, make sure to follow the prerequisites steps to get the package setup. After setup use the snippet below to trigger the google sign in flow. For a full example refer to [our example app](https://github.com/supertokens/supertokens-flutter/blob/master/examples/with-thirdparty/lib/screens/login.dart). ----------------- +```dart +import 'package:google_sign_in/google_sign_in.dart'; -

Flow 2: Via OAuth / Access token (Sign in with Google example)

+Future loginWithGoogle() async { + GoogleSignIn googleSignIn; - + if (Platform.isAndroid) { + googleSignIn = GoogleSignIn( + serverClientId: "GOOGLE_WEB_CLIENT_ID", + scopes: [ + 'email', + ], + ); + } else { + googleSignIn = GoogleSignIn( + clientId: "GOOGLE_IOS_CLIENT_ID", + serverClientId: "GOOGLE_WEB_CLIENT_ID", + scopes: [ + 'email', + ], + ); + } - + GoogleSignInAccount? account = await googleSignIn.signIn(); -

Step 1) Fetching the OAuth / access tokens on the frontend

+ if (account == null) { + print("Google sign in was aborted"); + return; + } -You can use the [react-native-app-auth library](https://github.com/FormidableLabs/react-native-app-auth) in your app to integrate with Google and get the user's access token. The minimum scope that is required by SuperTokens is one that gives you the user's email - in case of Google login, it is `"https://www.googleapis.com/auth/userinfo.email"`. + String? authCode = account.serverAuthCode; -:::important -When setting up on the Google dashboard, you need to generate OAuth credentials for an Android application which will be used for both iOS and Android. Google does not provide a client secret in this case, so on the backend, you can omit the `clientSecret` config in the `clients` array. -::: + if (authCode == null) { + print("Google sign in did not return a server auth code"); + return; + } -

Step 2) Calling the signinup API to use the OAuth tokens

+ // Refer to step 2 + } +``` + +
+ +
+ +

Step 2) Calling the signinup API to consume the authorisation token

-Once you have the `access_token` or the `id_token` from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: +Once you have the authorisation code from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: ```bash curl --location --request POST '^{form_apiDomain}^{form_apiBasePath}/signinup' \ --header 'rid: ^{codeImportRecipeName}' \ --header 'Content-Type: application/json; charset=utf-8' \ --data-raw '{ - "thirdPartyId": "google", + "thirdPartyId": "apple", "clientType": "...", - "oAuthTokens": { - "access_token": "..." - }, + "redirecURIInfo": { + "redirectURIOnProviderDashboard": "^{form_apiDomain}^{form_apiBasePath}/callback/apple", + "redirectURIQueryParams": { + "code": "...", + "user": { + "name":{ + "firstName":"...", + "lastName":"..." + }, + "email":"..." + } + } + } }' ``` :::important -- If you don't have the `access_token`, you can send the `id_token` instead. +- On iOS, the client id set in the backend should be the same as the bundle identifier for your app. - The `clientType` input is optional, and is required only if you have initialised more than one client in the provide on the backend (See the "Social / SSO login for both, web and mobile apps" section below). +- On iOS, `redirectURIOnProviderDashboard` doesn't matter and its value can be a universal link configured for your app. +- On Android, the `redirectURIOnProviderDashboard` should match the one configured on the Apple developer dashboard. +- The `user` object contains information provided by Apple. ::: The response body from the API call has a `status` property in it: @@ -767,75 +851,75 @@ On success, the backend will send back session tokens as part of the response he -
+

Flow 1b: Authorization code grant flow with PKCE

- +This is similar to flow 1a, except that you do **not** need to provide a client secret during backend init. This flow only works for providers which support the [PKCE flow](https://oauth.net/2/pkce/). -For Android, Google recommends you to use their [official Android library](https://developers.google.com/identity/sign-in/android/start-integrating), which follows "Flow 1a" in these docs. + -Essentially, the library will give you back a one time use auth code from Google which you can send to the `/signinup` API (as shown in Flow 1a -> Step 2) to exchange it with an access token and the user's information. + -:::important -On Google's dashboard, you need to create both a Web client and an Android for your app. The Android client will be used to interact with the native Google login APIs, the Web client will be used to request the authorization code when triggering the login flow with Google. +

Step 1) Fetching the authorisation token on the frontend

-You also need to provide the Android client with the SHA-1 fingerprint of your keystore to prevent errors when logging in. -::: +See the setup step for this in flow 1a. In addition to that, you need to configure the [react native auth library](https://github.com/invertase/react-native-app-auth) to also return the PKCE code verifier along with the authorization code. This can be done by setting the `usePKCE` boolean to `true` and also by setting the `skipCodeExchange` to `true` when configuring the react native auth library. + +The minimum scope that is required by SuperTokens is one that gives you the user's email - in case of Google login, it is `"https://www.googleapis.com/auth/userinfo.email"`. + +
+ + + +

Step 1) Fetching the authorisation token on the frontend

+ +You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on Android
-

Step 1) Fetching the OAuth / access tokens on the frontend

+

Step 1) Fetching the authorisation token on the frontend

-For iOS, you use the [official guide](https://developers.google.com/identity/sign-in/ios/start-integrating) for setting up Sign in with Google in your app. After the user successfully signs in, you can access the access token and id token from the Google signin result. +You can follow the [official guide](https://developers.google.com/identity/protocols/oauth2/native-app) on how to use the PKCE flow with google sign in on iOS -```swift -import UIKit -import GoogleSignIn +
-fileprivate class ViewController: UIViewController { - func signInWithGoogle() { - let config = GIDConfiguration(clientID: "") + - GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { - user, error in - guard error == nil, let _user: GIDGoogleUser = user else { - // Sign in failed - return - } +

Step 1) Fetching the authorisation token on the frontend

- let accessToken = _user.authentication.accessToken - let idToken = _user.authentication.idToken +You can follow the guide for [flutter_appauth](https://pub.dev/packages/flutter_appauth) on how to use the PKCE flow with google sign in with Flutter - // TODO: See next step - } - } -} -``` +
-

Step 2) Calling the signinup API to use the OAuth tokens

+
+ +

Step 2) Calling the signinup API to consume the authorisation token

-Once you have the `access_token` or the `id_token` from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: +Once you have the authorisation code and PKCE verifier from the auth provider, you need to call the signinup API exposed by our backend SDK as shown below: ```bash curl --location --request POST '^{form_apiDomain}^{form_apiBasePath}/signinup' \ --header 'rid: ^{codeImportRecipeName}' \ ---header 'Content-Type: application/json; charset=utf-8' \ +--header 'Content-Type: application/json' \ --data-raw '{ "thirdPartyId": "google", "clientType": "...", - "oAuthTokens": { - "access_token": "...", - "id_token": "..." - }, + "redirectURIInfo": { + "redirectURIOnProviderDashboard": "^{form_apiDomain}^{form_apiBasePath}/callback/google", + "redirectURIQueryParams": { + "code": "...", + }, + "pkceCodeVerifier": "..." + } }' ``` :::important - The `clientType` input is optional, and is required only if you have initialised more than one client in the provide on the backend (See the "Social / SSO login for both, web and mobile apps" section below). -- If you have the `id_token`, you can send that along with the `access_token`. +- On iOS, `redirectURIOnProviderDashboard` doesn't matter and its value can be a universal link configured for your app. +- On Android, the `redirectURIOnProviderDashboard` should match the one configured on the Google cloud platform. ::: The response body from the API call has a `status` property in it: @@ -850,42 +934,19 @@ On success, the backend will send back session tokens as part of the response he -
+---------------- - +

Flow 2: Via OAuth / Access token

Step 1) Fetching the OAuth / access tokens on the frontend

-You can follow the instructions for the [official google login](https://pub.dev/packages/google_sign_in) library for flutter to set up your app for google login. After setting up, use the snippet below to login with google and get the access token and id token. - -```dart -import 'package:google_sign_in/google_sign_in.dart'; - -void loginWithGoogle() async { - GoogleSignIn _googleSignIn = GoogleSignIn( - scopes: [ - 'email', - ], - ); - - try { - var response = await _googleSignIn.signIn(); - - if (response == null) { - // Login was aborted - return; - } - - var authentication = await response.authentication; - String? accessToken = authentication.accessToken; - String? idToken = authentication.idToken; +1. Sign in with the social provider. The minimum required scope is the one that provides access to the user's email. You can use any library to sign in with the social provider. +2. Get the access token on the frontend. +3. Get the id token from the sign in result if it is available. - // TODO: See next step - } catch(e) { - // Google sign in failed - } -} -``` +:::info +If you are using a social provider that does not provide an access token on the frontend you can use "Flow 1a" in these docs instead. +:::

Step 2) Calling the signinup API to use the OAuth tokens

@@ -926,10 +987,6 @@ On success, the backend will send back session tokens as part of the response he
- - -
- ## Social / SSO login for both, web and mobile apps From f5f469d3eaabdeeb5a47fbc151f53cb0743ca952 Mon Sep 17 00:00:00 2001 From: Nemi Shah Date: Tue, 21 Nov 2023 11:42:41 +0530 Subject: [PATCH 2/9] Update jsenv --- v2/src/plugins/codeTypeChecking/jsEnv/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/v2/src/plugins/codeTypeChecking/jsEnv/package.json b/v2/src/plugins/codeTypeChecking/jsEnv/package.json index 274b6d111..bee304964 100644 --- a/v2/src/plugins/codeTypeChecking/jsEnv/package.json +++ b/v2/src/plugins/codeTypeChecking/jsEnv/package.json @@ -22,6 +22,7 @@ "@middy/http-cors": "^2.5.7", "@nestjs/common": "^8.2.6", "@nestjs/core": "^8.2.6", + "@react-native-google-signin/google-signin": "^10.1.1", "@supabase/supabase-js": "^1.35.3", "@types/aws-lambda": "^8.10.92", "@types/bcryptjs": "^2.4.2", From 0d22c699cc5247dc6d6ae33bd0961375c22eda11 Mon Sep 17 00:00:00 2001 From: Nemi Shah Date: Tue, 21 Nov 2023 11:49:04 +0530 Subject: [PATCH 3/9] Update android env --- v2/thirdparty/custom-ui/thirdparty-login.mdx | 1 + v2/thirdpartyemailpassword/custom-ui/thirdparty-login.mdx | 1 + v2/thirdpartypasswordless/custom-ui/thirdparty-login.mdx | 1 + 3 files changed, 3 insertions(+) diff --git a/v2/thirdparty/custom-ui/thirdparty-login.mdx b/v2/thirdparty/custom-ui/thirdparty-login.mdx index eb88497c0..5798b4a28 100644 --- a/v2/thirdparty/custom-ui/thirdparty-login.mdx +++ b/v2/thirdparty/custom-ui/thirdparty-login.mdx @@ -684,6 +684,7 @@ import android.os.Bundle import android.util.Log import com.google.android.gms.auth.api.signin.GoogleSignIn import com.google.android.gms.auth.api.signin.GoogleSignInOptions +import android.content.Intent class LoginActivity : AppCompatActivity() { private lateinit var googleResultLauncher: ActivityResultLauncher diff --git a/v2/thirdpartyemailpassword/custom-ui/thirdparty-login.mdx b/v2/thirdpartyemailpassword/custom-ui/thirdparty-login.mdx index f84ab90ed..f11bfecc4 100644 --- a/v2/thirdpartyemailpassword/custom-ui/thirdparty-login.mdx +++ b/v2/thirdpartyemailpassword/custom-ui/thirdparty-login.mdx @@ -687,6 +687,7 @@ import android.os.Bundle import android.util.Log import com.google.android.gms.auth.api.signin.GoogleSignIn import com.google.android.gms.auth.api.signin.GoogleSignInOptions +import android.content.Intent class LoginActivity : AppCompatActivity() { private lateinit var googleResultLauncher: ActivityResultLauncher diff --git a/v2/thirdpartypasswordless/custom-ui/thirdparty-login.mdx b/v2/thirdpartypasswordless/custom-ui/thirdparty-login.mdx index 5d0e227a4..c96471f92 100644 --- a/v2/thirdpartypasswordless/custom-ui/thirdparty-login.mdx +++ b/v2/thirdpartypasswordless/custom-ui/thirdparty-login.mdx @@ -687,6 +687,7 @@ import android.os.Bundle import android.util.Log import com.google.android.gms.auth.api.signin.GoogleSignIn import com.google.android.gms.auth.api.signin.GoogleSignInOptions +import android.content.Intent class LoginActivity : AppCompatActivity() { private lateinit var googleResultLauncher: ActivityResultLauncher From 3b1e70b42180b020c732b4b168b82952616fd72c Mon Sep 17 00:00:00 2001 From: Nemi Shah Date: Tue, 21 Nov 2023 12:04:26 +0530 Subject: [PATCH 4/9] Update ios env --- .../plugins/codeTypeChecking/iosenv/Podfile | 10 +- .../codeTypeChecking/iosenv/Podfile.lock | 46 +- .../iosenv/Pods/Alamofire/README.md | 61 +- .../Pods/Alamofire/Source/AFError.swift | 20 +- .../Pods/Alamofire/Source/Alamofire.swift | 6 +- .../Source/AuthenticationInterceptor.swift | 15 +- .../Source/CachedResponseHandler.swift | 2 - .../Pods/Alamofire/Source/Combine.swift | 41 +- .../Pods/Alamofire/Source/Concurrency.swift | 250 +- .../Pods/Alamofire/Source/EventMonitor.swift | 17 +- .../Pods/Alamofire/Source/HTTPHeaders.swift | 21 +- .../Alamofire/Source/MultipartFormData.swift | 31 +- .../Alamofire/Source/MultipartUpload.swift | 14 +- .../Source/NetworkReachabilityManager.swift | 55 +- .../Alamofire/Source/ParameterEncoder.swift | 4 - .../Alamofire/Source/ParameterEncoding.swift | 4 + .../Pods/Alamofire/Source/Protected.swift | 67 +- .../Alamofire/Source/RedirectHandler.swift | 2 - .../Pods/Alamofire/Source/Request.swift | 378 +- .../Alamofire/Source/RequestCompression.swift | 153 + .../Alamofire/Source/RequestInterceptor.swift | 6 - .../Alamofire/Source/RequestTaskMap.swift | 2 +- .../Source/ResponseSerialization.swift | 26 +- .../Pods/Alamofire/Source/RetryPolicy.swift | 6 +- .../Source/ServerTrustEvaluation.swift | 81 +- .../Alamofire/Source/SessionDelegate.swift | 25 +- .../Source/URLEncodedFormEncoder.swift | 263 +- .../Source/URLRequest+Alamofire.swift | 2 +- .../Pods/Alamofire/Source/Validation.swift | 6 +- .../Sources/Core/GTMSessionFetcher.m | 289 +- .../Core/GTMSessionFetcherService+Internal.h | 30 + .../Sources/Core/GTMSessionFetcherService.m | 115 +- .../Sources/Core/GTMSessionUploadFetcher.m | 182 +- .../GTMSessionFetcher/GTMSessionFetcher.h | 47 +- .../GTMSessionFetcherService.h | 22 +- .../GTMSessionUploadFetcher.h | 6 + ...ppAuthFetcherAuthorizationWithEMMSupport.h | 36 + ...ppAuthFetcherAuthorizationWithEMMSupport.m | 129 + .../GoogleSignIn/Sources/GIDAuthentication.h | 32 + .../GoogleSignIn/Sources/GIDAuthentication.m | 377 +- .../GoogleSignIn/Sources/GIDEMMErrorHandler.m | 8 +- ...thentication_Private.h => GIDEMMSupport.h} | 42 +- .../GoogleSignIn/Sources/GIDEMMSupport.m | 101 + .../GoogleSignIn/Sources/GIDGoogleUser.m | 305 +- .../Sources/GIDGoogleUser_Private.h | 40 +- .../GoogleSignIn/Sources/GIDSignIn.m | 345 +- .../Sources/GIDSignInInternalOptions.h | 17 +- .../Sources/GIDSignInInternalOptions.m | 21 +- .../GoogleSignIn/Sources/GIDSignInResult.m | 35 + .../Sources/GIDSignInResult_Private.h | 33 + .../GoogleSignIn/Sources/GIDSignIn_Private.h | 70 +- .../GoogleSignIn/Sources/GIDToken.m | 96 + .../GoogleSignIn/Sources/GIDToken_Private.h | 32 + .../Public/GoogleSignIn/GIDAuthentication.h | 77 - .../Public/GoogleSignIn/GIDConfiguration.h | 6 +- .../Public/GoogleSignIn/GIDGoogleUser.h | 101 +- .../Sources/Public/GoogleSignIn/GIDSignIn.h | 196 +- .../Public/GoogleSignIn/GIDSignInButton.h | 8 +- .../Public/GoogleSignIn/GIDSignInResult.h | 40 + .../Sources/Public/GoogleSignIn/GIDToken.h | 45 + .../Public/GoogleSignIn/GoogleSignIn.h | 3 +- .../iosenv/Pods/GoogleSignIn/README.md | 15 +- .../iosenv/Pods/Manifest.lock | 46 +- .../Pods/Pods.xcodeproj/project.pbxproj | 2930 +-- .../xcschemes/Pods-iosenv.xcscheme | 2 +- .../xcschemes/SuperTokensIOS.xcscheme | 2 +- .../xcschemes/xcschememanagement.plist | 18 + .../SuperTokensIOS/Classes/Version.swift | 4 +- .../Alamofire/Alamofire-Info.plist | 4 +- .../Alamofire/Alamofire.debug.xcconfig | 3 +- .../Alamofire/Alamofire.release.xcconfig | 3 +- .../AppAuth/AppAuth-Info.plist | 4 +- .../AppAuth/AppAuth.debug.xcconfig | 1 + .../AppAuth/AppAuth.release.xcconfig | 1 + .../GTMAppAuth/GTMAppAuth-Info.plist | 4 +- .../GTMAppAuth/GTMAppAuth.debug.xcconfig | 1 + .../GTMAppAuth/GTMAppAuth.release.xcconfig | 1 + .../GTMSessionFetcher-Info.plist | 4 +- .../GTMSessionFetcher.debug.xcconfig | 1 + .../GTMSessionFetcher.release.xcconfig | 1 + .../GoogleSignIn/GoogleSignIn-Info.plist | 4 +- .../GoogleSignIn/GoogleSignIn-umbrella.h | 3 +- .../GoogleSignIn/GoogleSignIn.debug.xcconfig | 3 +- .../GoogleSignIn.release.xcconfig | 3 +- ...undle-GoogleSignIn-GoogleSignIn-Info.plist | 4 +- .../Pods-iosenv/Pods-iosenv-Info.plist | 2 +- .../Pods-iosenv/Pods-iosenv-frameworks.sh | 4 +- .../Pods-iosenv/Pods-iosenv.debug.xcconfig | 2 +- .../Pods-iosenv/Pods-iosenv.release.xcconfig | 2 +- .../SuperTokensIOS/SuperTokensIOS-Info.plist | 4 +- .../SuperTokensIOS.debug.xcconfig | 3 +- .../SuperTokensIOS.release.xcconfig | 3 +- .../xcbeautify/xcbeautify.debug.xcconfig | 1 + .../xcbeautify/xcbeautify.release.xcconfig | 1 + .../iosenv/Pods/xcbeautify/xcbeautify | Bin 6213927 -> 6095559 bytes .../iosenv/iosenv.xcodeproj/project.pbxproj | 15648 ++++++++++------ 96 files changed, 14952 insertions(+), 8280 deletions(-) create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestCompression.swift create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService+Internal.h create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.m create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.h rename v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/{GIDAuthentication_Private.h => GIDEMMSupport.h} (63%) create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.m create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult.m create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult_Private.h create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken.m create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken_Private.h delete mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDAuthentication.h create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h create mode 100644 v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDToken.h diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Podfile b/v2/src/plugins/codeTypeChecking/iosenv/Podfile index 165f218e5..c2e5cf576 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Podfile +++ b/v2/src/plugins/codeTypeChecking/iosenv/Podfile @@ -1,5 +1,5 @@ # Uncomment the next line to define a global platform for your project - platform :ios, '13.0' + platform :ios, '14.0' target 'iosenv' do # Comment the next line if you don't want to use dynamic frameworks @@ -10,5 +10,13 @@ target 'iosenv' do pod 'xcbeautify' pod 'Alamofire' pod 'GoogleSignIn' + + post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] = "14.0" + end + end + end end diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Podfile.lock b/v2/src/plugins/codeTypeChecking/iosenv/Podfile.lock index a164a67c3..0c5ff41d0 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Podfile.lock +++ b/v2/src/plugins/codeTypeChecking/iosenv/Podfile.lock @@ -1,21 +1,21 @@ PODS: - - Alamofire (5.6.2) - - AppAuth (1.6.0): - - AppAuth/Core (= 1.6.0) - - AppAuth/ExternalUserAgent (= 1.6.0) - - AppAuth/Core (1.6.0) - - AppAuth/ExternalUserAgent (1.6.0): + - Alamofire (5.8.1) + - AppAuth (1.6.2): + - AppAuth/Core (= 1.6.2) + - AppAuth/ExternalUserAgent (= 1.6.2) + - AppAuth/Core (1.6.2) + - AppAuth/ExternalUserAgent (1.6.2): - AppAuth/Core - - GoogleSignIn (6.2.4): + - GoogleSignIn (7.0.0): - AppAuth (~> 1.5) - - GTMAppAuth (~> 1.3) - - GTMSessionFetcher/Core (< 3.0, >= 1.1) - - GTMAppAuth (1.3.1): + - GTMAppAuth (< 3.0, >= 1.3) + - GTMSessionFetcher/Core (< 4.0, >= 1.1) + - GTMAppAuth (2.0.0): - AppAuth/Core (~> 1.6) - - GTMSessionFetcher/Core (< 3.0, >= 1.5) - - GTMSessionFetcher/Core (2.1.0) - - SuperTokensIOS (0.2.5) - - xcbeautify (0.15.0) + - GTMSessionFetcher/Core (< 4.0, >= 1.5) + - GTMSessionFetcher/Core (3.1.1) + - SuperTokensIOS (0.2.6) + - xcbeautify (0.17.0) DEPENDENCIES: - Alamofire @@ -34,14 +34,14 @@ SPEC REPOS: - xcbeautify SPEC CHECKSUMS: - Alamofire: d368e1ff8a298e6dde360e35a3e68e6c610e7204 - AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add - GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a - GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd - GTMSessionFetcher: ffbb25ec00ebcb5201adab0a56d808f6f1902d9f - SuperTokensIOS: 3caa2586c289f4a1fd4a9135e85842c9c639383a - xcbeautify: df17aa32d769add7af523a8be9b0ef8fb9eb75a8 + Alamofire: 3ca42e259043ee0dc5c0cdd76c4bc568b8e42af7 + AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 + GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842 + GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae + GTMSessionFetcher: e8647203b65cee28c5f73d0f473d096653945e72 + SuperTokensIOS: 04e07f5343136949df8973aaa6905ee7ffa2d749 + xcbeautify: 6e2f57af5c3a86d490376d5758030a8dcc201c1b -PODFILE CHECKSUM: fdcdfe0e7301fefa4c160b218e130961eb341d95 +PODFILE CHECKSUM: 8c8b23d19c13c115133d9d41fd507e3c2cbeab6a -COCOAPODS: 1.11.3 +COCOAPODS: 1.14.2 diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/README.md b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/README.md index b3fc8175c..c9adb9fbc 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/README.md +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/README.md @@ -1,11 +1,10 @@ ![Alamofire: Elegant Networking in Swift](https://raw.githubusercontent.com/Alamofire/Alamofire/master/Resources/AlamofireLogo.png) -[![Swift](https://img.shields.io/badge/Swift-5.3_5.4_5.5_5.6-orange?style=flat-square)](https://img.shields.io/badge/Swift-5.3_5.4_5.5_5.6-Orange?style=flat-square) -[![Platforms](https://img.shields.io/badge/Platforms-macOS_iOS_tvOS_watchOS_Linux_Windows-yellowgreen?style=flat-square)](https://img.shields.io/badge/Platforms-macOS_iOS_tvOS_watchOS_Linux_Windows-Green?style=flat-square) +[![Swift](https://img.shields.io/badge/Swift-5.6_5.7_5.8_5.9-orange?style=flat-square)](https://img.shields.io/badge/Swift-5.6_5.7_5.8_5.9-Orange?style=flat-square) +[![Platforms](https://img.shields.io/badge/Platforms-macOS_iOS_tvOS_watchOS_visionOS_Linux_Windows_Android-yellowgreen?style=flat-square)](https://img.shields.io/badge/Platforms-macOS_iOS_tvOS_watchOS_vision_OS_Linux_Windows_Android-Green?style=flat-square) [![CocoaPods Compatible](https://img.shields.io/cocoapods/v/Alamofire.svg?style=flat-square)](https://img.shields.io/cocoapods/v/Alamofire.svg) [![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat-square)](https://github.com/Carthage/Carthage) [![Swift Package Manager](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square)](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square) -[![Twitter](https://img.shields.io/badge/twitter-@AlamofireSF-blue.svg?style=flat-square)](https://twitter.com/AlamofireSF) [![Swift Forums](https://img.shields.io/badge/Swift_Forums-Alamofire-orange?style=flat-square)](https://forums.swift.org/c/related-projects/alamofire/37) Alamofire is an HTTP networking library written in Swift. @@ -52,6 +51,33 @@ Alamofire is an HTTP networking library written in Swift. - [x] Comprehensive Unit and Integration Test Coverage - [x] [Complete Documentation](https://alamofire.github.io/Alamofire) +## Write Requests Fast! + +Alamofire's compact syntax and extensive feature set allow requests with powerful features like automatic retry to be written in just a few lines of code. + +```swift +// Automatic String to URL conversion, Swift concurrency support, and automatic retry. +let response = await AF.request("https://httpbin.org/get", interceptor: .retryPolicy) + // Automatic HTTP Basic Auth. + .authenticate(username: "user", password: "pass") + // Caching customization. + .cacheResponse(using: .cache) + // Redirect customization. + .redirect(using: .follow) + // Validate response code and Content-Type. + .validate() + // Produce a cURL command for the request. + .cURLDescription { description in + print(description) + } + // Automatic Decodable support with background parsing. + .serializingDecodable(DecodableType.self) + // Await the full response with metrics and a parsed body. + .response +// Detailed response description for easy debugging. +debugPrint(response) +``` + ## Component Libraries In order to keep Alamofire focused specifically on core networking implementations, additional component libraries have been created by the [Alamofire Software Foundation](https://github.com/Alamofire/Foundation) to bring additional functionality to the Alamofire ecosystem. @@ -61,21 +87,23 @@ In order to keep Alamofire focused specifically on core networking implementatio ## Requirements -| Platform | Minimum Swift Version | Installation | Status | -| --- | --- | --- | --- | -| iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+ | 5.3 | [CocoaPods](#cocoapods), [Carthage](#carthage), [Swift Package Manager](#swift-package-manager), [Manual](#manually) | Fully Tested | -| Linux | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported | -| Windows | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported | +| Platform | Minimum Swift Version | Installation | Status | +| ---------------------------------------------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------- | ------------------------ | +| iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+ | 5.6 | [CocoaPods](#cocoapods), [Carthage](#carthage), [Swift Package Manager](#swift-package-manager), [Manual](#manually) | Fully Tested | +| Linux | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported | +| Windows | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported | +| Android | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported | #### Known Issues on Linux and Windows -Alamofire builds on Linux and Windows but there are missing features and many issues in the underlying `swift-corelibs-foundation` that prevent full functionality and may cause crashes. These include: +Alamofire builds on Linux, Windows, and Android but there are missing features and many issues in the underlying `swift-corelibs-foundation` that prevent full functionality and may cause crashes. These include: + - `ServerTrustManager` and associated certificate functionality is unavailable, so there is no certificate pinning and no client certificate support. - Various methods of HTTP authentication may crash, including HTTP Basic and HTTP Digest. Crashes may occur if responses contain server challenges. - Cache control through `CachedResponseHandler` and associated APIs is unavailable, as the underlying delegate methods aren't called. - `URLSessionTaskMetrics` are never gathered. -Due to these issues, Alamofire is unsupported on Linux and Windows. Please report any crashes to the [Swift bug reporter](https://bugs.swift.org). +Due to these issues, Alamofire is unsupported on Linux, Windows, and Android. Please report any crashes to the [Swift bug reporter](https://bugs.swift.org). ## Migration Guides @@ -85,11 +113,12 @@ Due to these issues, Alamofire is unsupported on Linux and Windows. Please repor - [Alamofire 2.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%202.0%20Migration%20Guide.md) ## Communication + - If you **need help with making network requests** using Alamofire, use [Stack Overflow](https://stackoverflow.com/questions/tagged/alamofire) and tag `alamofire`. - If you need to **find or understand an API**, check [our documentation](http://alamofire.github.io/Alamofire/) or [Apple's documentation for `URLSession`](https://developer.apple.com/documentation/foundation/url_loading_system), on top of which Alamofire is built. - If you need **help with an Alamofire feature**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). - If you'd like to **discuss Alamofire best practices**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). -- If you'd like to **discuss a feature request**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). +- If you'd like to **discuss a feature request**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). - If you **found a bug**, open an issue here on GitHub and follow the guide. The more detail the better! ## Installation @@ -112,13 +141,13 @@ github "Alamofire/Alamofire" ### Swift Package Manager -The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. +The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. Once you have your Swift package set up, adding Alamofire as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`. ```swift dependencies: [ - .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.6.1")) + .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.8.1")) ] ``` @@ -142,7 +171,7 @@ If you prefer not to use any of the aforementioned dependency managers, you can - Open the new `Alamofire` folder, and drag the `Alamofire.xcodeproj` into the Project Navigator of your application's Xcode project. - > It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter. + > It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter. - Select the `Alamofire.xcodeproj` in the Project Navigator and verify the deployment target matches that of your application target. - Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar. @@ -150,11 +179,11 @@ If you prefer not to use any of the aforementioned dependency managers, you can - Click on the `+` button under the "Embedded Binaries" section. - You will see two different `Alamofire.xcodeproj` folders each with two different versions of the `Alamofire.framework` nested inside a `Products` folder. - > It does not matter which `Products` folder you choose from, but it does matter whether you choose the top or bottom `Alamofire.framework`. + > It does not matter which `Products` folder you choose from, but it does matter whether you choose the top or bottom `Alamofire.framework`. - Select the top `Alamofire.framework` for iOS and the bottom one for macOS. - > You can verify which one you selected by inspecting the build log for your project. The build target for `Alamofire` will be listed as `Alamofire iOS`, `Alamofire macOS`, `Alamofire tvOS`, or `Alamofire watchOS`. + > You can verify which one you selected by inspecting the build log for your project. The build target for `Alamofire` will be listed as `Alamofire iOS`, `Alamofire macOS`, `Alamofire tvOS`, or `Alamofire watchOS`. - And that's it! diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/AFError.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/AFError.swift index 8cd60c70c..82a75b5f0 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/AFError.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/AFError.swift @@ -24,6 +24,10 @@ import Foundation +#if canImport(Security) +import Security +#endif + /// `AFError` is the error type returned by Alamofire. It encompasses a few different types of errors, each with /// their own associated reasons. public enum AFError: Error { @@ -129,7 +133,7 @@ public enum AFError: Error { case invalidEmptyResponse(type: String) } - #if !(os(Linux) || os(Windows)) + #if canImport(Security) /// Underlying reason a server trust evaluation error occurred. public enum ServerTrustFailureReason { /// The output of a server trust evaluation. @@ -211,7 +215,7 @@ public enum AFError: Error { case responseValidationFailed(reason: ResponseValidationFailureReason) /// Response serialization failed. case responseSerializationFailed(reason: ResponseSerializationFailureReason) - #if !(os(Linux) || os(Windows)) + #if canImport(Security) /// `ServerTrustEvaluating` instance threw an error during trust evaluation. case serverTrustEvaluationFailed(reason: ServerTrustFailureReason) #endif @@ -314,7 +318,7 @@ extension AFError { return false } - #if !(os(Linux) || os(Windows)) + #if canImport(Security) /// Returns whether the instance is `.serverTrustEvaluationFailed`. When `true`, the `underlyingError` property will /// contain the associated value. public var isServerTrustEvaluationError: Bool { @@ -393,7 +397,7 @@ extension AFError { return reason.underlyingError case let .responseSerializationFailed(reason): return reason.underlyingError - #if !(os(Linux) || os(Windows)) + #if canImport(Security) case let .serverTrustEvaluationFailed(reason): return reason.underlyingError #endif @@ -451,7 +455,7 @@ extension AFError { return destination } - #if !(os(Linux) || os(Windows)) + #if canImport(Security) /// The download resume data of any underlying network error. Only produced by `DownloadRequest`s. public var downloadResumeData: Data? { (underlyingError as? URLError)?.userInfo[NSURLSessionDownloadTaskResumeData] as? Data @@ -610,7 +614,7 @@ extension AFError.ResponseSerializationFailureReason { } } -#if !(os(Linux) || os(Windows)) +#if canImport(Security) extension AFError.ServerTrustFailureReason { var output: AFError.ServerTrustFailureReason.Output? { switch self { @@ -688,7 +692,7 @@ extension AFError: LocalizedError { """ case let .sessionInvalidated(error): return "Session was invalidated with error: \(error?.localizedDescription ?? "No description.")" - #if !(os(Linux) || os(Windows)) + #if canImport(Security) case let .serverTrustEvaluationFailed(reason): return "Server trust evaluation failed due to reason: \(reason.localizedDescription)" #endif @@ -822,7 +826,7 @@ extension AFError.ResponseValidationFailureReason { } } -#if !(os(Linux) || os(Windows)) +#if canImport(Security) extension AFError.ServerTrustFailureReason { var localizedDescription: String { switch self { diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Alamofire.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Alamofire.swift index 99131aec4..c99fe49df 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Alamofire.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Alamofire.swift @@ -29,12 +29,12 @@ import Foundation #endif // Enforce minimum Swift version for all platforms and build systems. -#if swift(<5.3) -#error("Alamofire doesn't support Swift versions below 5.3.") +#if swift(<5.5) +#error("Alamofire doesn't support Swift versions below 5.5.") #endif /// Reference to `Session.default` for quick bootstrapping and examples. public let AF = Session.default /// Current Alamofire version. Necessary since SPM doesn't use dynamic libraries. Plus this will be more accurate. -let version = "5.6.2" +let version = "5.8.0" diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/AuthenticationInterceptor.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/AuthenticationInterceptor.swift index c3a3f31e4..5c882870c 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/AuthenticationInterceptor.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/AuthenticationInterceptor.swift @@ -217,15 +217,14 @@ public class AuthenticationInterceptor: RequestInterceptor wh /// The `Credential` used to authenticate requests. public var credential: Credential? { - get { $mutableState.credential } - set { $mutableState.credential = newValue } + get { mutableState.credential } + set { mutableState.credential = newValue } } let authenticator: AuthenticatorType let queue = DispatchQueue(label: "org.alamofire.authentication.inspector") - @Protected - private var mutableState: MutableState + private let mutableState: Protected // MARK: Initialization @@ -242,13 +241,13 @@ public class AuthenticationInterceptor: RequestInterceptor wh credential: Credential? = nil, refreshWindow: RefreshWindow? = RefreshWindow()) { self.authenticator = authenticator - mutableState = MutableState(credential: credential, refreshWindow: refreshWindow) + mutableState = Protected(MutableState(credential: credential, refreshWindow: refreshWindow)) } // MARK: Adapt public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { - let adaptResult: AdaptResult = $mutableState.write { mutableState in + let adaptResult: AdaptResult = mutableState.write { mutableState in // Queue the adapt operation if a refresh is already in place. guard !mutableState.isRefreshing else { let operation = AdaptOperation(urlRequest: urlRequest, session: session, completion: completion) @@ -316,7 +315,7 @@ public class AuthenticationInterceptor: RequestInterceptor wh return } - $mutableState.write { mutableState in + mutableState.write { mutableState in mutableState.requestsToRetry.append(completion) guard !mutableState.isRefreshing else { return } @@ -340,7 +339,7 @@ public class AuthenticationInterceptor: RequestInterceptor wh // Dispatch to queue to hop out of the lock in case authenticator.refresh is implemented synchronously. queue.async { self.authenticator.refresh(credential, for: session) { result in - self.$mutableState.write { mutableState in + self.mutableState.write { mutableState in switch result { case let .success(credential): self.handleRefreshSuccess(credential, insideLock: &mutableState) diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/CachedResponseHandler.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/CachedResponseHandler.swift index e7d0060b3..1371b6e17 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/CachedResponseHandler.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/CachedResponseHandler.swift @@ -90,7 +90,6 @@ extension ResponseCacher: CachedResponseHandler { } } -#if swift(>=5.5) extension CachedResponseHandler where Self == ResponseCacher { /// Provides a `ResponseCacher` which caches the response, if allowed. Equivalent to `ResponseCacher.cache`. public static var cache: ResponseCacher { .cache } @@ -106,4 +105,3 @@ extension CachedResponseHandler where Self == ResponseCacher { ResponseCacher(behavior: .modify(closure)) } } -#endif diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Combine.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Combine.swift index 066ba4763..79fce0de2 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Combine.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Combine.swift @@ -22,7 +22,7 @@ // THE SOFTWARE. // -#if !((os(iOS) && (arch(i386) || arch(arm))) || os(Windows) || os(Linux)) +#if !((os(iOS) && (arch(i386) || arch(arm))) || os(Windows) || os(Linux) || os(Android)) import Combine import Dispatch @@ -87,27 +87,26 @@ public struct DataResponsePublisher: Publisher { downstream: subscriber)) } - private final class Inner: Subscription, Cancellable + private final class Inner: Subscription where Downstream.Input == Output { typealias Failure = Downstream.Failure - @Protected - private var downstream: Downstream? + private let downstream: Protected private let request: DataRequest private let responseHandler: Handler init(request: DataRequest, responseHandler: @escaping Handler, downstream: Downstream) { self.request = request self.responseHandler = responseHandler - self.downstream = downstream + self.downstream = Protected(downstream) } func request(_ demand: Subscribers.Demand) { assert(demand > 0) - guard let downstream = downstream else { return } + guard let downstream = downstream.read({ $0 }) else { return } - self.downstream = nil + self.downstream.write(nil) responseHandler { response in _ = downstream.receive(response) downstream.receive(completion: .finished) @@ -116,7 +115,7 @@ public struct DataResponsePublisher: Publisher { func cancel() { request.cancel() - downstream = nil + downstream.write(nil) } } } @@ -308,27 +307,26 @@ public struct DataStreamPublisher: Publisher { downstream: subscriber)) } - private final class Inner: Subscription, Cancellable + private final class Inner: Subscription where Downstream.Input == Output { typealias Failure = Downstream.Failure - @Protected - private var downstream: Downstream? + private let downstream: Protected private let request: DataStreamRequest private let streamHandler: Handler init(request: DataStreamRequest, streamHandler: @escaping Handler, downstream: Downstream) { self.request = request self.streamHandler = streamHandler - self.downstream = downstream + self.downstream = Protected(downstream) } func request(_ demand: Subscribers.Demand) { assert(demand > 0) - guard let downstream = downstream else { return } + guard let downstream = downstream.read({ $0 }) else { return } - self.downstream = nil + self.downstream.write(nil) streamHandler { stream in _ = downstream.receive(stream) if case .complete = stream.event { @@ -339,7 +337,7 @@ public struct DataStreamPublisher: Publisher { func cancel() { request.cancel() - downstream = nil + downstream.write(nil) } } } @@ -458,27 +456,26 @@ public struct DownloadResponsePublisher: Publisher { downstream: subscriber)) } - private final class Inner: Subscription, Cancellable + private final class Inner: Subscription where Downstream.Input == Output { typealias Failure = Downstream.Failure - @Protected - private var downstream: Downstream? + private let downstream: Protected private let request: DownloadRequest private let responseHandler: Handler init(request: DownloadRequest, responseHandler: @escaping Handler, downstream: Downstream) { self.request = request self.responseHandler = responseHandler - self.downstream = downstream + self.downstream = Protected(downstream) } func request(_ demand: Subscribers.Demand) { assert(demand > 0) - guard let downstream = downstream else { return } + guard let downstream = downstream.read({ $0 }) else { return } - self.downstream = nil + self.downstream.write(nil) responseHandler { response in _ = downstream.receive(response) downstream.receive(completion: .finished) @@ -487,7 +484,7 @@ public struct DownloadResponsePublisher: Publisher { func cancel() { request.cancel() - downstream = nil + downstream.write(nil) } } } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Concurrency.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Concurrency.swift index a5621f304..21e7e1ecd 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Concurrency.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Concurrency.swift @@ -37,7 +37,7 @@ extension Request { /// - Returns: The `StreamOf`. public func uploadProgress(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - uploadProgress(queue: .singleEventQueue) { progress in + uploadProgress(queue: underlyingQueue) { progress in continuation.yield(progress) } } @@ -50,7 +50,7 @@ extension Request { /// - Returns: The `StreamOf`. public func downloadProgress(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - downloadProgress(queue: .singleEventQueue) { progress in + downloadProgress(queue: underlyingQueue) { progress in continuation.yield(progress) } } @@ -63,7 +63,7 @@ extension Request { /// - Returns: The `StreamOf`. public func urlRequests(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - onURLRequestCreation(on: .singleEventQueue) { request in + onURLRequestCreation(on: underlyingQueue) { request in continuation.yield(request) } } @@ -76,7 +76,7 @@ extension Request { /// - Returns: The `StreamOf`. public func urlSessionTasks(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - onURLSessionTaskCreation(on: .singleEventQueue) { task in + onURLSessionTaskCreation(on: underlyingQueue) { task in continuation.yield(task) } } @@ -89,15 +89,15 @@ extension Request { /// - Returns: The `StreamOf`. public func cURLDescriptions(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - cURLDescription(on: .singleEventQueue) { description in + cURLDescription(on: underlyingQueue) { description in continuation.yield(description) } } } - private func stream(of type: T.Type = T.self, - bufferingPolicy: StreamOf.BufferingPolicy = .unbounded, - yielder: @escaping (StreamOf.Continuation) -> Void) -> StreamOf { + fileprivate func stream(of type: T.Type = T.self, + bufferingPolicy: StreamOf.BufferingPolicy = .unbounded, + yielder: @escaping (StreamOf.Continuation) -> Void) -> StreamOf { StreamOf(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in yielder(continuation) // Must come after serializers run in order to catch retry progress. @@ -118,9 +118,9 @@ public struct DataTask { get async { if shouldAutomaticallyCancel { return await withTaskCancellationHandler { - self.cancel() - } operation: { await task.value + } onCancel: { + cancel() } } else { return await task.value @@ -168,18 +168,83 @@ public struct DataTask { @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) extension DataRequest { + /// Creates a `StreamOf` for the instance's responses. + /// + /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. + /// + /// - Returns: The `StreamOf`. + public func httpResponses(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { + stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in + onHTTPResponse(on: underlyingQueue) { response in + continuation.yield(response) + } + } + } + + #if swift(>=5.7) + /// Sets an async closure returning a `Request.ResponseDisposition`, called whenever the `DataRequest` produces an + /// `HTTPURLResponse`. + /// + /// - Note: Most requests will only produce a single response for each outgoing attempt (initial + retries). + /// However, some types of response may trigger multiple `HTTPURLResponse`s, such as multipart streams, + /// where responses after the first will contain the part headers. + /// + /// - Parameters: + /// - handler: Async closure executed when a new `HTTPURLResponse` is received and returning a + /// `ResponseDisposition` value. This value determines whether to continue the request or cancel it as + /// if `cancel()` had been called on the instance. Note, this closure is called on an arbitrary thread, + /// so any synchronous calls in it will execute in that context. + /// + /// - Returns: The instance. + @_disfavoredOverload + @discardableResult + public func onHTTPResponse( + perform handler: @escaping @Sendable (_ response: HTTPURLResponse) async -> ResponseDisposition + ) -> Self { + onHTTPResponse(on: underlyingQueue) { response, completionHandler in + Task { + let disposition = await handler(response) + completionHandler(disposition) + } + } + + return self + } + + /// Sets an async closure called whenever the `DataRequest` produces an `HTTPURLResponse`. + /// + /// - Note: Most requests will only produce a single response for each outgoing attempt (initial + retries). + /// However, some types of response may trigger multiple `HTTPURLResponse`s, such as multipart streams, + /// where responses after the first will contain the part headers. + /// + /// - Parameters: + /// - handler: Async closure executed when a new `HTTPURLResponse` is received. Note, this closure is called on an + /// arbitrary thread, so any synchronous calls in it will execute in that context. + /// + /// - Returns: The instance. + @discardableResult + public func onHTTPResponse(perform handler: @escaping @Sendable (_ response: HTTPURLResponse) async -> Void) -> Self { + onHTTPResponse { response in + await handler(response) + return .allow + } + + return self + } + #endif + /// Creates a `DataTask` to `await` a `Data` value. /// /// - Parameters: /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the /// enclosing async context is cancelled. Only applies to `DataTask`'s async - /// properties. `false` by default. + /// properties. `true` by default. /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before completion. /// - emptyResponseCodes: HTTP response codes for which empty responses are allowed. `[204, 205]` by default. /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. /// /// - Returns: The `DataTask`. - public func serializingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + public func serializingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DataTask { @@ -195,7 +260,7 @@ extension DataRequest { /// - type: `Decodable` type to decode from response data. /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the /// enclosing async context is cancelled. Only applies to `DataTask`'s async - /// properties. `false` by default. + /// properties. `true` by default. /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the serializer. /// `PassthroughPreprocessor()` by default. /// - decoder: `DataDecoder` to use to decode the response. `JSONDecoder()` by default. @@ -204,7 +269,7 @@ extension DataRequest { /// /// - Returns: The `DataTask`. public func serializingDecodable(_ type: Value.Type = Value.self, - automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + automaticallyCancelling shouldAutomaticallyCancel: Bool = true, dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, decoder: DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, @@ -221,7 +286,7 @@ extension DataRequest { /// - Parameters: /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the /// enclosing async context is cancelled. Only applies to `DataTask`'s async - /// properties. `false` by default. + /// properties. `true` by default. /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the serializer. /// `PassthroughPreprocessor()` by default. /// - encoding: `String.Encoding` to use during serialization. Defaults to `nil`, in which case @@ -231,7 +296,7 @@ extension DataRequest { /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. /// /// - Returns: The `DataTask`. - public func serializingString(automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + public func serializingString(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, encoding: String.Encoding? = nil, emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, @@ -249,16 +314,16 @@ extension DataRequest { /// - serializer: `ResponseSerializer` responsible for serializing the request, response, and data. /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the /// enclosing async context is cancelled. Only applies to `DataTask`'s async - /// properties. `false` by default. + /// properties. `true` by default. /// /// - Returns: The `DataTask`. public func serializingResponse(using serializer: Serializer, - automaticallyCancelling shouldAutomaticallyCancel: Bool = false) + automaticallyCancelling shouldAutomaticallyCancel: Bool = true) -> DataTask { - dataTask(automaticallyCancelling: shouldAutomaticallyCancel) { - self.response(queue: .singleEventQueue, - responseSerializer: serializer, - completionHandler: $0) + dataTask(automaticallyCancelling: shouldAutomaticallyCancel) { [self] in + response(queue: underlyingQueue, + responseSerializer: serializer, + completionHandler: $0) } } @@ -269,16 +334,16 @@ extension DataRequest { /// response, and data. /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the /// enclosing async context is cancelled. Only applies to `DataTask`'s async - /// properties. `false` by default. + /// properties. `true` by default. /// /// - Returns: The `DataTask`. public func serializingResponse(using serializer: Serializer, - automaticallyCancelling shouldAutomaticallyCancel: Bool = false) + automaticallyCancelling shouldAutomaticallyCancel: Bool = true) -> DataTask { - dataTask(automaticallyCancelling: shouldAutomaticallyCancel) { - self.response(queue: .singleEventQueue, - responseSerializer: serializer, - completionHandler: $0) + dataTask(automaticallyCancelling: shouldAutomaticallyCancel) { [self] in + response(queue: underlyingQueue, + responseSerializer: serializer, + completionHandler: $0) } } @@ -287,13 +352,13 @@ extension DataRequest { -> DataTask { let task = Task { await withTaskCancellationHandler { - self.cancel() - } operation: { await withCheckedContinuation { continuation in onResponse { continuation.resume(returning: $0) } } + } onCancel: { + self.cancel() } } @@ -311,9 +376,9 @@ public struct DownloadTask { get async { if shouldAutomaticallyCancel { return await withTaskCancellationHandler { - self.cancel() - } operation: { await task.value + } onCancel: { + cancel() } } else { return await task.value @@ -366,13 +431,13 @@ extension DownloadRequest { /// - Parameters: /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `false` by default. + /// properties. `true` by default. /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before completion. /// - emptyResponseCodes: HTTP response codes for which empty responses are allowed. `[204, 205]` by default. /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. /// /// - Returns: The `DownloadTask`. - public func serializingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + public func serializingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DownloadTask { @@ -390,7 +455,7 @@ extension DownloadRequest { /// - type: `Decodable` type to decode from response data. /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `false` by default. + /// properties. `true` by default. /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the serializer. /// `PassthroughPreprocessor()` by default. /// - decoder: `DataDecoder` to use to decode the response. `JSONDecoder()` by default. @@ -399,7 +464,7 @@ extension DownloadRequest { /// /// - Returns: The `DownloadTask`. public func serializingDecodable(_ type: Value.Type = Value.self, - automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + automaticallyCancelling shouldAutomaticallyCancel: Bool = true, dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, decoder: DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, @@ -416,10 +481,10 @@ extension DownloadRequest { /// - Parameters: /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `false` by default. + /// properties. `true` by default. /// /// - Returns: The `DownloadTask`. - public func serializingDownloadedFileURL(automaticallyCancelling shouldAutomaticallyCancel: Bool = false) -> DownloadTask { + public func serializingDownloadedFileURL(automaticallyCancelling shouldAutomaticallyCancel: Bool = true) -> DownloadTask { serializingDownload(using: URLResponseSerializer(), automaticallyCancelling: shouldAutomaticallyCancel) } @@ -429,7 +494,7 @@ extension DownloadRequest { /// - Parameters: /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `false` by default. + /// properties. `true` by default. /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the /// serializer. `PassthroughPreprocessor()` by default. /// - encoding: `String.Encoding` to use during serialization. Defaults to `nil`, in which case @@ -439,7 +504,7 @@ extension DownloadRequest { /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. /// /// - Returns: The `DownloadTask`. - public func serializingString(automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + public func serializingString(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, encoding: String.Encoding? = nil, emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, @@ -457,16 +522,16 @@ extension DownloadRequest { /// - serializer: `ResponseSerializer` responsible for serializing the request, response, and data. /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `false` by default. + /// properties. `true` by default. /// /// - Returns: The `DownloadTask`. public func serializingDownload(using serializer: Serializer, - automaticallyCancelling shouldAutomaticallyCancel: Bool = false) + automaticallyCancelling shouldAutomaticallyCancel: Bool = true) -> DownloadTask { - downloadTask(automaticallyCancelling: shouldAutomaticallyCancel) { - self.response(queue: .singleEventQueue, - responseSerializer: serializer, - completionHandler: $0) + downloadTask(automaticallyCancelling: shouldAutomaticallyCancel) { [self] in + response(queue: underlyingQueue, + responseSerializer: serializer, + completionHandler: $0) } } @@ -478,16 +543,16 @@ extension DownloadRequest { /// response, and data. /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `false` by default. + /// properties. `true` by default. /// /// - Returns: The `DownloadTask`. public func serializingDownload(using serializer: Serializer, - automaticallyCancelling shouldAutomaticallyCancel: Bool = false) + automaticallyCancelling shouldAutomaticallyCancel: Bool = true) -> DownloadTask { - downloadTask(automaticallyCancelling: shouldAutomaticallyCancel) { - self.response(queue: .singleEventQueue, - responseSerializer: serializer, - completionHandler: $0) + downloadTask(automaticallyCancelling: shouldAutomaticallyCancel) { [self] in + response(queue: underlyingQueue, + responseSerializer: serializer, + completionHandler: $0) } } @@ -496,13 +561,13 @@ extension DownloadRequest { -> DownloadTask { let task = Task { await withTaskCancellationHandler { - self.cancel() - } operation: { await withCheckedContinuation { continuation in onResponse { continuation.resume(returning: $0) } } + } onCancel: { + self.cancel() } } @@ -533,7 +598,7 @@ public struct DataStreamTask { /// - Returns: The `Stream`. public func streamingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, bufferingPolicy: Stream.BufferingPolicy = .unbounded) -> Stream { createStream(automaticallyCancelling: shouldAutomaticallyCancel, bufferingPolicy: bufferingPolicy) { onStream in - self.request.responseStream(on: .streamCompletionQueue(forRequestID: request.id), stream: onStream) + request.responseStream(on: .streamCompletionQueue(forRequestID: request.id), stream: onStream) } } @@ -546,7 +611,7 @@ public struct DataStreamTask { /// - Returns: public func streamingStrings(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, bufferingPolicy: Stream.BufferingPolicy = .unbounded) -> Stream { createStream(automaticallyCancelling: shouldAutomaticallyCancel, bufferingPolicy: bufferingPolicy) { onStream in - self.request.responseStreamString(on: .streamCompletionQueue(forRequestID: request.id), stream: onStream) + request.responseStreamString(on: .streamCompletionQueue(forRequestID: request.id), stream: onStream) } } @@ -582,9 +647,9 @@ public struct DataStreamTask { bufferingPolicy: Stream.BufferingPolicy = .unbounded) -> Stream { createStream(automaticallyCancelling: shouldAutomaticallyCancel, bufferingPolicy: bufferingPolicy) { onStream in - self.request.responseStream(using: serializer, - on: .streamCompletionQueue(forRequestID: request.id), - stream: onStream) + request.responseStream(using: serializer, + on: .streamCompletionQueue(forRequestID: request.id), + stream: onStream) } } @@ -625,6 +690,69 @@ public struct DataStreamTask { @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) extension DataStreamRequest { + /// Creates a `StreamOf` for the instance's responses. + /// + /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. + /// + /// - Returns: The `StreamOf`. + public func httpResponses(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { + stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in + onHTTPResponse(on: underlyingQueue) { response in + continuation.yield(response) + } + } + } + + #if swift(>=5.7) + /// Sets an async closure returning a `Request.ResponseDisposition`, called whenever the `DataStreamRequest` + /// produces an `HTTPURLResponse`. + /// + /// - Note: Most requests will only produce a single response for each outgoing attempt (initial + retries). + /// However, some types of response may trigger multiple `HTTPURLResponse`s, such as multipart streams, + /// where responses after the first will contain the part headers. + /// + /// - Parameters: + /// - handler: Async closure executed when a new `HTTPURLResponse` is received and returning a + /// `ResponseDisposition` value. This value determines whether to continue the request or cancel it as + /// if `cancel()` had been called on the instance. Note, this closure is called on an arbitrary thread, + /// so any synchronous calls in it will execute in that context. + /// + /// - Returns: The instance. + @_disfavoredOverload + @discardableResult + public func onHTTPResponse(perform handler: @escaping @Sendable (HTTPURLResponse) async -> ResponseDisposition) -> Self { + onHTTPResponse(on: underlyingQueue) { response, completionHandler in + Task { + let disposition = await handler(response) + completionHandler(disposition) + } + } + + return self + } + + /// Sets an async closure called whenever the `DataStreamRequest` produces an `HTTPURLResponse`. + /// + /// - Note: Most requests will only produce a single response for each outgoing attempt (initial + retries). + /// However, some types of response may trigger multiple `HTTPURLResponse`s, such as multipart streams, + /// where responses after the first will contain the part headers. + /// + /// - Parameters: + /// - handler: Async closure executed when a new `HTTPURLResponse` is received. Note, this closure is called on an + /// arbitrary thread, so any synchronous calls in it will execute in that context. + /// + /// - Returns: The instance. + @discardableResult + public func onHTTPResponse(perform handler: @escaping @Sendable (HTTPURLResponse) async -> Void) -> Self { + onHTTPResponse { response in + await handler(response) + return .allow + } + + return self + } + #endif + /// Creates a `DataStreamTask` used to `await` streams of serialized values. /// /// - Returns: The `DataStreamTask`. @@ -663,14 +791,14 @@ public struct StreamOf: AsyncSequence { public func makeAsyncIterator() -> Iterator { var continuation: AsyncStream.Continuation? - let stream = AsyncStream { innerContinuation in + let stream = AsyncStream(bufferingPolicy: bufferingPolicy) { innerContinuation in continuation = innerContinuation builder(innerContinuation) } return Iterator(iterator: stream.makeAsyncIterator()) { continuation?.finish() - self.onTermination?() + onTermination?() } } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/EventMonitor.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/EventMonitor.swift index 3b096712f..75b60f21f 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/EventMonitor.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/EventMonitor.swift @@ -65,11 +65,13 @@ public protocol EventMonitor { func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) /// Event called during `URLSessionTaskDelegate`'s `urlSession(_:taskIsWaitingForConnectivity:)` method. - @available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) // MARK: URLSessionDataDelegate Events + /// Event called during `URLSessionDataDelegate`'s `urlSession(_:dataTask:didReceive:completionHandler:)` method. + func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse) + /// Event called during `URLSessionDataDelegate`'s `urlSession(_:dataTask:didReceive:)` method. func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) @@ -245,6 +247,7 @@ extension EventMonitor { didFinishCollecting metrics: URLSessionTaskMetrics) {} public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {} public func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) {} + public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse) {} public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {} public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, @@ -381,6 +384,10 @@ public final class CompositeEventMonitor: EventMonitor { performEvent { $0.urlSession(session, taskIsWaitingForConnectivity: task) } } + public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse) { + performEvent { $0.urlSession(session, dataTask: dataTask, didReceive: response) } + } + public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { performEvent { $0.urlSession(session, dataTask: dataTask, didReceive: data) } } @@ -594,6 +601,9 @@ open class ClosureEventMonitor: EventMonitor { /// Closure called on the `urlSession(_:taskIsWaitingForConnectivity:)` event. open var taskIsWaitingForConnectivity: ((URLSession, URLSessionTask) -> Void)? + /// Closure called on the `urlSession(_:dataTask:didReceive:completionHandler:)` event. + open var dataTaskDidReceiveResponse: ((URLSession, URLSessionDataTask, URLResponse) -> Void)? + /// Closure that receives the `urlSession(_:dataTask:didReceive:)` event. open var dataTaskDidReceiveData: ((URLSession, URLSessionDataTask, Data) -> Void)? @@ -737,10 +747,15 @@ open class ClosureEventMonitor: EventMonitor { taskDidComplete?(session, task, error) } + @available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) open func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) { taskIsWaitingForConnectivity?(session, task) } + open func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse) { + dataTaskDidReceiveResponse?(session, dataTask, response) + } + open func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { dataTaskDidReceiveData?(session, dataTask, data) } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/HTTPHeaders.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/HTTPHeaders.swift index cdbdbc6b5..08d479936 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/HTTPHeaders.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/HTTPHeaders.swift @@ -34,16 +34,12 @@ public struct HTTPHeaders { /// Creates an instance from an array of `HTTPHeader`s. Duplicate case-insensitive names are collapsed into the last /// name and value encountered. public init(_ headers: [HTTPHeader]) { - self.init() - headers.forEach { update($0) } } /// Creates an instance from a `[String: String]`. Duplicate case-insensitive names are collapsed into the last name /// and value encountered. public init(_ dictionary: [String: String]) { - self.init() - dictionary.forEach { update(HTTPHeader(name: $0.key, value: $0.value)) } } @@ -145,8 +141,6 @@ public struct HTTPHeaders { extension HTTPHeaders: ExpressibleByDictionaryLiteral { public init(dictionaryLiteral elements: (String, String)...) { - self.init() - elements.forEach { update(name: $0.0, value: $0.1) } } } @@ -300,10 +294,19 @@ extension HTTPHeader { HTTPHeader(name: "Content-Disposition", value: value) } + /// Returns a `Content-Encoding` header. + /// + /// - Parameter value: The `Content-Encoding`. + /// + /// - Returns: The header. + public static func contentEncoding(_ value: String) -> HTTPHeader { + HTTPHeader(name: "Content-Encoding", value: value) + } + /// Returns a `Content-Type` header. /// - /// All Alamofire `ParameterEncoding`s and `ParameterEncoder`s set the `Content-Type` of the request, so it may not be necessary to manually - /// set this value. + /// All Alamofire `ParameterEncoding`s and `ParameterEncoder`s set the `Content-Type` of the request, so it may not + /// be necessary to manually set this value. /// /// - Parameter value: The `Content-Type` value. /// @@ -396,6 +399,8 @@ extension HTTPHeader { return "Linux" #elseif os(Windows) return "Windows" + #elseif os(Android) + return "Android" #else return "Unknown" #endif diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/MultipartFormData.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/MultipartFormData.swift index 364b614bf..3fb6e2bf4 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/MultipartFormData.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/MultipartFormData.swift @@ -24,9 +24,9 @@ import Foundation -#if os(iOS) || os(watchOS) || os(tvOS) +#if canImport(MobileCoreServices) import MobileCoreServices -#elseif os(macOS) +#elseif canImport(CoreServices) import CoreServices #endif @@ -213,7 +213,7 @@ open class MultipartFormData { // Check 2 - is file URL reachable? //============================================================ - #if !(os(Linux) || os(Windows)) + #if !(os(Linux) || os(Windows) || os(Android)) do { let isReachable = try fileURL.checkPromisedItemIsReachable() guard isReachable else { @@ -455,9 +455,11 @@ open class MultipartFormData { inputStream.open() defer { inputStream.close() } - while inputStream.hasBytesAvailable { - var buffer = [UInt8](repeating: 0, count: streamBufferSize) - let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize) + var bytesLeftToRead = bodyPart.bodyContentLength + while inputStream.hasBytesAvailable && bytesLeftToRead > 0 { + let bufferSize = min(streamBufferSize, Int(bytesLeftToRead)) + var buffer = [UInt8](repeating: 0, count: bufferSize) + let bytesRead = inputStream.read(&buffer, maxLength: bufferSize) if let streamError = inputStream.streamError { throw AFError.multipartEncodingFailed(reason: .inputStreamReadFailed(error: streamError)) @@ -469,6 +471,7 @@ open class MultipartFormData { } try write(&buffer, to: outputStream) + bytesLeftToRead -= UInt64(bytesRead) } else { break } @@ -549,6 +552,19 @@ extension MultipartFormData { // MARK: - Private - Mime Type private func mimeType(forPathExtension pathExtension: String) -> String { + #if swift(>=5.9) + if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, visionOS 1, *) { + return UTType(filenameExtension: pathExtension)?.preferredMIMEType ?? "application/octet-stream" + } else { + if + let id = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)?.takeRetainedValue(), + let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)?.takeRetainedValue() { + return contentType as String + } + + return "application/octet-stream" + } + #else if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, *) { return UTType(filenameExtension: pathExtension)?.preferredMIMEType ?? "application/octet-stream" } else { @@ -560,6 +576,7 @@ extension MultipartFormData { return "application/octet-stream" } + #endif } } @@ -569,7 +586,7 @@ extension MultipartFormData { // MARK: - Private - Mime Type private func mimeType(forPathExtension pathExtension: String) -> String { - #if !(os(Linux) || os(Windows)) + #if canImport(CoreServices) || canImport(MobileCoreServices) if let id = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)?.takeRetainedValue(), let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)?.takeRetainedValue() { diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/MultipartUpload.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/MultipartUpload.swift index ceda21f28..ae905bda4 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/MultipartUpload.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/MultipartUpload.swift @@ -28,8 +28,8 @@ import Foundation final class MultipartUpload { lazy var result = Result { try build() } - @Protected - private(set) var multipartFormData: MultipartFormData + private let multipartFormData: Protected + let encodingMemoryThreshold: UInt64 let request: URLRequestConvertible let fileManager: FileManager @@ -40,13 +40,13 @@ final class MultipartUpload { self.encodingMemoryThreshold = encodingMemoryThreshold self.request = request fileManager = multipartFormData.fileManager - self.multipartFormData = multipartFormData + self.multipartFormData = Protected(multipartFormData) } func build() throws -> UploadRequest.Uploadable { let uploadable: UploadRequest.Uploadable - if $multipartFormData.contentLength < encodingMemoryThreshold { - let data = try $multipartFormData.read { try $0.encode() } + if multipartFormData.contentLength < encodingMemoryThreshold { + let data = try multipartFormData.read { try $0.encode() } uploadable = .data(data) } else { @@ -58,7 +58,7 @@ final class MultipartUpload { try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil) do { - try $multipartFormData.read { try $0.writeEncodedData(to: fileURL) } + try multipartFormData.read { try $0.writeEncodedData(to: fileURL) } } catch { // Cleanup after attempted write if it fails. try? fileManager.removeItem(at: fileURL) @@ -76,7 +76,7 @@ extension MultipartUpload: UploadConvertible { func asURLRequest() throws -> URLRequest { var urlRequest = try request.asURLRequest() - $multipartFormData.read { multipartFormData in + multipartFormData.read { multipartFormData in urlRequest.headers.add(.contentType(multipartFormData.contentType)) } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/NetworkReachabilityManager.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/NetworkReachabilityManager.swift index deeb3a42e..650fdf91d 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/NetworkReachabilityManager.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/NetworkReachabilityManager.swift @@ -22,7 +22,7 @@ // THE SOFTWARE. // -#if !(os(watchOS) || os(Linux) || os(Windows)) +#if canImport(SystemConfiguration) import Foundation import SystemConfiguration @@ -91,7 +91,7 @@ open class NetworkReachabilityManager { open var flags: SCNetworkReachabilityFlags? { var flags = SCNetworkReachabilityFlags() - return (SCNetworkReachabilityGetFlags(reachability, &flags)) ? flags : nil + return SCNetworkReachabilityGetFlags(reachability, &flags) ? flags : nil } /// The current network reachability status. @@ -113,8 +113,7 @@ open class NetworkReachabilityManager { private let reachability: SCNetworkReachability /// Protected storage for mutable state. - @Protected - private var mutableState = MutableState() + private let mutableState = Protected(MutableState()) // MARK: - Initialization @@ -168,21 +167,39 @@ open class NetworkReachabilityManager { onUpdatePerforming listener: @escaping Listener) -> Bool { stopListening() - $mutableState.write { state in + mutableState.write { state in state.listenerQueue = queue state.listener = listener } - var context = SCNetworkReachabilityContext(version: 0, - info: Unmanaged.passUnretained(self).toOpaque(), - retain: nil, - release: nil, - copyDescription: nil) + let weakManager = WeakManager(manager: self) + + var context = SCNetworkReachabilityContext( + version: 0, + info: Unmanaged.passUnretained(weakManager).toOpaque(), + retain: { info in + let unmanaged = Unmanaged.fromOpaque(info) + _ = unmanaged.retain() + + return UnsafeRawPointer(unmanaged.toOpaque()) + }, + release: { info in + let unmanaged = Unmanaged.fromOpaque(info) + unmanaged.release() + }, + copyDescription: { info in + let unmanaged = Unmanaged.fromOpaque(info) + let weakManager = unmanaged.takeUnretainedValue() + let description = weakManager.manager?.flags?.readableDescription ?? "nil" + + return Unmanaged.passRetained(description as CFString) + } + ) let callback: SCNetworkReachabilityCallBack = { _, flags, info in guard let info = info else { return } - let instance = Unmanaged.fromOpaque(info).takeUnretainedValue() - instance.notifyListener(flags) + let weakManager = Unmanaged.fromOpaque(info).takeUnretainedValue() + weakManager.manager?.notifyListener(flags) } let queueAdded = SCNetworkReachabilitySetDispatchQueue(reachability, reachabilityQueue) @@ -202,7 +219,7 @@ open class NetworkReachabilityManager { open func stopListening() { SCNetworkReachabilitySetCallback(reachability, nil, nil) SCNetworkReachabilitySetDispatchQueue(reachability, nil) - $mutableState.write { state in + mutableState.write { state in state.listener = nil state.listenerQueue = nil state.previousStatus = nil @@ -219,7 +236,7 @@ open class NetworkReachabilityManager { func notifyListener(_ flags: SCNetworkReachabilityFlags) { let newStatus = NetworkReachabilityStatus(flags) - $mutableState.write { state in + mutableState.write { state in guard state.previousStatus != newStatus else { return } state.previousStatus = newStatus @@ -228,6 +245,14 @@ open class NetworkReachabilityManager { state.listenerQueue?.async { listener?(newStatus) } } } + + private final class WeakManager { + weak var manager: NetworkReachabilityManager? + + init(manager: NetworkReachabilityManager?) { + self.manager = manager + } + } } // MARK: - @@ -241,7 +266,7 @@ extension SCNetworkReachabilityFlags { var canConnectWithoutUserInteraction: Bool { canConnectAutomatically && !contains(.interventionRequired) } var isActuallyReachable: Bool { isReachable && (!isConnectionRequired || canConnectWithoutUserInteraction) } var isCellular: Bool { - #if os(iOS) || os(tvOS) + #if os(iOS) || os(tvOS) || (swift(>=5.9) && os(visionOS)) return contains(.isWWAN) #else return false diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ParameterEncoder.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ParameterEncoder.swift index 2263660da..89169785d 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ParameterEncoder.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ParameterEncoder.swift @@ -92,7 +92,6 @@ open class JSONParameterEncoder: ParameterEncoder { } } -#if swift(>=5.5) extension ParameterEncoder where Self == JSONParameterEncoder { /// Provides a default `JSONParameterEncoder` instance. public static var json: JSONParameterEncoder { JSONParameterEncoder() } @@ -105,7 +104,6 @@ extension ParameterEncoder where Self == JSONParameterEncoder { JSONParameterEncoder(encoder: encoder) } } -#endif /// A `ParameterEncoder` that encodes types as URL-encoded query strings to be set on the URL or as body data, depending /// on the `Destination` set. @@ -198,7 +196,6 @@ open class URLEncodedFormParameterEncoder: ParameterEncoder { } } -#if swift(>=5.5) extension ParameterEncoder where Self == URLEncodedFormParameterEncoder { /// Provides a default `URLEncodedFormParameterEncoder` instance. public static var urlEncodedForm: URLEncodedFormParameterEncoder { URLEncodedFormParameterEncoder() } @@ -214,4 +211,3 @@ extension ParameterEncoder where Self == URLEncodedFormParameterEncoder { URLEncodedFormParameterEncoder(encoder: encoder, destination: destination) } } -#endif diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ParameterEncoding.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ParameterEncoding.swift index bb66781a6..ea6125651 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ParameterEncoding.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ParameterEncoding.swift @@ -87,6 +87,8 @@ public struct URLEncoding: ParameterEncoding { case noBrackets /// Brackets containing the item index are appended. This matches the jQuery and Node.js behavior. case indexInBrackets + /// Provide a custom array key encoding with the given closure. + case custom((_ key: String, _ index: Int) -> String) func encode(key: String, atIndex index: Int) -> String { switch self { @@ -96,6 +98,8 @@ public struct URLEncoding: ParameterEncoding { return key case .indexInBrackets: return "\(key)[\(index)]" + case let .custom(encoding): + return encoding(key, index) } } } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Protected.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Protected.swift index 2c056fa58..67560454e 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Protected.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Protected.swift @@ -49,13 +49,7 @@ extension Lock { } } -#if os(Linux) || os(Windows) - -extension NSLock: Lock {} - -#endif - -#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) +#if canImport(Darwin) /// An `os_unfair_lock` wrapper. final class UnfairLock: Lock { private let unfairLock: os_unfair_lock_t @@ -78,41 +72,35 @@ final class UnfairLock: Lock { os_unfair_lock_unlock(unfairLock) } } + +#elseif canImport(Foundation) +extension NSLock: Lock {} +#else +#error("This platform needs a Lock-conforming type without Foundation.") #endif /// A thread-safe wrapper around a value. -@propertyWrapper @dynamicMemberLookup -final class Protected { - #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) +final class Protected { + #if canImport(Darwin) private let lock = UnfairLock() - #elseif os(Linux) || os(Windows) + #elseif canImport(Foundation) private let lock = NSLock() + #else + #error("This platform needs a Lock-conforming type without Foundation.") #endif - private var value: T + private var value: Value - init(_ value: T) { + init(_ value: Value) { self.value = value } - /// The contained value. Unsafe for anything more than direct read or write. - var wrappedValue: T { - get { lock.around { value } } - set { lock.around { value = newValue } } - } - - var projectedValue: Protected { self } - - init(wrappedValue: T) { - value = wrappedValue - } - /// Synchronously read or transform the contained value. /// /// - Parameter closure: The closure to execute. /// /// - Returns: The return value of the closure passed. - func read(_ closure: (T) throws -> U) rethrows -> U { + func read(_ closure: (Value) throws -> U) rethrows -> U { try lock.around { try closure(self.value) } } @@ -122,21 +110,28 @@ final class Protected { /// /// - Returns: The modified value. @discardableResult - func write(_ closure: (inout T) throws -> U) rethrows -> U { + func write(_ closure: (inout Value) throws -> U) rethrows -> U { try lock.around { try closure(&self.value) } } - subscript(dynamicMember keyPath: WritableKeyPath) -> Property { + /// Synchronously update the protected value. + /// + /// - Parameter value: The `Value`. + func write(_ value: Value) { + write { $0 = value } + } + + subscript(dynamicMember keyPath: WritableKeyPath) -> Property { get { lock.around { value[keyPath: keyPath] } } set { lock.around { value[keyPath: keyPath] = newValue } } } - subscript(dynamicMember keyPath: KeyPath) -> Property { + subscript(dynamicMember keyPath: KeyPath) -> Property { lock.around { value[keyPath: keyPath] } } } -extension Protected where T == Request.MutableState { +extension Protected where Value == Request.MutableState { /// Attempts to transition to the passed `State`. /// /// - Parameter state: The `State` to attempt transition to. @@ -159,3 +154,15 @@ extension Protected where T == Request.MutableState { lock.around { perform(value.state) } } } + +extension Protected: Equatable where Value: Equatable { + static func ==(lhs: Protected, rhs: Protected) -> Bool { + lhs.read { left in rhs.read { right in left == right }} + } +} + +extension Protected: Hashable where Value: Hashable { + func hash(into hasher: inout Hasher) { + read { hasher.combine($0) } + } +} diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RedirectHandler.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RedirectHandler.swift index 5c232b8af..cf88abf55 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RedirectHandler.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RedirectHandler.swift @@ -94,7 +94,6 @@ extension Redirector: RedirectHandler { } } -#if swift(>=5.5) extension RedirectHandler where Self == Redirector { /// Provides a `Redirector` which follows redirects. Equivalent to `Redirector.follow`. public static var follow: Redirector { .follow } @@ -110,4 +109,3 @@ extension RedirectHandler where Self == Redirector { Redirector(behavior: .modify(closure)) } } -#endif diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Request.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Request.swift index 3d647436a..55f2a67c6 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Request.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Request.swift @@ -125,11 +125,10 @@ public class Request { } /// Protected `MutableState` value that provides thread-safe access to state values. - @Protected - fileprivate var mutableState = MutableState() + fileprivate let mutableState = Protected(MutableState()) /// `State` of the `Request`. - public var state: State { $mutableState.state } + public var state: State { mutableState.state } /// Returns whether `state` is `.initialized`. public var isInitialized: Bool { state == .initialized } /// Returns whether `state is `.resumed`. @@ -152,50 +151,49 @@ public class Request { public let downloadProgress = Progress(totalUnitCount: 0) /// `ProgressHandler` called when `uploadProgress` is updated, on the provided `DispatchQueue`. private var uploadProgressHandler: (handler: ProgressHandler, queue: DispatchQueue)? { - get { $mutableState.uploadProgressHandler } - set { $mutableState.uploadProgressHandler = newValue } + get { mutableState.uploadProgressHandler } + set { mutableState.uploadProgressHandler = newValue } } /// `ProgressHandler` called when `downloadProgress` is updated, on the provided `DispatchQueue`. fileprivate var downloadProgressHandler: (handler: ProgressHandler, queue: DispatchQueue)? { - get { $mutableState.downloadProgressHandler } - set { $mutableState.downloadProgressHandler = newValue } + get { mutableState.downloadProgressHandler } + set { mutableState.downloadProgressHandler = newValue } } // MARK: Redirect Handling /// `RedirectHandler` set on the instance. public private(set) var redirectHandler: RedirectHandler? { - get { $mutableState.redirectHandler } - set { $mutableState.redirectHandler = newValue } + get { mutableState.redirectHandler } + set { mutableState.redirectHandler = newValue } } // MARK: Cached Response Handling /// `CachedResponseHandler` set on the instance. public private(set) var cachedResponseHandler: CachedResponseHandler? { - get { $mutableState.cachedResponseHandler } - set { $mutableState.cachedResponseHandler = newValue } + get { mutableState.cachedResponseHandler } + set { mutableState.cachedResponseHandler = newValue } } // MARK: URLCredential /// `URLCredential` used for authentication challenges. Created by calling one of the `authenticate` methods. public private(set) var credential: URLCredential? { - get { $mutableState.credential } - set { $mutableState.credential = newValue } + get { mutableState.credential } + set { mutableState.credential = newValue } } // MARK: Validators /// `Validator` callback closures that store the validation calls enqueued. - @Protected - fileprivate var validators: [() -> Void] = [] + fileprivate let validators = Protected<[() -> Void]>([]) // MARK: URLRequests /// All `URLRequests` created on behalf of the `Request`, including original and adapted requests. - public var requests: [URLRequest] { $mutableState.requests } + public var requests: [URLRequest] { mutableState.requests } /// First `URLRequest` created on behalf of the `Request`. May not be the first one actually executed. public var firstRequest: URLRequest? { requests.first } /// Last `URLRequest` created on behalf of the `Request`. @@ -205,7 +203,7 @@ public class Request { /// `URLRequest`s from all of the `URLSessionTask`s executed on behalf of the `Request`. May be different from /// `requests` due to `URLSession` manipulation. - public var performedRequests: [URLRequest] { $mutableState.read { $0.tasks.compactMap(\.currentRequest) } } + public var performedRequests: [URLRequest] { mutableState.read { $0.tasks.compactMap(\.currentRequest) } } // MARK: HTTPURLResponse @@ -216,10 +214,10 @@ public class Request { // MARK: Tasks /// All `URLSessionTask`s created on behalf of the `Request`. - public var tasks: [URLSessionTask] { $mutableState.tasks } + public var tasks: [URLSessionTask] { mutableState.tasks } /// First `URLSessionTask` created on behalf of the `Request`. public var firstTask: URLSessionTask? { tasks.first } - /// Last `URLSessionTask` crated on behalf of the `Request`. + /// Last `URLSessionTask` created on behalf of the `Request`. public var lastTask: URLSessionTask? { tasks.last } /// Current `URLSessionTask` created on behalf of the `Request`. public var task: URLSessionTask? { lastTask } @@ -227,7 +225,7 @@ public class Request { // MARK: Metrics /// All `URLSessionTaskMetrics` gathered on behalf of the `Request`. Should correspond to the `tasks` created. - public var allMetrics: [URLSessionTaskMetrics] { $mutableState.metrics } + public var allMetrics: [URLSessionTaskMetrics] { mutableState.metrics } /// First `URLSessionTaskMetrics` gathered on behalf of the `Request`. public var firstMetrics: URLSessionTaskMetrics? { allMetrics.first } /// Last `URLSessionTaskMetrics` gathered on behalf of the `Request`. @@ -238,14 +236,14 @@ public class Request { // MARK: Retry Count /// Number of times the `Request` has been retried. - public var retryCount: Int { $mutableState.retryCount } + public var retryCount: Int { mutableState.retryCount } // MARK: Error /// `Error` returned from Alamofire internally, from the network request directly, or any validators executed. public fileprivate(set) var error: AFError? { - get { $mutableState.error } - set { $mutableState.error = newValue } + get { mutableState.error } + set { mutableState.error = newValue } } /// Default initializer for the `Request` superclass. @@ -283,7 +281,7 @@ public class Request { func didCreateInitialURLRequest(_ request: URLRequest) { dispatchPrecondition(condition: .onQueue(underlyingQueue)) - $mutableState.write { $0.requests.append(request) } + mutableState.write { $0.requests.append(request) } eventMonitor?.request(self, didCreateInitialURLRequest: request) } @@ -313,7 +311,7 @@ public class Request { func didAdaptInitialRequest(_ initialRequest: URLRequest, to adaptedRequest: URLRequest) { dispatchPrecondition(condition: .onQueue(underlyingQueue)) - $mutableState.write { $0.requests.append(adaptedRequest) } + mutableState.write { $0.requests.append(adaptedRequest) } eventMonitor?.request(self, didAdaptInitialRequest: initialRequest, to: adaptedRequest) } @@ -343,7 +341,7 @@ public class Request { func didCreateURLRequest(_ request: URLRequest) { dispatchPrecondition(condition: .onQueue(underlyingQueue)) - $mutableState.read { state in + mutableState.read { state in state.urlRequestHandler?.queue.async { state.urlRequestHandler?.handler(request) } } @@ -354,7 +352,7 @@ public class Request { /// Asynchronously calls any stored `cURLHandler` and then removes it from `mutableState`. private func callCURLHandlerIfNecessary() { - $mutableState.write { mutableState in + mutableState.write { mutableState in guard let cURLHandler = mutableState.cURLHandler else { return } cURLHandler.queue.async { cURLHandler.handler(self.cURLDescription()) } @@ -369,7 +367,7 @@ public class Request { func didCreateTask(_ task: URLSessionTask) { dispatchPrecondition(condition: .onQueue(underlyingQueue)) - $mutableState.write { state in + mutableState.write { state in state.tasks.append(task) guard let urlSessionTaskHandler = state.urlSessionTaskHandler else { return } @@ -416,7 +414,9 @@ public class Request { func didCancel() { dispatchPrecondition(condition: .onQueue(underlyingQueue)) - error = error ?? AFError.explicitlyCancelled + mutableState.write { mutableState in + mutableState.error = mutableState.error ?? AFError.explicitlyCancelled + } eventMonitor?.requestDidCancel(self) } @@ -436,7 +436,7 @@ public class Request { func didGatherMetrics(_ metrics: URLSessionTaskMetrics) { dispatchPrecondition(condition: .onQueue(underlyingQueue)) - $mutableState.write { $0.metrics.append(metrics) } + mutableState.write { $0.metrics.append(metrics) } eventMonitor?.request(self, didGatherMetrics: metrics) } @@ -468,6 +468,7 @@ public class Request { self.error = self.error ?? error + let validators = validators.read { $0 } validators.forEach { $0() } eventMonitor?.request(self, didCompleteTask: task, with: error) @@ -479,7 +480,7 @@ public class Request { func prepareForRetry() { dispatchPrecondition(condition: .onQueue(underlyingQueue)) - $mutableState.write { $0.retryCount += 1 } + mutableState.write { $0.retryCount += 1 } reset() @@ -493,7 +494,7 @@ public class Request { func retryOrFinish(error: AFError?) { dispatchPrecondition(condition: .onQueue(underlyingQueue)) - guard let error = error, let delegate = delegate else { finish(); return } + guard !isCancelled, let error = error, let delegate = delegate else { finish(); return } delegate.retryResult(for: self, dueTo: error) { retryResult in switch retryResult { @@ -513,9 +514,9 @@ public class Request { func finish(error: AFError? = nil) { dispatchPrecondition(condition: .onQueue(underlyingQueue)) - guard !$mutableState.isFinishing else { return } + guard !mutableState.isFinishing else { return } - $mutableState.isFinishing = true + mutableState.isFinishing = true if let error = error { self.error = error } @@ -531,7 +532,7 @@ public class Request { /// /// - Parameter closure: The closure containing the response serialization call. func appendResponseSerializer(_ closure: @escaping () -> Void) { - $mutableState.write { mutableState in + mutableState.write { mutableState in mutableState.responseSerializers.append(closure) if mutableState.state == .finished { @@ -554,7 +555,7 @@ public class Request { func nextResponseSerializer() -> (() -> Void)? { var responseSerializer: (() -> Void)? - $mutableState.write { mutableState in + mutableState.write { mutableState in let responseSerializerIndex = mutableState.responseSerializerCompletions.count if responseSerializerIndex < mutableState.responseSerializers.count { @@ -571,7 +572,7 @@ public class Request { // Execute all response serializer completions and clear them var completions: [() -> Void] = [] - $mutableState.write { mutableState in + mutableState.write { mutableState in completions = mutableState.responseSerializerCompletions // Clear out all response serializers and response serializer completions in mutable state since the @@ -605,7 +606,7 @@ public class Request { /// - Parameter completion: The completion handler provided with the response serializer, called when all serializers /// are complete. func responseSerializerDidComplete(completion: @escaping () -> Void) { - $mutableState.write { $0.responseSerializerCompletions.append(completion) } + mutableState.write { $0.responseSerializerCompletions.append(completion) } processNextResponseSerializer() } @@ -618,7 +619,7 @@ public class Request { downloadProgress.totalUnitCount = 0 downloadProgress.completedUnitCount = 0 - $mutableState.write { state in + mutableState.write { state in state.isFinishing = false state.responseSerializerCompletions = [] } @@ -640,7 +641,7 @@ public class Request { /// /// - Parameter perform: The closure to perform. func withState(perform: (State) -> Void) { - $mutableState.withState(perform: perform) + mutableState.withState(perform: perform) } // MARK: Task Creation @@ -667,7 +668,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func cancel() -> Self { - $mutableState.write { mutableState in + mutableState.write { mutableState in guard mutableState.state.canTransitionTo(.cancelled) else { return } mutableState.state = .cancelled @@ -693,7 +694,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func suspend() -> Self { - $mutableState.write { mutableState in + mutableState.write { mutableState in guard mutableState.state.canTransitionTo(.suspended) else { return } mutableState.state = .suspended @@ -714,7 +715,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func resume() -> Self { - $mutableState.write { mutableState in + mutableState.write { mutableState in guard mutableState.state.canTransitionTo(.resumed) else { return } mutableState.state = .resumed @@ -754,7 +755,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func authenticate(with credential: URLCredential) -> Self { - $mutableState.credential = credential + mutableState.credential = credential return self } @@ -770,7 +771,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func downloadProgress(queue: DispatchQueue = .main, closure: @escaping ProgressHandler) -> Self { - $mutableState.downloadProgressHandler = (handler: closure, queue: queue) + mutableState.downloadProgressHandler = (handler: closure, queue: queue) return self } @@ -786,7 +787,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func uploadProgress(queue: DispatchQueue = .main, closure: @escaping ProgressHandler) -> Self { - $mutableState.uploadProgressHandler = (handler: closure, queue: queue) + mutableState.uploadProgressHandler = (handler: closure, queue: queue) return self } @@ -802,7 +803,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func redirect(using handler: RedirectHandler) -> Self { - $mutableState.write { mutableState in + mutableState.write { mutableState in precondition(mutableState.redirectHandler == nil, "Redirect handler has already been set.") mutableState.redirectHandler = handler } @@ -821,7 +822,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func cacheResponse(using handler: CachedResponseHandler) -> Self { - $mutableState.write { mutableState in + mutableState.write { mutableState in precondition(mutableState.cachedResponseHandler == nil, "Cached response handler has already been set.") mutableState.cachedResponseHandler = handler } @@ -842,7 +843,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func cURLDescription(on queue: DispatchQueue, calling handler: @escaping (String) -> Void) -> Self { - $mutableState.write { mutableState in + mutableState.write { mutableState in if mutableState.requests.last != nil { queue.async { handler(self.cURLDescription()) } } else { @@ -863,13 +864,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func cURLDescription(calling handler: @escaping (String) -> Void) -> Self { - $mutableState.write { mutableState in - if mutableState.requests.last != nil { - underlyingQueue.async { handler(self.cURLDescription()) } - } else { - mutableState.cURLHandler = (underlyingQueue, handler) - } - } + cURLDescription(on: underlyingQueue, calling: handler) return self } @@ -885,7 +880,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func onURLRequestCreation(on queue: DispatchQueue = .main, perform handler: @escaping (URLRequest) -> Void) -> Self { - $mutableState.write { state in + mutableState.write { state in if let request = state.requests.last { queue.async { handler(request) } } @@ -909,7 +904,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func onURLSessionTaskCreation(on queue: DispatchQueue = .main, perform handler: @escaping (URLSessionTask) -> Void) -> Self { - $mutableState.write { state in + mutableState.write { state in if let task = state.tasks.last { queue.async { handler(task) } } @@ -928,19 +923,37 @@ public class Request { func onFinish(perform finishHandler: @escaping () -> Void) { guard !isFinished else { finishHandler(); return } - $mutableState.write { state in + mutableState.write { state in state.finishHandlers.append(finishHandler) } } /// Final cleanup step executed when the instance finishes response serialization. func cleanup() { - delegate?.cleanup(after: self) - let handlers = $mutableState.finishHandlers + let handlers = mutableState.finishHandlers handlers.forEach { $0() } - $mutableState.write { state in + mutableState.write { state in state.finishHandlers.removeAll() } + + delegate?.cleanup(after: self) + } +} + +extension Request { + /// Type indicating how a `DataRequest` or `DataStreamRequest` should proceed after receiving an `HTTPURLResponse`. + public enum ResponseDisposition { + /// Allow the request to continue normally. + case allow + /// Cancel the request, similar to calling `cancel()`. + case cancel + + var sessionDisposition: URLSession.ResponseDisposition { + switch self { + case .allow: return .allow + case .cancel: return .cancel + } + } } } @@ -1085,11 +1098,16 @@ public class DataRequest: Request { /// `URLRequestConvertible` value used to create `URLRequest`s for this instance. public let convertible: URLRequestConvertible /// `Data` read from the server so far. - public var data: Data? { mutableData } + public var data: Data? { dataMutableState.data } + + private struct DataMutableState { + var data: Data? + var httpResponseHandler: (queue: DispatchQueue, + handler: (_ response: HTTPURLResponse, + _ completionHandler: @escaping (ResponseDisposition) -> Void) -> Void)? + } - /// Protected storage for the `Data` read by the instance. - @Protected - private var mutableData: Data? = nil + private let dataMutableState = Protected(DataMutableState()) /// Creates a `DataRequest` using the provided parameters. /// @@ -1122,7 +1140,9 @@ public class DataRequest: Request { override func reset() { super.reset() - mutableData = nil + dataMutableState.write { mutableState in + mutableState.data = nil + } } /// Called when `Data` is received by this instance. @@ -1131,15 +1151,41 @@ public class DataRequest: Request { /// /// - Parameter data: The `Data` received. func didReceive(data: Data) { - if self.data == nil { - mutableData = data - } else { - $mutableData.write { $0?.append(data) } + dataMutableState.write { mutableState in + if mutableState.data == nil { + mutableState.data = data + } else { + mutableState.data?.append(data) + } } updateDownloadProgress() } + func didReceiveResponse(_ response: HTTPURLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) { + dataMutableState.read { dataMutableState in + guard let httpResponseHandler = dataMutableState.httpResponseHandler else { + underlyingQueue.async { completionHandler(.allow) } + return + } + + httpResponseHandler.queue.async { + httpResponseHandler.handler(response) { disposition in + if disposition == .cancel { + self.mutableState.write { mutableState in + mutableState.state = .cancelled + mutableState.error = mutableState.error ?? AFError.explicitlyCancelled + } + } + + self.underlyingQueue.async { + completionHandler(disposition.sessionDisposition) + } + } + } + } + } + override func task(for request: URLRequest, using session: URLSession) -> URLSessionTask { let copiedRequest = request return session.dataTask(with: copiedRequest) @@ -1166,20 +1212,61 @@ public class DataRequest: Request { @discardableResult public func validate(_ validation: @escaping Validation) -> Self { let validator: () -> Void = { [unowned self] in - guard self.error == nil, let response = self.response else { return } + guard error == nil, let response = response else { return } - let result = validation(self.request, response, self.data) + let result = validation(request, response, data) if case let .failure(error) = result { self.error = error.asAFError(or: .responseValidationFailed(reason: .customValidationFailed(error: error))) } - self.eventMonitor?.request(self, - didValidateRequest: self.request, - response: response, - data: self.data, - withResult: result) + eventMonitor?.request(self, + didValidateRequest: request, + response: response, + data: data, + withResult: result) } - $validators.write { $0.append(validator) } + validators.write { $0.append(validator) } + + return self + } + + /// Sets a closure called whenever the `DataRequest` produces an `HTTPURLResponse` and providing a completion + /// handler to return a `ResponseDisposition` value. + /// + /// - Parameters: + /// - queue: `DispatchQueue` on which the closure will be called. `.main` by default. + /// - handler: Closure called when the instance produces an `HTTPURLResponse`. The `completionHandler` provided + /// MUST be called, otherwise the request will never complete. + /// + /// - Returns: The instance. + @_disfavoredOverload + @discardableResult + public func onHTTPResponse( + on queue: DispatchQueue = .main, + perform handler: @escaping (_ response: HTTPURLResponse, + _ completionHandler: @escaping (ResponseDisposition) -> Void) -> Void + ) -> Self { + dataMutableState.write { mutableState in + mutableState.httpResponseHandler = (queue, handler) + } + + return self + } + + /// Sets a closure called whenever the `DataRequest` produces an `HTTPURLResponse`. + /// + /// - Parameters: + /// - queue: `DispatchQueue` on which the closure will be called. `.main` by default. + /// - handler: Closure called when the instance produces an `HTTPURLResponse`. + /// + /// - Returns: The instance. + @discardableResult + public func onHTTPResponse(on queue: DispatchQueue = .main, + perform handler: @escaping (HTTPURLResponse) -> Void) -> Self { + onHTTPResponse(on: queue) { response, completionHandler in + handler(response) + completionHandler(.allow) + } return self } @@ -1259,10 +1346,13 @@ public final class DataStreamRequest: Request { var numberOfExecutingStreams = 0 /// Completion calls enqueued while streams are still executing. var enqueuedCompletionEvents: [() -> Void] = [] + /// Handler for any `HTTPURLResponse`s received. + var httpResponseHandler: (queue: DispatchQueue, + handler: (_ response: HTTPURLResponse, + _ completionHandler: @escaping (ResponseDisposition) -> Void) -> Void)? } - @Protected - var streamMutableState = StreamMutableState() + let streamMutableState = Protected(StreamMutableState()) /// Creates a `DataStreamRequest` using the provided parameters. /// @@ -1306,7 +1396,7 @@ public final class DataStreamRequest: Request { } override func finish(error: AFError? = nil) { - $streamMutableState.write { state in + streamMutableState.write { state in state.outputStream?.close() } @@ -1314,8 +1404,8 @@ public final class DataStreamRequest: Request { } func didReceive(data: Data) { - $streamMutableState.write { state in - #if !(os(Linux) || os(Windows)) + streamMutableState.write { state in + #if !canImport(FoundationNetworking) // If we not using swift-corelibs-foundation. if let stream = state.outputStream { underlyingQueue.async { var bytes = Array(data) @@ -1329,6 +1419,30 @@ public final class DataStreamRequest: Request { } } + func didReceiveResponse(_ response: HTTPURLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) { + streamMutableState.read { dataMutableState in + guard let httpResponseHandler = dataMutableState.httpResponseHandler else { + underlyingQueue.async { completionHandler(.allow) } + return + } + + httpResponseHandler.queue.async { + httpResponseHandler.handler(response) { disposition in + if disposition == .cancel { + self.mutableState.write { mutableState in + mutableState.state = .cancelled + mutableState.error = mutableState.error ?? AFError.explicitlyCancelled + } + } + + self.underlyingQueue.async { + completionHandler(disposition.sessionDisposition) + } + } + } + } + } + /// Validates the `URLRequest` and `HTTPURLResponse` received for the instance using the provided `Validation` closure. /// /// - Parameter validation: `Validation` closure used to validate the request and response. @@ -1337,26 +1451,26 @@ public final class DataStreamRequest: Request { @discardableResult public func validate(_ validation: @escaping Validation) -> Self { let validator: () -> Void = { [unowned self] in - guard self.error == nil, let response = self.response else { return } + guard error == nil, let response = response else { return } - let result = validation(self.request, response) + let result = validation(request, response) if case let .failure(error) = result { self.error = error.asAFError(or: .responseValidationFailed(reason: .customValidationFailed(error: error))) } - self.eventMonitor?.request(self, - didValidateRequest: self.request, - response: response, - withResult: result) + eventMonitor?.request(self, + didValidateRequest: request, + response: response, + withResult: result) } - $validators.write { $0.append(validator) } + validators.write { $0.append(validator) } return self } - #if !(os(Linux) || os(Windows)) + #if !canImport(FoundationNetworking) // If we not using swift-corelibs-foundation. /// Produces an `InputStream` that receives the `Data` received by the instance. /// /// - Note: The `InputStream` produced by this method must have `open()` called before being able to read `Data`. @@ -1370,7 +1484,7 @@ public final class DataStreamRequest: Request { defer { resume() } var inputStream: InputStream? - $streamMutableState.write { state in + streamMutableState.write { state in Foundation.Stream.getBoundStreams(withBufferSize: bufferSize, inputStream: &inputStream, outputStream: &state.outputStream) @@ -1381,6 +1495,47 @@ public final class DataStreamRequest: Request { } #endif + /// Sets a closure called whenever the `DataRequest` produces an `HTTPURLResponse` and providing a completion + /// handler to return a `ResponseDisposition` value. + /// + /// - Parameters: + /// - queue: `DispatchQueue` on which the closure will be called. `.main` by default. + /// - handler: Closure called when the instance produces an `HTTPURLResponse`. The `completionHandler` provided + /// MUST be called, otherwise the request will never complete. + /// + /// - Returns: The instance. + @_disfavoredOverload + @discardableResult + public func onHTTPResponse( + on queue: DispatchQueue = .main, + perform handler: @escaping (_ response: HTTPURLResponse, + _ completionHandler: @escaping (ResponseDisposition) -> Void) -> Void + ) -> Self { + streamMutableState.write { mutableState in + mutableState.httpResponseHandler = (queue, handler) + } + + return self + } + + /// Sets a closure called whenever the `DataRequest` produces an `HTTPURLResponse`. + /// + /// - Parameters: + /// - queue: `DispatchQueue` on which the closure will be called. `.main` by default. + /// - handler: Closure called when the instance produces an `HTTPURLResponse`. + /// + /// - Returns: The instance. + @discardableResult + public func onHTTPResponse(on queue: DispatchQueue = .main, + perform handler: @escaping (HTTPURLResponse) -> Void) -> Self { + onHTTPResponse(on: queue) { response, completionHandler in + handler(response) + completionHandler(.allow) + } + + return self + } + func capturingError(from closure: () throws -> Void) { do { try closure() @@ -1395,7 +1550,7 @@ public final class DataStreamRequest: Request { appendResponseSerializer { self.underlyingQueue.async { self.responseSerializerDidComplete { - self.$streamMutableState.write { state in + self.streamMutableState.write { state in guard state.numberOfExecutingStreams == 0 else { state.enqueuedCompletionEvents.append { self.enqueueCompletion(on: queue, stream: stream) @@ -1546,23 +1701,22 @@ public class DownloadRequest: Request { } /// Protected mutable state specific to `DownloadRequest`. - @Protected - private var mutableDownloadState = DownloadRequestMutableState() + private let mutableDownloadState = Protected(DownloadRequestMutableState()) /// If the download is resumable and is eventually cancelled or fails, this value may be used to resume the download /// using the `download(resumingWith data:)` API. /// /// - Note: For more information about `resumeData`, see [Apple's documentation](https://developer.apple.com/documentation/foundation/urlsessiondownloadtask/1411634-cancel). public var resumeData: Data? { - #if !(os(Linux) || os(Windows)) - return $mutableDownloadState.resumeData ?? error?.downloadResumeData + #if !canImport(FoundationNetworking) // If we not using swift-corelibs-foundation. + return mutableDownloadState.resumeData ?? error?.downloadResumeData #else - return $mutableDownloadState.resumeData + return mutableDownloadState.resumeData #endif } /// If the download is successful, the `URL` where the file was downloaded. - public var fileURL: URL? { $mutableDownloadState.fileURL } + public var fileURL: URL? { mutableDownloadState.fileURL } // MARK: Initial State @@ -1605,7 +1759,7 @@ public class DownloadRequest: Request { override func reset() { super.reset() - $mutableDownloadState.write { + mutableDownloadState.write { $0.resumeData = nil $0.fileURL = nil } @@ -1620,7 +1774,7 @@ public class DownloadRequest: Request { eventMonitor?.request(self, didFinishDownloadingUsing: task, with: result) switch result { - case let .success(url): $mutableDownloadState.fileURL = url + case let .success(url): mutableDownloadState.fileURL = url case let .failure(error): self.error = error } } @@ -1698,7 +1852,7 @@ public class DownloadRequest: Request { /// /// - Returns: The instance. private func cancel(optionallyProducingResumeData completionHandler: ((_ resumeData: Data?) -> Void)?) -> Self { - $mutableState.write { mutableState in + mutableState.write { mutableState in guard mutableState.state.canTransitionTo(.cancelled) else { return } mutableState.state = .cancelled @@ -1714,7 +1868,7 @@ public class DownloadRequest: Request { // Resume to ensure metrics are gathered. task.resume() task.cancel { resumeData in - self.$mutableDownloadState.resumeData = resumeData + self.mutableDownloadState.resumeData = resumeData self.underlyingQueue.async { self.didCancelTask(task) } completionHandler(resumeData) } @@ -1739,22 +1893,22 @@ public class DownloadRequest: Request { @discardableResult public func validate(_ validation: @escaping Validation) -> Self { let validator: () -> Void = { [unowned self] in - guard self.error == nil, let response = self.response else { return } + guard error == nil, let response = response else { return } - let result = validation(self.request, response, self.fileURL) + let result = validation(request, response, fileURL) if case let .failure(error) = result { self.error = error.asAFError(or: .responseValidationFailed(reason: .customValidationFailed(error: error))) } - self.eventMonitor?.request(self, - didValidateRequest: self.request, - response: response, - fileURL: self.fileURL, - withResult: result) + eventMonitor?.request(self, + didValidateRequest: request, + response: response, + fileURL: fileURL, + withResult: result) } - $validators.write { $0.append(validator) } + validators.write { $0.append(validator) } return self } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestCompression.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestCompression.swift new file mode 100644 index 000000000..c543e06e0 --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestCompression.swift @@ -0,0 +1,153 @@ +// +// RequestCompression.swift +// +// Copyright (c) 2023 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#if canImport(zlib) +import Foundation +import zlib + +/// `RequestAdapter` which compresses outgoing `URLRequest` bodies using the `deflate` `Content-Encoding` and adds the +/// appropriate header. +/// +/// - Note: Most requests to most APIs are small and so would only be slowed down by applying this adapter. Measure the +/// size of your request bodies and the performance impact of using this adapter before use. Using this adapter +/// with already compressed data, such as images, will, at best, have no effect. Additionally, body compression +/// is a synchronous operation, so measuring the performance impact may be important to determine whether you +/// want to use a dedicated `requestQueue` in your `Session` instance. Finally, not all servers support request +/// compression, so test with all of your server configurations before deploying. +@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +public struct DeflateRequestCompressor: RequestInterceptor { + /// Type that determines the action taken when the `URLRequest` already has a `Content-Encoding` header. + public enum DuplicateHeaderBehavior { + /// Throws a `DuplicateHeaderError`. The default. + case error + /// Replaces the existing header value with `deflate`. + case replace + /// Silently skips compression when the header exists. + case skip + } + + /// `Error` produced when the outgoing `URLRequest` already has a `Content-Encoding` header, when the instance has + /// been configured to produce an error. + public struct DuplicateHeaderError: Error {} + + /// Behavior to use when the outgoing `URLRequest` already has a `Content-Encoding` header. + public let duplicateHeaderBehavior: DuplicateHeaderBehavior + /// Closure which determines whether the outgoing body data should be compressed. + public let shouldCompressBodyData: (_ bodyData: Data) -> Bool + + /// Creates an instance with the provided parameters. + /// + /// - Parameters: + /// - duplicateHeaderBehavior: `DuplicateHeaderBehavior` to use. `.error` by default. + /// - shouldCompressBodyData: Closure which determines whether the outgoing body data should be compressed. `true` by default. + public init(duplicateHeaderBehavior: DuplicateHeaderBehavior = .error, + shouldCompressBodyData: @escaping (_ bodyData: Data) -> Bool = { _ in true }) { + self.duplicateHeaderBehavior = duplicateHeaderBehavior + self.shouldCompressBodyData = shouldCompressBodyData + } + + public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + // No need to compress unless we have body data. No support for compressing streams. + guard let bodyData = urlRequest.httpBody else { + completion(.success(urlRequest)) + return + } + + guard shouldCompressBodyData(bodyData) else { + completion(.success(urlRequest)) + return + } + + if urlRequest.headers.value(for: "Content-Encoding") != nil { + switch duplicateHeaderBehavior { + case .error: + completion(.failure(DuplicateHeaderError())) + return + case .replace: + // Header will be replaced once the body data is compressed. + break + case .skip: + completion(.success(urlRequest)) + return + } + } + + var compressedRequest = urlRequest + + do { + compressedRequest.httpBody = try deflate(bodyData) + compressedRequest.headers.update(.contentEncoding("deflate")) + completion(.success(compressedRequest)) + } catch { + completion(.failure(error)) + } + } + + func deflate(_ data: Data) throws -> Data { + var output = Data([0x78, 0x5E]) // Header + try output.append((data as NSData).compressed(using: .zlib) as Data) + var checksum = adler32Checksum(of: data).bigEndian + output.append(Data(bytes: &checksum, count: MemoryLayout.size)) + + return output + } + + func adler32Checksum(of data: Data) -> UInt32 { + #if swift(>=5.6) + data.withUnsafeBytes { buffer in + UInt32(adler32(1, buffer.baseAddress, UInt32(buffer.count))) + } + #else + data.withUnsafeBytes { buffer in + let buffer = buffer.bindMemory(to: UInt8.self) + return UInt32(adler32(1, buffer.baseAddress, UInt32(buffer.count))) + } + #endif + } +} + +@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +extension RequestInterceptor where Self == DeflateRequestCompressor { + /// Create a `DeflateRequestCompressor` with default `duplicateHeaderBehavior` and `shouldCompressBodyData` values. + public static var deflateCompressor: DeflateRequestCompressor { + DeflateRequestCompressor() + } + + /// Creates a `DeflateRequestCompressor` with the provided `DuplicateHeaderBehavior` and `shouldCompressBodyData` + /// closure. + /// + /// - Parameters: + /// - duplicateHeaderBehavior: `DuplicateHeaderBehavior` to use. + /// - shouldCompressBodyData: Closure which determines whether the outgoing body data should be compressed. `true` by default. + /// + /// - Returns: The `DeflateRequestCompressor`. + public static func deflateCompressor( + duplicateHeaderBehavior: DeflateRequestCompressor.DuplicateHeaderBehavior = .error, + shouldCompressBodyData: @escaping (_ bodyData: Data) -> Bool = { _ in true } + ) -> DeflateRequestCompressor { + DeflateRequestCompressor(duplicateHeaderBehavior: duplicateHeaderBehavior, + shouldCompressBodyData: shouldCompressBodyData) + } +} +#endif diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestInterceptor.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestInterceptor.swift index 7ed39a5cb..9acd98602 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestInterceptor.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestInterceptor.swift @@ -157,7 +157,6 @@ open class Adapter: RequestInterceptor { } } -#if swift(>=5.5) extension RequestAdapter where Self == Adapter { /// Creates an `Adapter` using the provided `AdaptHandler` closure. /// @@ -167,7 +166,6 @@ extension RequestAdapter where Self == Adapter { Adapter(closure) } } -#endif // MARK: - @@ -190,7 +188,6 @@ open class Retrier: RequestInterceptor { } } -#if swift(>=5.5) extension RequestRetrier where Self == Retrier { /// Creates a `Retrier` using the provided `RetryHandler` closure. /// @@ -200,7 +197,6 @@ extension RequestRetrier where Self == Retrier { Retrier(closure) } } -#endif // MARK: - @@ -320,7 +316,6 @@ open class Interceptor: RequestInterceptor { } } -#if swift(>=5.5) extension RequestInterceptor where Self == Interceptor { /// Creates an `Interceptor` using the provided `AdaptHandler` and `RetryHandler` closures. /// @@ -354,4 +349,3 @@ extension RequestInterceptor where Self == Interceptor { Interceptor(adapters: adapters, retriers: retriers, interceptors: interceptors) } } -#endif diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestTaskMap.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestTaskMap.swift index 85b58f377..99558759f 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestTaskMap.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RequestTaskMap.swift @@ -131,7 +131,7 @@ struct RequestTaskMap { switch (events.completed, events.metricsGathered) { case (true, _): fatalError("RequestTaskMap consistency error: duplicate completionReceivedForTask call.") - #if os(Linux) // Linux doesn't gather metrics, so unconditionally remove the reference and return true. + #if os(Linux) || os(Android) // Linux doesn't gather metrics, so unconditionally remove the reference and return true. default: self[task] = nil; return true #else case (false, false): diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ResponseSerialization.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ResponseSerialization.swift index 3f1b1e663..2022ac084 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ResponseSerialization.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ResponseSerialization.swift @@ -95,7 +95,6 @@ public struct GoogleXSSIPreprocessor: DataPreprocessor { } } -#if swift(>=5.5) extension DataPreprocessor where Self == PassthroughPreprocessor { /// Provides a `PassthroughPreprocessor` instance. public static var passthrough: PassthroughPreprocessor { PassthroughPreprocessor() } @@ -105,7 +104,6 @@ extension DataPreprocessor where Self == GoogleXSSIPreprocessor { /// Provides a `GoogleXSSIPreprocessor` instance. public static var googleXSSI: GoogleXSSIPreprocessor { GoogleXSSIPreprocessor() } } -#endif extension ResponseSerializer { /// Default `DataPreprocessor`. `PassthroughPreprocessor` by default. @@ -240,7 +238,7 @@ extension DataRequest { self.eventMonitor?.request(self, didParseResponse: response) - guard let serializerError = result.failure, let delegate = self.delegate else { + guard !self.isCancelled, let serializerError = result.failure, let delegate = self.delegate else { self.responseSerializerDidComplete { queue.async { completionHandler(response) } } return } @@ -475,12 +473,10 @@ public struct URLResponseSerializer: DownloadResponseSerializerProtocol { } } -#if swift(>=5.5) extension DownloadResponseSerializerProtocol where Self == URLResponseSerializer { /// Provides a `URLResponseSerializer` instance. public static var url: URLResponseSerializer { URLResponseSerializer() } } -#endif extension DownloadRequest { /// Adds a handler using a `URLResponseSerializer` to be called once the request is finished. @@ -538,7 +534,6 @@ public final class DataResponseSerializer: ResponseSerializer { } } -#if swift(>=5.5) extension ResponseSerializer where Self == DataResponseSerializer { /// Provides a default `DataResponseSerializer` instance. public static var data: DataResponseSerializer { DataResponseSerializer() } @@ -559,7 +554,6 @@ extension ResponseSerializer where Self == DataResponseSerializer { emptyRequestMethods: emptyRequestMethods) } } -#endif extension DataRequest { /// Adds a handler using a `DataResponseSerializer` to be called once the request has finished. @@ -672,7 +666,6 @@ public final class StringResponseSerializer: ResponseSerializer { } } -#if swift(>=5.5) extension ResponseSerializer where Self == StringResponseSerializer { /// Provides a default `StringResponseSerializer` instance. public static var string: StringResponseSerializer { StringResponseSerializer() } @@ -697,7 +690,6 @@ extension ResponseSerializer where Self == StringResponseSerializer { emptyRequestMethods: emptyRequestMethods) } } -#endif extension DataRequest { /// Adds a handler using a `StringResponseSerializer` to be called once the request has finished. @@ -971,7 +963,6 @@ public final class DecodableResponseSerializer: ResponseSerializer } } -#if swift(>=5.5) extension ResponseSerializer { /// Creates a `DecodableResponseSerializer` using the values provided. /// @@ -994,7 +985,6 @@ extension ResponseSerializer { emptyRequestMethods: emptyRequestMethods) } } -#endif extension DataRequest { /// Adds a handler using a `DecodableResponseSerializer` to be called once the request has finished. @@ -1118,7 +1108,6 @@ public struct StringStreamSerializer: DataStreamSerializer { } } -#if swift(>=5.5) extension DataStreamSerializer { /// Creates a `DecodableStreamSerializer` instance with the provided `DataDecoder` and `DataPreprocessor`. /// @@ -1143,7 +1132,6 @@ extension DataStreamSerializer where Self == StringStreamSerializer { /// Provides a `StringStreamSerializer` instance. public static var string: StringStreamSerializer { StringStreamSerializer() } } -#endif extension DataStreamRequest { /// Adds a `StreamHandler` which performs no parsing on incoming `Data`. @@ -1165,7 +1153,7 @@ extension DataStreamRequest { } } - $streamMutableState.write { $0.streams.append(parser) } + streamMutableState.write { $0.streams.append(parser) } appendStreamCompletion(on: queue, stream: stream) return self @@ -1184,7 +1172,7 @@ extension DataStreamRequest { on queue: DispatchQueue = .main, stream: @escaping Handler) -> Self { let parser = { [unowned self] (data: Data) in - self.serializationQueue.async { + serializationQueue.async { // Start work on serialization queue. let result = Result { try serializer.serialize(data) } .mapError { $0.asAFError(or: .responseSerializationFailed(reason: .customSerializationFailed(error: $0))) } @@ -1207,7 +1195,7 @@ extension DataStreamRequest { } } - $streamMutableState.write { $0.streams.append(parser) } + streamMutableState.write { $0.streams.append(parser) } appendStreamCompletion(on: queue, stream: stream) return self @@ -1224,7 +1212,7 @@ extension DataStreamRequest { public func responseStreamString(on queue: DispatchQueue = .main, stream: @escaping Handler) -> Self { let parser = { [unowned self] (data: Data) in - self.serializationQueue.async { + serializationQueue.async { // Start work on serialization queue. let string = String(decoding: data, as: UTF8.self) // End work on serialization queue. @@ -1242,14 +1230,14 @@ extension DataStreamRequest { } } - $streamMutableState.write { $0.streams.append(parser) } + streamMutableState.write { $0.streams.append(parser) } appendStreamCompletion(on: queue, stream: stream) return self } private func updateAndCompleteIfPossible() { - $streamMutableState.write { state in + streamMutableState.write { state in state.numberOfExecutingStreams -= 1 guard state.numberOfExecutingStreams == 0, !state.enqueuedCompletionEvents.isEmpty else { return } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RetryPolicy.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RetryPolicy.swift index f6fd8d339..bb52c6c0e 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RetryPolicy.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/RetryPolicy.swift @@ -56,7 +56,7 @@ open class RetryPolicy: RequestInterceptor { ] /// The default URL error codes to retry. - public static let defaultRetryableURLErrorCodes: Set = [// [Security] App Transport Security disallowed a connection because there is no secure network connection. + public static let defaultRetryableURLErrorCodes: Set = [ // [Security] App Transport Security disallowed a connection because there is no secure network connection. // - [Disabled] ATS settings do not change at runtime. // .appTransportSecurityRequiresSecureConnection, @@ -339,7 +339,6 @@ open class RetryPolicy: RequestInterceptor { } } -#if swift(>=5.5) extension RequestInterceptor where Self == RetryPolicy { /// Provides a default `RetryPolicy` instance. public static var retryPolicy: RetryPolicy { RetryPolicy() } @@ -372,7 +371,6 @@ extension RequestInterceptor where Self == RetryPolicy { retryableURLErrorCodes: retryableURLErrorCodes) } } -#endif // MARK: - @@ -404,7 +402,6 @@ open class ConnectionLostRetryPolicy: RetryPolicy { } } -#if swift(>=5.5) extension RequestInterceptor where Self == ConnectionLostRetryPolicy { /// Provides a default `ConnectionLostRetryPolicy` instance. public static var connectionLostRetryPolicy: ConnectionLostRetryPolicy { ConnectionLostRetryPolicy() } @@ -431,4 +428,3 @@ extension RequestInterceptor where Self == ConnectionLostRetryPolicy { retryableHTTPMethods: retryableHTTPMethods) } } -#endif diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ServerTrustEvaluation.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ServerTrustEvaluation.swift index c1cf15f1e..e490ab4d8 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ServerTrustEvaluation.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/ServerTrustEvaluation.swift @@ -1,5 +1,5 @@ // -// ServerTrustPolicy.swift +// ServerTrustEvaluation.swift // // Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) // @@ -48,7 +48,7 @@ open class ServerTrustManager { self.evaluators = evaluators } - #if !(os(Linux) || os(Windows)) + #if canImport(Security) /// Returns the `ServerTrustEvaluating` value for the given host, if one is set. /// /// By default, this method will return the policy that perfectly matches the given host. Subclasses could override @@ -75,8 +75,8 @@ open class ServerTrustManager { /// A protocol describing the API used to evaluate server trusts. public protocol ServerTrustEvaluating { - #if os(Linux) || os(Windows) - // Implement this once Linux/Windows has API for evaluating server trusts. + #if !canImport(Security) + // Implement this once other platforms have API for evaluating server trusts. #else /// Evaluates the given `SecTrust` value for the given `host`. /// @@ -91,7 +91,7 @@ public protocol ServerTrustEvaluating { // MARK: - Server Trust Evaluators -#if !(os(Linux) || os(Windows)) +#if canImport(Security) /// An evaluator which uses the default server trust evaluation while allowing you to control whether to validate the /// host provided by the challenge. Applications are encouraged to always validate the host in production environments /// to guarantee the validity of the server's certificate chain. @@ -181,6 +181,15 @@ public final class RevocationTrustEvaluator: ServerTrustEvaluating { try trust.af.performValidation(forHost: host) } + #if swift(>=5.9) + if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, visionOS 1, *) { + try trust.af.evaluate(afterApplying: SecPolicy.af.revocation(options: options)) + } else { + try trust.af.validate(policy: SecPolicy.af.revocation(options: options)) { status, result in + AFError.serverTrustEvaluationFailed(reason: .revocationCheckFailed(output: .init(host, trust, status, result), options: options)) + } + } + #else if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, *) { try trust.af.evaluate(afterApplying: SecPolicy.af.revocation(options: options)) } else { @@ -188,10 +197,10 @@ public final class RevocationTrustEvaluator: ServerTrustEvaluating { AFError.serverTrustEvaluationFailed(reason: .revocationCheckFailed(output: .init(host, trust, status, result), options: options)) } } + #endif } } -#if swift(>=5.5) extension ServerTrustEvaluating where Self == RevocationTrustEvaluator { /// Provides a default `RevocationTrustEvaluator` instance. public static var revocationChecking: RevocationTrustEvaluator { RevocationTrustEvaluator() } @@ -218,7 +227,6 @@ extension ServerTrustEvaluating where Self == RevocationTrustEvaluator { options: options) } } -#endif /// Uses the pinned certificates to validate the server trust. The server trust is considered valid if one of the pinned /// certificates match one of the server certificates. By validating both the certificate chain and host, certificate @@ -283,7 +291,6 @@ public final class PinnedCertificatesTrustEvaluator: ServerTrustEvaluating { } } -#if swift(>=5.5) extension ServerTrustEvaluating where Self == PinnedCertificatesTrustEvaluator { /// Provides a default `PinnedCertificatesTrustEvaluator` instance. public static var pinnedCertificates: PinnedCertificatesTrustEvaluator { PinnedCertificatesTrustEvaluator() } @@ -311,7 +318,6 @@ extension ServerTrustEvaluating where Self == PinnedCertificatesTrustEvaluator { validateHost: validateHost) } } -#endif /// Uses the pinned public keys to validate the server trust. The server trust is considered valid if one of the pinned /// public keys match one of the server certificate public keys. By validating both the certificate chain and host, @@ -359,10 +365,8 @@ public final class PublicKeysTrustEvaluator: ServerTrustEvaluating { let pinnedKeysInServerKeys: Bool = { for serverPublicKey in trust.af.publicKeys { - for pinnedPublicKey in keys { - if serverPublicKey == pinnedPublicKey { - return true - } + if keys.contains(serverPublicKey) { + return true } } return false @@ -377,7 +381,6 @@ public final class PublicKeysTrustEvaluator: ServerTrustEvaluating { } } -#if swift(>=5.5) extension ServerTrustEvaluating where Self == PublicKeysTrustEvaluator { /// Provides a default `PublicKeysTrustEvaluator` instance. public static var publicKeys: PublicKeysTrustEvaluator { PublicKeysTrustEvaluator() } @@ -401,7 +404,6 @@ extension ServerTrustEvaluating where Self == PublicKeysTrustEvaluator { PublicKeysTrustEvaluator(keys: keys, performDefaultValidation: performDefaultValidation, validateHost: validateHost) } } -#endif /// Uses the provided evaluators to validate the server trust. The trust is only considered valid if all of the /// evaluators consider it valid. @@ -420,7 +422,6 @@ public final class CompositeTrustEvaluator: ServerTrustEvaluating { } } -#if swift(>=5.5) extension ServerTrustEvaluating where Self == CompositeTrustEvaluator { /// Creates a `CompositeTrustEvaluator` from the provided evaluators. /// @@ -429,7 +430,6 @@ extension ServerTrustEvaluating where Self == CompositeTrustEvaluator { CompositeTrustEvaluator(evaluators: evaluators) } } -#endif /// Disables all evaluation which in turn will always consider any server trust as valid. /// @@ -457,7 +457,7 @@ public final class DisabledTrustEvaluator: ServerTrustEvaluating { // MARK: - Extensions extension Array where Element == ServerTrustEvaluating { - #if os(Linux) || os(Windows) + #if os(Linux) || os(Windows) || os(Android) // Add this same convenience method for Linux/Windows. #else /// Evaluates the given `SecTrust` value for the given `host`. @@ -604,9 +604,17 @@ extension AlamofireExtension where ExtendedType == SecTrust { certificates.af.publicKeys } - #if swift(>=5.5.1) // Xcode 13.1 / 2021 SDKs. /// The `SecCertificate`s contained in `self`. public var certificates: [SecCertificate] { + #if swift(>=5.9) + if #available(iOS 15, macOS 12, tvOS 15, watchOS 8, visionOS 1, *) { + return (SecTrustCopyCertificateChain(type) as? [SecCertificate]) ?? [] + } else { + return (0..=5.5.1) // Xcode 13.1 / 2021 SDKs. if #available(iOS 15, macOS 12, tvOS 15, watchOS 8, *) { return (SecTrustCopyCertificateChain(type) as? [SecCertificate]) ?? [] } else { @@ -614,15 +622,12 @@ extension AlamofireExtension where ExtendedType == SecTrust { SecTrustGetCertificateAtIndex(type, index) } } - } - #else - /// The `SecCertificate`s contained in `self`. - public var certificates: [SecCertificate] { + #else (0..=5.9) + if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, visionOS 1, *) { + try evaluate(afterApplying: SecPolicy.af.default) + } else { + try validate(policy: SecPolicy.af.default) { status, result in + AFError.serverTrustEvaluationFailed(reason: .defaultEvaluationFailed(output: .init(host, type, status, result))) + } + } + #else if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, *) { try evaluate(afterApplying: SecPolicy.af.default) } else { @@ -641,6 +655,7 @@ extension AlamofireExtension where ExtendedType == SecTrust { AFError.serverTrustEvaluationFailed(reason: .defaultEvaluationFailed(output: .init(host, type, status, result))) } } + #endif } /// Validates `self` after applying `SecPolicy.af.hostname(host)`, which performs the default validation as well as @@ -649,6 +664,15 @@ extension AlamofireExtension where ExtendedType == SecTrust { /// - Parameter host: The hostname to use in the validation. /// - Throws: An `AFError.serverTrustEvaluationFailed` instance with a `.defaultEvaluationFailed` reason. public func performValidation(forHost host: String) throws { + #if swift(>=5.9) + if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, visionOS 1, *) { + try evaluate(afterApplying: SecPolicy.af.hostname(host)) + } else { + try validate(policy: SecPolicy.af.hostname(host)) { status, result in + AFError.serverTrustEvaluationFailed(reason: .hostValidationFailed(output: .init(host, type, status, result))) + } + } + #else if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, *) { try evaluate(afterApplying: SecPolicy.af.hostname(host)) } else { @@ -656,6 +680,7 @@ extension AlamofireExtension where ExtendedType == SecTrust { AFError.serverTrustEvaluationFailed(reason: .hostValidationFailed(output: .init(host, type, status, result))) } } + #endif } } @@ -715,11 +740,19 @@ extension AlamofireExtension where ExtendedType == SecCertificate { guard let createdTrust = trust, trustCreationStatus == errSecSuccess else { return nil } + #if swift(>=5.9) + if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, visionOS 1, *) { + return SecTrustCopyKey(createdTrust) + } else { + return SecTrustCopyPublicKey(createdTrust) + } + #else if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, *) { return SecTrustCopyKey(createdTrust) } else { return SecTrustCopyPublicKey(createdTrust) } + #endif } } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/SessionDelegate.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/SessionDelegate.swift index a794d83d0..af45b27ca 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/SessionDelegate.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/SessionDelegate.swift @@ -94,7 +94,7 @@ extension SessionDelegate: URLSessionTaskDelegate { case NSURLAuthenticationMethodHTTPBasic, NSURLAuthenticationMethodHTTPDigest, NSURLAuthenticationMethodNTLM, NSURLAuthenticationMethodNegotiate: evaluation = attemptCredentialAuthentication(for: challenge, belongingTo: task) - #if !(os(Linux) || os(Windows)) + #if canImport(Security) case NSURLAuthenticationMethodServerTrust: evaluation = attemptServerTrustAuthentication(with: challenge) case NSURLAuthenticationMethodClientCertificate: @@ -111,7 +111,7 @@ extension SessionDelegate: URLSessionTaskDelegate { completionHandler(evaluation.disposition, evaluation.credential) } - #if !(os(Linux) || os(Windows)) + #if canImport(Security) /// Evaluates the server trust `URLAuthenticationChallenge` received. /// /// - Parameter challenge: The `URLAuthenticationChallenge`. @@ -230,6 +230,25 @@ extension SessionDelegate: URLSessionTaskDelegate { // MARK: URLSessionDataDelegate extension SessionDelegate: URLSessionDataDelegate { + open func urlSession(_ session: URLSession, + dataTask: URLSessionDataTask, + didReceive response: URLResponse, + completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) { + eventMonitor?.urlSession(session, dataTask: dataTask, didReceive: response) + + guard let response = response as? HTTPURLResponse else { completionHandler(.allow); return } + + if let request = request(for: dataTask, as: DataRequest.self) { + request.didReceiveResponse(response, completionHandler: completionHandler) + } else if let request = request(for: dataTask, as: DataStreamRequest.self) { + request.didReceiveResponse(response, completionHandler: completionHandler) + } else { + assertionFailure("dataTask did not find DataRequest or DataStreamRequest in didReceive response") + completionHandler(.allow) + return + } + } + open func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { eventMonitor?.urlSession(session, dataTask: dataTask, didReceive: data) @@ -238,7 +257,7 @@ extension SessionDelegate: URLSessionDataDelegate { } else if let request = request(for: dataTask, as: DataStreamRequest.self) { request.didReceive(data: data) } else { - assertionFailure("dataTask did not find DataRequest or DataStreamRequest in didReceive") + assertionFailure("dataTask did not find DataRequest or DataStreamRequest in didReceive data") return } } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/URLEncodedFormEncoder.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/URLEncodedFormEncoder.swift index dfadc2ec1..cfbd7e4d0 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/URLEncodedFormEncoder.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/URLEncodedFormEncoder.swift @@ -26,19 +26,29 @@ import Foundation /// An object that encodes instances into URL-encoded query strings. /// -/// There is no published specification for how to encode collection types. By default, the convention of appending -/// `[]` to the key for array values (`foo[]=1&foo[]=2`), and appending the key surrounded by square brackets for -/// nested dictionary values (`foo[bar]=baz`) is used. Optionally, `ArrayEncoding` can be used to omit the -/// square brackets appended to array keys. +/// `ArrayEncoding` can be used to configure how `Array` values are encoded. By default, the `.brackets` encoding is +/// used, encoding array values with brackets for each value. e.g `array[]=1&array[]=2`. /// -/// `BoolEncoding` can be used to configure how `Bool` values are encoded. The default behavior is to encode -/// `true` as 1 and `false` as 0. +/// `BoolEncoding` can be used to configure how `Bool` values are encoded. By default, the `.numeric` encoding is used, +/// encoding `true` as `1` and `false` as `0`. +/// +/// `DataEncoding` can be used to configure how `Data` values are encoded. By default, the `.deferredToData` encoding is +/// used, which encodes `Data` values using their default `Encodable` implementation. /// /// `DateEncoding` can be used to configure how `Date` values are encoded. By default, the `.deferredToDate` -/// strategy is used, which formats dates from their structure. +/// encoding is used, which encodes `Date`s using their default `Encodable` implementation. +/// +/// `KeyEncoding` can be used to configure how keys are encoded. By default, the `.useDefaultKeys` encoding is used, +/// which encodes the keys directly from the `Encodable` implementation. +/// +/// `KeyPathEncoding` can be used to configure how paths within nested objects are encoded. By default, the `.brackets` +/// encoding is used, which encodes each sub-key in brackets. e.g. `parent[child][grandchild]=value`. +/// +/// `NilEncoding` can be used to configure how `nil` `Optional` values are encoded. By default, the `.dropKey` encoding +/// is used, which drops `nil` key / value pairs from the output entirely. /// -/// `SpaceEncoding` can be used to configure how spaces are encoded. Modern encodings use percent replacement (`%20`), -/// while older encodings may expect spaces to be replaced with `+`. +/// `SpaceEncoding` can be used to configure how spaces are encoded. By default, the `.percentEscaped` encoding is used, +/// replacing spaces with `%20`. /// /// This type is largely based on Vapor's [`url-encoded-form`](https://github.com/vapor/url-encoded-form) project. public final class URLEncodedFormEncoder { @@ -50,19 +60,22 @@ public final class URLEncodedFormEncoder { case noBrackets /// Brackets containing the item index are appended. This matches the jQuery and Node.js behavior. case indexInBrackets + /// Provide a custom array key encoding with the given closure. + case custom((_ key: String, _ index: Int) -> String) /// Encodes the key according to the encoding. /// /// - Parameters: - /// - key: The `key` to encode. - /// - index: When this enum instance is `.indexInBrackets`, the `index` to encode. + /// - key: The `key` to encode. + /// - index: When this enum instance is `.indexInBrackets`, the `index` to encode. /// - /// - Returns: The encoded key. + /// - Returns: The encoded key. func encode(_ key: String, atIndex index: Int) -> String { switch self { case .brackets: return "\(key)[]" case .noBrackets: return key case .indexInBrackets: return "\(key)[\(index)]" + case let .custom(encoding): return encoding(key, index) } } } @@ -234,13 +247,13 @@ public final class URLEncodedFormEncoder { var searchRange = key.index(after: wordStart)..1 capital letters. Turn those into a word, stopping at the capital before the lower case character. + // There was a range of >1 capital letters. Turn those into a word, stopping at the capital before + // the lower case character. let beforeLowerIndex = key.index(before: lowerCaseRange.lowerBound) words.append(upperCaseRange.lowerBound.. String + + /// Creates an instance with the encoding closure called for each sub-key in a key path. + /// + /// - Parameter encoding: Closure used to perform the encoding. + public init(encoding: @escaping (_ subkey: String) -> String) { + self.encoding = encoding + } + + func encodeKeyPath(_ keyPath: String) -> String { + encoding(keyPath) + } + } + + /// Encoding to use for `nil` values. + public struct NilEncoding { + /// Encodes `nil` by dropping the entire key / value pair. + public static let dropKey = NilEncoding { nil } + /// Encodes `nil` by dropping only the value. e.g. `value1=one&nilValue=&value2=two`. + public static let dropValue = NilEncoding { "" } + /// Encodes `nil` as `null`. + public static let null = NilEncoding { "null" } + + private let encoding: () -> String? + + /// Creates an instance with the encoding closure called for `nil` values. + /// + /// - Parameter encoding: Closure used to perform the encoding. + public init(encoding: @escaping () -> String?) { + self.encoding = encoding + } + + func encodeNil() -> String? { + encoding() + } + } + /// Encoding to use for spaces. public enum SpaceEncoding { - /// Encodes spaces according to normal percent escaping rules (%20). + /// Encodes spaces using percent escaping (`%20`). case percentEscaped - /// Encodes spaces as `+`, + /// Encodes spaces as `+`. case plusReplaced /// Encodes the string according to the encoding. @@ -322,6 +387,10 @@ public final class URLEncodedFormEncoder { public let dateEncoding: DateEncoding /// The `KeyEncoding` to use. public let keyEncoding: KeyEncoding + /// The `KeyPathEncoding` to use. + public let keyPathEncoding: KeyPathEncoding + /// The `NilEncoding` to use. + public let nilEncoding: NilEncoding /// The `SpaceEncoding` to use. public let spaceEncoding: SpaceEncoding /// The `CharacterSet` of allowed (non-escaped) characters. @@ -336,6 +405,7 @@ public final class URLEncodedFormEncoder { /// - dataEncoding: The `DataEncoding` to use. `.base64` by default. /// - dateEncoding: The `DateEncoding` to use. `.deferredToDate` by default. /// - keyEncoding: The `KeyEncoding` to use. `.useDefaultKeys` by default. + /// - nilEncoding: The `NilEncoding` to use. `.drop` by default. /// - spaceEncoding: The `SpaceEncoding` to use. `.percentEscaped` by default. /// - allowedCharacters: The `CharacterSet` of allowed (non-escaped) characters. `.afURLQueryAllowed` by /// default. @@ -345,6 +415,8 @@ public final class URLEncodedFormEncoder { dataEncoding: DataEncoding = .base64, dateEncoding: DateEncoding = .deferredToDate, keyEncoding: KeyEncoding = .useDefaultKeys, + keyPathEncoding: KeyPathEncoding = .brackets, + nilEncoding: NilEncoding = .dropKey, spaceEncoding: SpaceEncoding = .percentEscaped, allowedCharacters: CharacterSet = .afURLQueryAllowed) { self.alphabetizeKeyValuePairs = alphabetizeKeyValuePairs @@ -353,6 +425,8 @@ public final class URLEncodedFormEncoder { self.dataEncoding = dataEncoding self.dateEncoding = dateEncoding self.keyEncoding = keyEncoding + self.keyPathEncoding = keyPathEncoding + self.nilEncoding = nilEncoding self.spaceEncoding = spaceEncoding self.allowedCharacters = allowedCharacters } @@ -362,7 +436,8 @@ public final class URLEncodedFormEncoder { let encoder = _URLEncodedFormEncoder(context: context, boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) try value.encode(to: encoder) return context.component @@ -384,6 +459,7 @@ public final class URLEncodedFormEncoder { let serializer = URLEncodedFormSerializer(alphabetizeKeyValuePairs: alphabetizeKeyValuePairs, arrayEncoding: arrayEncoding, keyEncoding: keyEncoding, + keyPathEncoding: keyPathEncoding, spaceEncoding: spaceEncoding, allowedCharacters: allowedCharacters) let query = serializer.serialize(object) @@ -416,17 +492,20 @@ final class _URLEncodedFormEncoder { private let boolEncoding: URLEncodedFormEncoder.BoolEncoding private let dataEncoding: URLEncodedFormEncoder.DataEncoding private let dateEncoding: URLEncodedFormEncoder.DateEncoding + private let nilEncoding: URLEncodedFormEncoder.NilEncoding init(context: URLEncodedFormContext, codingPath: [CodingKey] = [], boolEncoding: URLEncodedFormEncoder.BoolEncoding, dataEncoding: URLEncodedFormEncoder.DataEncoding, - dateEncoding: URLEncodedFormEncoder.DateEncoding) { + dateEncoding: URLEncodedFormEncoder.DateEncoding, + nilEncoding: URLEncodedFormEncoder.NilEncoding) { self.context = context self.codingPath = codingPath self.boolEncoding = boolEncoding self.dataEncoding = dataEncoding self.dateEncoding = dateEncoding + self.nilEncoding = nilEncoding } } @@ -436,7 +515,8 @@ extension _URLEncodedFormEncoder: Encoder { codingPath: codingPath, boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) return KeyedEncodingContainer(container) } @@ -445,7 +525,8 @@ extension _URLEncodedFormEncoder: Encoder { codingPath: codingPath, boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) } func singleValueContainer() -> SingleValueEncodingContainer { @@ -453,7 +534,8 @@ extension _URLEncodedFormEncoder: Encoder { codingPath: codingPath, boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) } } @@ -584,17 +666,20 @@ extension _URLEncodedFormEncoder { private let boolEncoding: URLEncodedFormEncoder.BoolEncoding private let dataEncoding: URLEncodedFormEncoder.DataEncoding private let dateEncoding: URLEncodedFormEncoder.DateEncoding + private let nilEncoding: URLEncodedFormEncoder.NilEncoding init(context: URLEncodedFormContext, codingPath: [CodingKey], boolEncoding: URLEncodedFormEncoder.BoolEncoding, dataEncoding: URLEncodedFormEncoder.DataEncoding, - dateEncoding: URLEncodedFormEncoder.DateEncoding) { + dateEncoding: URLEncodedFormEncoder.DateEncoding, + nilEncoding: URLEncodedFormEncoder.NilEncoding) { self.context = context self.codingPath = codingPath self.boolEncoding = boolEncoding self.dataEncoding = dataEncoding self.dateEncoding = dateEncoding + self.nilEncoding = nilEncoding } private func nestedCodingPath(for key: CodingKey) -> [CodingKey] { @@ -605,9 +690,77 @@ extension _URLEncodedFormEncoder { extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol { func encodeNil(forKey key: Key) throws { - let context = EncodingError.Context(codingPath: codingPath, - debugDescription: "URLEncodedFormEncoder cannot encode nil values.") - throw EncodingError.invalidValue("\(key): nil", context) + guard let nilValue = nilEncoding.encodeNil() else { return } + + try encode(nilValue, forKey: key) + } + + func encodeIfPresent(_ value: Bool?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: String?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: Double?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: Float?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: Int?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: Int8?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: Int16?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: Int32?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: Int64?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: UInt?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: UInt8?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: UInt16?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: UInt32?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: UInt64?, forKey key: Key) throws { + try _encodeIfPresent(value, forKey: key) + } + + func encodeIfPresent(_ value: Value?, forKey key: Key) throws where Value: Encodable { + try _encodeIfPresent(value, forKey: key) + } + + func _encodeIfPresent(_ value: Value?, forKey key: Key) throws where Value: Encodable { + if let value = value { + try encode(value, forKey: key) + } else { + try encodeNil(forKey: key) + } } func encode(_ value: T, forKey key: Key) throws where T: Encodable { @@ -620,7 +773,8 @@ extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol codingPath: nestedCodingPath(for: key), boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) return container } @@ -630,7 +784,8 @@ extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol codingPath: nestedCodingPath(for: key), boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) return container } @@ -640,7 +795,8 @@ extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol codingPath: nestedCodingPath(for: key), boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) return KeyedEncodingContainer(container) } @@ -650,7 +806,8 @@ extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol codingPath: codingPath, boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) } func superEncoder(forKey key: Key) -> Encoder { @@ -658,7 +815,8 @@ extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol codingPath: nestedCodingPath(for: key), boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) } } @@ -672,17 +830,20 @@ extension _URLEncodedFormEncoder { private let boolEncoding: URLEncodedFormEncoder.BoolEncoding private let dataEncoding: URLEncodedFormEncoder.DataEncoding private let dateEncoding: URLEncodedFormEncoder.DateEncoding + private let nilEncoding: URLEncodedFormEncoder.NilEncoding init(context: URLEncodedFormContext, codingPath: [CodingKey], boolEncoding: URLEncodedFormEncoder.BoolEncoding, dataEncoding: URLEncodedFormEncoder.DataEncoding, - dateEncoding: URLEncodedFormEncoder.DateEncoding) { + dateEncoding: URLEncodedFormEncoder.DateEncoding, + nilEncoding: URLEncodedFormEncoder.NilEncoding) { self.context = context self.codingPath = codingPath self.boolEncoding = boolEncoding self.dataEncoding = dataEncoding self.dateEncoding = dateEncoding + self.nilEncoding = nilEncoding } private func checkCanEncode(value: Any?) throws { @@ -697,12 +858,9 @@ extension _URLEncodedFormEncoder { extension _URLEncodedFormEncoder.SingleValueContainer: SingleValueEncodingContainer { func encodeNil() throws { - try checkCanEncode(value: nil) - defer { canEncodeNewValue = false } + guard let nilValue = nilEncoding.encodeNil() else { return } - let context = EncodingError.Context(codingPath: codingPath, - debugDescription: "URLEncodedFormEncoder cannot encode nil values.") - throw EncodingError.invalidValue("nil", context) + try encode(nilValue) } func encode(_ value: Bool) throws { @@ -800,7 +958,8 @@ extension _URLEncodedFormEncoder.SingleValueContainer: SingleValueEncodingContai codingPath: codingPath, boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) try value.encode(to: encoder) } } @@ -818,26 +977,29 @@ extension _URLEncodedFormEncoder { private let boolEncoding: URLEncodedFormEncoder.BoolEncoding private let dataEncoding: URLEncodedFormEncoder.DataEncoding private let dateEncoding: URLEncodedFormEncoder.DateEncoding + private let nilEncoding: URLEncodedFormEncoder.NilEncoding init(context: URLEncodedFormContext, codingPath: [CodingKey], boolEncoding: URLEncodedFormEncoder.BoolEncoding, dataEncoding: URLEncodedFormEncoder.DataEncoding, - dateEncoding: URLEncodedFormEncoder.DateEncoding) { + dateEncoding: URLEncodedFormEncoder.DateEncoding, + nilEncoding: URLEncodedFormEncoder.NilEncoding) { self.context = context self.codingPath = codingPath self.boolEncoding = boolEncoding self.dataEncoding = dataEncoding self.dateEncoding = dateEncoding + self.nilEncoding = nilEncoding } } } extension _URLEncodedFormEncoder.UnkeyedContainer: UnkeyedEncodingContainer { func encodeNil() throws { - let context = EncodingError.Context(codingPath: codingPath, - debugDescription: "URLEncodedFormEncoder cannot encode nil values.") - throw EncodingError.invalidValue("nil", context) + guard let nilValue = nilEncoding.encodeNil() else { return } + + try encode(nilValue) } func encode(_ value: T) throws where T: Encodable { @@ -852,7 +1014,8 @@ extension _URLEncodedFormEncoder.UnkeyedContainer: UnkeyedEncodingContainer { codingPath: nestedCodingPath, boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) } func nestedContainer(keyedBy keyType: NestedKey.Type) -> KeyedEncodingContainer where NestedKey: CodingKey { @@ -861,7 +1024,8 @@ extension _URLEncodedFormEncoder.UnkeyedContainer: UnkeyedEncodingContainer { codingPath: nestedCodingPath, boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) return KeyedEncodingContainer(container) } @@ -873,7 +1037,8 @@ extension _URLEncodedFormEncoder.UnkeyedContainer: UnkeyedEncodingContainer { codingPath: nestedCodingPath, boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) } func superEncoder() -> Encoder { @@ -883,7 +1048,8 @@ extension _URLEncodedFormEncoder.UnkeyedContainer: UnkeyedEncodingContainer { codingPath: codingPath, boolEncoding: boolEncoding, dataEncoding: dataEncoding, - dateEncoding: dateEncoding) + dateEncoding: dateEncoding, + nilEncoding: nilEncoding) } } @@ -891,17 +1057,20 @@ final class URLEncodedFormSerializer { private let alphabetizeKeyValuePairs: Bool private let arrayEncoding: URLEncodedFormEncoder.ArrayEncoding private let keyEncoding: URLEncodedFormEncoder.KeyEncoding + private let keyPathEncoding: URLEncodedFormEncoder.KeyPathEncoding private let spaceEncoding: URLEncodedFormEncoder.SpaceEncoding private let allowedCharacters: CharacterSet init(alphabetizeKeyValuePairs: Bool, arrayEncoding: URLEncodedFormEncoder.ArrayEncoding, keyEncoding: URLEncodedFormEncoder.KeyEncoding, + keyPathEncoding: URLEncodedFormEncoder.KeyPathEncoding, spaceEncoding: URLEncodedFormEncoder.SpaceEncoding, allowedCharacters: CharacterSet) { self.alphabetizeKeyValuePairs = alphabetizeKeyValuePairs self.arrayEncoding = arrayEncoding self.keyEncoding = keyEncoding + self.keyPathEncoding = keyPathEncoding self.spaceEncoding = spaceEncoding self.allowedCharacters = allowedCharacters } @@ -927,7 +1096,7 @@ final class URLEncodedFormSerializer { func serialize(_ object: URLEncodedFormComponent.Object, forKey key: String) -> String { var segments: [String] = object.map { subKey, value in - let keyPath = "[\(subKey)]" + let keyPath = keyPathEncoding.encodeKeyPath(subKey) return serialize(value, forKey: key + keyPath) } segments = alphabetizeKeyValuePairs ? segments.sorted() : segments diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/URLRequest+Alamofire.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/URLRequest+Alamofire.swift index be27c8ed0..ab72fb537 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/URLRequest+Alamofire.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/URLRequest+Alamofire.swift @@ -27,7 +27,7 @@ import Foundation extension URLRequest { /// Returns the `httpMethod` as Alamofire's `HTTPMethod` type. public var method: HTTPMethod? { - get { httpMethod.flatMap(HTTPMethod.init) } + get { httpMethod.map(HTTPMethod.init) } set { httpMethod = newValue?.rawValue } } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Validation.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Validation.swift index 1dc30253d..2cf23fbae 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Validation.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Alamofire/Source/Validation.swift @@ -185,7 +185,7 @@ extension DataRequest { @discardableResult public func validate() -> Self { let contentTypes: () -> [String] = { [unowned self] in - self.acceptableContentTypes + acceptableContentTypes } return validate(statusCode: acceptableStatusCodes).validate(contentType: contentTypes()) } @@ -233,7 +233,7 @@ extension DataStreamRequest { @discardableResult public func validate() -> Self { let contentTypes: () -> [String] = { [unowned self] in - self.acceptableContentTypes + acceptableContentTypes } return validate(statusCode: acceptableStatusCodes).validate(contentType: contentTypes()) } @@ -295,7 +295,7 @@ extension DownloadRequest { @discardableResult public func validate() -> Self { let contentTypes = { [unowned self] in - self.acceptableContentTypes + acceptableContentTypes } return validate(statusCode: acceptableStatusCodes).validate(contentType: contentTypes()) } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcher.m b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcher.m index 8790af431..6ed610d57 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcher.m +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcher.m @@ -18,6 +18,9 @@ #endif #import "GTMSessionFetcher/GTMSessionFetcher.h" +#import "GTMSessionFetcher/GTMSessionFetcherService.h" +#import "GTMSessionFetcherService+Internal.h" + #if TARGET_OS_OSX && GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH // To reconnect background sessions on Mac outside +load requires importing and linking // AppKit to access the NSApplicationDidFinishLaunching symbol. @@ -99,7 +102,7 @@ (TARGET_OS_IOS && defined(__IPHONE_13_0) && \ __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_13_0) || \ (TARGET_OS_WATCH && defined(__WATCHOS_6_0) && \ - __WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_6_0) || \ + __WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_6_0) || \ (TARGET_OS_TV && defined(__TVOS_13_0) && __TVOS_VERSION_MIN_REQUIRED >= __TVOS_13_0)) #define GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 1 #define GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 1 @@ -107,7 +110,7 @@ (TARGET_OS_IOS && defined(__IPHONE_13_0) && \ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0) || \ (TARGET_OS_WATCH && defined(__WATCHOS_6_0) && \ - __WATCH_OS_VERSION_MAX_ALLOWED >= __WATCHOS_6_0) || \ + __WATCH_OS_VERSION_MAX_ALLOWED >= __WATCHOS_6_0) || \ (TARGET_OS_TV && defined(__TVOS_13_0) && __TVOS_VERSION_MAX_ALLOWED >= __TVOS_13_0)) #define GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 0 #define GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 1 @@ -121,7 +124,7 @@ (TARGET_OS_IOS && defined(__IPHONE_13_0) && \ __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_13_0) || \ (TARGET_OS_WATCH && defined(__WATCHOS_6_0) && \ - __WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_6_0) || \ + __WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_6_0) || \ (TARGET_OS_TV && defined(__TVOS_13_0) && __TVOS_VERSION_MIN_REQUIRED >= __TVOS_13_0)) #define GTM_SDK_REQUIRES_SECTRUSTEVALUATEWITHERROR 1 #else @@ -233,8 +236,7 @@ @implementation GTMSessionFetcher { #pragma clang diagnostic pop // The service object that created and monitors this fetcher, if any. - id - _service; // immutable; set by the fetcher service upon creation + GTMSessionFetcherService *_service; // immutable; set by the fetcher service upon creation NSString *_serviceHost; NSInteger _servicePriority; // immutable after beginFetch BOOL _hasStoppedFetching; // counterpart to _initialBeginFetchDate @@ -649,74 +651,15 @@ - (void)beginFetchMayDelay:(BOOL)mayDelay self.canShareSession = (_service != nil) && !isRecreatingSession && !self.usingBackgroundSession; - if (!self.session && self.canShareSession) { - self.session = [_service sessionForFetcherCreation]; - // If _session is nil, then the service's session creation semaphore will block - // until this fetcher invokes fetcherDidCreateSession: below, so this *must* invoke - // that method, even if the session fails to be created. - } - if (!self.session) { - // Create a session. - if (!_configuration) { - if (priorSessionIdentifier || self.usingBackgroundSession) { - NSString *sessionIdentifier = priorSessionIdentifier; - if (!sessionIdentifier) { - sessionIdentifier = [self createSessionIdentifierWithMetadata:nil]; - } - NSMapTable *sessionIdentifierToFetcherMap = [[self class] sessionIdentifierToFetcherMap]; - [sessionIdentifierToFetcherMap setObject:self forKey:self.sessionIdentifier]; - - _configuration = [NSURLSessionConfiguration - backgroundSessionConfigurationWithIdentifier:sessionIdentifier]; - self.usingBackgroundSession = YES; - self.canShareSession = NO; - } else { - _configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; - } -#if !GTM_ALLOW_INSECURE_REQUESTS -#if GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION - _configuration.TLSMinimumSupportedProtocolVersion = tls_protocol_version_TLSv12; -#elif GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION - if (@available(iOS 13, tvOS 13, macOS 10.15, *)) { - _configuration.TLSMinimumSupportedProtocolVersion = tls_protocol_version_TLSv12; - } else { - _configuration.TLSMinimumSupportedProtocol = kTLSProtocol12; - } -#else - _configuration.TLSMinimumSupportedProtocol = kTLSProtocol12; -#endif // GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION -#endif - } // !_configuration - _configuration.HTTPCookieStorage = self.cookieStorage; - - if (_configurationBlock) { - _configurationBlock(self, _configuration); - } - - id delegate = [_service sessionDelegate]; - if (!delegate || !self.canShareSession) { - delegate = self; - } - self.session = [NSURLSession sessionWithConfiguration:_configuration - delegate:delegate - delegateQueue:self.sessionDelegateQueue]; - GTMSESSION_ASSERT_DEBUG(self.session, @"Couldn't create session"); - - // Tell the service about the session created by this fetcher. This also signals the - // service's semaphore to allow other fetchers to request this session. - [_service fetcherDidCreateSession:self]; - - // If this assertion fires, the client probably tried to use a session identifier that was - // already used. The solution is to make the client use a unique identifier (or better yet let - // the session fetcher assign the identifier). - GTMSESSION_ASSERT_DEBUG(self.session.delegate == delegate, @"Couldn't assign delegate."); - - if (self.session) { - BOOL isUsingSharedDelegate = (delegate != self); - if (!isUsingSharedDelegate) { - _shouldInvalidateSession = YES; - } + if (self.canShareSession) { + self.session = [_service + sessionWithCreationBlock:^NSURLSession *(id sessionDelegate) { + return [self createSessionWithDelegate:sessionDelegate + sessionIdentifier:priorSessionIdentifier]; + }]; + } else { + self.session = [self createSessionWithDelegate:self sessionIdentifier:priorSessionIdentifier]; } } @@ -994,6 +937,73 @@ - (void)beginFetchMayDelay:(BOOL)mayDelay } } +// Helper method to create a new NSURLSession for this fetcher. Because the original +// implementation had this code inline, marking direct to avoid any danger of subclasses +// overriding the behavior. +- (NSURLSession *)createSessionWithDelegate:(id)sessionDelegate + sessionIdentifier:(nullable NSString *)priorSessionIdentifier + __attribute__((objc_direct)) { + // Create a session. + if (!_configuration) { + if (priorSessionIdentifier || self.usingBackgroundSession) { + NSString *sessionIdentifier = priorSessionIdentifier; + if (!sessionIdentifier) { + sessionIdentifier = [self createSessionIdentifierWithMetadata:nil]; + } + NSMapTable *sessionIdentifierToFetcherMap = [[self class] sessionIdentifierToFetcherMap]; + [sessionIdentifierToFetcherMap setObject:self forKey:self.sessionIdentifier]; + + _configuration = [NSURLSessionConfiguration + backgroundSessionConfigurationWithIdentifier:sessionIdentifier]; + self.usingBackgroundSession = YES; + self.canShareSession = NO; + } else { + _configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; + } +#if !GTM_ALLOW_INSECURE_REQUESTS +#if GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION + _configuration.TLSMinimumSupportedProtocolVersion = tls_protocol_version_TLSv12; +#elif GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION + if (@available(iOS 13, tvOS 13, macOS 10.15, *)) { + _configuration.TLSMinimumSupportedProtocolVersion = tls_protocol_version_TLSv12; + } else { + _configuration.TLSMinimumSupportedProtocol = kTLSProtocol12; + } +#else + _configuration.TLSMinimumSupportedProtocol = kTLSProtocol12; +#endif // GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION +#endif + } // !_configuration + _configuration.HTTPCookieStorage = self.cookieStorage; + + if (_configurationBlock) { + _configurationBlock(self, _configuration); + } + + id delegate = sessionDelegate; + if (!delegate || !self.canShareSession) { + delegate = self; + } + NSURLSession *session = [NSURLSession sessionWithConfiguration:_configuration + delegate:delegate + delegateQueue:self.sessionDelegateQueue]; + GTMSESSION_ASSERT_DEBUG(session, @"Couldn't create session"); + + // If this assertion fires, the client probably tried to use a session identifier that was + // already used. The solution is to make the client use a unique identifier (or better yet let + // the session fetcher assign the identifier). + GTMSESSION_ASSERT_DEBUG(session.delegate == delegate, @"Couldn't assign delegate."); + + if (session) { + BOOL isUsingSharedDelegate = (delegate != self); + if (!isUsingSharedDelegate) { + _shouldInvalidateSession = YES; + } + } + + return session; +} + NSData *_Nullable GTMDataFromInputStream(NSInputStream *inputStream, NSError **outError) { NSMutableData *data = [NSMutableData data]; @@ -1691,9 +1701,7 @@ - (void)authorizeRequest { NSMutableURLRequest *mutableRequest = [self.request mutableCopy]; [authorizer authorizeRequest:mutableRequest completionHandler:^(NSError *_Nullable error) { - [weakSelf authorizer:nil - request:mutableRequest - finishedWithError:error]; + [weakSelf authorizer:nil request:mutableRequest finishedWithError:error]; }]; } else if ([authorizer respondsToSelector:@selector(authorizeRequest: delegate:didFinishSelector:)]) { @@ -1732,22 +1740,24 @@ - (void)applyDecoratorsAtRequestWillStart:(NSArray= decorators.count) { - GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher decorate requestWillStart %zu decorators complete", - decorators.count); + GTMSESSION_LOG_DEBUG_VERBOSE( + @"GTMSessionFetcher decorate requestWillStart %zu decorators complete", decorators.count); [self beginFetchMayDelay:NO mayAuthorize:NO mayDecorate:NO]; return; } __weak __typeof__(self) weakSelf = self; id decorator = decorators[index]; - GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher decorate requestWillStart %zu decorators, index %zu, " - @"retry count %zu, decorator %@", - decorators.count, index, self.retryCount, decorator); + GTMSESSION_LOG_DEBUG_VERBOSE( + @"GTMSessionFetcher decorate requestWillStart %zu decorators, index %zu, " + @"retry count %zu, decorator %@", + decorators.count, index, self.retryCount, decorator); [decorator fetcherWillStart:self completionHandler:^(NSURLRequest *_Nullable newRequest, NSError *_Nullable error) { - GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher decorator requestWillStart index %zu " - @"complete, newRequest %@, error %@", - index, newRequest, error); + GTMSESSION_LOG_DEBUG_VERBOSE( + @"GTMSessionFetcher decorator requestWillStart index %zu " + @"complete, newRequest %@, error %@", + index, newRequest, error); __strong __typeof__(self) strongSelf = weakSelf; if (!strongSelf) { GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher destroyed before requestWillStart " @@ -1775,8 +1785,8 @@ - (void)applyDecoratorsAtRequestDidFinish:(NSArray= decorators.count) { - GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher decorate requestDidFinish %zu decorators complete", - decorators.count); + GTMSESSION_LOG_DEBUG_VERBOSE( + @"GTMSessionFetcher decorate requestDidFinish %zu decorators complete", decorators.count); [self invokeFetchCallbacksOnCallbackQueueWithData:data error:error mayDecorate:NO @@ -1786,14 +1796,15 @@ - (void)applyDecoratorsAtRequestDidFinish:(NSArray decorator = decorators[index]; - GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher decorate requestDidFinish %zu decorators, index %zu, " - @"retry count %zu, decorator %@", - decorators.count, index, self.retryCount, decorator); + GTMSESSION_LOG_DEBUG_VERBOSE( + @"GTMSessionFetcher decorate requestDidFinish %zu decorators, index %zu, " + @"retry count %zu, decorator %@", + decorators.count, index, self.retryCount, decorator); [decorator fetcherDidFinish:self withData:data error:error completionHandler:^{ - GTMSESSION_LOG_DEBUG( + GTMSESSION_LOG_DEBUG_VERBOSE( @"GTMSessionFetcher decorator requestDidFinish index %zu complete", index); __strong __typeof__(self) strongSelf = weakSelf; if (!strongSelf) { @@ -1961,20 +1972,22 @@ - (void)stopFetching { @synchronized(self) { GTMSessionMonitorSynchronized(self); - // Prevent enqueued callbacks from executing. + // Prevent enqueued callbacks from executing. The completion handler will still execute if + // the property `stopFetchingTriggersCompletionHandler` is `YES`. _userStoppedFetching = YES; } // @synchronized(self) - [self stopFetchReleasingCallbacks:YES]; + [self stopFetchReleasingCallbacks:!self.stopFetchingTriggersCompletionHandler]; } // Cancel the fetch of the URL that's currently in progress. // -// If shouldReleaseCallbacks is NO then the fetch will be retried so the callbacks -// need to still be retained. +// If shouldReleaseCallbacks is NO then the fetch will be retried so the callbacks need +// still be retained or `stopFetching` was called and `stopFetchingTriggersCompletionHandler` is +// `YES`. - (void)stopFetchReleasingCallbacks:(BOOL)shouldReleaseCallbacks { [self removePersistedBackgroundSessionFromDefaults]; - id service; + GTMSessionFetcherService *service; NSMutableURLRequest *request; // If the task or the retry timer is all that's retaining the fetcher, @@ -1987,6 +2000,7 @@ - (void)stopFetchReleasingCallbacks:(BOOL)shouldReleaseCallbacks { [holdSelf destroyRetryTimer]; BOOL sendStopNotification = YES; + BOOL callbacksPending = NO; @synchronized(self) { GTMSessionMonitorSynchronized(self); @@ -2058,6 +2072,7 @@ - (void)stopFetchReleasingCallbacks:(BOOL)shouldReleaseCallbacks { } } } + callbacksPending = _stopFetchingTriggersCompletionHandler && _userStoppedFetching; } // @synchronized(self) // If the NSURLSession needs to be invalidated, but needs to wait until the delegate method @@ -2075,7 +2090,7 @@ - (void)stopFetchReleasingCallbacks:(BOOL)shouldReleaseCallbacks { self.authorizer = nil; } - [service fetcherDidStop:self]; + [service fetcherDidStop:self callbacksPending:callbacksPending]; #if GTM_BACKGROUND_TASK_FETCHING [self endBackgroundTask]; @@ -2592,7 +2607,7 @@ - (void)invokeOnCallbackQueue:(dispatch_queue_t)callbackQueue block:(void (^)(void))block { if (callbackQueue) { dispatch_group_async(_callbackGroup, callbackQueue, ^{ - if (!afterStopped) { + if (!afterStopped && !self->_stopFetchingTriggersCompletionHandler) { NSDate *serviceStoppedAllDate = [self->_service stoppedAllFetchersDate]; @synchronized(self) { @@ -2659,25 +2674,28 @@ - (void)invokeFetchCallbacksOnCallbackQueueWithData:(nullable NSData *)data } if (handler) { - [self invokeOnCallbackQueue:callbackQueue afterUserStopped:NO block:^{ - handler(data, error); - - // Post a notification, primarily to allow code to collect responses for - // testing. - // - // The observing code is not likely on the fetcher's callback - // queue, so this posts explicitly to the main queue. - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - if (data) { - userInfo[kGTMSessionFetcherCompletionDataKey] = data; - } - if (error) { - userInfo[kGTMSessionFetcherCompletionErrorKey] = error; - } - [self postNotificationOnMainThreadWithName:kGTMSessionFetcherCompletionInvokedNotification - userInfo:userInfo - requireAsync:NO]; - }]; + [self invokeOnCallbackQueue:callbackQueue + afterUserStopped:NO + block:^{ + handler(data, error); + + // Post a notification, primarily to allow code to collect responses for + // testing. + // + // The observing code is not likely on the fetcher's callback + // queue, so this posts explicitly to the main queue. + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + if (data) { + userInfo[kGTMSessionFetcherCompletionDataKey] = data; + } + if (error) { + userInfo[kGTMSessionFetcherCompletionErrorKey] = error; + } + [self postNotificationOnMainThreadWithName: + kGTMSessionFetcherCompletionInvokedNotification + userInfo:userInfo + requireAsync:NO]; + }]; } } @@ -2963,6 +2981,7 @@ - (void)URLSession:(NSURLSession *)session NSInteger status = self.statusCode; BOOL forceAssumeRetry = NO; BOOL succeeded = NO; + BOOL userStoppedTriggerCompletion = NO; @synchronized(self) { GTMSessionMonitorSynchronized(self); @@ -2972,17 +2991,31 @@ - (void)URLSession:(NSURLSession *)session // shouldRetryNowForStatus: and finishWithError:shouldRetry: if (_isUsingTestBlock) return; #endif + userStoppedTriggerCompletion = _userStoppedFetching && _stopFetchingTriggersCompletionHandler; if (error == nil) { error = _downloadFinishedError; } succeeded = (error == nil && status >= 0 && status < 300); - if (succeeded) { + if (succeeded && !userStoppedTriggerCompletion) { // Succeeded. _bodyLength = task.countOfBytesSent; } } // @synchronized(self) + if (userStoppedTriggerCompletion) { + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + [userInfo setObject:@"Operation cancelled" forKey:NSLocalizedDescriptionKey]; + if (error) { + [userInfo setObject:error forKey:NSUnderlyingErrorKey]; + } + NSError *cancelError = [NSError errorWithDomain:kGTMSessionFetcherErrorDomain + code:GTMSessionFetcherErrorUserCancelled + userInfo:userInfo]; + [self finishWithError:cancelError shouldRetry:NO]; + return; + } + if (succeeded) { [self finishWithError:nil shouldRetry:NO]; return; @@ -3041,7 +3074,7 @@ - (void)URLSession:(NSURLSession *)session #if TARGET_OS_IPHONE - (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { GTMSESSION_LOG_DEBUG_VERBOSE(@"%@ %p URLSessionDidFinishEventsForBackgroundURLSession:%@", - [self class], self, session); + [self class], self, session); [self removePersistedBackgroundSessionFromDefaults]; GTMSessionFetcherSystemCompletionHandler handler; @@ -3657,7 +3690,8 @@ + (nullable GTMSessionFetcherSystemCompletionHandler)systemCompletionHandlerForS testBlock = _testBlock, testBlockAccumulateDataChunkCount = _testBlockAccumulateDataChunkCount, comment = _comment, - log = _log; + log = _log, + stopFetchingTriggersCompletionHandler = _stopFetchingTriggersCompletionHandler; #if !STRIP_GTM_FETCH_LOGGING @synthesize redirectedFromURL = _redirectedFromURL, @@ -3984,6 +4018,19 @@ - (void)setUsingBackgroundSession:(BOOL)flag { } // @synchronized(self) } +- (BOOL)stopFetchingTriggersCompletionHandler { + return _stopFetchingTriggersCompletionHandler; +} + +- (void)setStopFetchingTriggersCompletionHandler:(BOOL)flag { + if (_initialBeginFetchDate == nil) { + _stopFetchingTriggersCompletionHandler = flag; + } else { + GTMSESSION_ASSERT_DEBUG( + 0, @"stopFetchingTriggersCompletionHandler should not change after fetcher starts"); + } +} + - (nullable NSURLSession *)sessionNeedingInvalidation { @synchronized(self) { GTMSessionMonitorSynchronized(self); @@ -4072,10 +4119,8 @@ - (void)setDestinationFileURL:(nullable NSURL *)destinationFileURL { // On both the simulator and devices, the path can change to the download file, but the name // shouldn't change. Technically, this isn't supported in the fetcher, but the change of // URL is expected to happen only across development runs through Xcode. - NSString *oldFilename = [_destinationFileURL lastPathComponent]; - NSString *newFilename = [destinationFileURL lastPathComponent]; -#pragma unused(oldFilename) -#pragma unused(newFilename) + __unused NSString *oldFilename = [_destinationFileURL lastPathComponent]; + __unused NSString *newFilename = [destinationFileURL lastPathComponent]; GTMSESSION_ASSERT_DEBUG( [oldFilename isEqualToString:newFilename], @"Destination File URL cannot be changed after session identifier has been created"); diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService+Internal.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService+Internal.h new file mode 100644 index 000000000..9708edfec --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService+Internal.h @@ -0,0 +1,30 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GTMSessionFetcher/GTMSessionFetcherService.h" + +// Internal methods from GTMSessionFetcherService, not intended for public use. + +@interface GTMSessionFetcherService (Internal) + +// Methods for use by the fetcher class only. +- (nullable NSURLSession *)session; +- (nullable NSURLSession *)sessionWithCreationBlock: + (nonnull NS_NOESCAPE GTMSessionFetcherSessionCreationBlock)creationBlock; +- (nullable id)sessionDelegate; +- (nullable NSDate *)stoppedAllFetchersDate; +- (void)fetcherDidStop:(nonnull GTMSessionFetcher *)fetcher callbacksPending: (BOOL)callbacksPending; + +@end diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService.m b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService.m index 6ec2e1a29..3d2c6ff73 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService.m +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService.m @@ -18,6 +18,9 @@ #endif #import "GTMSessionFetcher/GTMSessionFetcherService.h" +#import "GTMSessionFetcherService+Internal.h" + +#include NSString *const kGTMSessionFetcherServiceSessionBecameInvalidNotification = @"kGTMSessionFetcherServiceSessionBecameInvalidNotification"; @@ -81,7 +84,7 @@ @implementation GTMSessionFetcherService { GTMSessionFetcherSessionDelegateDispatcher *_delegateDispatcher; // Fetchers will wait on this if another fetcher is creating the shared NSURLSession. - dispatch_semaphore_t _sessionCreationSemaphore; + os_unfair_lock _sessionCreationLock; BOOL _callbackQueueIsConcurrent; dispatch_queue_t _callbackQueue; @@ -152,7 +155,7 @@ - (instancetype)init { _delegateQueue.maxConcurrentOperationCount = 1; _delegateQueue.name = @"com.google.GTMSessionFetcher.NSURLSessionDelegateQueue"; - _sessionCreationSemaphore = dispatch_semaphore_create(1); + _sessionCreationLock = OS_UNFAIR_LOCK_INIT; // Starting with the SDKs for OS X 10.11/iOS 9, the service has a default useragent. // Apps can remove this and get the default system "CFNetwork" useragent by setting the @@ -180,19 +183,7 @@ - (nonnull dispatch_queue_t)serialQueueForNewFetcher:(GTMSessionFetcher *)fetche if (!_callbackQueueIsConcurrent) return _callbackQueue; static const char *kQueueLabel = "com.google.GTMSessionFetcher.serialCallbackQueue"; - dispatch_queue_t queue; -#if TARGET_OS_IOS && (__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_10_0) - // All targets except iPhone < iOS 10 support dispatch_queue_create_with_target(). - // iOS builds supporting 0) { + secs = MIN(secs, _maxUploadRetryInterval); + } + secs = MAX(secs, _minUploadRetryInterval); + + return secs; +} + + (void)load { #if GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH && TARGET_OS_IPHONE NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; @@ -513,8 +536,7 @@ - (void)setupRequestHeaders { int hasFileHandle = (_uploadFileHandle != nil) ? 1 : 0; int hasFileURL = (_uploadFileURL != nil) ? 1 : 0; int hasUploadDataProvider = (_uploadDataProvider != nil) ? 1 : 0; - int numberOfSources = hasData + hasFileHandle + hasFileURL + hasUploadDataProvider; -#pragma unused(numberOfSources) + __unused int numberOfSources = hasData + hasFileHandle + hasFileURL + hasUploadDataProvider; GTMSESSION_ASSERT_DEBUG(numberOfSources == 1, @"Need just one upload source (%d)", numberOfSources); } // @synchronized(self) @@ -906,10 +928,27 @@ - (void)beginFetchForRetry { [super beginFetchForRetry]; } +- (void)destroyUploadRetryTimer { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + [_uploadRetryTimer invalidate]; + _uploadRetryTimer = nil; + } +} + - (void)beginFetchWithCompletionHandler:(GTMSessionFetcherCompletionHandler)handler { GTMSessionCheckNotSynchronized(self); [self setInitialBodyLength:[self bodyLength]]; + if (_minUploadRetryInterval <= 0.0) { + _minUploadRetryInterval = kDefaultMinUploadRetryInterval; + } + if (_maxUploadRetryInterval <= 0.0) { + _maxUploadRetryInterval = kDefaultMaxUploadRetryInterval; + } + if (_uploadRetryFactor <= 0.0) { + _uploadRetryFactor = 2.0; + } // We'll hold onto the superclass's callback queue so we can invoke the handler // even after the superclass has released the queue and its callback handler, as @@ -982,8 +1021,8 @@ - (void)beginChunkFetches { // resumable request/response. if (self.downloadedData.length > 0) { NSData *downloadedData = self.downloadedData; - NSString *str = [[NSString alloc] initWithData:downloadedData encoding:NSUTF8StringEncoding]; -#pragma unused(str) + __unused NSString *str = [[NSString alloc] initWithData:downloadedData + encoding:NSUTF8StringEncoding]; GTMSESSION_ASSERT_DEBUG(NO, @"unexpected response data (uploading to the wrong URL?)\n%@", str); } #endif @@ -1109,6 +1148,7 @@ - (void)releaseUploadAndBaseCallbacks:(BOOL)shouldReleaseCancellation { - (void)stopFetchReleasingCallbacks:(BOOL)shouldReleaseCallbacks { GTMSessionCheckNotSynchronized(self); + [self destroyUploadRetryTimer]; // Clear _fetcherInFlight when stopped. Moved from stopFetching, since that's a public method, // where this method does the work. Fixes issue clearing value when retryBlock included. @@ -1321,6 +1361,101 @@ - (void)uploadNextChunkWithOffset:(int64_t)offset fetcherProperties:(NSDictionar } } +- (void)beginUploadRetryTimer { + if (![NSThread isMainThread]) { + // Defer creating and starting the timer until we're on the main thread to ensure it has + // a run loop. + dispatch_async(dispatch_get_main_queue(), ^{ + [self beginUploadRetryTimer]; + }); + return; + } + + [self destroyUploadRetryTimer]; + + if (_nextUploadRetryInterval == 0.0) { + [self.chunkFetcher beginFetchWithDelegate:self + didFinishSelector:@selector(chunkFetcher:finishedWithData:error:)]; + return; + } + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSTimeInterval nextInterval = _nextUploadRetryInterval; + NSTimeInterval maxInterval = _maxUploadRetryInterval; + NSTimeInterval newInterval = MIN(nextInterval, (maxInterval > 0 ? maxInterval : DBL_MAX)); + NSTimeInterval newIntervalTolerance = (newInterval / 10) > 1.0 ?: 1.0; + + _nextUploadRetryInterval = newInterval; + + _uploadRetryTimer = [NSTimer timerWithTimeInterval:newInterval + target:self + selector:@selector(uploadRetryTimerFired:) + userInfo:nil + repeats:NO]; + _uploadRetryTimer.tolerance = newIntervalTolerance; + [[NSRunLoop mainRunLoop] addTimer:_uploadRetryTimer forMode:NSDefaultRunLoopMode]; + } // @synchronized(self) + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc postNotificationName:kGTMSessionFetcherUploadInitialBackoffStartedNotification object:self]; +} + +- (void)uploadRetryTimerFired:(NSTimer *)timer { + [self destroyUploadRetryTimer]; + + NSOperationQueue *queue = self.sessionDelegateQueue; + [queue addOperationWithBlock:^{ + [self.chunkFetcher beginFetchWithDelegate:self + didFinishSelector:@selector(chunkFetcher:finishedWithData:error:)]; + }]; +} + +- (NSTimer *)uploadRetryTimer { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _uploadRetryTimer; + } // @synchronized(self) +} + +- (NSTimeInterval)maxUploadRetryInterval { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _maxUploadRetryInterval; + } // @synchronized(self) +} +- (void)setMaxUploadRetryInterval:(NSTimeInterval)secs { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (secs > 0) { + _maxUploadRetryInterval = secs; + } else { + _maxUploadRetryInterval = kDefaultMaxUploadRetryInterval; + } + } // @synchronized(self) +} +- (void)setMinUploadRetryInterval:(NSTimeInterval)secs { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (secs > 0) { + _minUploadRetryInterval = secs; + } else { + _minUploadRetryInterval = kDefaultMinUploadRetryInterval; + } + } // @synchronized(self) +} + +- (NSTimeInterval)minUploadRetryInterval { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _minUploadRetryInterval; + } // @synchronized(self) +} + - (void)beginChunkFetcher:(GTMSessionFetcher *)chunkFetcher offset:(int64_t)offset { // Track the current offset for progress reporting self.currentOffset = offset; @@ -1334,8 +1469,14 @@ - (void)beginChunkFetcher:(GTMSessionFetcher *)chunkFetcher offset:(int64_t)offs // Update the last chunk request, including any request headers. self.lastChunkRequest = chunkFetcher.request; - [chunkFetcher beginFetchWithDelegate:self - didFinishSelector:@selector(chunkFetcher:finishedWithData:error:)]; + if (_nextUploadRetryInterval < _maxUploadRetryInterval) { + [self beginUploadRetryTimer]; + + } else { + NSError *responseError = + [self uploadChunkUnavailableErrorWithDescription:@"Retry Limit Reached"]; + [self invokeFinalCallbackWithData:nil error:responseError shouldInvalidateLocation:NO]; + } } - (void)attachSendProgressBlockToChunkFetcher:(GTMSessionFetcher *)chunkFetcher { @@ -1415,6 +1556,7 @@ - (GTMSessionFetcher *)uploadFetcherWithProperties:(NSDictionary *)properties chunkFetcher.allowedInsecureSchemes = self.allowedInsecureSchemes; chunkFetcher.allowLocalhostRequest = self.allowLocalhostRequest; chunkFetcher.allowInvalidServerCertificates = self.allowInvalidServerCertificates; + chunkFetcher.stopFetchingTriggersCompletionHandler = self.stopFetchingTriggersCompletionHandler; chunkFetcher.useUploadTask = !isQueryFetch; if (self.uploadFileURL && !isQueryFetch && self.useBackgroundSession) { @@ -1505,6 +1647,11 @@ - (void)chunkFetcher:(GTMSessionFetcher *)chunkFetcher self.shouldInitiateOffsetQuery = NO; [self destroyChunkFetcher]; hasDestroyedOldChunkFetcher = YES; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + _nextUploadRetryInterval = self.nextUploadRetryIntervalUnsynchronized; + } + [self sendQueryForUploadOffsetWithFetcherProperties:chunkFetcher.properties]; } else { // Some unexpected status has occurred; handle it as we would a regular @@ -1512,14 +1659,21 @@ - (void)chunkFetcher:(GTMSessionFetcher *)chunkFetcher [self invokeFinalCallbackWithData:data error:error shouldInvalidateLocation:NO]; } } else { + int64_t newOffset; // The chunk has uploaded successfully. - int64_t newOffset = self.currentOffset + previousContentLength; + NSString *uploadSizeReceived = + [chunkFetcher.responseHeaders objectForKey:kGTMSessionHeaderXGoogUploadSizeReceived]; + + if (uploadSizeReceived) { + newOffset = [uploadSizeReceived longLongValue]; + } else { + newOffset = self.currentOffset + previousContentLength; + } #if DEBUG // Verify that if we think all of the uploading data has been sent, the server responded with // the "final" upload status. - BOOL hasUploadAllData = (newOffset == [self fullUploadLength]); - BOOL isFinalStatus = (uploadStatus == kStatusFinal); -#pragma unused(hasUploadAllData, isFinalStatus) + __unused BOOL hasUploadAllData = (newOffset == [self fullUploadLength]); + __unused BOOL isFinalStatus = (uploadStatus == kStatusFinal); GTMSESSION_ASSERT_DEBUG(hasUploadAllData == isFinalStatus || !hasKnownChunkSize, @"uploadStatus:%@ newOffset:%lld (%lld + %lld) fullUploadLength:%lld" @" chunkFetcher:%@ requestHeaders:%@ responseHeaders:%@", @@ -1561,7 +1715,6 @@ - (void)chunkFetcher:(GTMSessionFetcher *)chunkFetcher // before we create a new chunk fetcher. [self destroyChunkFetcher]; hasDestroyedOldChunkFetcher = YES; - [self uploadNextChunkWithOffset:newOffset fetcherProperties:props]; } } @@ -1754,10 +1907,10 @@ - (int64_t)updateChunkFetcher:(GTMSessionFetcher *)chunkFetcher forChunkAtOffset } } - GTMSESSION_ASSERT_DEBUG(offset < fullUploadLength || fullUploadLength == 0, + GTMSESSION_ASSERT_DEBUG(offset <= fullUploadLength || fullUploadLength == 0, @"offset %lld exceeds data length %lld", offset, fullUploadLength); - if (granularity > 0) { + if (granularity > 0 && offset < fullUploadLength) { offset = offset - (offset % granularity); } @@ -1809,7 +1962,8 @@ - (int64_t)updateChunkFetcher:(GTMSessionFetcher *)chunkFetcher forChunkAtOffset lastChunkRequest = _lastChunkRequest, subdataGenerating = _subdataGenerating, shouldInitiateOffsetQuery = _shouldInitiateOffsetQuery, - uploadGranularity = _uploadGranularity; + uploadGranularity = _uploadGranularity, + uploadRetryFactor = _uploadRetryFactor; // clang-format on // Internal properties. diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcher.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcher.h index 9686b3551..c5a9fdd27 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcher.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcher.h @@ -434,6 +434,10 @@ typedef NS_ENUM(NSInteger, GTMSessionFetcherError) { GTMSessionFetcherErrorBackgroundFetchFailed = -4, GTMSessionFetcherErrorInsecureRequest = -5, GTMSessionFetcherErrorTaskCreationFailed = -6, + + // This error is only used if `stopFetchingTriggersCompletionHandler` is + // enabled and `-stopFetching` is called on that fetcher. + GTMSessionFetcherErrorUserCancelled = -7, }; typedef NS_ENUM(NSInteger, GTMSessionFetcherStatus) { @@ -451,6 +455,7 @@ extern "C" { @class GTMSessionCookieStorage; @class GTMSessionFetcher; +@class GTMSessionFetcherService; // The configuration block is for modifying the NSURLSessionConfiguration only. // DO NOT change any fetcher properties in the configuration block. @@ -459,6 +464,8 @@ typedef void (^GTMSessionFetcherConfigurationBlock)(GTMSessionFetcher *fetcher, typedef void (^GTMSessionFetcherSystemCompletionHandler)(void); typedef void (^GTMSessionFetcherCompletionHandler)(NSData *_Nullable data, NSError *_Nullable error); +typedef NSURLSession *_Nullable (^GTMSessionFetcherSessionCreationBlock)( + id _Nullable sessionDelegate); typedef void (^GTMSessionFetcherBodyStreamProviderResponse)(NSInputStream *bodyStream); typedef void (^GTMSessionFetcherBodyStreamProvider)( GTMSessionFetcherBodyStreamProviderResponse response); @@ -608,37 +615,20 @@ typedef void (^GTMFetcherDecoratorFetcherWillStartCompletionHandler)(NSURLReques @end -// This protocol allows abstract references to the fetcher service, primarily for -// fetchers (which may be compiled without the fetcher service class present.) +// This protocol allows abstract references to the fetcher service. // // Apps should not need to use this protocol. @protocol GTMSessionFetcherServiceProtocol -// This protocol allows us to call into the service without requiring -// GTMSessionFetcherService sources in this project - -@property(atomic, strong) dispatch_queue_t callbackQueue; - -- (BOOL)fetcherShouldBeginFetching:(GTMSessionFetcher *)fetcher; -- (void)fetcherDidCreateSession:(GTMSessionFetcher *)fetcher; -- (void)fetcherDidBeginFetching:(GTMSessionFetcher *)fetcher; -- (void)fetcherDidStop:(GTMSessionFetcher *)fetcher; - (GTMSessionFetcher *)fetcherWithRequest:(NSURLRequest *)request; -- (BOOL)isDelayingFetcher:(GTMSessionFetcher *)fetcher; -@property(atomic, assign) BOOL reuseSession; -- (nullable NSURLSession *)session; -- (nullable NSURLSession *)sessionForFetcherCreation; -- (nullable id)sessionDelegate; -- (nullable NSDate *)stoppedAllFetchersDate; +@property(atomic, strong, null_resettable, readonly) dispatch_queue_t callbackQueue; +// These properties are being removed from the protocol; clients should not attempt new +// accesses to them. +@property(atomic, assign) BOOL reuseSession; @property(atomic, readonly, strong, nullable) NSOperationQueue *delegateQueue; -@optional -// This property is optional, for now, to enable releasing the feature without breaking existing -// code that fakes the service but doesn't implement this. -@property(atomic, readonly, strong, nullable) NSArray> *decorators; - @end // @protocol GTMSessionFetcherServiceProtocol __deprecated_msg("implement GTMSessionFetcherAuthorizer instead") @@ -651,7 +641,7 @@ __deprecated_msg("implement GTMSessionFetcherAuthorizer instead") // This method is being phased out. While implementing it is necessary to satisfy // the protocol's @required restrictions, conforming implementations that implement -// authorizeRequest:completionHandler: will have that called instead. +// authorizeRequest:completionHandler: will have that called instead. // be removed in a future version when GTMFetcherAuthorizationProtocol is // also removed. - (void)authorizeRequest:(nullable NSMutableURLRequest *)request @@ -951,7 +941,7 @@ __deprecated_msg("implement GTMSessionFetcherAuthorizer instead") #pragma clang diagnostic pop // The service object that created and monitors this fetcher, if any. -@property(atomic, strong) id service; +@property(atomic, strong) GTMSessionFetcherService *service; // The host, if any, used to classify this fetcher in the fetcher service. @property(atomic, copy, nullable) NSString *serviceHost; @@ -1098,9 +1088,16 @@ __deprecated_msg("implement GTMSessionFetcherAuthorizer instead") @property(atomic, readonly, getter=isFetching) BOOL fetching; // Cancel the fetch of the request that's currently in progress. The completion handler -// will not be called. +// will be called with `GTMSessionFetcherErrorUserCancelled` if the property +// `stopFetchingTriggersCompletionHandler` is `YES`. - (void)stopFetching; +// Call callbacks with `GTMSessionFetcherErrorUserCancelled` after a `stopFetching`. +// It cannot be changed once the fetcher starts. This should be set to `YES` from +// Swift clients before `beginFetch` with `async/await` since the Swift runtime +// requires the completion handler to be called. +@property(atomic, assign) BOOL stopFetchingTriggersCompletionHandler; + // A block to be called when the fetch completes. @property(atomic, copy, nullable) GTMSessionFetcherCompletionHandler completionHandler; diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherService.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherService.h index 510daa0d0..e1e457ba8 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherService.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherService.h @@ -88,6 +88,8 @@ extern NSString *const kGTMSessionFetcherServiceSessionKey; @property(atomic, strong, nullable) id authorizer; #pragma clang diagnostic pop +@property(atomic, readonly, strong, nullable) NSOperationQueue *delegateQueue; + // Delegate queue used by the session when calling back to the fetcher. The default // is the main queue. Changing this does not affect the queue used to call back to the // application; that is specified by the callbackQueue property above. @@ -157,6 +159,9 @@ extern NSString *const kGTMSessionFetcherServiceSessionKey; - (void)stopAllFetchers; +// All decorators added to the service. +@property(atomic, readonly, strong, nullable) NSArray> *decorators; + // Holds a weak reference to `decorator`. When creating a fetcher via // `-fetcherWithRequest:fetcherClass:`, each registered `decorator` can inspect and potentially // change the fetcher's request before it starts. Decorators are invoked in the order in which @@ -166,18 +171,23 @@ extern NSString *const kGTMSessionFetcherServiceSessionKey; // Removes a `decorator` previously passed to `-removeDecorator:`. - (void)removeDecorator:(id)decorator; -// Methods for use by the fetcher class only. -- (nullable NSURLSession *)session; -- (nullable NSURLSession *)sessionForFetcherCreation; -- (nullable id)sessionDelegate; -- (nullable NSDate *)stoppedAllFetchersDate; - // The testBlock can inspect its fetcher parameter's request property to // determine which fetcher is being faked. @property(atomic, copy, nullable) GTMSessionFetcherTestBlock testBlock; @end +@interface GTMSessionFetcherService (FetcherCallbacks) +// Checks whether the fetcher should delay starting to avoid overloading the host. +- (BOOL)fetcherShouldBeginFetching:(nonnull GTMSessionFetcher *)fetcher; + +// Notifies the service that the fetcher did begin fetching. +- (void)fetcherDidBeginFetching:(nonnull GTMSessionFetcher *)fetcher; + +// Notifies the service that the fetcher has stopped fetching. +- (void)fetcherDidStop:(nonnull GTMSessionFetcher *)fetcher; +@end + @interface GTMSessionFetcherService (TestingSupport) // Convenience methods to create a fetcher service for testing. diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h index 8557ad407..3537ccc9e 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h @@ -57,6 +57,8 @@ extern int64_t const kGTMSessionUploadFetcherMaximumDemandBufferSize; // Notification that the upload location URL was provided by the server. extern NSString *const kGTMSessionFetcherUploadLocationObtainedNotification; +// Notification that the exponential backoff for upload has started. +extern NSString *const kGTMSessionFetcherUploadInitialBackoffStartedNotification; // Block to provide data during uploads. // @@ -133,6 +135,10 @@ typedef void (^GTMSessionUploadFetcherCancellationHandler)(GTMSessionFetcher *_N @property(atomic, copy) NSString *uploadMIMEType; @property(atomic, readonly, assign) int64_t chunkSize; @property(atomic, readonly, assign) int64_t currentOffset; +@property(atomic, assign) double uploadRetryFactor; +@property(atomic, assign) NSTimeInterval maxUploadRetryInterval; +@property(atomic, assign) NSTimeInterval minUploadRetryInterval; + // Reflects the original NSURLRequest's @c allowCellularAccess property. @property(atomic, readonly, assign) BOOL allowsCellularAccess; diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h new file mode 100644 index 000000000..baffe3c17 --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h @@ -0,0 +1,36 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST + +#ifdef SWIFT_PACKAGE +@import GTMAppAuth; +#else +#import +#endif + +NS_ASSUME_NONNULL_BEGIN + +// A specialized GTMAppAuthFetcherAuthorization subclass with EMM support. +@interface GIDAppAuthFetcherAuthorizationWithEMMSupport : GTMAppAuthFetcherAuthorization + +@end + +NS_ASSUME_NONNULL_END + +#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.m b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.m new file mode 100644 index 000000000..814a73fcd --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.m @@ -0,0 +1,129 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST + +#import "GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h" + +#import "GoogleSignIn/Sources/GIDEMMSupport.h" + +#ifdef SWIFT_PACKAGE +@import AppAuth; +@import GTMAppAuth; +#else +#import +#import +#endif + +NS_ASSUME_NONNULL_BEGIN + +// The specialized GTMAppAuthFetcherAuthorization delegate that handles potential EMM error +// responses. +@interface GIDAppAuthFetcherAuthorizationEMMChainedDelegate : NSObject + +// Initializes with chained delegate and selector. +- (instancetype)initWithDelegate:(id)delegate selector:(SEL)selector; + +// The callback method for GTMAppAuthFetcherAuthorization to invoke. +- (void)authentication:(GTMAppAuthFetcherAuthorization *)auth + request:(NSMutableURLRequest *)request + finishedWithError:(nullable NSError *)error; + +@end + +@implementation GIDAppAuthFetcherAuthorizationEMMChainedDelegate { + // We use a weak reference here to match GTMAppAuthFetcherAuthorization. + __weak id _delegate; + SEL _selector; + // We need to maintain a reference to the chained delegate because GTMAppAuthFetcherAuthorization + // only keeps a weak reference. + GIDAppAuthFetcherAuthorizationEMMChainedDelegate *_retained_self; +} + +- (instancetype)initWithDelegate:(id)delegate selector:(SEL)selector { + self = [super init]; + if (self) { + _delegate = delegate; + _selector = selector; + _retained_self = self; + } + return self; +} + +- (void)authentication:(GTMAppAuthFetcherAuthorization *)auth + request:(NSMutableURLRequest *)request + finishedWithError:(nullable NSError *)error { + [GIDEMMSupport handleTokenFetchEMMError:error completion:^(NSError *_Nullable error) { + if (!self->_delegate || !self->_selector) { + return; + } + NSMethodSignature *signature = [self->_delegate methodSignatureForSelector:self->_selector]; + if (!signature) { + return; + } + id argument1 = auth; + id argument2 = request; + id argument3 = error; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + [invocation setTarget:self->_delegate]; // index 0 + [invocation setSelector:self->_selector]; // index 1 + [invocation setArgument:&argument1 atIndex:2]; + [invocation setArgument:&argument2 atIndex:3]; + [invocation setArgument:&argument3 atIndex:4]; + [invocation invoke]; + }]; + // Prepare to deallocate the chained delegate instance because the above block will retain the + // iVar references it uses. + _retained_self = nil; +} + +@end + +@implementation GIDAppAuthFetcherAuthorizationWithEMMSupport + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" +- (void)authorizeRequest:(nullable NSMutableURLRequest *)request + delegate:(id)delegate + didFinishSelector:(SEL)sel { +#pragma clang diagnostic pop + GIDAppAuthFetcherAuthorizationEMMChainedDelegate *chainedDelegate = + [[GIDAppAuthFetcherAuthorizationEMMChainedDelegate alloc] initWithDelegate:delegate + selector:sel]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [super authorizeRequest:request + delegate:chainedDelegate + didFinishSelector:@selector(authentication:request:finishedWithError:)]; +#pragma clang diagnostic pop +} + +- (void)authorizeRequest:(nullable NSMutableURLRequest *)request + completionHandler:(GTMAppAuthFetcherAuthorizationCompletion)handler { + [super authorizeRequest:request completionHandler:^(NSError *_Nullable error) { + [GIDEMMSupport handleTokenFetchEMMError:error completion:^(NSError *_Nullable error) { + handler(error); + }]; + }]; +} + +@end + +NS_ASSUME_NONNULL_END + +#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.h new file mode 100644 index 000000000..e38ee1517 --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.h @@ -0,0 +1,32 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@class OIDAuthState; + +NS_ASSUME_NONNULL_BEGIN + +// Internal class for GIDGoogleUser NSCoding backward compatibility. +@interface GIDAuthentication : NSObject + +@property(nonatomic) OIDAuthState* authState; + +- (instancetype)initWithAuthState:(OIDAuthState *)authState; + +@end + +NS_ASSUME_NONNULL_END diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.m b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.m index dcf7cc2f1..d8a400f28 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.m +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.m @@ -1,377 +1,41 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDAuthentication.h" - -#import "GoogleSignIn/Sources/GIDAuthentication_Private.h" - -#import "GoogleSignIn/Sources/GIDSignInPreferences.h" - -#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST -#import "GoogleSignIn/Sources/GIDEMMErrorHandler.h" -#import "GoogleSignIn/Sources/GIDMDMPasscodeState.h" -#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST - -#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h" +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GoogleSignIn/Sources/GIDAuthentication.h" #ifdef SWIFT_PACKAGE @import AppAuth; #else -#import -#import -#import -#import -#import -#import -#import -#import +#import #endif NS_ASSUME_NONNULL_BEGIN -// Minimal time interval before expiration for the access token or it needs to be refreshed. -NSTimeInterval kMinimalTimeToExpire = 60.0; - -// Key constants used for encode and decode. static NSString *const kAuthStateKey = @"authState"; -// Additional parameter names for EMM. -static NSString *const kEMMSupportParameterName = @"emm_support"; -static NSString *const kEMMOSVersionParameterName = @"device_os"; -static NSString *const kEMMPasscodeInfoParameterName = @"emm_passcode_info"; - -// Old UIDevice system name for iOS. -static NSString *const kOldIOSSystemName = @"iPhone OS"; - -// New UIDevice system name for iOS. -static NSString *const kNewIOSSystemName = @"iOS"; - -#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST - -// The specialized GTMAppAuthFetcherAuthorization delegate that handles potential EMM error -// responses. -@interface GTMAppAuthFetcherAuthorizationEMMChainedDelegate : NSObject - -// Initializes with chained delegate and selector. -- (instancetype)initWithDelegate:(id)delegate selector:(SEL)selector; - -// The callback method for GTMAppAuthFetcherAuthorization to invoke. -- (void)authentication:(GTMAppAuthFetcherAuthorization *)auth - request:(NSMutableURLRequest *)request - finishedWithError:(nullable NSError *)error; - -@end - -@implementation GTMAppAuthFetcherAuthorizationEMMChainedDelegate { - // We use a weak reference here to match GTMAppAuthFetcherAuthorization. - __weak id _delegate; - SEL _selector; - // We need to maintain a reference to the chained delegate because GTMAppAuthFetcherAuthorization - // only keeps a weak reference. - GTMAppAuthFetcherAuthorizationEMMChainedDelegate *_retained_self; -} - -- (instancetype)initWithDelegate:(id)delegate selector:(SEL)selector { - self = [super init]; - if (self) { - _delegate = delegate; - _selector = selector; - _retained_self = self; - } - return self; -} - -- (void)authentication:(GTMAppAuthFetcherAuthorization *)auth - request:(NSMutableURLRequest *)request - finishedWithError:(nullable NSError *)error { - [GIDAuthentication handleTokenFetchEMMError:error completion:^(NSError *_Nullable error) { - if (!self->_delegate || !self->_selector) { - return; - } - NSMethodSignature *signature = [self->_delegate methodSignatureForSelector:self->_selector]; - if (!signature) { - return; - } - id argument1 = auth; - id argument2 = request; - id argument3 = error; - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; - [invocation setTarget:self->_delegate]; // index 0 - [invocation setSelector:self->_selector]; // index 1 - [invocation setArgument:&argument1 atIndex:2]; - [invocation setArgument:&argument2 atIndex:3]; - [invocation setArgument:&argument3 atIndex:4]; - [invocation invoke]; - }]; - // Prepare to deallocate the chained delegate instance because the above block will retain the - // iVar references it uses. - _retained_self = nil; -} - -@end - -// A specialized GTMAppAuthFetcherAuthorization subclass with EMM support. -@interface GTMAppAuthFetcherAuthorizationWithEMMSupport : GTMAppAuthFetcherAuthorization -@end - -@implementation GTMAppAuthFetcherAuthorizationWithEMMSupport - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (void)authorizeRequest:(nullable NSMutableURLRequest *)request - delegate:(id)delegate - didFinishSelector:(SEL)sel { -#pragma clang diagnostic pop - GTMAppAuthFetcherAuthorizationEMMChainedDelegate *chainedDelegate = - [[GTMAppAuthFetcherAuthorizationEMMChainedDelegate alloc] initWithDelegate:delegate - selector:sel]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - [super authorizeRequest:request - delegate:chainedDelegate - didFinishSelector:@selector(authentication:request:finishedWithError:)]; -#pragma clang diagnostic pop -} - -- (void)authorizeRequest:(nullable NSMutableURLRequest *)request - completionHandler:(GTMAppAuthFetcherAuthorizationCompletion)handler { - [super authorizeRequest:request completionHandler:^(NSError *_Nullable error) { - [GIDAuthentication handleTokenFetchEMMError:error completion:^(NSError *_Nullable error) { - handler(error); - }]; - }]; -} - -@end - -#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST - -@implementation GIDAuthentication { - // A queue for pending authentication handlers so we don't fire multiple requests in parallel. - // Access to this ivar should be synchronized. - NSMutableArray *_authenticationHandlerQueue; -} +@implementation GIDAuthentication - (instancetype)initWithAuthState:(OIDAuthState *)authState { - if (!authState) { - return nil; - } self = [super init]; if (self) { - _authenticationHandlerQueue = [[NSMutableArray alloc] init]; _authState = authState; } return self; } -#pragma mark - Public property accessors - -- (NSString *)clientID { - return _authState.lastAuthorizationResponse.request.clientID; -} - -- (NSString *)accessToken { - return _authState.lastTokenResponse.accessToken; -} - -- (NSDate *)accessTokenExpirationDate { - return _authState.lastTokenResponse.accessTokenExpirationDate; -} - -- (NSString *)refreshToken { - return _authState.refreshToken; -} - -- (nullable NSString *)idToken { - return _authState.lastTokenResponse.idToken; -} - -- (nullable NSDate *)idTokenExpirationDate { - return [[[OIDIDToken alloc] initWithIDTokenString:self.idToken] expiresAt]; -} - -#pragma mark - Private property accessors - -#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST -- (NSString *)emmSupport { - return - _authState.lastAuthorizationResponse.request.additionalParameters[kEMMSupportParameterName]; -} -#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST - -#pragma mark - Public methods - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -- (id)fetcherAuthorizer { -#pragma clang diagnostic pop -#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST - GTMAppAuthFetcherAuthorization *authorization = self.emmSupport ? - [[GTMAppAuthFetcherAuthorizationWithEMMSupport alloc] initWithAuthState:_authState] : - [[GTMAppAuthFetcherAuthorization alloc] initWithAuthState:_authState]; -#elif TARGET_OS_OSX || TARGET_OS_MACCATALYST - GTMAppAuthFetcherAuthorization *authorization = - [[GTMAppAuthFetcherAuthorization alloc] initWithAuthState:_authState]; -#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST - authorization.tokenRefreshDelegate = self; - return authorization; -} - -- (void)doWithFreshTokens:(GIDAuthenticationAction)action { - if (!([self.accessTokenExpirationDate timeIntervalSinceNow] < kMinimalTimeToExpire || - (self.idToken && [self.idTokenExpirationDate timeIntervalSinceNow] < kMinimalTimeToExpire))) { - dispatch_async(dispatch_get_main_queue(), ^{ - action(self, nil); - }); - return; - } - @synchronized (_authenticationHandlerQueue) { - // Push the handler into the callback queue. - [_authenticationHandlerQueue addObject:[action copy]]; - if (_authenticationHandlerQueue.count > 1) { - // This is not the first handler in the queue, no fetch is needed. - return; - } - } - // This is the first handler in the queue, a fetch is needed. - NSMutableDictionary *additionalParameters = [@{} mutableCopy]; -#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST - [additionalParameters addEntriesFromDictionary: - [GIDAuthentication updatedEMMParametersWithParameters: - _authState.lastTokenResponse.request.additionalParameters]]; -#elif TARGET_OS_OSX || TARGET_OS_MACCATALYST - [additionalParameters addEntriesFromDictionary: - _authState.lastTokenResponse.request.additionalParameters]; -#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST - additionalParameters[kSDKVersionLoggingParameter] = GIDVersion(); - additionalParameters[kEnvironmentLoggingParameter] = GIDEnvironment(); - - OIDTokenRequest *tokenRefreshRequest = - [_authState tokenRefreshRequestWithAdditionalParameters:additionalParameters]; - [OIDAuthorizationService performTokenRequest:tokenRefreshRequest - originalAuthorizationResponse:_authState.lastAuthorizationResponse - callback:^(OIDTokenResponse *_Nullable tokenResponse, - NSError *_Nullable error) { - if (tokenResponse) { - [self willChangeValueForKey:NSStringFromSelector(@selector(accessToken))]; - [self willChangeValueForKey:NSStringFromSelector(@selector(accessTokenExpirationDate))]; - [self willChangeValueForKey:NSStringFromSelector(@selector(idToken))]; - [self willChangeValueForKey:NSStringFromSelector(@selector(idTokenExpirationDate))]; - [self->_authState updateWithTokenResponse:tokenResponse error:nil]; - [self didChangeValueForKey:NSStringFromSelector(@selector(accessToken))]; - [self didChangeValueForKey:NSStringFromSelector(@selector(accessTokenExpirationDate))]; - [self didChangeValueForKey:NSStringFromSelector(@selector(idToken))]; - [self didChangeValueForKey:NSStringFromSelector(@selector(idTokenExpirationDate))]; - } else { - if (error.domain == OIDOAuthTokenErrorDomain) { - [self->_authState updateWithAuthorizationError:error]; - } - } -#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST - [GIDAuthentication handleTokenFetchEMMError:error completion:^(NSError *_Nullable error) { - // Process the handler queue to call back. - NSArray *authenticationHandlerQueue; - @synchronized(self->_authenticationHandlerQueue) { - authenticationHandlerQueue = [self->_authenticationHandlerQueue copy]; - [self->_authenticationHandlerQueue removeAllObjects]; - } - for (GIDAuthenticationAction action in authenticationHandlerQueue) { - dispatch_async(dispatch_get_main_queue(), ^{ - action(error ? nil : self, error); - }); - } - }]; -#elif TARGET_OS_OSX || TARGET_OS_MACCATALYST - NSArray *authenticationHandlerQueue; - @synchronized(self->_authenticationHandlerQueue) { - authenticationHandlerQueue = [self->_authenticationHandlerQueue copy]; - [self->_authenticationHandlerQueue removeAllObjects]; - } - for (GIDAuthenticationAction action in authenticationHandlerQueue) { - dispatch_async(dispatch_get_main_queue(), ^{ - action(error ? nil : self, error); - }); - } -#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST - }]; -} - -#pragma mark - Private methods - -#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST - -+ (NSDictionary *)parametersWithParameters:(NSDictionary *)parameters - emmSupport:(nullable NSString *)emmSupport - isPasscodeInfoRequired:(BOOL)isPasscodeInfoRequired { - if (!emmSupport) { - return parameters; - } - NSMutableDictionary *allParameters = [(parameters ?: @{}) mutableCopy]; - allParameters[kEMMSupportParameterName] = emmSupport; - UIDevice *device = [UIDevice currentDevice]; - NSString *systemName = device.systemName; - if ([systemName isEqualToString:kOldIOSSystemName]) { - systemName = kNewIOSSystemName; - } - allParameters[kEMMOSVersionParameterName] = - [NSString stringWithFormat:@"%@ %@", systemName, device.systemVersion]; - if (isPasscodeInfoRequired) { - allParameters[kEMMPasscodeInfoParameterName] = [GIDMDMPasscodeState passcodeState].info; - } - return allParameters; -} - -+ (NSDictionary *)updatedEMMParametersWithParameters:(NSDictionary *)parameters { - return [self parametersWithParameters:parameters - emmSupport:parameters[kEMMSupportParameterName] - isPasscodeInfoRequired:parameters[kEMMPasscodeInfoParameterName] != nil]; -} - -+ (void)handleTokenFetchEMMError:(nullable NSError *)error - completion:(void (^)(NSError *_Nullable))completion { - NSDictionary *errorJSON = error.userInfo[OIDOAuthErrorResponseErrorKey]; - if (errorJSON) { - __block BOOL handled = NO; - handled = [[GIDEMMErrorHandler sharedInstance] handleErrorFromResponse:errorJSON - completion:^() { - if (handled) { - completion([NSError errorWithDomain:kGIDSignInErrorDomain - code:kGIDSignInErrorCodeEMM - userInfo:error.userInfo]); - } else { - completion(error); - } - }]; - } else { - completion(error); - } -} - -#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST - -#pragma mark - GTMAppAuthFetcherAuthorizationTokenRefreshDelegate - -- (nullable NSDictionary *)additionalRefreshParameters: - (GTMAppAuthFetcherAuthorization *)authorization { -#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST - return [GIDAuthentication updatedEMMParametersWithParameters: - authorization.authState.lastTokenResponse.request.additionalParameters]; -#elif TARGET_OS_OSX || TARGET_OS_MACCATALYST - return authorization.authState.lastTokenResponse.request.additionalParameters; -#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST -} - #pragma mark - NSSecureCoding + (BOOL)supportsSecureCoding { @@ -381,14 +45,13 @@ + (BOOL)supportsSecureCoding { - (nullable instancetype)initWithCoder:(NSCoder *)decoder { self = [super init]; if (self) { - _authenticationHandlerQueue = [[NSMutableArray alloc] init]; _authState = [decoder decodeObjectOfClass:[OIDAuthState class] forKey:kAuthStateKey]; } return self; } - (void)encodeWithCoder:(NSCoder *)encoder { - [encoder encodeObject:_authState forKey:kAuthStateKey]; + [encoder encodeObject:self.authState forKey:kAuthStateKey]; } @end diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.m b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.m index 4e74b1fe1..1429a4355 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.m +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.m @@ -267,13 +267,7 @@ - (UIAlertController *)appVerificationRequiredAlertWithURL:(nullable NSURL *)url } - (void)openURL:(NSURL *)url { - if (@available(iOS 10, *)) { - [UIApplication.sharedApplication openURL:url options:@{} completionHandler:nil]; - } else { -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_10_0 - [UIApplication.sharedApplication openURL:url]; -#endif // __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_10_0 - } + [UIApplication.sharedApplication openURL:url options:@{} completionHandler:nil]; } #pragma mark - Localization diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication_Private.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.h similarity index 63% rename from v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication_Private.h rename to v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.h index c967a0daa..d6f4e92eb 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication_Private.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.h @@ -1,5 +1,5 @@ /* - * Copyright 2021 Google LLC + * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,45 +14,31 @@ * limitations under the License. */ -#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDAuthentication.h" +#import -#ifdef SWIFT_PACKAGE -@import AppAuth; -@import GTMAppAuth; -#else -#import -#import -#endif +#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST -NS_ASSUME_NONNULL_BEGIN +#import -// Internal methods for the class that are not part of the public API. -@interface GIDAuthentication () +NS_ASSUME_NONNULL_BEGIN -// A representation of the state of the OAuth session for this instance. -@property(nonatomic, readonly) OIDAuthState *authState; +// A class to support EMM (Enterprise Mobility Management). +@interface GIDEMMSupport : NSObject -#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST -// A string indicating support for Enterprise Mobility Management. -@property(nonatomic, readonly) NSString *emmSupport; -#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST +// Handles potential EMM error from token fetch response. ++ (void)handleTokenFetchEMMError:(nullable NSError *)error + completion:(void (^)(NSError *_Nullable))completion; -- (instancetype)initWithAuthState:(OIDAuthState *)authState; +// Gets a new set of URL parameters that contains updated EMM-related URL parameters if needed. ++ (NSDictionary *)updatedEMMParametersWithParameters:(NSDictionary *)parameters; -#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST // Gets a new set of URL parameters that also contains EMM-related URL parameters if needed. + (NSDictionary *)parametersWithParameters:(NSDictionary *)parameters emmSupport:(nullable NSString *)emmSupport isPasscodeInfoRequired:(BOOL)isPasscodeInfoRequired; -// Gets a new set of URL parameters that contains updated EMM-related URL parameters if needed. -+ (NSDictionary *)updatedEMMParametersWithParameters:(NSDictionary *)parameters; - -// Handles potential EMM error from token fetch response. -+ (void)handleTokenFetchEMMError:(nullable NSError *)error - completion:(void (^)(NSError *_Nullable))completion; -#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST - @end NS_ASSUME_NONNULL_END + +#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.m b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.m new file mode 100644 index 000000000..a796f5fb7 --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.m @@ -0,0 +1,101 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST + +#import "GoogleSignIn/Sources/GIDEMMSupport.h" + +#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h" + +#import "GoogleSignIn/Sources/GIDEMMErrorHandler.h" +#import "GoogleSignIn/Sources/GIDMDMPasscodeState.h" + +#ifdef SWIFT_PACKAGE +@import AppAuth; +#else +#import +#endif + +NS_ASSUME_NONNULL_BEGIN + +// Additional parameter names for EMM. +static NSString *const kEMMSupportParameterName = @"emm_support"; +static NSString *const kEMMOSVersionParameterName = @"device_os"; +static NSString *const kEMMPasscodeInfoParameterName = @"emm_passcode_info"; + +// Old UIDevice system name for iOS. +static NSString *const kOldIOSSystemName = @"iPhone OS"; + +// New UIDevice system name for iOS. +static NSString *const kNewIOSSystemName = @"iOS"; + +@implementation GIDEMMSupport + ++ (void)handleTokenFetchEMMError:(nullable NSError *)error + completion:(void (^)(NSError *_Nullable))completion { + NSDictionary *errorJSON = error.userInfo[OIDOAuthErrorResponseErrorKey]; + if (errorJSON) { + __block BOOL handled = NO; + handled = [[GIDEMMErrorHandler sharedInstance] handleErrorFromResponse:errorJSON + completion:^() { + if (handled) { + completion([NSError errorWithDomain:kGIDSignInErrorDomain + code:kGIDSignInErrorCodeEMM + userInfo:error.userInfo]); + } else { + completion(error); + } + }]; + } else { + completion(error); + } +} + ++ (NSDictionary *)updatedEMMParametersWithParameters:(NSDictionary *)parameters { + return [self parametersWithParameters:parameters + emmSupport:parameters[kEMMSupportParameterName] + isPasscodeInfoRequired:parameters[kEMMPasscodeInfoParameterName] != nil]; +} + + ++ (NSDictionary *)parametersWithParameters:(NSDictionary *)parameters + emmSupport:(nullable NSString *)emmSupport + isPasscodeInfoRequired:(BOOL)isPasscodeInfoRequired { + if (!emmSupport) { + return parameters; + } + NSMutableDictionary *allParameters = [(parameters ?: @{}) mutableCopy]; + allParameters[kEMMSupportParameterName] = emmSupport; + UIDevice *device = [UIDevice currentDevice]; + NSString *systemName = device.systemName; + if ([systemName isEqualToString:kOldIOSSystemName]) { + systemName = kNewIOSSystemName; + } + allParameters[kEMMOSVersionParameterName] = + [NSString stringWithFormat:@"%@ %@", systemName, device.systemVersion]; + if (isPasscodeInfoRequired) { + allParameters[kEMMPasscodeInfoParameterName] = [GIDMDMPasscodeState passcodeState].info; + } + return allParameters; +} + +@end + +NS_ASSUME_NONNULL_END + +#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser.m b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser.m index 34e636d63..828ac5b6f 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser.m +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser.m @@ -1,4 +1,4 @@ -// Copyright 2021 Google LLC +// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,10 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. +#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h" + #import "GoogleSignIn/Sources/GIDGoogleUser_Private.h" -#import "GoogleSignIn/Sources/GIDAuthentication_Private.h" +#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h" +#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h" + +#import "GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h" +#import "GoogleSignIn/Sources/GIDAuthentication.h" +#import "GoogleSignIn/Sources/GIDEMMSupport.h" #import "GoogleSignIn/Sources/GIDProfileData_Private.h" +#import "GoogleSignIn/Sources/GIDSignIn_Private.h" +#import "GoogleSignIn/Sources/GIDSignInPreferences.h" +#import "GoogleSignIn/Sources/GIDToken_Private.h" #ifdef SWIFT_PACKAGE @import AppAuth; @@ -29,57 +39,41 @@ static NSString *const kHostedDomainIDTokenClaimKey = @"hd"; // Key constants used for encode and decode. -static NSString *const kAuthenticationKey = @"authentication"; static NSString *const kProfileDataKey = @"profileData"; -static NSString *const kAuthState = @"authState"; +static NSString *const kAuthStateKey = @"authState"; // Parameters for the token exchange endpoint. static NSString *const kAudienceParameter = @"audience"; static NSString *const kOpenIDRealmParameter = @"openid.realm"; +// Additional parameter names for EMM. +static NSString *const kEMMSupportParameterName = @"emm_support"; + +// Minimal time interval before expiration for the access token or it needs to be refreshed. +static NSTimeInterval const kMinimalTimeToExpire = 60.0; + @implementation GIDGoogleUser { - OIDAuthState *_authState; + GIDConfiguration *_cachedConfiguration; + + // A queue for pending token refresh handlers so we don't fire multiple requests in parallel. + // Access to this ivar should be synchronized. + NSMutableArray *_tokenRefreshHandlerQueue; } - (nullable NSString *)userID { - NSString *idToken = [self idToken]; - if (idToken) { - OIDIDToken *idTokenDecoded = [[OIDIDToken alloc] initWithIDTokenString:idToken]; + NSString *idTokenString = self.idToken.tokenString; + if (idTokenString) { + OIDIDToken *idTokenDecoded = [[OIDIDToken alloc] initWithIDTokenString:idTokenString]; if (idTokenDecoded && idTokenDecoded.subject) { return [idTokenDecoded.subject copy]; } } - return nil; } -- (nullable NSString *)hostedDomain { - NSString *idToken = [self idToken]; - if (idToken) { - OIDIDToken *idTokenDecoded = [[OIDIDToken alloc] initWithIDTokenString:idToken]; - if (idTokenDecoded && idTokenDecoded.claims[kHostedDomainIDTokenClaimKey]) { - return [idTokenDecoded.claims[kHostedDomainIDTokenClaimKey] copy]; - } - } - - return nil; -} - -- (nullable NSString *)serverAuthCode { - return [_authState.lastTokenResponse.additionalParameters[@"server_code"] copy]; -} - -- (nullable NSString *)serverClientID { - return [_authState.lastTokenResponse.request.additionalParameters[kAudienceParameter] copy]; -} - -- (nullable NSString *)openIDRealm { - return [_authState.lastTokenResponse.request.additionalParameters[kOpenIDRealmParameter] copy]; -} - - (nullable NSArray *)grantedScopes { NSArray *grantedScopes; - NSString *grantedScopeString = _authState.lastTokenResponse.scope; + NSString *grantedScopeString = self.authState.lastTokenResponse.scope; if (grantedScopeString) { // If we have a 'scope' parameter from the backend, this is authoritative. // Remove leading and trailing whitespace. @@ -95,28 +89,237 @@ - (nullable NSString *)openIDRealm { return grantedScopes; } +- (GIDConfiguration *)configuration { + @synchronized(self) { + // Caches the configuration since it would not change for one GIDGoogleUser instance. + if (!_cachedConfiguration) { + NSString *clientID = self.authState.lastAuthorizationResponse.request.clientID; + NSString *serverClientID = + self.authState.lastTokenResponse.request.additionalParameters[kAudienceParameter]; + NSString *openIDRealm = + self.authState.lastTokenResponse.request.additionalParameters[kOpenIDRealmParameter]; + + _cachedConfiguration = [[GIDConfiguration alloc] initWithClientID:clientID + serverClientID:serverClientID + hostedDomain:[self hostedDomain] + openIDRealm:openIDRealm]; + }; + } + return _cachedConfiguration; +} + +- (void)refreshTokensIfNeededWithCompletion:(GIDGoogleUserCompletion)completion { + if (!([self.accessToken.expirationDate timeIntervalSinceNow] < kMinimalTimeToExpire || + (self.idToken && [self.idToken.expirationDate timeIntervalSinceNow] < kMinimalTimeToExpire))) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(self, nil); + }); + return; + } + @synchronized (_tokenRefreshHandlerQueue) { + // Push the handler into the callback queue. + [_tokenRefreshHandlerQueue addObject:[completion copy]]; + if (_tokenRefreshHandlerQueue.count > 1) { + // This is not the first handler in the queue, no fetch is needed. + return; + } + } + // This is the first handler in the queue, a fetch is needed. + NSMutableDictionary *additionalParameters = [@{} mutableCopy]; +#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST + [additionalParameters addEntriesFromDictionary: + [GIDEMMSupport updatedEMMParametersWithParameters: + self.authState.lastTokenResponse.request.additionalParameters]]; +#elif TARGET_OS_OSX || TARGET_OS_MACCATALYST + [additionalParameters addEntriesFromDictionary: + self.authState.lastTokenResponse.request.additionalParameters]; +#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST + additionalParameters[kSDKVersionLoggingParameter] = GIDVersion(); + additionalParameters[kEnvironmentLoggingParameter] = GIDEnvironment(); + + OIDTokenRequest *tokenRefreshRequest = + [self.authState tokenRefreshRequestWithAdditionalParameters:additionalParameters]; + [OIDAuthorizationService performTokenRequest:tokenRefreshRequest + originalAuthorizationResponse:self.authState.lastAuthorizationResponse + callback:^(OIDTokenResponse *_Nullable tokenResponse, + NSError *_Nullable error) { + if (tokenResponse) { + [self.authState updateWithTokenResponse:tokenResponse error:nil]; + } else { + if (error.domain == OIDOAuthTokenErrorDomain) { + [self.authState updateWithAuthorizationError:error]; + } + } +#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST + [GIDEMMSupport handleTokenFetchEMMError:error completion:^(NSError *_Nullable error) { + // Process the handler queue to call back. + NSArray *refreshTokensHandlerQueue; + @synchronized(self->_tokenRefreshHandlerQueue) { + refreshTokensHandlerQueue = [self->_tokenRefreshHandlerQueue copy]; + [self->_tokenRefreshHandlerQueue removeAllObjects]; + } + for (GIDGoogleUserCompletion completion in refreshTokensHandlerQueue) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(error ? nil : self, error); + }); + } + }]; +#elif TARGET_OS_OSX || TARGET_OS_MACCATALYST + NSArray *refreshTokensHandlerQueue; + @synchronized(self->_tokenRefreshHandlerQueue) { + refreshTokensHandlerQueue = [self->_tokenRefreshHandlerQueue copy]; + [self->_tokenRefreshHandlerQueue removeAllObjects]; + } + for (GIDGoogleUserCompletion completion in refreshTokensHandlerQueue) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(error ? nil : self, error); + }); + } +#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST + }]; +} + +- (OIDAuthState *) authState{ + return ((GTMAppAuthFetcherAuthorization *)self.fetcherAuthorizer).authState; +} + +- (void)addScopes:(NSArray *)scopes +#if TARGET_OS_IOS || TARGET_OS_MACCATALYST + presentingViewController:(UIViewController *)presentingViewController +#elif TARGET_OS_OSX + presentingWindow:(NSWindow *)presentingWindow +#endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST + completion:(nullable void (^)(GIDSignInResult *_Nullable signInResult, + NSError *_Nullable error))completion { + if (self != GIDSignIn.sharedInstance.currentUser) { + NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain + code:kGIDSignInErrorCodeMismatchWithCurrentUser + userInfo:nil]; + if (completion) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(nil, error); + }); + } + return; + } + + [GIDSignIn.sharedInstance addScopes:scopes +#if TARGET_OS_IOS || TARGET_OS_MACCATALYST + presentingViewController:presentingViewController +#elif TARGET_OS_OSX + presentingWindow:presentingWindow +#endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST + completion:completion]; +} + #pragma mark - Private Methods +#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST +- (nullable NSString *)emmSupport { + return self.authState.lastAuthorizationResponse + .request.additionalParameters[kEMMSupportParameterName]; +} +#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST + - (instancetype)initWithAuthState:(OIDAuthState *)authState profileData:(nullable GIDProfileData *)profileData { self = [super init]; if (self) { - [self updateAuthState:authState profileData:profileData]; + _tokenRefreshHandlerQueue = [[NSMutableArray alloc] init]; + _profile = profileData; + +#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST + GTMAppAuthFetcherAuthorization *authorization = self.emmSupport ? + [[GIDAppAuthFetcherAuthorizationWithEMMSupport alloc] initWithAuthState:authState] : + [[GTMAppAuthFetcherAuthorization alloc] initWithAuthState:authState]; +#elif TARGET_OS_OSX || TARGET_OS_MACCATALYST + GTMAppAuthFetcherAuthorization *authorization = + [[GTMAppAuthFetcherAuthorization alloc] initWithAuthState:authState]; +#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST + authorization.tokenRefreshDelegate = self; + authorization.authState.stateChangeDelegate = self; + self.fetcherAuthorizer = authorization; + + [self updateTokensWithAuthState:authState]; } return self; } -- (void)updateAuthState:(OIDAuthState *)authState - profileData:(nullable GIDProfileData *)profileData { - _authState = authState; - _authentication = [[GIDAuthentication alloc] initWithAuthState:authState]; - _profile = profileData; +- (void)updateWithTokenResponse:(OIDTokenResponse *)tokenResponse + authorizationResponse:(OIDAuthorizationResponse *)authorizationResponse + profileData:(nullable GIDProfileData *)profileData { + @synchronized(self) { + _profile = profileData; + + // We don't want to trigger the delegate before we update authState completely. So we unset the + // delegate before the first update. Also the order of updates is important because + // `updateWithAuthorizationResponse` would clear the last token reponse and refresh token. + // TODO: Rewrite authState update logic when the issue is addressed.(openid/AppAuth-iOS#728) + self.authState.stateChangeDelegate = nil; + [self.authState updateWithAuthorizationResponse:authorizationResponse error:nil]; + self.authState.stateChangeDelegate = self; + [self.authState updateWithTokenResponse:tokenResponse error:nil]; + } +} + +- (void)updateTokensWithAuthState:(OIDAuthState *)authState { + GIDToken *accessToken = + [[GIDToken alloc] initWithTokenString:authState.lastTokenResponse.accessToken + expirationDate:authState.lastTokenResponse.accessTokenExpirationDate]; + if (![self.accessToken isEqualToToken:accessToken]) { + self.accessToken = accessToken; + } + + GIDToken *refreshToken = [[GIDToken alloc] initWithTokenString:authState.refreshToken + expirationDate:nil]; + if (![self.refreshToken isEqualToToken:refreshToken]) { + self.refreshToken = refreshToken; + } + + GIDToken *idToken; + NSString *idTokenString = authState.lastTokenResponse.idToken; + if (idTokenString) { + NSDate *idTokenExpirationDate = + [[[OIDIDToken alloc] initWithIDTokenString:idTokenString] expiresAt]; + idToken = [[GIDToken alloc] initWithTokenString:idTokenString + expirationDate:idTokenExpirationDate]; + } else { + idToken = nil; + } + if ((self.idToken || idToken) && ![self.idToken isEqualToToken:idToken]) { + self.idToken = idToken; + } } #pragma mark - Helpers -- (NSString *)idToken { - return _authState ? _authState.lastTokenResponse.idToken : nil; +- (nullable NSString *)hostedDomain { + NSString *idTokenString = self.idToken.tokenString; + if (idTokenString) { + OIDIDToken *idTokenDecoded = [[OIDIDToken alloc] initWithIDTokenString:idTokenString]; + if (idTokenDecoded && idTokenDecoded.claims[kHostedDomainIDTokenClaimKey]) { + return idTokenDecoded.claims[kHostedDomainIDTokenClaimKey]; + } + } + return nil; +} + +#pragma mark - GTMAppAuthFetcherAuthorizationTokenRefreshDelegate + +- (nullable NSDictionary *)additionalRefreshParameters: + (GTMAppAuthFetcherAuthorization *)authorization { +#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST + return [GIDEMMSupport updatedEMMParametersWithParameters: + authorization.authState.lastTokenResponse.request.additionalParameters]; +#elif TARGET_OS_OSX || TARGET_OS_MACCATALYST + return authorization.authState.lastTokenResponse.request.additionalParameters; +#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST +} + +#pragma mark - OIDAuthStateChangeDelegate + +- (void)didChangeState:(OIDAuthState *)state { + [self updateTokensWithAuthState:state]; } #pragma mark - NSSecureCoding @@ -128,22 +331,26 @@ + (BOOL)supportsSecureCoding { - (nullable instancetype)initWithCoder:(NSCoder *)decoder { self = [super init]; if (self) { - _profile = [decoder decodeObjectOfClass:[GIDProfileData class] forKey:kProfileDataKey]; - if ([decoder containsValueForKey:kAuthState]) { // Current encoding - _authState = [decoder decodeObjectOfClass:[OIDAuthState class] forKey:kAuthState]; + GIDProfileData *profile = + [decoder decodeObjectOfClass:[GIDProfileData class] forKey:kProfileDataKey]; + + OIDAuthState *authState; + if ([decoder containsValueForKey:kAuthStateKey]) { // Current encoding + authState = [decoder decodeObjectOfClass:[OIDAuthState class] forKey:kAuthStateKey]; } else { // Old encoding GIDAuthentication *authentication = [decoder decodeObjectOfClass:[GIDAuthentication class] - forKey:kAuthenticationKey]; - _authState = authentication.authState; + forKey:@"authentication"]; + authState = authentication.authState; } - _authentication = [[GIDAuthentication alloc] initWithAuthState:_authState]; + + self = [self initWithAuthState:authState profileData:profile]; } return self; } - (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:_profile forKey:kProfileDataKey]; - [encoder encodeObject:_authState forKey:kAuthState]; + [encoder encodeObject:self.authState forKey:kAuthStateKey]; } @end diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser_Private.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser_Private.h index c6a1fc84e..94a019aee 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser_Private.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser_Private.h @@ -16,20 +16,52 @@ #import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h" -NS_ASSUME_NONNULL_BEGIN +#ifdef SWIFT_PACKAGE +@import AppAuth; +@import GTMAppAuth; +#else +#import +#import +#endif @class OIDAuthState; +NS_ASSUME_NONNULL_BEGIN + +/// A completion block that takes a `GIDGoogleUser` or an error if the attempt to refresh tokens was unsuccessful. +typedef void (^GIDGoogleUserCompletion)(GIDGoogleUser *_Nullable user, NSError *_Nullable error); + // Internal methods for the class that are not part of the public API. -@interface GIDGoogleUser () +@interface GIDGoogleUser () + +@property(nonatomic, readwrite) GIDToken *accessToken; + +@property(nonatomic, readwrite) GIDToken *refreshToken; + +@property(nonatomic, readwrite, nullable) GIDToken *idToken; + +// A representation of the state of the OAuth session for this instance. +@property(nonatomic, readonly) OIDAuthState *authState; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +@property(nonatomic, readwrite) id fetcherAuthorizer; +#pragma clang diagnostic pop + +#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST +// A string indicating support for Enterprise Mobility Management. +@property(nonatomic, readonly, nullable) NSString *emmSupport; +#endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST // Create a object with an auth state, scopes, and profile data. - (instancetype)initWithAuthState:(OIDAuthState *)authState profileData:(nullable GIDProfileData *)profileData; // Update the auth state and profile data. -- (void)updateAuthState:(OIDAuthState *)authState - profileData:(nullable GIDProfileData *)profileData; +- (void)updateWithTokenResponse:(OIDTokenResponse *)tokenResponse + authorizationResponse:(OIDAuthorizationResponse *)authorizationResponse + profileData:(nullable GIDProfileData *)profileData; @end diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn.m b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn.m index d9cecb6bd..429c16665 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn.m +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn.m @@ -16,11 +16,12 @@ #import "GoogleSignIn/Sources/GIDSignIn_Private.h" -#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDAuthentication.h" #import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h" #import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h" #import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDProfileData.h" +#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h" +#import "GoogleSignIn/Sources/GIDEMMSupport.h" #import "GoogleSignIn/Sources/GIDSignInInternalOptions.h" #import "GoogleSignIn/Sources/GIDSignInPreferences.h" #import "GoogleSignIn/Sources/GIDCallbackQueue.h" @@ -31,9 +32,9 @@ #import "GoogleSignIn/Sources/GIDEMMErrorHandler.h" #endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST -#import "GoogleSignIn/Sources/GIDAuthentication_Private.h" #import "GoogleSignIn/Sources/GIDGoogleUser_Private.h" #import "GoogleSignIn/Sources/GIDProfileData_Private.h" +#import "GoogleSignIn/Sources/GIDSignInResult_Private.h" #ifdef SWIFT_PACKAGE @import AppAuth; @@ -135,6 +136,12 @@ // Minimum time to expiration for a restored access token. static const NSTimeInterval kMinimumRestoredAccessTokenTimeToExpire = 600.0; +// Info.plist config keys +static NSString *const kConfigClientIDKey = @"GIDClientID"; +static NSString *const kConfigServerClientIDKey = @"GIDServerClientID"; +static NSString *const kConfigHostedDomainKey = @"GIDHostedDomain"; +static NSString *const kConfigOpenIDRealmKey = @"GIDOpenIDRealm"; + // The callback queue used for authentication flow. @interface GIDAuthFlow : GIDCallbackQueue @@ -163,6 +170,10 @@ @implementation GIDSignIn { #pragma mark - Public methods +// Handles the custom scheme URL opened by SFSafariViewController or the Device Policy App. +// +// For SFSafariViewController invoked via AppAuth, this method is used on iOS 10. +// For the Device Policy App (EMM flow) this method is used on all iOS versions. - (BOOL)handleURL:(NSURL *)url { // Check if the callback path matches the expected one for a URL from Safari/Chrome/SafariVC. if ([url.path isEqual:kBrowserCallbackPath]) { @@ -180,15 +191,23 @@ - (BOOL)handleURL:(NSURL *)url { } - (BOOL)hasPreviousSignIn { - if ([_currentUser.authentication.authState isAuthorized]) { + if ([_currentUser.authState isAuthorized]) { return YES; } OIDAuthState *authState = [self loadAuthState]; return [authState isAuthorized]; } -- (void)restorePreviousSignInWithCallback:(nullable GIDSignInCallback)callback { - [self signInWithOptions:[GIDSignInInternalOptions silentOptionsWithCallback:callback]]; +- (void)restorePreviousSignInWithCompletion:(nullable void (^)(GIDGoogleUser *_Nullable user, + NSError *_Nullable error))completion { + [self signInWithOptions:[GIDSignInInternalOptions silentOptionsWithCompletion: + ^(GIDSignInResult *signInResult, NSError *error) { + if (signInResult) { + completion(signInResult.user, nil); + } else { + completion(nil, error); + } + }]]; } - (BOOL)restorePreviousSignInNoRefresh { @@ -208,77 +227,55 @@ - (BOOL)restorePreviousSignInNoRefresh { GIDProfileData *profileData = [self profileDataWithIDToken:idToken]; GIDGoogleUser *user = [[GIDGoogleUser alloc] initWithAuthState:authState profileData:profileData]; - [self setCurrentUserWithKVO:user]; + self.currentUser = user; return YES; } #if TARGET_OS_IOS || TARGET_OS_MACCATALYST -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingViewController:(UIViewController *)presentingViewController - hint:(nullable NSString *)hint - callback:(nullable GIDSignInCallback)callback { +- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController + hint:(nullable NSString *)hint + completion:(nullable GIDSignInCompletion)completion { GIDSignInInternalOptions *options = - [GIDSignInInternalOptions defaultOptionsWithConfiguration:configuration + [GIDSignInInternalOptions defaultOptionsWithConfiguration:_configuration presentingViewController:presentingViewController loginHint:hint - addScopesFlow:NO - callback:callback]; + addScopesFlow:NO + completion:completion]; [self signInWithOptions:options]; } -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingViewController:(UIViewController *)presentingViewController - hint:(nullable NSString *)hint - additionalScopes:(nullable NSArray *)additionalScopes - callback:(nullable GIDSignInCallback)callback { +- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController + hint:(nullable NSString *)hint + additionalScopes:(nullable NSArray *)additionalScopes + completion:(nullable GIDSignInCompletion)completion { GIDSignInInternalOptions *options = - [GIDSignInInternalOptions defaultOptionsWithConfiguration:configuration + [GIDSignInInternalOptions defaultOptionsWithConfiguration:_configuration presentingViewController:presentingViewController loginHint:hint addScopesFlow:NO scopes:additionalScopes - callback:callback]; + completion:completion]; [self signInWithOptions:options]; } -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingViewController:(UIViewController *)presentingViewController - callback:(nullable GIDSignInCallback)callback { - [self signInWithConfiguration:configuration - presentingViewController:presentingViewController - hint:nil - callback:callback]; +- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController + completion:(nullable GIDSignInCompletion)completion { + [self signInWithPresentingViewController:presentingViewController + hint:nil + completion:completion]; } - (void)addScopes:(NSArray *)scopes presentingViewController:(UIViewController *)presentingViewController - callback:(nullable GIDSignInCallback)callback { - // A currentUser must be available in order to complete this flow. - if (!self.currentUser) { - // No currentUser is set, notify callback of failure. - NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain - code:kGIDSignInErrorCodeNoCurrentUser - userInfo:nil]; - if (callback) { - dispatch_async(dispatch_get_main_queue(), ^{ - callback(nil, error); - }); - } - return; - } - - GIDConfiguration *configuration = - [[GIDConfiguration alloc] initWithClientID:self.currentUser.authentication.clientID - serverClientID:self.currentUser.serverClientID - hostedDomain:self.currentUser.hostedDomain - openIDRealm:self.currentUser.openIDRealm]; + completion:(nullable GIDSignInCompletion)completion { + GIDConfiguration *configuration = self.currentUser.configuration; GIDSignInInternalOptions *options = [GIDSignInInternalOptions defaultOptionsWithConfiguration:configuration presentingViewController:presentingViewController loginHint:self.currentUser.profile.email addScopesFlow:YES - callback:callback]; + completion:completion]; NSSet *requestedScopes = [NSSet setWithArray:scopes]; NSMutableSet *grantedScopes = @@ -290,9 +287,9 @@ - (void)addScopes:(NSArray *)scopes NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain code:kGIDSignInErrorCodeScopesAlreadyGranted userInfo:nil]; - if (callback) { + if (completion) { dispatch_async(dispatch_get_main_queue(), ^{ - callback(nil, error); + completion(nil, error); }); } return; @@ -307,71 +304,49 @@ - (void)addScopes:(NSArray *)scopes #elif TARGET_OS_OSX -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingWindow:(NSWindow *)presentingWindow - hint:(nullable NSString *)hint - callback:(nullable GIDSignInCallback)callback { +- (void)signInWithPresentingWindow:(NSWindow *)presentingWindow + hint:(nullable NSString *)hint + completion:(nullable GIDSignInCompletion)completion { GIDSignInInternalOptions *options = - [GIDSignInInternalOptions defaultOptionsWithConfiguration:configuration + [GIDSignInInternalOptions defaultOptionsWithConfiguration:_configuration presentingWindow:presentingWindow loginHint:hint - addScopesFlow:NO - callback:callback]; + addScopesFlow:NO + completion:completion]; [self signInWithOptions:options]; } -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingWindow:(NSWindow *)presentingWindow - callback:(nullable GIDSignInCallback)callback { - [self signInWithConfiguration:configuration - presentingWindow:presentingWindow - hint:nil - callback:callback]; +- (void)signInWithPresentingWindow:(NSWindow *)presentingWindow + completion:(nullable GIDSignInCompletion)completion { + [self signInWithPresentingWindow:presentingWindow + hint:nil + completion:completion]; } -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingWindow:(NSWindow *)presentingWindow - hint:(nullable NSString *)hint - additionalScopes:(nullable NSArray *)additionalScopes - callback:(nullable GIDSignInCallback)callback { +- (void)signInWithPresentingWindow:(NSWindow *)presentingWindow + hint:(nullable NSString *)hint + additionalScopes:(nullable NSArray *)additionalScopes + completion:(nullable GIDSignInCompletion)completion { GIDSignInInternalOptions *options = - [GIDSignInInternalOptions defaultOptionsWithConfiguration:configuration + [GIDSignInInternalOptions defaultOptionsWithConfiguration:_configuration presentingWindow:presentingWindow loginHint:hint addScopesFlow:NO scopes:additionalScopes - callback:callback]; + completion:completion]; [self signInWithOptions:options]; } - (void)addScopes:(NSArray *)scopes - presentingWindow:(NSWindow *)presentingWindow - callback:(nullable GIDSignInCallback)callback { - // A currentUser must be available in order to complete this flow. - if (!self.currentUser) { - // No currentUser is set, notify callback of failure. - NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain - code:kGIDSignInErrorCodeNoCurrentUser - userInfo:nil]; - if (callback) { - dispatch_async(dispatch_get_main_queue(), ^{ - callback(nil, error); - }); - } - return; - } - - GIDConfiguration *configuration = - [[GIDConfiguration alloc] initWithClientID:self.currentUser.authentication.clientID - serverClientID:self.currentUser.serverClientID - hostedDomain:self.currentUser.hostedDomain - openIDRealm:self.currentUser.openIDRealm]; + presentingWindow:(NSWindow *)presentingWindow + completion:(nullable GIDSignInCompletion)completion { + GIDConfiguration *configuration = self.currentUser.configuration; GIDSignInInternalOptions *options = [GIDSignInInternalOptions defaultOptionsWithConfiguration:configuration presentingWindow:presentingWindow loginHint:self.currentUser.profile.email addScopesFlow:YES - callback:callback]; + completion:completion]; NSSet *requestedScopes = [NSSet setWithArray:scopes]; NSMutableSet *grantedScopes = @@ -383,9 +358,9 @@ - (void)addScopes:(NSArray *)scopes NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain code:kGIDSignInErrorCodeScopesAlreadyGranted userInfo:nil]; - if (callback) { + if (completion) { dispatch_async(dispatch_get_main_queue(), ^{ - callback(nil, error); + completion(nil, error); }); } return; @@ -403,17 +378,14 @@ - (void)addScopes:(NSArray *)scopes - (void)signOut { // Clear the current user if there is one. if (_currentUser) { - [self willChangeValueForKey:NSStringFromSelector(@selector(currentUser))]; - _currentUser = nil; - [self didChangeValueForKey:NSStringFromSelector(@selector(currentUser))]; + self.currentUser = nil; } // Remove all state from the keychain. [self removeAllKeychainEntries]; } -- (void)disconnectWithCallback:(nullable GIDDisconnectCallback)callback { - GIDGoogleUser *user = _currentUser; - OIDAuthState *authState = user.authentication.authState; +- (void)disconnectWithCompletion:(nullable GIDDisconnectCompletion)completion { + OIDAuthState *authState = _currentUser.authState; if (!authState) { // Even the user is not signed in right now, we still need to remove any token saved in the // keychain. @@ -428,9 +400,9 @@ - (void)disconnectWithCallback:(nullable GIDDisconnectCallback)callback { if (!token) { [self signOut]; // Nothing to do here, consider the operation successful. - if (callback) { + if (completion) { dispatch_async(dispatch_get_main_queue(), ^{ - callback(nil); + completion(nil); }); } return; @@ -453,9 +425,9 @@ - (void)disconnectWithCallback:(nullable GIDDisconnectCallback)callback { if (!error) { [self signOut]; } - if (callback) { + if (completion) { dispatch_async(dispatch_get_main_queue(), ^{ - callback(error); + completion(error); }); } }]; @@ -477,6 +449,14 @@ + (GIDSignIn *)sharedInstance { - (id)initPrivate { self = [super init]; if (self) { + // Get the bundle of the current executable. + NSBundle *bundle = NSBundle.mainBundle; + + // If we have a bundle, try to set the active configuration from the bundle's Info.plist. + if (bundle) { + _configuration = [GIDSignIn configurationFromBundle:bundle]; + } + // Check to see if the 3P app is being run for the first time after a fresh install. BOOL isFreshInstall = [self isFreshInstall]; @@ -514,6 +494,14 @@ - (void)signInWithOptions:(GIDSignInInternalOptions *)options { } if (options.interactive) { + // Ensure that a configuration has been provided. + if (!_configuration) { + // NOLINTNEXTLINE(google-objc-avoid-throwing-exception) + [NSException raise:NSInvalidArgumentException + format:@"No active configuration. Make sure GIDClientID is set in Info.plist."]; + return; + } + // Explicitly throw exception for missing client ID here. This must come before // scheme check because schemes rely on reverse client IDs. [self assertValidParameters]; @@ -533,15 +521,17 @@ - (void)signInWithOptions:(GIDSignInInternalOptions *)options { } // If this is a non-interactive flow, use cached authentication if possible. - if (!options.interactive && _currentUser.authentication) { - [_currentUser.authentication doWithFreshTokens:^(GIDAuthentication *unused, NSError *error) { + if (!options.interactive && _currentUser) { + [_currentUser refreshTokensIfNeededWithCompletion:^(GIDGoogleUser *unused, NSError *error) { if (error) { [self authenticateWithOptions:options]; } else { - if (options.callback) { + if (options.completion) { self->_currentOptions = nil; dispatch_async(dispatch_get_main_queue(), ^{ - options.callback(self->_currentUser, nil); + GIDSignInResult *signInResult = + [[GIDSignInResult alloc] initWithGoogleUser:self->_currentUser serverAuthCode:nil]; + options.completion(signInResult, nil); }); } } @@ -580,16 +570,15 @@ - (void)authenticateInteractivelyWithOptions:(GIDSignInInternalOptions *)options #if TARGET_OS_IOS && !TARGET_OS_MACCATALYST [additionalParameters addEntriesFromDictionary: - [GIDAuthentication parametersWithParameters:options.extraParams - emmSupport:emmSupport - isPasscodeInfoRequired:NO]]; + [GIDEMMSupport parametersWithParameters:options.extraParams + emmSupport:emmSupport + isPasscodeInfoRequired:NO]]; #elif TARGET_OS_OSX || TARGET_OS_MACCATALYST [additionalParameters addEntriesFromDictionary:options.extraParams]; #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST additionalParameters[kSDKVersionLoggingParameter] = GIDVersion(); additionalParameters[kEnvironmentLoggingParameter] = GIDEnvironment(); -#if TARGET_OS_IOS || TARGET_OS_MACCATALYST OIDAuthorizationRequest *request = [[OIDAuthorizationRequest alloc] initWithConfiguration:_appAuthConfiguration clientId:options.configuration.clientID @@ -600,34 +589,17 @@ - (void)authenticateInteractivelyWithOptions:(GIDSignInInternalOptions *)options _currentAuthorizationFlow = [OIDAuthorizationService presentAuthorizationRequest:request +#if TARGET_OS_IOS || TARGET_OS_MACCATALYST presentingViewController:options.presentingViewController - callback:^(OIDAuthorizationResponse *_Nullable authorizationResponse, - NSError *_Nullable error) { - [self processAuthorizationResponse:authorizationResponse - error:error - emmSupport:emmSupport]; - }]; #elif TARGET_OS_OSX - OIDAuthorizationRequest *request = - [[OIDAuthorizationRequest alloc] initWithConfiguration:_appAuthConfiguration - clientId:options.configuration.clientID - clientSecret:@"" - scopes:options.scopes - redirectURL:redirectURL - responseType:OIDResponseTypeCode - additionalParameters:additionalParameters]; - - _currentAuthorizationFlow = [OIDAuthorizationService - presentAuthorizationRequest:request presentingWindow:options.presentingWindow - callback:^(OIDAuthorizationResponse *_Nullable authorizationResponse, - NSError *_Nullable error) { +#endif // TARGET_OS_OSX + callback:^(OIDAuthorizationResponse *_Nullable authorizationResponse, + NSError *_Nullable error) { [self processAuthorizationResponse:authorizationResponse error:error emmSupport:emmSupport]; }]; -#endif // TARGET_OS_OSX - } - (void)processAuthorizationResponse:(OIDAuthorizationResponse *)authorizationResponse @@ -647,7 +619,7 @@ - (void)processAuthorizationResponse:(OIDAuthorizationResponse *)authorizationRe authFlow.authState = [[OIDAuthState alloc] initWithAuthorizationResponse:authorizationResponse]; // perform auth code exchange - [self maybeFetchToken:authFlow fallback:nil]; + [self maybeFetchToken:authFlow]; } else { // There was a failure, convert to appropriate error code. NSString *errorString; @@ -707,10 +679,10 @@ - (void)authenticateWithOptions:(GIDSignInInternalOptions *)options { NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain code:kGIDSignInErrorCodeHasNoAuthInKeychain userInfo:nil]; - if (options.callback) { + if (options.completion) { _currentOptions = nil; dispatch_async(dispatch_get_main_queue(), ^{ - options.callback(nil, error); + options.completion(nil, error); }); } return; @@ -719,17 +691,14 @@ - (void)authenticateWithOptions:(GIDSignInInternalOptions *)options { // Complete the auth flow using saved auth in keychain. GIDAuthFlow *authFlow = [[GIDAuthFlow alloc] init]; authFlow.authState = authState; - [self maybeFetchToken:authFlow fallback:options.interactive ? ^() { - [self authenticateInteractivelyWithOptions:options]; - } : nil]; + [self maybeFetchToken:authFlow]; [self addDecodeIdTokenCallback:authFlow]; [self addSaveAuthCallback:authFlow]; [self addCompletionCallback:authFlow]; } -// Fetches the access token if necessary as part of the auth flow. If |fallback| -// is provided, call it instead of continuing the auth flow in case of error. -- (void)maybeFetchToken:(GIDAuthFlow *)authFlow fallback:(nullable void (^)(void))fallback { +// Fetches the access token if necessary as part of the auth flow. +- (void)maybeFetchToken:(GIDAuthFlow *)authFlow { OIDAuthState *authState = authFlow.authState; // Do nothing if we have an auth flow error or a restored access token that isn't near expiration. if (authFlow.error || @@ -750,9 +719,9 @@ - (void)maybeFetchToken:(GIDAuthFlow *)authFlow fallback:(nullable void (^)(void authState.lastAuthorizationResponse.additionalParameters; NSString *passcodeInfoRequired = (NSString *)params[kEMMPasscodeInfoRequiredKeyName]; [additionalParameters addEntriesFromDictionary: - [GIDAuthentication parametersWithParameters:@{} - emmSupport:authFlow.emmSupport - isPasscodeInfoRequired:passcodeInfoRequired.length > 0]]; + [GIDEMMSupport parametersWithParameters:@{} + emmSupport:authFlow.emmSupport + isPasscodeInfoRequired:passcodeInfoRequired.length > 0]]; #endif // TARGET_OS_IOS && !TARGET_OS_MACCATALYST additionalParameters[kSDKVersionLoggingParameter] = GIDVersion(); additionalParameters[kEnvironmentLoggingParameter] = GIDEnvironment(); @@ -776,17 +745,9 @@ - (void)maybeFetchToken:(GIDAuthFlow *)authFlow fallback:(nullable void (^)(void [authState updateWithTokenResponse:tokenResponse error:error]; authFlow.error = error; - if (!tokenResponse.accessToken || error) { - if (fallback) { - [authFlow reset]; - fallback(); - return; - } - } - #if TARGET_OS_IOS && !TARGET_OS_MACCATALYST if (authFlow.emmSupport) { - [GIDAuthentication handleTokenFetchEMMError:error completion:^(NSError *error) { + [GIDEMMSupport handleTokenFetchEMMError:error completion:^(NSError *error) { authFlow.error = error; [authFlow next]; }]; @@ -813,12 +774,13 @@ - (void)addSaveAuthCallback:(GIDAuthFlow *)authFlow { } if (self->_currentOptions.addScopesFlow) { - [self->_currentUser updateAuthState:authState - profileData:handlerAuthFlow.profileData]; + [self->_currentUser updateWithTokenResponse:authState.lastTokenResponse + authorizationResponse:authState.lastAuthorizationResponse + profileData:handlerAuthFlow.profileData]; } else { GIDGoogleUser *user = [[GIDGoogleUser alloc] initWithAuthState:authState profileData:handlerAuthFlow.profileData]; - [self setCurrentUserWithKVO:user]; + self.currentUser = user; } } }]; @@ -881,11 +843,21 @@ - (void)addCompletionCallback:(GIDAuthFlow *)authFlow { __weak GIDAuthFlow *weakAuthFlow = authFlow; [authFlow addCallback:^() { GIDAuthFlow *handlerAuthFlow = weakAuthFlow; - if (self->_currentOptions.callback) { - GIDSignInCallback callback = self->_currentOptions.callback; + if (self->_currentOptions.completion) { + GIDSignInCompletion completion = self->_currentOptions.completion; self->_currentOptions = nil; dispatch_async(dispatch_get_main_queue(), ^{ - callback(self->_currentUser, handlerAuthFlow.error); + if (handlerAuthFlow.error) { + completion(nil, handlerAuthFlow.error); + } else { + OIDAuthState *authState = handlerAuthFlow.authState; + NSString *_Nullable serverAuthCode = + [authState.lastTokenResponse.additionalParameters[@"server_code"] copy]; + GIDSignInResult *signInResult = + [[GIDSignInResult alloc] initWithGoogleUser:self->_currentUser + serverAuthCode:serverAuthCode]; + completion(signInResult, nil); + } }); } }]; @@ -950,17 +922,6 @@ - (BOOL)handleDevicePolicyAppURL:(NSURL *)url { return YES; } -#pragma mark - Key-Value Observing - -// Override |NSObject(NSKeyValueObservingCustomization)| method in order to provide custom KVO -// notifications for the |currentUser| property. -+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { - if ([key isEqual:NSStringFromSelector(@selector(currentUser))]) { - return NO; - } - return [super automaticallyNotifiesObserversForKey:key]; -} - #pragma mark - Helpers - (NSError *)errorWithString:(NSString *)errorString code:(GIDSignInErrorCode)code { @@ -991,10 +952,11 @@ - (void)assertValidParameters { // Assert that the presenting view controller has been set. - (void)assertValidPresentingViewController { #if TARGET_OS_IOS || TARGET_OS_MACCATALYST - if (!_currentOptions.presentingViewController) { + if (!_currentOptions.presentingViewController) #elif TARGET_OS_OSX - if (!_currentOptions.presentingWindow) { + if (!_currentOptions.presentingWindow) #endif // TARGET_OS_OSX + { // NOLINTNEXTLINE(google-objc-avoid-throwing-exception) [NSException raise:NSInvalidArgumentException format:@"|presentingViewController| must be set."]; @@ -1049,11 +1011,36 @@ - (GIDProfileData *)profileDataWithIDToken:(OIDIDToken *)idToken { imageURL:[NSURL URLWithString:idToken.claims[kBasicProfilePictureKey]]]; } -// Set currentUser making appropriate KVO calls. -- (void)setCurrentUserWithKVO:(GIDGoogleUser *_Nullable)user { - [self willChangeValueForKey:NSStringFromSelector(@selector(currentUser))]; - _currentUser = user; - [self didChangeValueForKey:NSStringFromSelector(@selector(currentUser))]; +// Try to retrieve a configuration value from an |NSBundle|'s Info.plist for a given key. ++ (nullable NSString *)configValueFromBundle:(NSBundle *)bundle forKey:(NSString *)key { + NSString *value; + id configValue = [bundle objectForInfoDictionaryKey:key]; + if ([configValue isKindOfClass:[NSString class]]) { + value = configValue; + } + return value; +} + +// Try to generate a |GIDConfiguration| from an |NSBundle|'s Info.plist. ++ (nullable GIDConfiguration *)configurationFromBundle:(NSBundle *)bundle { + GIDConfiguration *configuration; + + // Retrieve any valid config parameters from the bundle's Info.plist. + NSString *clientID = [GIDSignIn configValueFromBundle:bundle forKey:kConfigClientIDKey]; + NSString *serverClientID = [GIDSignIn configValueFromBundle:bundle + forKey:kConfigServerClientIDKey]; + NSString *hostedDomain = [GIDSignIn configValueFromBundle:bundle forKey:kConfigHostedDomainKey]; + NSString *openIDRealm = [GIDSignIn configValueFromBundle:bundle forKey:kConfigOpenIDRealmKey]; + + // If we have at least a client ID, try to construct a configuration. + if (clientID) { + configuration = [[GIDConfiguration alloc] initWithClientID:clientID + serverClientID:serverClientID + hostedDomain:hostedDomain + openIDRealm:openIDRealm]; + } + + return configuration; } @end diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.h index 72f9b7fa7..f1aff409e 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.h @@ -22,9 +22,10 @@ #import #endif -#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h" +#import "GoogleSignIn/Sources/GIDSignIn_Private.h" @class GIDConfiguration; +@class GIDSignInResult; NS_ASSUME_NONNULL_BEGIN @@ -54,8 +55,8 @@ NS_ASSUME_NONNULL_BEGIN @property(nonatomic, readonly, weak, nullable) NSWindow *presentingWindow; #endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST -/// The callback block to be called at the completion of the flow. -@property(nonatomic, readonly, nullable) GIDSignInCallback callback; +/// The completion block to be called at the completion of the flow. +@property(nonatomic, readonly, nullable) GIDSignInCompletion completion; /// The scopes to be used during the flow. @property(nonatomic, copy, nullable) NSArray *scopes; @@ -69,32 +70,32 @@ NS_ASSUME_NONNULL_BEGIN presentingViewController:(nullable UIViewController *)presentingViewController loginHint:(nullable NSString *)loginHint addScopesFlow:(BOOL)addScopesFlow - callback:(nullable GIDSignInCallback)callback; + completion:(nullable GIDSignInCompletion)completion; + (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)configuration presentingViewController:(nullable UIViewController *)presentingViewController loginHint:(nullable NSString *)loginHint addScopesFlow:(BOOL)addScopesFlow scopes:(nullable NSArray *)scopes - callback:(nullable GIDSignInCallback)callback; + completion:(nullable GIDSignInCompletion)completion; #elif TARGET_OS_OSX + (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)configuration presentingWindow:(nullable NSWindow *)presentingWindow loginHint:(nullable NSString *)loginHint addScopesFlow:(BOOL)addScopesFlow - callback:(nullable GIDSignInCallback)callback; + completion:(nullable GIDSignInCompletion)completion; + (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)configuration presentingWindow:(nullable NSWindow *)presentingWindow loginHint:(nullable NSString *)loginHint addScopesFlow:(BOOL)addScopesFlow scopes:(nullable NSArray *)scopes - callback:(nullable GIDSignInCallback)callback; + completion:(nullable GIDSignInCompletion)completion; #endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST /// Creates the options to sign in silently. -+ (instancetype)silentOptionsWithCallback:(GIDSignInCallback)callback; ++ (instancetype)silentOptionsWithCompletion:(GIDSignInCompletion)completion; /// Creates options with the same values as the receiver, except for the "extra parameters", and /// continuation flag, which are replaced by the arguments passed to this method. diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.m b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.m index f4ed1488f..bfb21643e 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.m +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.m @@ -31,16 +31,15 @@ + (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)con loginHint:(nullable NSString *)loginHint addScopesFlow:(BOOL)addScopesFlow scopes:(nullable NSArray *)scopes - callback:(nullable GIDSignInCallback)callback { + completion:(nullable GIDSignInCompletion)completion { #elif TARGET_OS_OSX + (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)configuration presentingWindow:(nullable NSWindow *)presentingWindow loginHint:(nullable NSString *)loginHint addScopesFlow:(BOOL)addScopesFlow scopes:(nullable NSArray *)scopes - callback:(nullable GIDSignInCallback)callback { + completion:(nullable GIDSignInCompletion)completion { #endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST - GIDSignInInternalOptions *options = [[GIDSignInInternalOptions alloc] init]; if (options) { options->_interactive = YES; @@ -53,7 +52,7 @@ + (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)con options->_presentingWindow = presentingWindow; #endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST options->_loginHint = loginHint; - options->_callback = callback; + options->_completion = completion; options->_scopes = [GIDScopes scopesWithBasicProfile:scopes]; } return options; @@ -64,13 +63,13 @@ + (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)con presentingViewController:(nullable UIViewController *)presentingViewController loginHint:(nullable NSString *)loginHint addScopesFlow:(BOOL)addScopesFlow - callback:(nullable GIDSignInCallback)callback { + completion:(nullable GIDSignInCompletion)completion { #elif TARGET_OS_OSX + (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)configuration presentingWindow:(nullable NSWindow *)presentingWindow loginHint:(nullable NSString *)loginHint addScopesFlow:(BOOL)addScopesFlow - callback:(nullable GIDSignInCallback)callback { + completion:(nullable GIDSignInCompletion)completion { #endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST GIDSignInInternalOptions *options = [self defaultOptionsWithConfiguration:configuration #if TARGET_OS_IOS || TARGET_OS_MACCATALYST @@ -81,11 +80,11 @@ + (instancetype)defaultOptionsWithConfiguration:(nullable GIDConfiguration *)con loginHint:loginHint addScopesFlow:addScopesFlow scopes:@[] - callback:callback]; + completion:completion]; return options; } -+ (instancetype)silentOptionsWithCallback:(GIDSignInCallback)callback { ++ (instancetype)silentOptionsWithCompletion:(GIDSignInCompletion)completion { GIDSignInInternalOptions *options = [self defaultOptionsWithConfiguration:nil #if TARGET_OS_IOS || TARGET_OS_MACCATALYST presentingViewController:nil @@ -93,8 +92,8 @@ + (instancetype)silentOptionsWithCallback:(GIDSignInCallback)callback { presentingWindow:nil #endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST loginHint:nil - addScopesFlow:NO - callback:callback]; + addScopesFlow:NO + completion:completion]; if (options) { options->_interactive = NO; } @@ -115,7 +114,7 @@ - (instancetype)optionsWithExtraParameters:(NSDictionary *)extraParams options->_presentingWindow = _presentingWindow; #endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST options->_loginHint = _loginHint; - options->_callback = _callback; + options->_completion = _completion; options->_scopes = _scopes; options->_extraParams = [extraParams copy]; } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult.m b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult.m new file mode 100644 index 000000000..20f811b86 --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult.m @@ -0,0 +1,35 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h" + +#import "GoogleSignIn/Sources/GIDSignInResult_Private.h" +#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h" + +@implementation GIDSignInResult + +- (instancetype)initWithGoogleUser:(GIDGoogleUser *)user + serverAuthCode:(nullable NSString *)serverAuthCode { + self = [super init]; + if (self) { + _user = user; + _serverAuthCode = serverAuthCode; + } + + return self; +} + +@end diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult_Private.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult_Private.h new file mode 100644 index 000000000..aa78a134f --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult_Private.h @@ -0,0 +1,33 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h" + +NS_ASSUME_NONNULL_BEGIN + +// Private |GIDSignInResult| methods that are used in this SDK. +@interface GIDSignInResult () + +// Private initializer for |GIDSignInResult|. +// @param user The current GIDGoogleUser. +// @param severAuthCode The one-time authorization code for backend to exchange +// access and refresh tokens. +- (instancetype)initWithGoogleUser:(GIDGoogleUser *)user + serverAuthCode:(nullable NSString *)serverAuthCode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn_Private.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn_Private.h index 5d1a6da5e..825327bae 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn_Private.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn_Private.h @@ -14,29 +14,85 @@ * limitations under the License. */ +#import + #import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h" +#if __has_include() +#import +#elif __has_include() +#import +#endif + NS_ASSUME_NONNULL_BEGIN @class GIDGoogleUser; @class GIDSignInInternalOptions; +/// Represents a completion block that takes a `GIDSignInResult` on success or an error if the +/// operation was unsuccessful. +typedef void (^GIDSignInCompletion)(GIDSignInResult *_Nullable signInResult, + NSError *_Nullable error); + +/// Represents a completion block that takes an error if the operation was unsuccessful. +typedef void (^GIDDisconnectCompletion)(NSError *_Nullable error); + // Private |GIDSignIn| methods that are used internally in this SDK and other Google SDKs. @interface GIDSignIn () -// Private initializer for |GIDSignIn|. +/// Redeclare |currentUser| as readwrite for internal use. +@property(nonatomic, readwrite, nullable) GIDGoogleUser *currentUser; + +/// Private initializer for |GIDSignIn|. - (instancetype)initPrivate; -// Authenticates with extra options. +/// Authenticates with extra options. - (void)signInWithOptions:(GIDSignInInternalOptions *)options; -// Restores a previously authenticated user from the keychain synchronously without refreshing -// the access token or making a userinfo request. The currentUser.profile will be nil unless -// the profile data can be extracted from the ID token. -// -// @return NO if there is no user restored from the keychain. +/// Restores a previously authenticated user from the keychain synchronously without refreshing +/// the access token or making a userinfo request. +/// +/// The currentUser.profile will be nil unless the profile data can be extracted from the ID token. +/// +/// @return NO if there is no user restored from the keychain. - (BOOL)restorePreviousSignInNoRefresh; +#if TARGET_OS_IOS || TARGET_OS_MACCATALYST + +/// Starts an interactive consent flow on iOS to add scopes to the current user's grants. +/// +/// The completion will be called at the end of this process. If successful, a `GIDSignInResult` +/// instance will be returned reflecting the new scopes and saved sign-in state will be updated. +/// +/// @param scopes The scopes to ask the user to consent to. +/// @param presentingViewController The view controller used to present `SFSafariViewContoller` on +/// iOS 9 and 10 and to supply `presentationContextProvider` for `ASWebAuthenticationSession` on +/// iOS 13+. +/// @param completion The block that is called on completion. This block will be called asynchronously +/// on the main queue. +- (void)addScopes:(NSArray *)scopes + presentingViewController:(UIViewController *)presentingViewController + completion:(nullable GIDSignInCompletion)completion + NS_EXTENSION_UNAVAILABLE("The add scopes flow is not supported in App Extensions."); + +#elif TARGET_OS_OSX + +/// Starts an interactive consent flow on macOS to add scopes to the current user's grants. +/// +/// The completion will be called at the end of this process. If successful, a `GIDSignInResult` +/// instance will be returned reflecting the new scopes and saved sign-in state will be updated. +/// +/// @param scopes An array of scopes to ask the user to consent to. +/// @param presentingWindow The window used to supply `presentationContextProvider` for +/// `ASWebAuthenticationSession`. +/// @param completion The block that is called on completion. This block will be called asynchronously +/// on the main queue. +- (void)addScopes:(NSArray *)scopes + presentingWindow:(NSWindow *)presentingWindow + completion:(nullable GIDSignInCompletion)completion; + +#endif + @end NS_ASSUME_NONNULL_END diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken.m b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken.m new file mode 100644 index 000000000..2702a9527 --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken.m @@ -0,0 +1,96 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDToken.h" + +#import "GoogleSignIn/Sources/GIDToken_Private.h" + +// Key constants used for encode and decode. +static NSString *const kTokenStringKey = @"tokenString"; +static NSString *const kExpirationDateKey = @"expirationDate"; + +NS_ASSUME_NONNULL_BEGIN + +@implementation GIDToken + +- (instancetype)initWithTokenString:(NSString *)tokenString + expirationDate:(nullable NSDate *)expirationDate { + self = [super init]; + if (self) { + _tokenString = [tokenString copy]; + _expirationDate = expirationDate; + } + + return self; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (nullable instancetype)initWithCoder:(NSCoder *)decoder { + self = [super init]; + if (self) { + _tokenString = [decoder decodeObjectOfClass:[NSString class] forKey:kTokenStringKey]; + _expirationDate = [decoder decodeObjectOfClass:[NSDate class] forKey:kExpirationDateKey]; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)encoder { + [encoder encodeObject:_tokenString forKey:kTokenStringKey]; + [encoder encodeObject:_expirationDate forKey:kExpirationDateKey]; +} + +#pragma mark - isEqual + +- (BOOL)isEqual:(nullable id)object { + if (object == nil) { + return NO; + } + if (self == object) { + return YES; + } + if (![object isKindOfClass:[GIDToken class]]) { + return NO; + } + return [self isEqualToToken:(GIDToken *)object]; +} + +- (BOOL)isEqualToToken:(GIDToken *)otherToken { + return [_tokenString isEqual:otherToken.tokenString] && + [self isTheSameDate:_expirationDate with:otherToken.expirationDate]; +} + +// The date is nullable in GIDToken. Two `nil` dates are considered equal so +// token equality check succeeds if token strings are equal and have no expiration. +- (BOOL)isTheSameDate:(nullable NSDate *)date1 + with:(nullable NSDate *)date2 { + if (!date1 && !date2) { + return YES; + } + return [date1 isEqualToDate:date2]; +} + +- (NSUInteger)hash { + return [self.tokenString hash] ^ [self.expirationDate hash]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken_Private.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken_Private.h new file mode 100644 index 000000000..0ce94af4c --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken_Private.h @@ -0,0 +1,32 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDToken.h" + +NS_ASSUME_NONNULL_BEGIN + +// Private |GIDToken| methods that are used in this SDK. +@interface GIDToken () + +// Private initializer for |GIDToken|. +// @param token The token String. +// @param expirationDate The expiration date of the token. +- (instancetype)initWithTokenString:(NSString *)tokenString + expirationDate:(nullable NSDate *)expirationDate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDAuthentication.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDAuthentication.h deleted file mode 100644 index b2c75b4eb..000000000 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDAuthentication.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -// We have to import GTMAppAuth because forward declaring the protocol does -// not generate the `fetcherAuthorizer` method below for Swift. -#ifdef SWIFT_PACKAGE -@import GTMAppAuth; -#else -#import -#endif - -@class GIDAuthentication; - -NS_ASSUME_NONNULL_BEGIN - -/// A callback block that takes a `GIDAuthentication` or an error if the attempt to refresh tokens -/// was unsuccessful. -typedef void (^GIDAuthenticationAction)(GIDAuthentication *_Nullable authentication, - NSError *_Nullable error); - -/// This class represents the OAuth 2.0 entities needed for sign-in. -@interface GIDAuthentication : NSObject - -/// The client ID associated with the authentication. -@property(nonatomic, readonly) NSString *clientID; - -/// The OAuth2 access token to access Google services. -@property(nonatomic, readonly) NSString *accessToken; - -/// The estimated expiration date of the access token. -@property(nonatomic, readonly) NSDate *accessTokenExpirationDate; - -/// The OAuth2 refresh token to exchange for new access tokens. -@property(nonatomic, readonly) NSString *refreshToken; - -/// An OpenID Connect ID token that identifies the user. Send this token to your server to -/// authenticate the user there. For more information on this topic, see -/// https://developers.google.com/identity/sign-in/ios/backend-auth -@property(nonatomic, readonly, nullable) NSString *idToken; - -/// The estimated expiration date of the ID token. -@property(nonatomic, readonly, nullable) NSDate *idTokenExpirationDate; - -/// Gets a new authorizer for `GTLService`, `GTMSessionFetcher`, or `GTMHTTPFetcher`. -/// -/// @return A new authorizer -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -- (id)fetcherAuthorizer; -#pragma clang diagnostic pop - -/// Get a valid access token and a valid ID token, refreshing them first if they have expired or are -/// about to expire. -/// -/// @param action A callback block that takes a `GIDAuthentication` or an error if the attempt to -/// refresh tokens was unsuccessful. The block will be called asynchronously on the main queue. -- (void)doWithFreshTokens:(GIDAuthenticationAction)action; - -@end - - -NS_ASSUME_NONNULL_END diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h index 2ef1ba7ca..4902fa37a 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h @@ -48,14 +48,14 @@ NS_ASSUME_NONNULL_BEGIN /// Initialize a `GIDConfiguration` object with a client ID. /// /// @param clientID The client ID of the app. -/// @return An initilized `GIDConfiguration` instance. +/// @return An initialized `GIDConfiguration` instance. - (instancetype)initWithClientID:(NSString *)clientID; /// Initialize a `GIDConfiguration` object with a client ID and server client ID. /// /// @param clientID The client ID of the app. /// @param serverClientID The server's client ID. -/// @return An initilized `GIDConfiguration` instance. +/// @return An initialized `GIDConfiguration` instance. - (instancetype)initWithClientID:(NSString *)clientID serverClientID:(nullable NSString *)serverClientID; @@ -65,7 +65,7 @@ NS_ASSUME_NONNULL_BEGIN /// @param serverClientID The server's client ID. /// @param hostedDomain The Google Apps domain to be used. /// @param openIDRealm The OpenID realm to be used. -/// @return An initilized `GIDConfiguration` instance. +/// @return An initialized `GIDConfiguration` instance. - (instancetype)initWithClientID:(NSString *)clientID serverClientID:(nullable NSString *)serverClientID hostedDomain:(nullable NSString *)hostedDomain diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h index f5f130df1..8cc0bdff3 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h @@ -1,5 +1,5 @@ /* - * Copyright 2021 Google LLC + * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,39 +15,106 @@ */ #import +#import -NS_ASSUME_NONNULL_BEGIN +#if __has_include() +#import +#elif __has_include() +#import +#endif + +// We have to import GTMAppAuth because forward declaring the protocol does +// not generate the `fetcherAuthorizer` property below for Swift. +#ifdef SWIFT_PACKAGE +@import GTMAppAuth; +#else +#import +#endif -@class GIDAuthentication; +@class GIDConfiguration; +@class GIDSignInResult; +@class GIDToken; @class GIDProfileData; -/// This class represents a user account. +NS_ASSUME_NONNULL_BEGIN + +/// This class represents a signed-in user. @interface GIDGoogleUser : NSObject /// The Google user ID. @property(nonatomic, readonly, nullable) NSString *userID; -/// Representation of basic profile data for the user. +/// The basic profile data for the user. @property(nonatomic, readonly, nullable) GIDProfileData *profile; -/// The authentication object for the user. -@property(nonatomic, readonly) GIDAuthentication *authentication; - -/// The API scopes granted to the app in an array of `NSString`. +/// The OAuth2 scopes granted to the app in an array of `NSString`. @property(nonatomic, readonly, nullable) NSArray *grantedScopes; -/// For Google Apps hosted accounts, the domain of the user. -@property(nonatomic, readonly, nullable) NSString *hostedDomain; +/// The configuration that was used to sign in this user. +@property(nonatomic, readonly) GIDConfiguration *configuration; + +/// The OAuth2 access token to access Google services. +@property(nonatomic, readonly) GIDToken *accessToken; + +/// The OAuth2 refresh token to exchange for new access tokens. +@property(nonatomic, readonly) GIDToken *refreshToken; + +/// The OpenID Connect ID token that identifies the user. +/// +/// Send this token to your server to authenticate the user there. For more information on this topic, +/// see https://developers.google.com/identity/sign-in/ios/backend-auth. +@property(nonatomic, readonly, nullable) GIDToken *idToken; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +/// The authorizer for use with `GTLRService`, `GTMSessionFetcher`, or `GTMHTTPFetcher`. +@property(nonatomic, readonly) id fetcherAuthorizer; +#pragma clang diagnostic pop + +/// Refresh the user's access and ID tokens if they have expired or are about to expire. +/// +/// @param completion A completion block that takes a `GIDGoogleUser` or an error if the attempt to +/// refresh tokens was unsuccessful. The block will be called asynchronously on the main queue. +- (void)refreshTokensIfNeededWithCompletion:(void (^)(GIDGoogleUser *_Nullable user, + NSError *_Nullable error))completion; + +#if TARGET_OS_IOS || TARGET_OS_MACCATALYST -/// The client ID of the home server. -@property(nonatomic, readonly, nullable) NSString *serverClientID; +/// Starts an interactive consent flow on iOS to add new scopes to the user's `grantedScopes`. +/// +/// The completion will be called at the end of this process. If successful, a `GIDSignInResult` +/// instance will be returned reflecting the new scopes and saved sign-in state will be updated. +/// +/// @param scopes The scopes to ask the user to consent to. +/// @param presentingViewController The view controller used to present `SFSafariViewContoller` on +/// iOS 9 and 10 and to supply `presentationContextProvider` for `ASWebAuthenticationSession` on +/// iOS 13+. +/// @param completion The optional block that is called on completion. This block will be called +/// asynchronously on the main queue. +- (void)addScopes:(NSArray *)scopes + presentingViewController:(UIViewController *)presentingViewController + completion:(nullable void (^)(GIDSignInResult *_Nullable signInResult, + NSError *_Nullable error))completion + NS_EXTENSION_UNAVAILABLE("The add scopes flow is not supported in App Extensions."); -/// An OAuth2 authorization code for the home server. -@property(nonatomic, readonly, nullable) NSString *serverAuthCode; +#elif TARGET_OS_OSX -/// The OpenID2 realm of the home server. -@property(nonatomic, readonly, nullable) NSString *openIDRealm; +/// Starts an interactive consent flow on macOS to add new scopes to the user's `grantedScopes`. +/// +/// The completion will be called at the end of this process. If successful, a `GIDSignInResult` +/// instance will be returned reflecting the new scopes and saved sign-in state will be updated. +/// +/// @param scopes An array of scopes to ask the user to consent to. +/// @param presentingWindow The window used to supply `presentationContextProvider` for +/// `ASWebAuthenticationSession`. +/// @param completion The optional block that is called on completion. This block will be called +/// asynchronously on the main queue. +- (void)addScopes:(NSArray *)scopes + presentingWindow:(NSWindow *)presentingWindow + completion:(nullable void (^)(GIDSignInResult *_Nullable signInResult, + NSError *_Nullable error))completion; +#endif @end diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h index 094dffb13..9ea598120 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h @@ -25,6 +25,7 @@ @class GIDConfiguration; @class GIDGoogleUser; +@class GIDSignInResult; NS_ASSUME_NONNULL_BEGIN @@ -44,31 +45,27 @@ typedef NS_ERROR_ENUM(kGIDSignInErrorDomain, GIDSignInErrorCode) { kGIDSignInErrorCodeCanceled = -5, /// Indicates an Enterprise Mobility Management related error has occurred. kGIDSignInErrorCodeEMM = -6, - /// Indicates there is no `currentUser`. - kGIDSignInErrorCodeNoCurrentUser = -7, /// Indicates the requested scopes have already been granted to the `currentUser`. kGIDSignInErrorCodeScopesAlreadyGranted = -8, + /// Indicates there is an operation on a previous user. + kGIDSignInErrorCodeMismatchWithCurrentUser = -9, }; -/// Represents a callback block that takes a `GIDGoogleUser` on success or an error if the operation -/// was unsuccessful. -typedef void (^GIDSignInCallback)(GIDGoogleUser *_Nullable user, NSError *_Nullable error); - -/// Represents a callback block that takes an error if the operation was unsuccessful. -typedef void (^GIDDisconnectCallback)(NSError *_Nullable error); - -/// This class signs the user in with Google. +/// This class is used to sign in users with their Google account and manage their session. /// -/// For reference, please see "Google Sign-In for iOS" at +/// For reference, please see "Google Sign-In for iOS and macOS" at /// https://developers.google.com/identity/sign-in/ios @interface GIDSignIn : NSObject -/// A shared `GIDSignIn` instance. +/// The shared `GIDSignIn` instance. @property(class, nonatomic, readonly) GIDSignIn *sharedInstance; /// The `GIDGoogleUser` object representing the current user or `nil` if there is no signed-in user. @property(nonatomic, readonly, nullable) GIDGoogleUser *currentUser; +/// The active configuration for this instance of `GIDSignIn`. +@property(nonatomic, nullable) GIDConfiguration *configuration; + /// Unavailable. Use the `sharedInstance` property to instantiate `GIDSignIn`. /// :nodoc: + (instancetype)new NS_UNAVAILABLE; @@ -84,172 +81,141 @@ typedef void (^GIDDisconnectCallback)(NSError *_Nullable error); /// @return `YES` if `GIDSignIn` handled this URL. - (BOOL)handleURL:(NSURL *)url; -/// Checks if there is a previously authenticated user saved in keychain. +/// Checks if there is a previous user sign-in saved in keychain. /// -/// @return `YES` if there is a previously authenticated user saved in keychain. +/// @return `YES` if there is a previous user sign-in saved in keychain. - (BOOL)hasPreviousSignIn; -/// Attempts to restore a previously authenticated user without interaction. +/// Attempts to restore a previous user sign-in without interaction. /// -/// @param callback The `GIDSignInCallback` block that is called on completion. This block will be -/// called asynchronously on the main queue. -- (void)restorePreviousSignInWithCallback:(nullable GIDSignInCallback)callback; +/// @param completion The block that is called on completion. This block will be called asynchronously +/// on the main queue. +- (void)restorePreviousSignInWithCompletion:(nullable void (^)(GIDGoogleUser *_Nullable user, + NSError *_Nullable error))completion; -/// Marks current user as being in the signed out state. +/// Signs out the `currentUser`, removing it from the keychain. - (void)signOut; -/// Disconnects the current user from the app and revokes previous authentication. If the operation -/// succeeds, the OAuth 2.0 token is also removed from keychain. +/// Disconnects the `currentUser` by signing them out and revoking all OAuth2 scope grants made to the app. /// -/// @param callback The optional `GIDDisconnectCallback` block that is called on completion. This -/// block will be called asynchronously on the main queue. -- (void)disconnectWithCallback:(nullable GIDDisconnectCallback)callback; +/// @param completion The optional block that is called on completion. +/// This block will be called asynchronously on the main queue. +- (void)disconnectWithCompletion:(nullable void (^)(NSError *_Nullable error))completion; #if TARGET_OS_IOS || TARGET_OS_MACCATALYST -/// Starts an interactive sign-in flow on iOS using the provided configuration. + +/// Starts an interactive sign-in flow on iOS. /// -/// The callback will be called at the end of this process. Any saved sign-in state will be +/// The completion will be called at the end of this process. Any saved sign-in state will be /// replaced by the result of this flow. Note that this method should not be called when the app is /// starting up, (e.g in `application:didFinishLaunchingWithOptions:`); instead use the -/// `restorePreviousSignInWithCallback:` method to restore a previous sign-in. +/// `restorePreviousSignInWithCompletion:` method to restore a previous sign-in. /// -/// @param configuration The configuration properties to be used for this flow. /// @param presentingViewController The view controller used to present `SFSafariViewContoller` on /// iOS 9 and 10 and to supply `presentationContextProvider` for `ASWebAuthenticationSession` on /// iOS 13+. -/// @param callback The `GIDSignInCallback` block that is called on completion. This block will be -/// called asynchronously on the main queue. -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingViewController:(UIViewController *)presentingViewController - callback:(nullable GIDSignInCallback)callback +/// @param completion The optional block that is called on completion. This block will +/// be called asynchronously on the main queue. +- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController + completion: + (nullable void (^)(GIDSignInResult *_Nullable signInResult, + NSError *_Nullable error))completion NS_EXTENSION_UNAVAILABLE("The sign-in flow is not supported in App Extensions."); -/// Starts an interactive sign-in flow on iOS using the provided configuration and a login hint. +/// Starts an interactive sign-in flow on iOS using the provided hint. /// -/// The callback will be called at the end of this process. Any saved sign-in state will be +/// The completion will be called at the end of this process. Any saved sign-in state will be /// replaced by the result of this flow. Note that this method should not be called when the app is /// starting up, (e.g in `application:didFinishLaunchingWithOptions:`); instead use the -/// `restorePreviousSignInWithCallback:` method to restore a previous sign-in. +/// `restorePreviousSignInWithCompletion:` method to restore a previous sign-in. /// -/// @param configuration The configuration properties to be used for this flow. /// @param presentingViewController The view controller used to present `SFSafariViewContoller` on /// iOS 9 and 10 and to supply `presentationContextProvider` for `ASWebAuthenticationSession` on /// iOS 13+. /// @param hint An optional hint for the authorization server, for example the user's ID or email /// address, to be prefilled if possible. -/// @param callback The `GIDSignInCallback` block that is called on completion. This block will be -/// called asynchronously on the main queue. -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingViewController:(UIViewController *)presentingViewController - hint:(nullable NSString *)hint - callback:(nullable GIDSignInCallback)callback +/// @param completion The optional block that is called on completion. This block will +/// be called asynchronously on the main queue. +- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController + hint:(nullable NSString *)hint + completion: + (nullable void (^)(GIDSignInResult *_Nullable signInResult, + NSError *_Nullable error))completion NS_EXTENSION_UNAVAILABLE("The sign-in flow is not supported in App Extensions."); -/// Starts an interactive sign-in flow on iOS using the provided configuration and a login hint. +/// Starts an interactive sign-in flow on iOS using the provided hint and additional scopes. /// -/// The callback will be called at the end of this process. Any saved sign-in state will be +/// The completion will be called at the end of this process. Any saved sign-in state will be /// replaced by the result of this flow. Note that this method should not be called when the app is /// starting up, (e.g in `application:didFinishLaunchingWithOptions:`); instead use the -/// `restorePreviousSignInWithCallback:` method to restore a previous sign-in. +/// `restorePreviousSignInWithCompletion:` method to restore a previous sign-in. /// -/// @param configuration The configuration properties to be used for this flow. /// @param presentingViewController The view controller used to present `SFSafariViewContoller` on /// iOS 9 and 10. /// @param hint An optional hint for the authorization server, for example the user's ID or email /// address, to be prefilled if possible. /// @param additionalScopes An optional array of scopes to request in addition to the basic profile scopes. -/// @param callback The `GIDSignInCallback` block that is called on completion. This block will be -/// called asynchronously on the main queue. - -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingViewController:(UIViewController *)presentingViewController - hint:(nullable NSString *)hint - additionalScopes:(nullable NSArray *)additionalScopes - callback:(nullable GIDSignInCallback)callback; - -/// Starts an interactive consent flow on iOS to add scopes to the current user's grants. -/// -/// The callback will be called at the end of this process. If successful, a new `GIDGoogleUser` -/// instance will be returned reflecting the new scopes and saved sign-in state will be updated. -/// -/// @param scopes The scopes to ask the user to consent to. -/// @param presentingViewController The view controller used to present `SFSafariViewContoller` on -/// iOS 9 and 10 and to supply `presentationContextProvider` for `ASWebAuthenticationSession` on -/// iOS 13+. -/// @param callback The `GIDSignInCallback` block that is called on completion. This block will be -/// called asynchronously on the main queue. -- (void)addScopes:(NSArray *)scopes - presentingViewController:(UIViewController *)presentingViewController - callback:(nullable GIDSignInCallback)callback - NS_EXTENSION_UNAVAILABLE("The add scopes flow is not supported in App Extensions."); +/// @param completion The optional block that is called on completion. This block will +/// be called asynchronously on the main queue. +- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController + hint:(nullable NSString *)hint + additionalScopes:(nullable NSArray *)additionalScopes + completion: + (nullable void (^)(GIDSignInResult *_Nullable signInResult, + NSError *_Nullable error))completion + NS_EXTENSION_UNAVAILABLE("The sign-in flow is not supported in App Extensions."); #elif TARGET_OS_OSX -/// Starts an interactive sign-in flow on macOS using the provided configuration. + +/// Starts an interactive sign-in flow on macOS. /// -/// The callback will be called at the end of this process. Any saved sign-in state will be +/// The completion will be called at the end of this process. Any saved sign-in state will be /// replaced by the result of this flow. Note that this method should not be called when the app is /// starting up, (e.g in `application:didFinishLaunchingWithOptions:`); instead use the -/// `restorePreviousSignInWithCallback:` method to restore a previous sign-in. +/// `restorePreviousSignInWithCompletion:` method to restore a previous sign-in. /// -/// @param configuration The configuration properties to be used for this flow. /// @param presentingWindow The window used to supply `presentationContextProvider` for `ASWebAuthenticationSession`. -/// @param callback The `GIDSignInCallback` block that is called on completion. This block will be -/// called asynchronously on the main queue. -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingWindow:(NSWindow *)presentingWindow - callback:(nullable GIDSignInCallback)callback; +/// @param completion The optional block that is called on completion. This block will +/// be called asynchronously on the main queue. +- (void)signInWithPresentingWindow:(NSWindow *)presentingWindow + completion:(nullable void (^)(GIDSignInResult *_Nullable signInResult, + NSError *_Nullable error))completion; -/// Starts an interactive sign-in flow on macOS using the provided configuration and a login hint. +/// Starts an interactive sign-in flow on macOS using the provided hint. /// -/// The callback will be called at the end of this process. Any saved sign-in state will be +/// The completion will be called at the end of this process. Any saved sign-in state will be /// replaced by the result of this flow. Note that this method should not be called when the app is /// starting up, (e.g in `application:didFinishLaunchingWithOptions:`); instead use the -/// `restorePreviousSignInWithCallback:` method to restore a previous sign-in. +/// `restorePreviousSignInWithCompletion:` method to restore a previous sign-in. /// -/// @param configuration The configuration properties to be used for this flow. /// @param presentingWindow The window used to supply `presentationContextProvider` for `ASWebAuthenticationSession`. /// @param hint An optional hint for the authorization server, for example the user's ID or email /// address, to be prefilled if possible. -/// @param callback The `GIDSignInCallback` block that is called on completion. This block will be -/// called asynchronously on the main queue. -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingWindow:(NSWindow *)presentingWindow - hint:(nullable NSString *)hint - callback:(nullable GIDSignInCallback)callback; +/// @param completion The optional block that is called on completion. This block will +/// be called asynchronously on the main queue. +- (void)signInWithPresentingWindow:(NSWindow *)presentingWindow + hint:(nullable NSString *)hint + completion:(nullable void (^)(GIDSignInResult *_Nullable signInResult, + NSError *_Nullable error))completion; -/// Starts an interactive sign-in flow on macOS using the provided configuration and a login hint. +/// Starts an interactive sign-in flow on macOS using the provided hint. /// -/// The callback will be called at the end of this process. Any saved sign-in state will be +/// The completion will be called at the end of this process. Any saved sign-in state will be /// replaced by the result of this flow. Note that this method should not be called when the app is /// starting up, (e.g in `application:didFinishLaunchingWithOptions:`); instead use the -/// `restorePreviousSignInWithCallback:` method to restore a previous sign-in. +/// `restorePreviousSignInWithCompletion:` method to restore a previous sign-in. /// -/// @param configuration The configuration properties to be used for this flow. /// @param presentingWindow The window used to supply `presentationContextProvider` for `ASWebAuthenticationSession`. /// @param hint An optional hint for the authorization server, for example the user's ID or email /// address, to be prefilled if possible. /// @param additionalScopes An optional array of scopes to request in addition to the basic profile scopes. -/// @param callback The `GIDSignInCallback` block that is called on completion. This block will be -/// called asynchronously on the main queue. - -- (void)signInWithConfiguration:(GIDConfiguration *)configuration - presentingWindow:(NSWindow *)presentingWindow - hint:(nullable NSString *)hint - additionalScopes:(nullable NSArray *)additionalScopes - callback:(nullable GIDSignInCallback)callback; - -/// Starts an interactive consent flow on macOS to add scopes to the current user's grants. -/// -/// The callback will be called at the end of this process. If successful, a new `GIDGoogleUser` -/// instance will be returned reflecting the new scopes and saved sign-in state will be updated. -/// -/// @param scopes An array of scopes to ask the user to consent to. -/// @param presentingWindow The window used to supply `presentationContextProvider` for `ASWebAuthenticationSession`. -/// @param callback The `GIDSignInCallback` block that is called on completion. This block will be -/// called asynchronously on the main queue. -- (void)addScopes:(NSArray *)scopes - presentingWindow:(NSWindow *)presentingWindow - callback:(nullable GIDSignInCallback)callback; +/// @param completion The optional block that is called on completion. This block will +/// be called asynchronously on the main queue. +- (void)signInWithPresentingWindow:(NSWindow *)presentingWindow + hint:(nullable NSString *)hint + additionalScopes:(nullable NSArray *)additionalScopes + completion:(nullable void (^)(GIDSignInResult *_Nullable signInResult, + NSError *_Nullable error))completion; #endif diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInButton.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInButton.h index ce17204f5..f27488fb0 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInButton.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInButton.h @@ -42,10 +42,10 @@ typedef NS_ENUM(NSInteger, GIDSignInButtonColorScheme) { /// This class provides the "Sign in with Google" button. /// -/// You can instantiate this class programmatically or from a NIB file. You -/// should connect this control to an `IBAction`, or something similar, that -/// calls signInWithConfiguration:presentingViewController:callback: on -/// `GIDSignIn` and add it to your view hierarchy. +/// You can instantiate this class programmatically or from a NIB file. You should connect this +/// control to an `IBAction`, or something similar, that calls +/// signInWithPresentingViewController:completion: on `GIDSignIn` and add it to your view +/// hierarchy. @interface GIDSignInButton : UIControl /// The layout style for the sign-in button. diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h new file mode 100644 index 000000000..3da9158be --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h @@ -0,0 +1,40 @@ +/* +* Copyright 2022 Google LLC +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#import + +@class GIDGoogleUser; + +NS_ASSUME_NONNULL_BEGIN + +/// A helper object that contains the result of a successful signIn or addScopes flow. +@interface GIDSignInResult : NSObject + +/// The updated `GIDGoogleUser` instance for the user who just completed the flow. +@property(nonatomic, readonly) GIDGoogleUser *user; + +/// An OAuth2 authorization code for the home server. +@property(nonatomic, readonly, nullable) NSString *serverAuthCode; + +/// Unsupported. ++ (instancetype)new NS_UNAVAILABLE; + +/// Unsupported. +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDToken.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDToken.h new file mode 100644 index 000000000..024f0539d --- /dev/null +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDToken.h @@ -0,0 +1,45 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +/// This class represents an OAuth2 or OpenID Connect token. +@interface GIDToken : NSObject + +/// The token string. +@property(nonatomic, copy, readonly) NSString *tokenString; + +/// The estimated expiration date of the token. +@property(nonatomic, readonly, nullable) NSDate *expirationDate; + +/// Check if current token is equal to another one. +/// +/// @param otherToken Another token to compare. +- (BOOL)isEqualToToken:(GIDToken *)otherToken; + +/// Unavailable. +/// :nodoc: ++ (instancetype)new NS_UNAVAILABLE; + +/// Unavailable. +/// :nodoc: +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GoogleSignIn.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GoogleSignIn.h index 091f2c1a4..5923329da 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GoogleSignIn.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GoogleSignIn.h @@ -15,11 +15,12 @@ */ #import -#import "GIDAuthentication.h" #import "GIDConfiguration.h" #import "GIDGoogleUser.h" #import "GIDProfileData.h" #import "GIDSignIn.h" +#import "GIDToken.h" +#import "GIDSignInResult.h" #if TARGET_OS_IOS || TARGET_OS_MACCATALYST #import "GIDSignInButton.h" #endif diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/README.md b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/README.md index 090566123..e3eb8d53a 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/README.md +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/GoogleSignIn/README.md @@ -1,7 +1,8 @@ [![Version](https://img.shields.io/cocoapods/v/GoogleSignIn.svg?style=flat)](https://cocoapods.org/pods/GoogleSignIn) [![Platform](https://img.shields.io/cocoapods/p/GoogleSignIn.svg?style=flat)](https://cocoapods.org/pods/GoogleSignIn) [![License](https://img.shields.io/cocoapods/l/GoogleSignIn.svg?style=flat)](https://cocoapods.org/pods/GoogleSignIn) -[![tests](https://github.com/google/GoogleSignIn-iOS/actions/workflows/tests.yml/badge.svg?event=push)](https://github.com/google/GoogleSignIn-iOS/actions/workflows/tests.yml) +[![unit_tests](https://github.com/google/GoogleSignIn-iOS/actions/workflows/unit_tests.yml/badge.svg?branch=main)](https://github.com/google/GoogleSignIn-iOS/actions/workflows/unit_tests.yml) +[![integration_tests](https://github.com/google/GoogleSignIn-iOS/actions/workflows/integration_tests.yml/badge.svg?branch=main)](https://github.com/google/GoogleSignIn-iOS/actions/workflows/integration_tests.yml) # Google Sign-In for iOS and macOS @@ -75,10 +76,8 @@ Creating a 'Sign in with Google' button in SwiftUI can be as simple as this: ``` GoogleSignInButton { - GIDSignIn.sharedInstance.signIn( - with: configuration, - presenting: yourViewController) { user, error in - // check `error`; do something with `user` + GIDSignIn.sharedInstance.signIn(withPresenting: yourViewController) { signInResult, error in + // check `error`; do something with `signInResult` } } ``` @@ -110,10 +109,8 @@ that it will be available for use in AppKit. ``` let signInButton = GoogleSignInButton { - GIDSignIn.sharedInstance.signIn( - with: configuration, - presenting: yourViewController) { user, error in - // check `error`; do something with `user` + GIDSignIn.sharedInstance.signIn(withPresenting: yourViewController) { signInResult, error in + // check `error`; do something with `signInResult` } } let hostedButton = NSHostingView(rootView: signInButton) diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Manifest.lock b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Manifest.lock index a164a67c3..0c5ff41d0 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Manifest.lock +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Manifest.lock @@ -1,21 +1,21 @@ PODS: - - Alamofire (5.6.2) - - AppAuth (1.6.0): - - AppAuth/Core (= 1.6.0) - - AppAuth/ExternalUserAgent (= 1.6.0) - - AppAuth/Core (1.6.0) - - AppAuth/ExternalUserAgent (1.6.0): + - Alamofire (5.8.1) + - AppAuth (1.6.2): + - AppAuth/Core (= 1.6.2) + - AppAuth/ExternalUserAgent (= 1.6.2) + - AppAuth/Core (1.6.2) + - AppAuth/ExternalUserAgent (1.6.2): - AppAuth/Core - - GoogleSignIn (6.2.4): + - GoogleSignIn (7.0.0): - AppAuth (~> 1.5) - - GTMAppAuth (~> 1.3) - - GTMSessionFetcher/Core (< 3.0, >= 1.1) - - GTMAppAuth (1.3.1): + - GTMAppAuth (< 3.0, >= 1.3) + - GTMSessionFetcher/Core (< 4.0, >= 1.1) + - GTMAppAuth (2.0.0): - AppAuth/Core (~> 1.6) - - GTMSessionFetcher/Core (< 3.0, >= 1.5) - - GTMSessionFetcher/Core (2.1.0) - - SuperTokensIOS (0.2.5) - - xcbeautify (0.15.0) + - GTMSessionFetcher/Core (< 4.0, >= 1.5) + - GTMSessionFetcher/Core (3.1.1) + - SuperTokensIOS (0.2.6) + - xcbeautify (0.17.0) DEPENDENCIES: - Alamofire @@ -34,14 +34,14 @@ SPEC REPOS: - xcbeautify SPEC CHECKSUMS: - Alamofire: d368e1ff8a298e6dde360e35a3e68e6c610e7204 - AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add - GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a - GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd - GTMSessionFetcher: ffbb25ec00ebcb5201adab0a56d808f6f1902d9f - SuperTokensIOS: 3caa2586c289f4a1fd4a9135e85842c9c639383a - xcbeautify: df17aa32d769add7af523a8be9b0ef8fb9eb75a8 + Alamofire: 3ca42e259043ee0dc5c0cdd76c4bc568b8e42af7 + AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 + GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842 + GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae + GTMSessionFetcher: e8647203b65cee28c5f73d0f473d096653945e72 + SuperTokensIOS: 04e07f5343136949df8973aaa6905ee7ffa2d749 + xcbeautify: 6e2f57af5c3a86d490376d5758030a8dcc201c1b -PODFILE CHECKSUM: fdcdfe0e7301fefa4c160b218e130961eb341d95 +PODFILE CHECKSUM: 8c8b23d19c13c115133d9d41fd507e3c2cbeab6a -COCOAPODS: 1.11.3 +COCOAPODS: 1.14.2 diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Pods.xcodeproj/project.pbxproj b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Pods.xcodeproj/project.pbxproj index e5dfafe22..81b59e820 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Pods.xcodeproj/project.pbxproj +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Pods.xcodeproj/project.pbxproj @@ -19,639 +19,661 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 005B319B494ED2DAA239B9939A504DFC /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 537BF43A31F256B3FE6192F670A17262 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0077BB4C45E0B116C14F4AED68C2E63E /* SuperTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E79E828A0A08DFD668D6173407DF20 /* SuperTokens.swift */; }; - 00B15FCCA7CC12C15A13010614F01854 /* OIDURLQueryComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = C5B40328DDF6D57D6FD0414A89A24E55 /* OIDURLQueryComponent.m */; }; - 045DE6EBF9B2F63F60F5BE60C1198E06 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53BC36286567CFC570B5B674C634A6AE /* RedirectHandler.swift */; }; - 04A896288CE3A59B530250337A5F8362 /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCF1AA10327C6A87D4DB5A324BB1F33B /* Result+Alamofire.swift */; }; - 0554BFC1425DD4A370E049CF9F994B2C /* cs.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 5A03479E280253775B5F25F1C054CBA0 /* cs.lproj */; }; - 07F5638A22401A568CFAF65B438A4E1B /* es_MX.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 55A58EDADA4AF4F69DC8CDC798D788D6 /* es_MX.lproj */; }; - 0957B854DC888C7B4B8298FFA2CDD5A8 /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 194C6E6754F80343C39F15D0B1FC9565 /* ja.lproj */; }; - 0DCE6362B0F7FFE4944EEEE264F44E05 /* GIDSignInButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 67C7973912F1E2C3DE34C5812E790A69 /* GIDSignInButton.m */; }; - 0DE74F0B226EDC8C77D5CC00C0F15A6C /* OIDTokenUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 159CCF78F8506B9A7456C26A6D3087C0 /* OIDTokenUtilities.m */; }; - 0E751E1B2A7D90F933267D2C4A2328F7 /* google@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 65BFCC93B2CC8947A3B247E7C8D700D9 /* google@3x.png */; }; - 0F4037DBF307AC8058BD0A3D35C7E7E9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BC8198571E4A574C021C4055A65DC /* Foundation.framework */; }; - 11B2E874F819409973EDE8A7A4197B49 /* he.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 9864FC972E7414EA01CED01F19D74198 /* he.lproj */; }; - 137BDF0EE751F552141D6AC020B1D394 /* GIDEMMErrorHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = DECC97FE572561C96DEC87BCD224D630 /* GIDEMMErrorHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1477198BFDCBDD6E122E35D28A59EBA3 /* en_GB.lproj in Resources */ = {isa = PBXBuildFile; fileRef = C44778C7AB804DAB5C5543EEB4EB728E /* en_GB.lproj */; }; - 161B289F1C83A7281E6842E33014033F /* OIDClientMetadataParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = F7CD19358355103FC1B1EF543679743D /* OIDClientMetadataParameters.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17EC3E69469BB4FE2ACD89184105A8BA /* OIDFieldMapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 5128A5E90084468364B8997CF11BB157 /* OIDFieldMapping.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1976BB7D7E26A12E29283E71154B63B3 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A4D1152DBC49591439680362DF4A063 /* SessionDelegate.swift */; }; - 1A530EB48C9DC0AB51F790E6711F4681 /* google.png in Resources */ = {isa = PBXBuildFile; fileRef = D9422A75E0B91F2D5DED351D29372877 /* google.png */; }; - 1AACBC39D664A8AD7BB189A5005DAE8B /* GIDProfileData.m in Sources */ = {isa = PBXBuildFile; fileRef = C8BAA6E46A55EDDA37015EF139AD5C41 /* GIDProfileData.m */; }; - 1BE29F87B82599DCB36904C603C9B599 /* GTMSessionFetcher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BC282B0859DD5E43670C045C8973786B /* GTMSessionFetcher-dummy.m */; }; - 1D66D60A6F32CFF16C509D1396D0EFDE /* OIDURLQueryComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 943A7BE177C57D6EFBDD09558715C614 /* OIDURLQueryComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EE44196E7BCE57AD96A2C751651EF40 /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C82DB551DB921FCAF863980E18C3E0A /* AlamofireExtended.swift */; }; - 1FC7BC3300D243C6384E261B8C51AC95 /* GIDMDMPasscodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 471E5D934999CF9325640FD165371A2F /* GIDMDMPasscodeCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 204678C7E51D4577299DBB1A86DC83F8 /* sk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 537FFAC3CC3DF132392AAD9AC59CE1E4 /* sk.lproj */; }; - 2156F1E12D1F62F8322CFE5C29277E6E /* OIDResponseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = AC51F9E92F96704FA74602BDD1DE41D9 /* OIDResponseTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22E255E236F99AC5413C8E29922E3562 /* pt_BR.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 158A804C067D54F33BA7B7F11AC6BE90 /* pt_BR.lproj */; }; - 23D7A484A719B35052CFCF1A47083959 /* OIDClientMetadataParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 02E1518AA159378314AC0C2FC1499273 /* OIDClientMetadataParameters.m */; }; - 23F701817EF696D1C38ADCE923CEE04E /* GTMSessionFetcher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AA44611746FA98F2EE7B843767A7CDB2 /* GTMSessionFetcher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 26FEE701D63B2944E5BEE945221AEA48 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1D121CE9ADDC56F0F93BB0A70F399D4 /* String.swift */; }; - 28054FE4F889AEC337F4560F1444A061 /* SuperTokensIOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D87554B1B740B4380B7096E31C4903FE /* SuperTokensIOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 288D17CC844B96865AF761D3BF5B2BCE /* GIDSignInPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 58D9115A10337BA728DD3C3D7A1781D3 /* GIDSignInPreferences.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B0A24E6A9A8DF0242ED11007B9F0CD8 /* OIDErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BBB9EF80A0D9E5A6601A31B00F45281 /* OIDErrorUtilities.m */; }; - 2C0EF0620F4C818C0221B62FA6F69227 /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 9FA14125173B11C29E756CCF99373E43 /* de.lproj */; }; - 2C42D05841AC97AE4FFA70F95A5610FF /* GIDAuthStateMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = E07AEDEC313F31C39D4EBE2C4FDB0BE1 /* GIDAuthStateMigration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2CBE3651CA006E19F5D64A2DE9B9A028 /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2B224F60C0E6F2221EAF7E6213323F /* CachedResponseHandler.swift */; }; - 2CCD13099063CD560E3067BD132914FA /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B4033776400836F6770C99E76761E0E /* Notifications.swift */; }; - 2E767405F0004A42FC8FFBA1E21DFE20 /* OIDScopeUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 60FD3B39FC736BF548978BB5568032AB /* OIDScopeUtilities.m */; }; - 2EF390C79F02F4E85DB5FB4C1F042498 /* OIDExternalUserAgentIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = BA62556306FDB2FD351AD437EB05B564 /* OIDExternalUserAgentIOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30A907372DD49DF9D7F247FBBCBC161F /* GIDAuthStateMigration.m in Sources */ = {isa = PBXBuildFile; fileRef = 33A66DE80CB8FDA322EE3D0C27C10645 /* GIDAuthStateMigration.m */; }; - 320D03F92E37CA225E1AB819D00B09B6 /* OIDAuthStateErrorDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DA9FAEC76E3039DA1A65C9A94BAB0CB9 /* OIDAuthStateErrorDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33A7D0F2D03004CE256A75E03DF33C70 /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3B83BFDAA0CEB146D20429A86E9878 /* RetryPolicy.swift */; }; - 367491B7F9C8EAC9EC7FC68157A16B96 /* pt.lproj in Resources */ = {isa = PBXBuildFile; fileRef = AECE582F311BAC63871D4F2E0DD83404 /* pt.lproj */; }; - 36DC3ACDD3D67D6800CABB2100702A0A /* OIDAuthStateChangeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = D23CD1A37BA242DBA37985879A90DD40 /* OIDAuthStateChangeDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37B71CC20A787EAE0662CD1A40DA64B6 /* OIDExternalUserAgentSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 7306633E5A22209F116EC04A4680C4D8 /* OIDExternalUserAgentSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3ABE01E514CDF3463D30BD6942CE3331 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 809AB6B59B8CB856EE1C1CF29D425D6B /* UIKit.framework */; }; - 3B20EA4BC0B328E2542C518273FA7046 /* GTMKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 09E71924FB07E0FAF15459DD73B2C6D7 /* GTMKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C4059621E23842C19D4EB5D35B41989 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2B23791D5BA525FB1B03A944A0C9DB9 /* Validation.swift */; }; - 3C587DB8D8B0EDC08B38A68A1E06FEBE /* GTMAppAuthFetcherAuthorization.m in Sources */ = {isa = PBXBuildFile; fileRef = 479FE04541F2AE70332349F844E9B06E /* GTMAppAuthFetcherAuthorization.m */; }; + 0077BB4C45E0B116C14F4AED68C2E63E /* SuperTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA0B819B83275F43E3525C2F189239C9 /* SuperTokens.swift */; }; + 00B15FCCA7CC12C15A13010614F01854 /* OIDURLQueryComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = E2A3C6DE4070A7BBB1DBC8A44835EEB0 /* OIDURLQueryComponent.m */; }; + 035956CCF35FA56AD2CD0D01F572D70F /* GIDToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 845C846F1C876536D2122F420CA207C4 /* GIDToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04A8430BFC619C34E5F4D3878D094380 /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CFA03AAB3190A00AC683729E3D8FAC1 /* CachedResponseHandler.swift */; }; + 071A8971D126195770CF369ED688118F /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9882CB2A988942EAF7CCF0E0DABE2F94 /* Roboto-Bold.ttf */; }; + 079F0820555C5B86C9FBD5EC6344137F /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47079D5AF585A92CD34DC0923EBAEBE0 /* Protected.swift */; }; + 0D21458D0FFF973416F4D31FA64B5F51 /* GTMSessionFetcher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 92DB83DED7BF7098033BF896592290DC /* GTMSessionFetcher-dummy.m */; }; + 0DE74F0B226EDC8C77D5CC00C0F15A6C /* OIDTokenUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 09F729385C67515AB00F2696CCD085BD /* OIDTokenUtilities.m */; }; + 0E7346845B009FB1B0F53AA7E70684C4 /* pl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 44E4EACB812B744E8A75F6BF97585EB4 /* pl.lproj */; }; + 105D363726CF65E8035DA2E7C35E9C53 /* GIDSignInButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D99B127F79B59B5F71275975DCED8712 /* GIDSignInButton.m */; }; + 11CCD832BD537718892C6A216A38490A /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96CEDCC52BD93D4D542907A07998FF02 /* URLRequest+Alamofire.swift */; }; + 1391EF7729CF84BDAC1CA463C3CC7B74 /* google@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = BDBB32C913397C07021E24595A1EF343 /* google@3x.png */; }; + 14EC2466FE81E8A2D8148B2B9B9A679A /* ca.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 0295D2E9E43FB0221417C760FECDD842 /* ca.lproj */; }; + 161B289F1C83A7281E6842E33014033F /* OIDClientMetadataParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 758A0D8DB0F4F4E6A25AC6A238F4CDD2 /* OIDClientMetadataParameters.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17EC3E69469BB4FE2ACD89184105A8BA /* OIDFieldMapping.h in Headers */ = {isa = PBXBuildFile; fileRef = BE6A7456B36F19DB9B35459631B2250E /* OIDFieldMapping.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 191A3EF24465CEB11F9F268C8FACCCA4 /* th.lproj in Resources */ = {isa = PBXBuildFile; fileRef = AF4EB2A027F72B811B8E303746C606E2 /* th.lproj */; }; + 197457852FC83E905248660B0F930452 /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCC31A8DB942D60A2E3B6216CD7A94DC /* AuthenticationInterceptor.swift */; }; + 19DD4581BE19AE590907FCF479F23768 /* GIDSignInResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F1ADF02BAFAD47B9D038DAEB55772C1F /* GIDSignInResult_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1AFD57838680DF58184FF94D14C7F3FF /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91C52884C55A9DF5F6BB22227512F000 /* RequestInterceptor.swift */; }; + 1D66D60A6F32CFF16C509D1396D0EFDE /* OIDURLQueryComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9420F1EA5EDECB2F64818BA255FF9B5C /* OIDURLQueryComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E6168B407933688D8EA3AA66E729E2D /* GTMSessionUploadFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 32B65DB61C754034DDB9A7B9EC3BCD88 /* GTMSessionUploadFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E8E4003C67D1BB3C9661AFD5825DABF /* LocalAuthentication.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75CB86D816E4184799EFE5B6E4954307 /* LocalAuthentication.framework */; }; + 20126504B21BF96F7634D526C7950036 /* GIDSignInResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FB4DEB0F920E38C75929CFFAFAF0F721 /* GIDSignInResult.m */; }; + 2156F1E12D1F62F8322CFE5C29277E6E /* OIDResponseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 33A2173CBDAE363E7DBF77A8593B0BC8 /* OIDResponseTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 23D7A484A719B35052CFCF1A47083959 /* OIDClientMetadataParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = AAD83C1D0792CF3EBC7B2A9FB4EC28C1 /* OIDClientMetadataParameters.m */; }; + 26FEE701D63B2944E5BEE945221AEA48 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DB18303D7AFFDC5EE057F444122DE54 /* String.swift */; }; + 28054FE4F889AEC337F4560F1444A061 /* SuperTokensIOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F8D095D4EFF13BA45D7E21088FBAC87F /* SuperTokensIOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 282FCD4EA8B05830E9108690B8CD336B /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F28B9BADC53DBB2D5F0D1110192A7C /* Session.swift */; }; + 2ABFED6053E3DCE35108F86A24AA30EC /* google.png in Resources */ = {isa = PBXBuildFile; fileRef = B24F4F917318857C2491FFE2D6E46AD0 /* google.png */; }; + 2B0A24E6A9A8DF0242ED11007B9F0CD8 /* OIDErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A15175572A06EB1F5E5D363008385D60 /* OIDErrorUtilities.m */; }; + 2CB304656EFE129CD57D675EC4C49BDD /* GIDConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = AA463FECC95B09C914860DD44DC3C391 /* GIDConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2E767405F0004A42FC8FFBA1E21DFE20 /* OIDScopeUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 90B8040EF2B1FCE723D6CB64581BDC55 /* OIDScopeUtilities.m */; }; + 2EF390C79F02F4E85DB5FB4C1F042498 /* OIDExternalUserAgentIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 916F2420757E82B81C9712673CE16242 /* OIDExternalUserAgentIOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 320C0D7A88AA812EFB20016BA1F5D7AE /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C223B892C5A26CA22897C178321F62 /* AFError.swift */; }; + 320D03F92E37CA225E1AB819D00B09B6 /* OIDAuthStateErrorDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 38E3C1FB627EB33E70A11AD88A999D2D /* OIDAuthStateErrorDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3312C165C4A0F52E47D5BF1F5B831247 /* GIDMDMPasscodeState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 26BB6DEEF5F0F34C22DE1B609E14F12C /* GIDMDMPasscodeState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33A4AF1DF3276F9DBD8864EB51E19CF8 /* ro.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 145ADE4B90FC215387CBA8C9128A4D30 /* ro.lproj */; }; + 33D9EB7C1F362EB29C6B6B466E075957 /* GIDCallbackQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E6BF1B6759096F78C168F4ABD1F3541 /* GIDCallbackQueue.m */; }; + 34DB157A5FCDF1B3FC72788DF5373E02 /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 98802E7EC0E2FF5EBEBEA77F18258E25 /* de.lproj */; }; + 359A3AC81C7E40A9210575D3A3D73CFC /* pt.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 05FFF16BC918583AA3B83EAC952FCB6D /* pt.lproj */; }; + 36DC3ACDD3D67D6800CABB2100702A0A /* OIDAuthStateChangeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = F73C40240F53C808BABD0A0009E41D74 /* OIDAuthStateChangeDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3700520959247EC427FB8D0328D515A0 /* uk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = DD5D0E867A70E89349A3436638C256D3 /* uk.lproj */; }; + 3770FE86535BBC5091EDC7A26A4F583C /* GoogleSignIn-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AA5D7205DF098044D3739A2B950B5F2 /* GoogleSignIn-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37B71CC20A787EAE0662CD1A40DA64B6 /* OIDExternalUserAgentSession.h in Headers */ = {isa = PBXBuildFile; fileRef = FD24C5A6481CE6D7932F0894089EA82F /* OIDExternalUserAgentSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 385BC4B250B6A6DB8AAAEA77D5B7A46F /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = C955E0A7D140FCD87AD4017F1FCE8133 /* Combine.swift */; }; + 3A59D8FBAF9A54906E3644AC80465AFB /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A84AD91A937A7E0CF84CFFF6A6A8FB /* Notifications.swift */; }; + 3B20EA4BC0B328E2542C518273FA7046 /* GTMKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = BC0000B2E8CA7CF89E4FB2EE8D543FD8 /* GTMKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C587DB8D8B0EDC08B38A68A1E06FEBE /* GTMAppAuthFetcherAuthorization.m in Sources */ = {isa = PBXBuildFile; fileRef = CC53FF5CE0BDAEF0889522098E05658A /* GTMAppAuthFetcherAuthorization.m */; }; 3CFDBC41492143C90999ACC392C024E0 /* Pods-iosenv-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B6A7D5B236B78EAAA4A7279A031A5FA /* Pods-iosenv-dummy.m */; }; - 3E93075919B22148CD9361C6DACAFEE3 /* GIDProfileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 94F653B993D6CF93573E2632BC005D48 /* GIDProfileData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F654EF9FAD6324FADB46F22AF942EDE /* GoogleSignIn-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A3DFBD18C29DAFC3442D705EE455AEFF /* GoogleSignIn-dummy.m */; }; - 40F9F77138F6863683630F3D6EF49A1C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BC8198571E4A574C021C4055A65DC /* Foundation.framework */; }; - 41783AF25B90325153D3EC0FEBB2D8C9 /* GTMSessionFetcherService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AEE8FD5D7AB7630CCAD7661CF392074 /* GTMSessionFetcherService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4261308E4AB331C21D60AEF1631470CA /* id.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 6DA4EF9C1F57F9EF2DECADD3C1889AF9 /* id.lproj */; }; - 439CAB2D08FC0211211A3C29A8FBC623 /* OIDAuthorizationService.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C7BDB00FAABEB7EF7EF2AD2C794B8C8 /* OIDAuthorizationService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4447683B19506EEA079DF50B4439B0D5 /* OIDGrantTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CDF68B768ABA6A44730101D52ADB470 /* OIDGrantTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 44D64F1957C7A32498E40F7F45062088 /* OIDAuthorizationService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D1F27E2512376E9163265750CA9297E /* OIDAuthorizationService.m */; }; - 457F8F3576D65A8717113C59D6665554 /* OIDEndSessionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 542031D641359A4D65DFA916C30A77D7 /* OIDEndSessionResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 468CEC1F1ED6564685600D76F289F8CB /* AppAuthCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 0450CEA25B67C6C1671F9A1C9A4A308F /* AppAuthCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 46A64A43AFA057B6B63C8F0C12F509B4 /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A09FBA4B60E88D8F438E6B668FC4D11 /* Combine.swift */; }; - 47410143C6FC4CE127EF8EF916A5D3D4 /* GIDAuthentication.m in Sources */ = {isa = PBXBuildFile; fileRef = C885AE596BF162224C7F68FA77C5BF73 /* GIDAuthentication.m */; }; + 3FA127A261BB563409868A0DC21807B2 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C55D941313DD67971B0AAB38998DAFB /* ResponseSerialization.swift */; }; + 40A6BD2DE60503EF0D4B591FA72FBF54 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8603A4DB959871DE360EFA9333222D0D /* Security.framework */; }; + 41D37087A3EDD6BF2573B048A69F6E0F /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = BB66BEB5D25130C73B19F93D822C3198 /* es.lproj */; }; + 428C0B4A61D3AF4A8546E1F33E80756E /* GIDScopes.m in Sources */ = {isa = PBXBuildFile; fileRef = 9055F629002CF27F85C7E42E66CD1222 /* GIDScopes.m */; }; + 439CAB2D08FC0211211A3C29A8FBC623 /* OIDAuthorizationService.h in Headers */ = {isa = PBXBuildFile; fileRef = 0815718EC74C5794035FCC912F51020E /* OIDAuthorizationService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4447683B19506EEA079DF50B4439B0D5 /* OIDGrantTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F9B63155D0912FFE92474E18943933 /* OIDGrantTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 44D64F1957C7A32498E40F7F45062088 /* OIDAuthorizationService.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9820B091274E5B14E3158C8079AD9C /* OIDAuthorizationService.m */; }; + 457AAE6CF4889E50A69CC1CD6B0A75D0 /* GIDProfileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BBFDF2B2B5B3F6F6DC1880730FCA9CB /* GIDProfileData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 457F8F3576D65A8717113C59D6665554 /* OIDEndSessionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED1997C467DFF152616E190C706A1AA /* OIDEndSessionResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 468CEC1F1ED6564685600D76F289F8CB /* AppAuthCore.h in Headers */ = {isa = PBXBuildFile; fileRef = B52A72B91DF3FEDE7472A9BF7BBA2F20 /* AppAuthCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4816ED359D1CCB98A1C010564EE02C2F /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AD8C878A5DF97C5D167FA9E1FB5B2B7 /* SafariServices.framework */; }; - 4845BF5ED5999291320D49E88162F62A /* OIDError.h in Headers */ = {isa = PBXBuildFile; fileRef = 7428949827FE09E5902DA47B3B714C7C /* OIDError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 48B1B9E539FE704957CE5D8A1500EFB5 /* OIDAuthState+IOS.m in Sources */ = {isa = PBXBuildFile; fileRef = 6134DCCF0C3FCBFB2E81B6F0752FD192 /* OIDAuthState+IOS.m */; }; - 4A24503FE25D6B716A3E4E138451B70F /* OIDURLSessionProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 394CBFB20A169E6D97A60D157F8DC432 /* OIDURLSessionProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4C765081895B1F7551FED0CA1DBF8B77 /* OIDTokenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 11F11C70879D054941A3BB23F858E984 /* OIDTokenRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 482B74C0548970BB9C095E2D8530E421 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8354AF9316FA45C44209CAB9DE7454C /* ParameterEncoding.swift */; }; + 4845BF5ED5999291320D49E88162F62A /* OIDError.h in Headers */ = {isa = PBXBuildFile; fileRef = 798487EA18E263C0B5E08D5547519A10 /* OIDError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 48507EA6A09E5F6AB9DE03BCE1D439FF /* GIDToken_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A480C9F8EB047DA0BC6A21ACD38819 /* GIDToken_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 48B1B9E539FE704957CE5D8A1500EFB5 /* OIDAuthState+IOS.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C21F85AE8DC39FD509728476EBA310B /* OIDAuthState+IOS.m */; }; + 4A24503FE25D6B716A3E4E138451B70F /* OIDURLSessionProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C072320E291586283FE7E8EB52F85B7 /* OIDURLSessionProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A67CD0C8EED91FD95539586E7F14DDC /* cs.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 89FEEB511EE8939035F5DB73A6FDC63E /* cs.lproj */; }; + 4C5541449D8B932A592DE114F66F3E71 /* fr_CA.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 36EFCF4E9692271F4F10CB2F139B0A20 /* fr_CA.lproj */; }; + 4C567889124696748960689155BB8691 /* GIDGoogleUser_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EE0832BD303D1DB93DC8D4121CD72F75 /* GIDGoogleUser_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C765081895B1F7551FED0CA1DBF8B77 /* OIDTokenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C7E7F6A0A818CAB4B2BA1FCAF2680F79 /* OIDTokenRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4CF4277C7E40245C9B0D7A59BED5FDCE /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8603A4DB959871DE360EFA9333222D0D /* Security.framework */; }; - 4D2805E08DD5504529DD9EFE864C1C1C /* GIDMDMPasscodeState.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C6447C4D5454141D579324570AAABEE /* GIDMDMPasscodeState.m */; }; - 4D684BCA97B22BC2978D0CD7599FC751 /* OIDExternalUserAgentIOS.m in Sources */ = {isa = PBXBuildFile; fileRef = 556797F145AF7490CF6352CB49AF7891 /* OIDExternalUserAgentIOS.m */; }; - 509F3EFD00D7D468185BBA931FC40218 /* GTMAppAuth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E2E1186C5BAD3BFD1E4CE4E1EA3564DF /* GTMAppAuth-dummy.m */; }; - 5176304A117EC8C69261BB47E63C1B5F /* OIDScopes.m in Sources */ = {isa = PBXBuildFile; fileRef = F6EA724D360E0FD39B466D53BFDEB4F4 /* OIDScopes.m */; }; - 51C24FAAC45273CE7FF920D0CC553274 /* OIDExternalUserAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A9A1D5A2ED1D40823B9E505E889D080 /* OIDExternalUserAgent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52DCCBBE231688834A4430EC4DC5E2F3 /* OIDTokenUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 807563300EB8BD93FB5954E25701BCDB /* OIDTokenUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5307FCC2761EC3663F5894BC48F6520A /* uk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 668E784E70D8DB58FB507583BE80B535 /* uk.lproj */; }; - 53D4434B14DBF9E306584407F2471187 /* OIDAuthorizationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 16D27716C0E44F3B7133A6613DDF7168 /* OIDAuthorizationRequest.m */; }; - 551E477DFE0DF7EA481165609280D1D7 /* OIDAuthorizationResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A85DF9BA90196269275E99F50372C69 /* OIDAuthorizationResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 55AABB1FB38F61A3369ACC555FF3046D /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DCAF663E062B54411D5F18532A63CE75 /* Alamofire-dummy.m */; }; + 4D45D093583A1740E65AAEE76983506C /* GIDConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 1862F66F34B9E3B89B71AB96D45D9D6A /* GIDConfiguration.m */; }; + 4D684BCA97B22BC2978D0CD7599FC751 /* OIDExternalUserAgentIOS.m in Sources */ = {isa = PBXBuildFile; fileRef = D5AD863ED32DA85F13F9CD2C9C42EB0D /* OIDExternalUserAgentIOS.m */; }; + 4E2BCBDEB08C21AE94EE9DC81B71835F /* GIDMDMPasscodeState.m in Sources */ = {isa = PBXBuildFile; fileRef = C32D6787FEBC3216E7FEADD32AC5D09E /* GIDMDMPasscodeState.m */; }; + 509F3EFD00D7D468185BBA931FC40218 /* GTMAppAuth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B475DDEE90F6E4BCBEFBAC05CD54478D /* GTMAppAuth-dummy.m */; }; + 510356A3123F6C92F73351DBA1C62EDC /* GIDSignInInternalOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E15D027369ADC88AC71E8B0EFF55CCD /* GIDSignInInternalOptions.m */; }; + 5176304A117EC8C69261BB47E63C1B5F /* OIDScopes.m in Sources */ = {isa = PBXBuildFile; fileRef = 9735360323179892F263AA2EE6AEFF2B /* OIDScopes.m */; }; + 51C24FAAC45273CE7FF920D0CC553274 /* OIDExternalUserAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9010D90E522982E322ABFFD792BBBE38 /* OIDExternalUserAgent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 529173B31EFCD3D199E79866AFBEC86C /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6E0917183B2B05C7E16249C947178CE /* HTTPHeaders.swift */; }; + 52DCCBBE231688834A4430EC4DC5E2F3 /* OIDTokenUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B57533C36D3951675E075226AADDBED4 /* OIDTokenUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 52E02FFD7AFB3E17B64EE78A328C90E4 /* GTMSessionFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 39BD92F4D84DBD47B4F6BA98E4D721D2 /* GTMSessionFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 53CB5EE102FC3BC44BB7E3858B45EBF0 /* pt_PT.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 19BAFAEBE67D3207020A82A42CC995E9 /* pt_PT.lproj */; }; + 53D4434B14DBF9E306584407F2471187 /* OIDAuthorizationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DCC8CBB8FE2BDE4A9A18A873795622F /* OIDAuthorizationRequest.m */; }; + 551E477DFE0DF7EA481165609280D1D7 /* OIDAuthorizationResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 73AB953B123565E3DCF7239B5E7C01EA /* OIDAuthorizationResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; 55C8B625B45B2FE88FA4E7E68A5494E8 /* Pods-iosenv-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E896FCC8701CF29FF6D1C8E3230FC9E /* Pods-iosenv-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57E6BEDC0BB006C6C95FFAE186CA7A8F /* GIDConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = BB067DCA7F27D7F39C5A8BC8F34AE3E4 /* GIDConfiguration.m */; }; 583C30A05E70888990BE81F96BCDC441 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BC8198571E4A574C021C4055A65DC /* Foundation.framework */; }; - 58E5C2A4AE72375476E8B32DA2C54054 /* hr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = CEBD36ED4E613C12C3D86FC40AC35F58 /* hr.lproj */; }; - 59726A57C503CC1616F0EE99A7AC2156 /* GTMSessionFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 78785AF29EB79EA61798B11FB166743C /* GTMSessionFetcherLogging.m */; }; - 5A0C59BECA67B070264B77F01A7E28FD /* ru.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 052652DC1ED13FB7F9E731BD22C992D3 /* ru.lproj */; }; 5AECE23B9F5E716B4E35B5E50AE476E8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BC8198571E4A574C021C4055A65DC /* Foundation.framework */; }; - 5BD985E4671C5879F20406153E3E574C /* AppAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B22A8C8ACF44F79F8082992AF491A95 /* AppAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5C7DCE6E075A28236AC6DC724D5C28FC /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 5A86EB334A8FC1A4AF7E5CDB63008A22 /* en.lproj */; }; - 5DB430EEC058A52BA9502A1133C6903E /* GTMSessionUploadFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 97941AB19AEEF8A939D0E11E37CBFF86 /* GTMSessionUploadFetcher.m */; }; - 5E3B1A932202F529808ECC95A1E21886 /* GTMOAuth2KeychainCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = A9387A88827FD4099B2A94AA060A8297 /* GTMOAuth2KeychainCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F3AD462CBA6F095208AFF445452C1A3 /* GIDSignInInternalOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7014E052E0F1A35238F6B34C3A8C1F07 /* GIDSignInInternalOptions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 608DEEB38C6B137DBC9A71197CBFD19D /* OIDRegistrationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D1D1AAB4D27828C4EA1BC81A044ECA4A /* OIDRegistrationRequest.m */; }; - 6155165AE2EF8CF95AF643BEEC2FB621 /* hi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 9E00AEE0BA48BBD27B8D8CBAFD37CED9 /* hi.lproj */; }; - 6264526D8F9C1ACEF1013E5A724FD971 /* OIDAuthState.h in Headers */ = {isa = PBXBuildFile; fileRef = 89BE16823D4D2561227B262FD66A93B8 /* OIDAuthState.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 64BC39E045C7E99063F138A036CC7497 /* GIDSignInButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CCF638969B4FE5625CE3027AB4AB234 /* GIDSignInButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5B92A66A66BD639411C3D839A0F87B0C /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = B842AB1AEAD495798C4429369FF1F57F /* Request.swift */; }; + 5BD985E4671C5879F20406153E3E574C /* AppAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = C906FD5FEE7106690E54B394088843F8 /* AppAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E3B1A932202F529808ECC95A1E21886 /* GTMOAuth2KeychainCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A36AA6A7062459D35CD02123339C973 /* GTMOAuth2KeychainCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E6C259D8A95587237F775DE48C9E794 /* GIDAuthentication.h in Headers */ = {isa = PBXBuildFile; fileRef = 27D8221F341791BFE521892A0D30C8CD /* GIDAuthentication.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E6C63EDB46681D3217C20D104746D35 /* GIDSignInPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 6682F8D28EBFBA4EB2C594A7E871FE97 /* GIDSignInPreferences.m */; }; + 5E77172DFB73C0D61173D4C19D9E7A9B /* da.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 51BAE9F352D7B9314614F545E7EA530A /* da.lproj */; }; + 5FBA17D69B45E313C317128A02326A88 /* GIDSignInButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C6C267F4EA5319380F32DB85C55F15 /* GIDSignInButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 608DEEB38C6B137DBC9A71197CBFD19D /* OIDRegistrationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D997A29E772673FC9061FFB85712DEB1 /* OIDRegistrationRequest.m */; }; + 6184B44006EEB08920BCBC9C89E42321 /* GIDCallbackQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AFAD46CCF416B165F1F10531D2E22349 /* GIDCallbackQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6264526D8F9C1ACEF1013E5A724FD971 /* OIDAuthState.h in Headers */ = {isa = PBXBuildFile; fileRef = BBBC81D2AF35787348E0E907B0EFB6AC /* OIDAuthState.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 626FA39B40467D3D10F75FFD561D5D98 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A3710A5607D67A11C7EA8D8036417001 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 643A7AFFB7AEB70B2B9B7E0926055023 /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F44FA006730E4C1EE4C0934853BF3B90 /* RetryPolicy.swift */; }; 6641B3FEAED4CDCA08B9422814E4BE96 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BC8198571E4A574C021C4055A65DC /* Foundation.framework */; }; - 676AD319ADD01A7155529B799B390095 /* GIDSignIn.h in Headers */ = {isa = PBXBuildFile; fileRef = 37B499C6BA0FE65F167F043C8225C5BB /* GIDSignIn.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 68FB2DCB4C77DBCAF9A6037E470F2BDE /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 906E77654FBF0758B3F68112E99E1B27 /* ParameterEncoding.swift */; }; - 69523590CAA81D4D816D60CF5D7266CC /* GTMSessionFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = A6DD10E92D541CED1FC26333F0B6EEEF /* GTMSessionFetcherService.m */; }; - 6A93849F36F56D8F7BC4DBC6285C6700 /* GTMAppAuthFetcherAuthorization+Keychain.m in Sources */ = {isa = PBXBuildFile; fileRef = DF77BD406A41DCDDB5FBB890F2CE8BAD /* GTMAppAuthFetcherAuthorization+Keychain.m */; }; - 6E3BD15973DAE572329F6B0D6DC831DF /* GIDSignInPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A90A33A42278E70A581E165F26934DB /* GIDSignInPreferences.m */; }; - 6EC47D96896B62B9CED5D78A005BB008 /* GIDMDMPasscodeState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EF81A9E5A14D081FB7DEE5F75FBFE504 /* GIDMDMPasscodeState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6FA9972BEFBC18AF20D4619AD3A702F6 /* SuperTokensURLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5243483643BAD91A3355E88FFF822AB /* SuperTokensURLProtocol.swift */; }; - 72E94CCB728FC43E24ACCF83B420EFC7 /* OIDFieldMapping.m in Sources */ = {isa = PBXBuildFile; fileRef = DC550077196F84C06346647B08227C87 /* OIDFieldMapping.m */; }; - 72ECE251BB85F8FA98DB01202F204E65 /* GIDSignIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 0611D06D75A341CCCB574B082EFECFA5 /* GIDSignIn.m */; }; - 736C74E8327DC190B406B29A91F14DC3 /* GoogleSignIn-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DABF9926E4746EFF0E83DC2CDAD32AA /* GoogleSignIn-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746D95954096A158A259E75E0E463D5E /* th.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 5BF18C7396376DC1A3008F0AC10A8F2E /* th.lproj */; }; - 7483E5327027263F7E4B94A2997191C4 /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC5EE85E15172763BCCBFE5A5CE4E2E4 /* AuthenticationInterceptor.swift */; }; - 752935D37B27C4524979795B8403211D /* OIDExternalUserAgentRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A8B776DD908683F78CDA2BE1533ADD2 /* OIDExternalUserAgentRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 75966A9262648D4647D764E3E76BC6AC /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAFBC93C94B1FA5BC2632040F5FE2CCD /* Response.swift */; }; - 778E8B222F6AE9E6656BBB108E0E25FD /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 4F4AA32FB146BCCA946EDFBAB3C2FA13 /* fr.lproj */; }; - 7831CBDF377BAEC952506E72637F0ED5 /* GIDEMMErrorHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 8132A8703769D44948D8C9A53171EC6A /* GIDEMMErrorHandler.m */; }; - 7930C94414B4C661867AC4FBE82E996C /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C291C5F7B45CA9AC9CBB9CEFB3CD47BD /* URLEncodedFormEncoder.swift */; }; - 79684F0538090B4F2B07DC2337899FA4 /* sv.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 98E566C55EA03D54214EC390B45A2E8B /* sv.lproj */; }; - 7A6888EF4D69608167457B15555A5FB2 /* OIDEndSessionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E02E0129A8F642C094C47BB8A96ECACD /* OIDEndSessionResponse.m */; }; - 7B068137A8925891446203B5D3D6A4ED /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A52483C5EE2FB2B7290E8C96A830F81C /* CFNetwork.framework */; }; - 7B8662965A406B52E017499708C29093 /* GIDMDMPasscodeState.h in Headers */ = {isa = PBXBuildFile; fileRef = 331220001981F1767E3477FCDBEA4778 /* GIDMDMPasscodeState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E02F5B62BE00E97847DF549FFED2490 /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6B019C374FD3713CC5A31E3EFD0C80D /* HTTPHeaders.swift */; }; - 7ECA1AE07A77457A0CA3EC39ED873274 /* LocalAuthentication.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75CB86D816E4184799EFE5B6E4954307 /* LocalAuthentication.framework */; }; - 7F1BB526AAE3ECDCE90127D9D0E10261 /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1AC345CB1DE954612F6136B0F613A50 /* StringEncoding+Alamofire.swift */; }; - 7F6E015D616C80C1FDC9C2EBAACD8BF4 /* OIDEndSessionRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = FF8184FD92033DDFD49FF96162F53B06 /* OIDEndSessionRequest.m */; }; - 7FE695DA8EE7FF1286556E06B692009B /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EE74456FFD17A83ECEA5ABB8F02E767 /* MultipartFormData.swift */; }; - 808C960C82D708FC1A42C581D6CB4940 /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD5144B1E9E778520B7972FEDC795AD3 /* URLSessionConfiguration+Alamofire.swift */; }; - 81B8D2B7CEB25C2448B0BC9B33591A65 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2299DB2DFA5733E4655B56D047BDC9B7 /* Session.swift */; }; - 8212FF192051DC0519ED1E52AA1F3799 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E37481F12476FCA563F1EFA66945B0C /* Utils.swift */; }; - 821FB438CE312546EE32383F6EA99E65 /* GIDSignInCallbackSchemes.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D6708E16D812F20226E5001DEE943C6 /* GIDSignInCallbackSchemes.m */; }; - 824D816B1EE404F2DD400EE678695CBE /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD688AB212554B064862830DADD11054 /* ResponseSerialization.swift */; }; - 83B4A147D4A32E34545F4D90AA7B4B77 /* GIDAuthentication_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B111FC9D0CFDA3B330483B810F1DB65 /* GIDAuthentication_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 83D57DB0E3A54C32CBA0D0016AEFA14C /* GIDAuthentication.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CDCB6DCA3917C2E1A0AFDE3B4BBDD1C /* GIDAuthentication.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84721D9C8FAD373C09FFCDA8D18F212A /* OIDErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B56BF9AE7EEE7EE1F4C99A657216173F /* OIDErrorUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 85EA64E2C72CFDEC660AAB46F068F1FA /* GTMAppAuthFetcherAuthorization+Keychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CD9066B0AB35403B31E7BDCDDAD7AF0 /* GTMAppAuthFetcherAuthorization+Keychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8ABC98D87A147ACE0C78D76714481F50 /* fi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = C9F0868B455D7665848B531851E20966 /* fi.lproj */; }; - 8B4187E73E36BD0ED44C5FC332FA7472 /* GIDMDMPasscodeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = E341F34CFC3E3EAD2C9B887D5FE4FE09 /* GIDMDMPasscodeCache.m */; }; - 8CE97FF0E58BCE9AFEE153CFB2BD8383 /* GIDSignInInternalOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 052C561F5A6BB218A7139AC77AC34C43 /* GIDSignInInternalOptions.m */; }; + 67B10FEAA3B7E5387D20E76B1085E94D /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 645C59D0726454F9957777A76F80B1D8 /* URLSessionConfiguration+Alamofire.swift */; }; + 69B53E4A8079382FDEDEBE386C0C0A63 /* GIDEMMErrorHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C9D9F74CA41A48F375559ACA2D1A1F /* GIDEMMErrorHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A93849F36F56D8F7BC4DBC6285C6700 /* GTMAppAuthFetcherAuthorization+Keychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 8251F64263A8218EC8548C7541A41BFA /* GTMAppAuthFetcherAuthorization+Keychain.m */; }; + 6E9F679D22C2D21C4A2438BFA842232C /* vi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 3F47FC97AC3248A019AC3CAD30086D43 /* vi.lproj */; }; + 6ECA7A2734AE58ABDA4E743462EFCFBD /* GIDEMMErrorHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D9977B12D514891899F6B373FB94A1F /* GIDEMMErrorHandler.m */; }; + 6FA9972BEFBC18AF20D4619AD3A702F6 /* SuperTokensURLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF8EC21E7F922DB35BEFDCAC607D83F8 /* SuperTokensURLProtocol.swift */; }; + 7230B8E455EE7235C0D577397975605B /* GIDSignInResult.h in Headers */ = {isa = PBXBuildFile; fileRef = E18C333DB085E831B50BE626B76394BF /* GIDSignInResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 72E94CCB728FC43E24ACCF83B420EFC7 /* OIDFieldMapping.m in Sources */ = {isa = PBXBuildFile; fileRef = 5838E12080F2C35C1FEE9FD488FEF2AA /* OIDFieldMapping.m */; }; + 732C29255F73EF3D83D49BD4F8FEAA8F /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5AB73319CC688C535E401DA635DD853 /* MultipartUpload.swift */; }; + 737747B9A98257DB58112C3A23686669 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45893F72F56198F495F8DD9A0379C1E3 /* MultipartFormData.swift */; }; + 752935D37B27C4524979795B8403211D /* OIDExternalUserAgentRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B7DADDCA8169ED9113BD5660259B52 /* OIDExternalUserAgentRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 753603CE7D6B3142CFE5F9C2EA0B15D7 /* GIDSignInStrings.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B4EA8DE6D4D69AF9B4690F2D743786C /* GIDSignInStrings.m */; }; + 7615564B6AEE0156376571A5BF892AA0 /* GTMSessionFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = 4045319C187B235BB049202F84060C11 /* GTMSessionFetcherService.m */; }; + 7688E908B66AF5D9244C10F24A995391 /* GIDGoogleUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 62F8B5D1C2B8F48F210A06F9FD8CE05A /* GIDGoogleUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 77AB6AF4BFC6DE016DA7C057B5799C84 /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46A6AE8D18EA3AD9C8D9AF524DBD7292 /* ServerTrustEvaluation.swift */; }; + 78B1DD1219182494A6AFAD26AAB20AA6 /* Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 708C2C94819E1438FCCCAE12B4239F41 /* Concurrency.swift */; }; + 7A6888EF4D69608167457B15555A5FB2 /* OIDEndSessionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E8B34F0FAEB524DB27C78BCDCCBFBE /* OIDEndSessionResponse.m */; }; + 7B254F4570114B8C9182328273C9B4C8 /* GIDSignInCallbackSchemes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A9651D4CB41959D0F5276D27185EFA9 /* GIDSignInCallbackSchemes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7BFF1E5A1F4B3678E8A8B59771235FDF /* GIDSignInInternalOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = C455BE79450278BD2B31E9C16CAC0CCE /* GIDSignInInternalOptions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C4C5A4E9F7F9A3143A4731034EA4495 /* sk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 0DC1A4DA82662B4B10A7FDB7F01C772A /* sk.lproj */; }; + 7C8C119226894820851AD645116589AA /* GIDScopes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AA4A99401E1809336F8F11D002AFF15 /* GIDScopes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D64BC3E6CAA4AB54EAC0AAADE93F578 /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCD87507D7EE8E4883E36597B1411ADA /* OperationQueue+Alamofire.swift */; }; + 7D9AB49C109F63DAB4AC7679523F315A /* GIDSignIn_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DBE9EB1C40A394E6D3B242F19A4B494 /* GIDSignIn_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F6E015D616C80C1FDC9C2EBAACD8BF4 /* OIDEndSessionRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = FA684F565AC52321785C34B8114E7D31 /* OIDEndSessionRequest.m */; }; + 801D43EF19228E51CB5E7ECA6E47A18C /* ar.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 68D23ED91510367101F348FACF47C11B /* ar.lproj */; }; + 80ABA6ADA9A7CBB82D8B3643AB6DF428 /* GIDGoogleUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DA2FE99A2BD3B1405A27B0C0F7C7903 /* GIDGoogleUser.m */; }; + 80E535AEBF73EA88406F76E631199045 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 809AB6B59B8CB856EE1C1CF29D425D6B /* UIKit.framework */; }; + 81E6A0FF7F286008345ECFA3A2103FA8 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE5DED812F6F33F1B4E8D07DEFFA61A6 /* Alamofire.swift */; }; + 8212FF192051DC0519ED1E52AA1F3799 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6927F36CD736D7391060DD0E8D1C260D /* Utils.swift */; }; + 82FD97FBBEFE51E2D3B434AF4954FC93 /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B05D539B5F5382F439C1168E227ACEEE /* EventMonitor.swift */; }; + 84721D9C8FAD373C09FFCDA8D18F212A /* OIDErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = DCAA5C75ABE4D058107776635665D0F8 /* OIDErrorUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 85E73D48929DF5FFF94649C65FA7B2A9 /* es_MX.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 46C953942D8D11F58216B150790C3E1F /* es_MX.lproj */; }; + 85EA64E2C72CFDEC660AAB46F068F1FA /* GTMAppAuthFetcherAuthorization+Keychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5712CE6C45D983C88830A6D4BFA86DC1 /* GTMAppAuthFetcherAuthorization+Keychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8CF9E0A7ADD7449CF2026546440EBB1F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BC8198571E4A574C021C4055A65DC /* Foundation.framework */; }; - 8D75FC8D7476C9674234F39F1A820D8C /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E520D6387C91FD7A5E957B399966404 /* URLConvertible+URLRequestConvertible.swift */; }; - 9050D2AF3D97A5AFF66219C94D272C78 /* OIDExternalUserAgentCatalyst.m in Sources */ = {isa = PBXBuildFile; fileRef = 455B87FFE67C8DFB6E92F240E806D2C8 /* OIDExternalUserAgentCatalyst.m */; }; - 90A3E0ADB41D8C4A05EE2491C6CA9A40 /* ms.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 8C19FAC253FC6224A9DD7313B64DEB83 /* ms.lproj */; }; - 9301C13B1C2F01C18CBEDF320060FAE9 /* OIDAuthorizationService+IOS.m in Sources */ = {isa = PBXBuildFile; fileRef = 87EE9C80F128A65CA2D38BAA5738CF97 /* OIDAuthorizationService+IOS.m */; }; - 93255121B01955F754054C4D9D884F46 /* UnauthorisedResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4043F1DFF7129AD201D41C95C368356E /* UnauthorisedResponse.swift */; }; - 936DA16C80D36E96495E80374C4FEFD3 /* NSBundle+GID3PAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1C01D912CB74DBA133DD86A39F71F0 /* NSBundle+GID3PAdditions.m */; }; - 953B739736378B64D7BF01B15018624B /* NormalisedURLPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 103BA2BBE743197C8479FAB2350DB830 /* NormalisedURLPath.swift */; }; - 97D48924C3D0D34891A68822F954FC63 /* tr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 7B33C7D57343DB700CF59DCE854F1547 /* tr.lproj */; }; - 980379E3B08EE6D482F86FBAE9B3E57F /* OIDTokenResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD790693339A0C711D1966D99BD39CB /* OIDTokenResponse.m */; }; - 98DD160EA700CD6BAFB6A0D28650FB50 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8603A4DB959871DE360EFA9333222D0D /* Security.framework */; }; - 99D058E53EFEE3AC4857CDE3DBA5C004 /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9982899E8FE87F5B64020CE84061947 /* ParameterEncoder.swift */; }; - 9A3A6C5978DD6D3398EA352719EBEAE4 /* ro.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 55BB3AFE3CB0066E4D5BCDBA3ABBAD31 /* ro.lproj */; }; - 9B3E18F6BAC42DAC2A8BD0E2C3FFFF2C /* OIDTokenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F91A8360246C6A8CCF19CA286441525 /* OIDTokenRequest.m */; }; - 9C9030DEDB0DF955B16FE08C50892D57 /* Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5CA3841E05C917530B99A65DE619EF6 /* Concurrency.swift */; }; - 9E446BE4057BFB71D703FBA219517E40 /* GTMAppAuth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 613CCA46A00830AB5977AC7162748F4E /* GTMAppAuth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0ADE174C817D317A1F11BCDD48F4108 /* GTMAppAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F9E06DACF919E19158C2C4C399922AC /* GTMAppAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A12D248E6C1951302E5463446D1B2E6F /* OIDError.m in Sources */ = {isa = PBXBuildFile; fileRef = 844EB5B48E8BCAE593DC97DCAA24323D /* OIDError.m */; }; - A29100AA1876DDEFF6F54694A51FDB0E /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD281E5405A59F79D2C0A6158AD18E66 /* NetworkReachabilityManager.swift */; }; - A31E2FAFD93E85FF3F021F2CF38A4584 /* GIDCallbackQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 543543B1C483D89C89CB776C88E73FAA /* GIDCallbackQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A35244C9342474C7118D33BE2996BF00 /* OIDAuthorizationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 6874A918380070BF19DD44D3B5BD219D /* OIDAuthorizationRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A37FC160B228BDCC3F6766C365858AC3 /* NormalisedURLDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69E31850168045356B64E2563B4A7DBB /* NormalisedURLDomain.swift */; }; - A448CC9FB6349D52DCDFD3652DA7D6B1 /* GTMOAuth2KeychainCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FC80D43EC57D77956D73A387BBC3300 /* GTMOAuth2KeychainCompatibility.m */; }; - A53BDE589BDD6483F3EEDCE5EA1DCCD3 /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0338232B0C80053DC53DC8BF0EE01CC6 /* Protected.swift */; }; - A6074CBFF1FE87653517816278A8426F /* GIDProfileData_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FDFA27684F7EF8FA6DF0BCD78E2DD7F0 /* GIDProfileData_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A636502A305EA73DF8BE72146B23888D /* OIDURLSessionProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 99243BE0999291E60FCF378E8B54F2E7 /* OIDURLSessionProvider.m */; }; - A7093B46B52CB01D06D8BA2481A51A0B /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = 621C061E86A6F87469DFE2601CA909C4 /* Version.swift */; }; - A88A28AD0AE43322D415B1F83183EB66 /* AppAuth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D8FFB0C6AB3764B2E7D164F702EFA59 /* AppAuth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A8905D943987A0395A54227F68C657F4 /* GTMSessionFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A2FBCF6ED477D0A5E93B4232E6CD9B6 /* GTMSessionFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A895456CE7035D7B4611F02D49268554 /* GTMSessionUploadFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 88B44379BF15EFF2CD1D180DDEFBE675 /* GTMSessionUploadFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A90C5E0FD8A1FE159D9D32BA0F5BCA38 /* zh_TW.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 9A23DEC8828863E5EA405D2ABD8B19B5 /* zh_TW.lproj */; }; - A9BBB81C38ED12E9CF718ACD96A3E50A /* OIDTokenResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 2726DAFC7364287C6C5B780ED7769DE1 /* OIDTokenResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AC9D6C33BC6BDFFBD5AA07B81D949F0D /* hu.lproj in Resources */ = {isa = PBXBuildFile; fileRef = AC066356651E36E561EC73D1DCEE07DC /* hu.lproj */; }; - AD01060C8D0427A83796DA370460A019 /* OIDAuthState.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC31FA643F859A3A701F0DB69A429C3 /* OIDAuthState.m */; }; - AE230B96171BC2B3B66EA24F3DDDC558 /* FrontToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 003E13ECAC70880ED4CD4F69AA36DA53 /* FrontToken.swift */; }; - B0578577EF66EF804E7971C0539B0A1E /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E622FFB7E845C75D020FDF8A983F5F94 /* es.lproj */; }; - B1F3C53DB512FB766262E99D8BB33E6F /* GTMSessionFetcherLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A30C0FBA2A9A851160229EAC73D8997 /* GTMSessionFetcherLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3658C29BBDE1033F6269A92E612CB30 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5C7CE6FB34DC6236E51F3C3E44403AB /* Request.swift */; }; - B40B071395954881429075EA56BF9512 /* OIDExternalUserAgentIOSCustomBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = 7055A4869781CF15DC66A4BF6E4DA582 /* OIDExternalUserAgentIOSCustomBrowser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B47E46A9AE061B331AA5A111D9D75835 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84665582944CFB045E8104EE29A131B4 /* CoreGraphics.framework */; }; - B704B198B9B520D449260877E300D821 /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D85338E72A588C467B37701CB558CF /* ServerTrustEvaluation.swift */; }; - B99C90E4189B0520A7EE07EC214EBB97 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BC8198571E4A574C021C4055A65DC /* Foundation.framework */; }; - BB4A42BC10B2E69F4579A26457C28CDA /* OIDRegistrationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BEC66EC928D80ABBC335C9E7C319B6D /* OIDRegistrationRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC0ECA8F22DEDE8886E189CD0EAA1197 /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = C697AFC91715222DD4118F84B5C92D1F /* URLRequest+Alamofire.swift */; }; - BD8BD4F66D9ACB7440D966A103DBA8FF /* pt_PT.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 864AAA448883F593475F7F7B41882126 /* pt_PT.lproj */; }; - BFCE37C0D334BAF635138D25BDBC801C /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D06956562AAC722DEE6B15FC6203E2 /* Error.swift */; }; - C123283B94070D3723C9B19703ACFAB7 /* SuperTokensIOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B30363C15202FD68564BAD5B3A2E922C /* SuperTokensIOS-dummy.m */; }; - C1E2C53757818E0F3AD166E0E5D67447 /* fr_CA.lproj in Resources */ = {isa = PBXBuildFile; fileRef = C1D1A7350157BF190A2A52220B973E6C /* fr_CA.lproj */; }; - C23C6394370BF20A47FC5DE501482B0A /* AntiCSRF.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1E39CEC5330337D23A6D3828084F937 /* AntiCSRF.swift */; }; - C2636D19CCE19A2042D35425D3CCC620 /* AppAuth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C9349B02D7B2091AC651BC675B9B9BE /* AppAuth-dummy.m */; }; - C4ED6AF38FF2BA503B4FE2AE160D88C3 /* ar.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A446C3F80EB9B0A87577E4CDA9F023F6 /* ar.lproj */; }; - C61BA42440ABEA7FC4307D2AB9785916 /* GTMSessionFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DA4408BFE8D6AEF5BC55270D87C631D /* GTMSessionFetcher.m */; }; - C8976FBA6C401ACD821CC8008118D275 /* OIDIDToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 26AE18C7C466BF7151EF35E7C0E2BEA2 /* OIDIDToken.m */; }; - C8F14EFE1D32300A99520CC95F142059 /* el.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 4B18D4C216ABE8BA812679B174BAD99F /* el.lproj */; }; - C9514906ECA6C0CF90BA47074C2A4CE9 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8603A4DB959871DE360EFA9333222D0D /* Security.framework */; }; - CC401652930FFB66DD8DC9CDCDC1F3C4 /* pl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A1865D239E3E7CE6EE951935318E61CE /* pl.lproj */; }; - CCF47FFB15F39E4ACAF3C9320138B20E /* OIDExternalUserAgentCatalyst.h in Headers */ = {isa = PBXBuildFile; fileRef = DF3DB6E1254D068D7F14E58516D7A427 /* OIDExternalUserAgentCatalyst.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE0C5D7338C636262AEF7C03E0D679B6 /* GoogleSignIn.h in Headers */ = {isa = PBXBuildFile; fileRef = FC4D2EDB7AA35254CE463C2D9196BC10 /* GoogleSignIn.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CEBFFEED65D877702B2F36102528CF6D /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A3A9C4C17C2670AF2F02C856D3E2C6 /* EventMonitor.swift */; }; - D08E73CE77698A4EC2EFF175667F92A8 /* OIDEndSessionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 0659F4FB29593BEFEB74134FD5D43E57 /* OIDEndSessionRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0EA90FBF83350C49E6EF6C8A98D6F00 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1858465BDECBB841167B5836024204C2 /* AFError.swift */; }; - D340F603D2D378520C7DF6D1017C5867 /* GTMAppAuthFetcherAuthorization.h in Headers */ = {isa = PBXBuildFile; fileRef = 123CC2CF156ED69D9DC0082C214B530C /* GTMAppAuthFetcherAuthorization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D34D4F3F16A624799D6304266B46CFCE /* ca.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 10BCAE86CDBEB9EC1A4ADC636E681F72 /* ca.lproj */; }; - D534D720BF7DBD6BC976E108B520DC06 /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CF785ABD1B111F3A644CF38B56C7A62D /* Roboto-Bold.ttf */; }; - D53BA1EB19FC853BD345171432069A98 /* OIDScopeUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = ED8C73EA9615C47CD1D0EB2FA7ACA726 /* OIDScopeUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5642F71CE45450DF87F7190152DB0F3 /* OIDAuthorizationService+IOS.h in Headers */ = {isa = PBXBuildFile; fileRef = B20510944B99ECD862E211A5D28D3325 /* OIDAuthorizationService+IOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6B4751CED01D53E4A1B6A571AAA2F83 /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DC8FACD460E277EF94D7FA302C73BE5 /* HTTPMethod.swift */; }; - D6EA3D1F76403E9BCB02CCA1F9F608B8 /* GIDScopes.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF68CADA44A4136BA3E134EDD393F46 /* GIDScopes.m */; }; - D7D49B9129898D8BED968B9407310B1E /* OIDAuthorizationResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 997EAC18D27A9F7076CC42ED0B65BAFB /* OIDAuthorizationResponse.m */; }; - D89A9441362A4F228D78081E9FF3A580 /* GTMKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 44EB305D46EDE4E1F9B36FBDF5280FCA /* GTMKeychain.m */; }; - D9CE2B486C831679A3D8947AC7E854D5 /* OIDExternalUserAgentIOSCustomBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC11B4E057CF8344B4306870BC1690B /* OIDExternalUserAgentIOSCustomBrowser.m */; }; - DA34899BEF0668D76CBCE8C4CE47B97B /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A923AA0C624EE6BEDD909424A70E05 /* RequestTaskMap.swift */; }; - DB62B806BF4CED6D159B42EF7B8B7F12 /* google@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D2BFFDAA3AE5639BE0A0E674B2FEAE81 /* google@2x.png */; }; - DCDDF8ED590ED356A4BE24876B61D844 /* GIDSignInStrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 0442704984F61F6704A80A7149B4ACDF /* GIDSignInStrings.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DCE53DB0FF2266DBEABAFFF79B618147 /* nb.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 081595D311DFD1BFD63133D031FB714E /* nb.lproj */; }; - DD902FE8D6824681C929D028655AE121 /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1E3B1FADB8C30CECECADCD85C35244D /* RequestInterceptor.swift */; }; - DE601C5596687C11434FC0E08F30F076 /* OIDResponseTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 76AD735E771801171A872A088B5899CA /* OIDResponseTypes.m */; }; - DEC596E428B53B359D47145C9AE70DE5 /* GIDSignInCallbackSchemes.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D127749CFC36FBAABBD6E9161D1DB1 /* GIDSignInCallbackSchemes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF035279E713FDA8F7FA55C1EE2DE81C /* OIDGrantTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 408FDF8D98B5A61B15B08A55CAA4514A /* OIDGrantTypes.m */; }; - DF52D786A8770CCB89E0DB063D82E522 /* GoogleSignIn-GoogleSignIn in Resources */ = {isa = PBXBuildFile; fileRef = E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn-GoogleSignIn */; }; - E0A045EFE8632A1839FF0F23C4797FB7 /* OIDServiceConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 5188C9C419C080F27F2B2122D2B5255F /* OIDServiceConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0BA0581C7AD618009FC7C169933CC7A /* GIDGoogleUser.h in Headers */ = {isa = PBXBuildFile; fileRef = DBB0FF815FC476F954B42D7C8C8C7993 /* GIDGoogleUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E2D4DF482E8F882B8FEC15020D3AEAA9 /* OIDIDToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 62B9EA9A25C7637CCAD5C389BB546A2D /* OIDIDToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E2FE2CB957779A7DCA1AD95C1215BC56 /* GIDScopes.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A300E136EF83DD50531DBEB845A86B8 /* GIDScopes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E503CCD2253A3675FF0487760DAA134F /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 776ABC110FB6CD59430C53CC897B2F32 /* CoreText.framework */; }; - E54654D504A42C24F284A68F87F7671D /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59E3D873866C39664CB30174866449B /* OperationQueue+Alamofire.swift */; }; - E5C54585B5B2C0D195F4CEA28F28E67D /* OIDScopes.h in Headers */ = {isa = PBXBuildFile; fileRef = 66FC8AF4F16352D3FF1123CB6FCDB03B /* OIDScopes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E683FAD3781CD4FF38D3B78860451945 /* OIDServiceDiscovery.m in Sources */ = {isa = PBXBuildFile; fileRef = 74DEEF18D1500A41D11E7303EDC7326B /* OIDServiceDiscovery.m */; }; - E68DFBC20982FEA7114CBB25144D3086 /* OIDAuthState+IOS.h in Headers */ = {isa = PBXBuildFile; fileRef = F62864FA1123E60873A6281C7A61190F /* OIDAuthState+IOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E7B0A51E30EDA1D3D84A69DD17F9CF6D /* GIDCallbackQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 31F05AD4300E1AC79CA2AF3DEECCEAC4 /* GIDCallbackQueue.m */; }; - E90E170121D17B98C02DF50D4F295E8E /* da.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 5FDF298F2868A21905D01CCBDA2D7A85 /* da.lproj */; }; - E966191B1149AEE7B5295921B2AD7381 /* OIDServiceConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AE8286C5131391C758F980F56CFB1B8 /* OIDServiceConfiguration.m */; }; - E9A7C114A547A54A4AEBC072ADB5362F /* zh_CN.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 9845381C6DE269065F8D889E1DC63D36 /* zh_CN.lproj */; }; - E9B4C89E7EB3B27D46AFCA452C3D426F /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C185BFFA3E9B03AFDFA8E754B14C65 /* MultipartUpload.swift */; }; - EBE36AFF9964F232ABAEA6E260C5CF82 /* OIDServiceDiscovery.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EFF43962D755910ABF8658A210C0246 /* OIDServiceDiscovery.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ECA83DAAF37943F7402834A57D697DFC /* nl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 8787738D9B4F98D6A6E005C6E8731FC7 /* nl.lproj */; }; - EE2C1A0DD32A33303C09254902FEAADC /* GIDSignInStrings.m in Sources */ = {isa = PBXBuildFile; fileRef = 17FF17B13120A125AE8DF365A6364C22 /* GIDSignInStrings.m */; }; - EEC150B66BCCD6C80FDA7E4D1975166B /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD5488212F2A42E64A80D3EF60F417D3 /* DispatchQueue+Alamofire.swift */; }; - F159FDF0C26037758BF2D029A4BDEF6E /* GIDSignIn_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 34E82ECB3E0951051FF0AD6AABC4B926 /* GIDSignIn_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F17A4CA4664CABB331D39FE902E06843 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94FF3CDE72A43B1C8E52E7BE464D851A /* Alamofire.swift */; }; - F23CEE6326992BCA15408CE8A833123A /* GIDGoogleUser_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FA033E400C6355B102E6CE66AF2344D /* GIDGoogleUser_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F379A500B6AA1AE39D30AD851EDD516B /* it.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 19B9A0D52E45E2C75952BE26023839F2 /* it.lproj */; }; - F6DFD56872F184E473D37C178A6DB8FD /* GIDConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2992516F5A51D4BCE7B3478802318908 /* GIDConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F6E75F5FD0501A6E1464C1153B20CB97 /* OIDDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 31287FE3D5E539EFD52A60C3FD284217 /* OIDDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8204251164204834D7B51004E53CF8B /* ko.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D38CBA514646EAF2A760C9D7FCBEB9CC /* ko.lproj */; }; - F8473F19A98E8C04DA797F91A71F8443 /* GIDGoogleUser.m in Sources */ = {isa = PBXBuildFile; fileRef = D2C0133F3DBC43662E450E74E1616EDC /* GIDGoogleUser.m */; }; - F950D208FA4D412081B58F83807785A4 /* OIDRegistrationResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = F25A92CF4A9B98935221B8B1065EFA5A /* OIDRegistrationResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA57677851302C0F13C69A459895DCEF /* NSBundle+GID3PAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE213852442118EB9767760322EF7332 /* NSBundle+GID3PAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FC0DDE2ED7078D1E09408CC74B4FC3E6 /* vi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 15B737379AD79BC910E871239E180DB0 /* vi.lproj */; }; - FD766D88B7E258E9EF16B7F9FFBB5E1C /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02A89E315984A4903D14EBA8D7A02ECE /* Constants.swift */; }; - FDE948CC3A35F70EAEB413E5DE09C5ED /* OIDRegistrationResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 2927C85C1EA4EE5AD1EFBA5EA25A4E0C /* OIDRegistrationResponse.m */; }; - FE336CA094FD69D3797005BDB4B9618A /* Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01F8347741E0313E6120E5D094FB4A23 /* Dictionary.swift */; }; + 8D8C06CA832855F7F2A4866C3FF294B0 /* NSBundle+GID3PAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 483D806FC1EBC3DEDD4C8ED74E0DAF1E /* NSBundle+GID3PAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D9DD3BFAECC99954598490B34B04EAC /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84665582944CFB045E8104EE29A131B4 /* CoreGraphics.framework */; }; + 8E698F134A953250D5834C8B83CDAD34 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = A535EE603DC5B219924402370B9F0CB9 /* DispatchQueue+Alamofire.swift */; }; + 8E85763AE29BEF0A46EE875B8F069E8E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BC8198571E4A574C021C4055A65DC /* Foundation.framework */; }; + 8EB2A9FFA454CF8C25CFCB4F9B6E4CDB /* GIDMDMPasscodeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B59B0CB61227B1F4DCB50DEA067C7E32 /* GIDMDMPasscodeCache.m */; }; + 9050D2AF3D97A5AFF66219C94D272C78 /* OIDExternalUserAgentCatalyst.m in Sources */ = {isa = PBXBuildFile; fileRef = A967314A65E0B3F43A1AC0E076EB89F2 /* OIDExternalUserAgentCatalyst.m */; }; + 9301C13B1C2F01C18CBEDF320060FAE9 /* OIDAuthorizationService+IOS.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F56C8FB2741B0C35CBDF2D43DCE6295 /* OIDAuthorizationService+IOS.m */; }; + 93255121B01955F754054C4D9D884F46 /* UnauthorisedResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0056BBBBAC4FEE1026B42FCB39A03CE /* UnauthorisedResponse.swift */; }; + 94906F9D82EC826CDD706AFD7E50F734 /* GIDSignInStrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BE60A56B6733E8EE0839D34A52AFAE4 /* GIDSignInStrings.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 953B739736378B64D7BF01B15018624B /* NormalisedURLPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = B46DAD64A0EE7B43A1111025A8F76448 /* NormalisedURLPath.swift */; }; + 980379E3B08EE6D482F86FBAE9B3E57F /* OIDTokenResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BF7BAC54D253C2043E72F644758A210 /* OIDTokenResponse.m */; }; + 994CFA40B4C5DCFBB44D5C87C67A8DFB /* GTMSessionFetcherLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = EF99FAB2EB7EC03DDBD501546FD1B680 /* GTMSessionFetcherLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B291E6D6C39E0075D71CE5C3F15410C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BC8198571E4A574C021C4055A65DC /* Foundation.framework */; }; + 9B3E18F6BAC42DAC2A8BD0E2C3FFFF2C /* OIDTokenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB7110B2CC0E2A38E084CFEAFF4A451 /* OIDTokenRequest.m */; }; + 9BCA8F259B631193A4D32A6E5C967661 /* GoogleSignIn-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 75502DF5F7769C3055D2E4926DCE52B8 /* GoogleSignIn-dummy.m */; }; + 9C10BA357865C80E1578D416BDBF081B /* sv.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 0AD4ECE9AB77245C0E2707FA2A3752C0 /* sv.lproj */; }; + 9E446BE4057BFB71D703FBA219517E40 /* GTMAppAuth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B2B2FFAB97A1FFF3BF9EACDE7B49FFD /* GTMAppAuth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E760C26EA5C6FA3CAFCC46A6060560F /* GIDSignIn.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CB603F9411354BD34E092CE3C014EC6 /* GIDSignIn.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A087910C9EA4649572B1B524CB08AB41 /* GIDProfileData.m in Sources */ = {isa = PBXBuildFile; fileRef = 854F3343E8A89E287610F65E8B6A41E5 /* GIDProfileData.m */; }; + A0ADE174C817D317A1F11BCDD48F4108 /* GTMAppAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 256E4C1055E76E45B8F50E32A7EF523F /* GTMAppAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A12D248E6C1951302E5463446D1B2E6F /* OIDError.m in Sources */ = {isa = PBXBuildFile; fileRef = F07AD79FDD4CC180D3D45F8237B8E7A3 /* OIDError.m */; }; + A35244C9342474C7118D33BE2996BF00 /* OIDAuthorizationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 45E19F623CA54E426FB775EA7F1F61CE /* OIDAuthorizationRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A37FC160B228BDCC3F6766C365858AC3 /* NormalisedURLDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = A71F1B4787250777C10AF2C19EA7A6BC /* NormalisedURLDomain.swift */; }; + A448CC9FB6349D52DCDFD3652DA7D6B1 /* GTMOAuth2KeychainCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = F2144E3E950187D75C343D5AA819EE6D /* GTMOAuth2KeychainCompatibility.m */; }; + A51A5125B59B90F3DCA65A668C989E13 /* GIDToken.m in Sources */ = {isa = PBXBuildFile; fileRef = A31F7BBADA5335D61D0976BCAFAE096B /* GIDToken.m */; }; + A523488C60BF961290D0B1ABB9ADACEC /* RequestCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = D311C6082EC32937665FB07904AF4B5D /* RequestCompression.swift */; }; + A62A2C8C360880C56DB05A6F32C23123 /* en_GB.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 4337BF1C31F7B9662C692D78CD239072 /* en_GB.lproj */; }; + A636502A305EA73DF8BE72146B23888D /* OIDURLSessionProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 4350567584C26C4D52D42ED8EC672F91 /* OIDURLSessionProvider.m */; }; + A7093B46B52CB01D06D8BA2481A51A0B /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF676A1975CB9D6631E1A44FCFB3AB68 /* Version.swift */; }; + A75576711AB8CC3BF861A187101CCF6E /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 776ABC110FB6CD59430C53CC897B2F32 /* CoreText.framework */; }; + A88A28AD0AE43322D415B1F83183EB66 /* AppAuth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E513753A94C4E4686548371C79CA1AD /* AppAuth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9BBB81C38ED12E9CF718ACD96A3E50A /* OIDTokenResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = F06D826E6B68B02B6FB933553EA384FB /* OIDTokenResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA721ECC2B36AFB7D9FE70C83E6D63F9 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B69F9769720E044B7F3F163E4F11A3E /* Response.swift */; }; + AD01060C8D0427A83796DA370460A019 /* OIDAuthState.m in Sources */ = {isa = PBXBuildFile; fileRef = A1DDE36D932030162F1BD4146B48339F /* OIDAuthState.m */; }; + AE230B96171BC2B3B66EA24F3DDDC558 /* FrontToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9290CDFF0011ACF98BF6A68C23782140 /* FrontToken.swift */; }; + AF688EB1395DE8CA0C424FDB97E71DCE /* pt_BR.lproj in Resources */ = {isa = PBXBuildFile; fileRef = ABAFD1E8B76CF20393253BCA461441F7 /* pt_BR.lproj */; }; + B17D933C8F8BC6A4F91AA620D7D7A870 /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BE255105D992B285D521AB5DB616F8 /* ParameterEncoder.swift */; }; + B1E04E3C7BDADB428C6B014B7BC0C9F4 /* hr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = AB3E126B716607FB09A1615B309E368D /* hr.lproj */; }; + B40B071395954881429075EA56BF9512 /* OIDExternalUserAgentIOSCustomBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = 93A2EEA4400A64811B5579F8E1941F76 /* OIDExternalUserAgentIOSCustomBrowser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B682445292759FF5EA0D6AD3C156AED2 /* fi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A595CF53BE5E77DF3C54CF3BA1E1F0DB /* fi.lproj */; }; + B8F5A8378BBD44AAF3726835866F0434 /* GTMSessionFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C624BAF398DB8DD513C13E641570DBF /* GTMSessionFetcherLogging.m */; }; + B990D0DEBBBA0D8610F3959CD85FA24D /* he.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 7A9D74D69EE4CE754684EADDB6854E96 /* he.lproj */; }; + BAB17A1C6CAD14B3788973EAF8466C93 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BFAEB3437ED049A0EC3B8152D338787 /* NetworkReachabilityManager.swift */; }; + BB4A42BC10B2E69F4579A26457C28CDA /* OIDRegistrationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 743AFC0FF4030B3E8A8B363EECBE2EA1 /* OIDRegistrationRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BCA5BDDE0647F2309582BB791BB33BDC /* google@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 77188A15386C12A2A6989FC6A1D5ED37 /* google@2x.png */; }; + BCCD41C7A6E91DAC811942D3CB7CA13F /* nl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 69515D72CBD6F66A8517DB55D4200141 /* nl.lproj */; }; + BD4BF06258EF0C10B4B4148C06BA2552 /* GTMSessionFetcher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A10E4619FF779D6DAB309BF1F337DFF /* GTMSessionFetcher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BFCE37C0D334BAF635138D25BDBC801C /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DA6937B6DE34F1CDDEA35FDEB5A52B6 /* Error.swift */; }; + C04739CBCEE445B66192BFA708655EDF /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 917B054FADE7DF8582BE8FF0F2868261 /* StringEncoding+Alamofire.swift */; }; + C123283B94070D3723C9B19703ACFAB7 /* SuperTokensIOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D03987150C256AB2DFF9CC255319F7DA /* SuperTokensIOS-dummy.m */; }; + C23C6394370BF20A47FC5DE501482B0A /* AntiCSRF.swift in Sources */ = {isa = PBXBuildFile; fileRef = 212B5FAA8CF77FFA5DEE929AC2464331 /* AntiCSRF.swift */; }; + C25761CF87F539A1E504DC9F07C8F285 /* GTMSessionFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = C64B085F0C01F6EFB0A537416501AEE4 /* GTMSessionFetcher.m */; }; + C2636D19CCE19A2042D35425D3CCC620 /* AppAuth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B6AED7F57300DC710D6B6A76CA7D8978 /* AppAuth-dummy.m */; }; + C266072BDF15A9DE317F4C5C3AA71448 /* GIDAuthentication.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B0976E01D8977A603C2D872823EB66E /* GIDAuthentication.m */; }; + C26F7121AA27D3A476524E613354DE39 /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 9508F03AE16BBFB49E683FBFB91387EA /* ja.lproj */; }; + C333F9FD02C4EBB8DE0B596FE8F48D97 /* zh_TW.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 2DD37316FCFD9E4D4CC384DF56EAC6B5 /* zh_TW.lproj */; }; + C47AA202C9949468E285F71E52F59D53 /* GIDSignInCallbackSchemes.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A1493680B196DC35C8D026EE2BBFEFC /* GIDSignInCallbackSchemes.m */; }; + C80E6A729D4A289850B7EFF27521998D /* GoogleSignIn-GoogleSignIn in Resources */ = {isa = PBXBuildFile; fileRef = E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn-GoogleSignIn */; }; + C8269B42DED12AB1F275648D0BD32E45 /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83D7EEFAB2589888801D4C729E5D49CB /* URLEncodedFormEncoder.swift */; }; + C8976FBA6C401ACD821CC8008118D275 /* OIDIDToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F062C7035C086CAE742FA8A98E419BE /* OIDIDToken.m */; }; + CCF47FFB15F39E4ACAF3C9320138B20E /* OIDExternalUserAgentCatalyst.h in Headers */ = {isa = PBXBuildFile; fileRef = B9A23AA6818E9342709F091DBD080C21 /* OIDExternalUserAgentCatalyst.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CD86DADC8B652D9338EA26569F21C002 /* GIDMDMPasscodeState.h in Headers */ = {isa = PBXBuildFile; fileRef = DB3F9CE92891B57FC71505C801C18B0E /* GIDMDMPasscodeState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CEAD8DA8D7FCBD39A6540E35C3F40F61 /* GIDSignInPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = E2F02D013E4A3D70D27C357C9032F3E7 /* GIDSignInPreferences.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D0560E8E2E5EB407B5D8E0381BF453FA /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7B0E4A5AAFEFCDE8CD9F960F2AF2B34 /* URLConvertible+URLRequestConvertible.swift */; }; + D08E73CE77698A4EC2EFF175667F92A8 /* OIDEndSessionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B1E7EE0E562241832CAD5BB6FA72E53 /* OIDEndSessionRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D09FBBADAF7C5C757AA5AB5DFE54BD25 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A35DF8E792BEEA06D1865F6837F718FB /* Alamofire-dummy.m */; }; + D21C95F1115C3305635BE409C42EED97 /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = C84581CF9A07A3CAFA068585A85B8001 /* fr.lproj */; }; + D340F603D2D378520C7DF6D1017C5867 /* GTMAppAuthFetcherAuthorization.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B504B605E558103E3FE6ABB398C3E2E /* GTMAppAuthFetcherAuthorization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D368E6F70C5E6998548A72E65F92432D /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EF0277FC920FB1FB6A360AC6A2B9374 /* Validation.swift */; }; + D38238AFB141BEDED91BC80BBE62B921 /* GIDEMMSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 58AD983B488E57B792F28F86768E2A71 /* GIDEMMSupport.m */; }; + D384ECCD671D1D00D7F94E51EBA700F8 /* id.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 28E63E8F8B67E5317E8CF03A42C26112 /* id.lproj */; }; + D53BA1EB19FC853BD345171432069A98 /* OIDScopeUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B10303AC6A1CEFE70F54BA8F36B0F5CB /* OIDScopeUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D541A0BB022D65591E55A3F5DBBF20E4 /* nb.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 9E892F883D483E54042AB9970F42E607 /* nb.lproj */; }; + D5642F71CE45450DF87F7190152DB0F3 /* OIDAuthorizationService+IOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F56A2933DFE7A9B72C2DC76D96D4BDD /* OIDAuthorizationService+IOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D5719B165C0769CDB56797822F9A1E9D /* GIDAuthStateMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DD51569803C4345CB4228C6C6874358 /* GIDAuthStateMigration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D5AAB7C418BE483A6E12F1A716395E1F /* GoogleSignIn.h in Headers */ = {isa = PBXBuildFile; fileRef = 9928F8F84767007A87BCE322555A902D /* GoogleSignIn.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D68FC1BE3E727BDC1E96521FB2542175 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8603A4DB959871DE360EFA9333222D0D /* Security.framework */; }; + D7BCBE1EB4A638403C265CE2199EFF1B /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A52483C5EE2FB2B7290E8C96A830F81C /* CFNetwork.framework */; }; + D7D49B9129898D8BED968B9407310B1E /* OIDAuthorizationResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 56E3DB830AF22F684D24B72C7272F3BB /* OIDAuthorizationResponse.m */; }; + D89A9441362A4F228D78081E9FF3A580 /* GTMKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 42C1B1D87F96F6F79EDB3A8821F5DEF3 /* GTMKeychain.m */; }; + D8D38BCEC6338AE9F182C7E3EE86DF37 /* it.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 7EF5A61D1B432A94FF9310D1145C2C7A /* it.lproj */; }; + D913C8BDF0EBCBF88A315025E4141D2D /* GIDProfileData_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 548607007E8062D6715B4B89532F9720 /* GIDProfileData_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9561F519F6A9A149DA575763CDBF97C /* GTMSessionFetcherService+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA57132E1069FD41114AA7A67A9F3B2 /* GTMSessionFetcherService+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D95FAB0C6CD03ED4E29580E75EA22828 /* ms.lproj in Resources */ = {isa = PBXBuildFile; fileRef = BE7FD80BE0F92C8F6D4CFD337674AC8A /* ms.lproj */; }; + D9CE2B486C831679A3D8947AC7E854D5 /* OIDExternalUserAgentIOSCustomBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5850EF0637F8DF87FB7B5467753A79EC /* OIDExternalUserAgentIOSCustomBrowser.m */; }; + D9D1DF0D6135ECFAC0889469431D5EAA /* tr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A87C8013324C663AB97337E76A79C45B /* tr.lproj */; }; + DE601C5596687C11434FC0E08F30F076 /* OIDResponseTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A677C7CC60170058D22E7CEDFECFF37 /* OIDResponseTypes.m */; }; + DF035279E713FDA8F7FA55C1EE2DE81C /* OIDGrantTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = F5F1EA38C36E6D6E5FD18F5003488B00 /* OIDGrantTypes.m */; }; + E0A045EFE8632A1839FF0F23C4797FB7 /* OIDServiceConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A45C0718055262FDF084203CB9A0C7E /* OIDServiceConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E2225A5D2909D0EC7D24B7C335C42CB1 /* NSBundle+GID3PAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A2D12F48690FC48034E7894F9E7844DA /* NSBundle+GID3PAdditions.m */; }; + E2B6E6E693C283EF9EA674AFA8D4ABC0 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 256E3D20ABAD2E2F55AEB553C12DC457 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.m */; }; + E2D4DF482E8F882B8FEC15020D3AEAA9 /* OIDIDToken.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5B14CB58518BEF5DC520D1FC099251 /* OIDIDToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3EEB74B9EC99EBB5382B68E218BF63C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BC8198571E4A574C021C4055A65DC /* Foundation.framework */; }; + E5C54585B5B2C0D195F4CEA28F28E67D /* OIDScopes.h in Headers */ = {isa = PBXBuildFile; fileRef = D22A0B140E1C3E6715AEE64F7D617C40 /* OIDScopes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E6251F02EE12804D1B66AE32E716E664 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C8F798AD1D1BF3B326A00C5F4FC09BF /* SessionDelegate.swift */; }; + E683FAD3781CD4FF38D3B78860451945 /* OIDServiceDiscovery.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF79BAF5688AA851C1CC95C6704219C /* OIDServiceDiscovery.m */; }; + E68DFBC20982FEA7114CBB25144D3086 /* OIDAuthState+IOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 19E20C4F716EE84008539A115ED2C180 /* OIDAuthState+IOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E778EB057250544395A904A0A44878F6 /* GIDMDMPasscodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BC0F3C2D7E5D8D1B9C4A1FF06249DE51 /* GIDMDMPasscodeCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E966191B1149AEE7B5295921B2AD7381 /* OIDServiceConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F949663C5C9C12F56728D4B64122C9D /* OIDServiceConfiguration.m */; }; + E986F7ED48EFDB2195E30D89DD2253EE /* zh_CN.lproj in Resources */ = {isa = PBXBuildFile; fileRef = FD662F3AC3A1AA8F2023C1A66734127A /* zh_CN.lproj */; }; + EBDD7C160A59CECF9A1105CE9EAD1060 /* GIDEMMSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC18560BA9B040695E3158DA0C72B26 /* GIDEMMSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EBE36AFF9964F232ABAEA6E260C5CF82 /* OIDServiceDiscovery.h in Headers */ = {isa = PBXBuildFile; fileRef = 9475C9DC5D9AA66DB9A520CF58C8DC77 /* OIDServiceDiscovery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EC3DF5242EA092DC76F727C37D57937A /* hu.lproj in Resources */ = {isa = PBXBuildFile; fileRef = B407E7C085D68A3D55F0657E03679EC7 /* hu.lproj */; }; + ECE6F23823454A8FDB3F97CE1A7CD182 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8AD8B8B6B7FB0B50B4329BC97BE5BB5 /* RedirectHandler.swift */; }; + ECF2F956B37A4C28B228BC291A57AD6E /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1489859B3F7BB358B3A5036BC5F2F79D /* RequestTaskMap.swift */; }; + ED53CE337631169205936C6CC9BA929F /* GIDSignIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A0144709A70F84DCD3E65B4BBCDB3CF /* GIDSignIn.m */; }; + EF2E7C80FA7AEDC65939302390CA3A94 /* ko.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 96670754509D018A215DD462EF37AF41 /* ko.lproj */; }; + F038D81F7ABAA15CF03246AD4BF334F7 /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 06197E20473C0AA8D7BF828496AAA165 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F0B1E83092B416DE9D4C9FEA5079AA07 /* GTMSessionUploadFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 18A5FA9A9838689A36DD22B83C3135F4 /* GTMSessionUploadFetcher.m */; }; + F105B4E5866134DEC2010F1FE1EA49A9 /* hi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = CBAED6817EA9601579B88730267C2E53 /* hi.lproj */; }; + F2415AE8678DE2698B7AD7D88B1A5C0F /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8438B9FAED461AD11D4DB1F3D05F3516 /* AlamofireExtended.swift */; }; + F488E83EAE25B20CEEA7964AB4C9D4AC /* GTMSessionFetcherService.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD2D2172858535FE21235DF1727BD1B /* GTMSessionFetcherService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F5231FD892706B53033F49A879EF5B6E /* ru.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 689F0579625B24BC0ED8BB4A402474A5 /* ru.lproj */; }; + F66CC47AD425C8D57BD149AFD09C2AFE /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF1C633CB80A588C64D28CAB1976C675 /* HTTPMethod.swift */; }; + F6E75F5FD0501A6E1464C1153B20CB97 /* OIDDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = EE0EB6685A113896FD586A7BC83996D6 /* OIDDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6E94E8EE1CE35F49B9091BE8748587B /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39A16AF264C2273E76F9EC4BC69EE39B /* Result+Alamofire.swift */; }; + F94536DC3935FC4BDA0A1E38706C22D4 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 8A72EF429E13E88E1634041F4F0C6FD4 /* en.lproj */; }; + F950D208FA4D412081B58F83807785A4 /* OIDRegistrationResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FDBAEF524089FC846DA052CFBC110D0 /* OIDRegistrationResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FBEAD3D7CC06F1C9B1A2051C9183E770 /* GIDAuthStateMigration.m in Sources */ = {isa = PBXBuildFile; fileRef = BBB0DDA308AC5FBD1B38DBE86106E42B /* GIDAuthStateMigration.m */; }; + FD766D88B7E258E9EF16B7F9FFBB5E1C /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1748489CFDF3EDB2DD8D7CB36C5F4BAD /* Constants.swift */; }; + FDE948CC3A35F70EAEB413E5DE09C5ED /* OIDRegistrationResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 317DB7E1B978C34BAE623D30E38B77A5 /* OIDRegistrationResponse.m */; }; + FE336CA094FD69D3797005BDB4B9618A /* Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847150108F4084DBFDAD5CDAD1DC5DFB /* Dictionary.swift */; }; + FFABF453FDBCC634A0061854D9D601BC /* el.lproj in Resources */ = {isa = PBXBuildFile; fileRef = BC3693429DB424D692BF2023C3D39B5E /* el.lproj */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 1A2A4F170C11942B2BC4CA56EBB683F0 /* PBXContainerItemProxy */ = { + 21AF13FE299404C2FA3C4149D7304DE2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = CAD3534FC55B0333104E5117C0A9A324; - remoteInfo = GoogleSignIn; + remoteGlobalIDString = 8627999EF1D5E93E13DAFF580DA8CDCF; + remoteInfo = GTMAppAuth; }; - 29C239EB5C503479BB32B4539F61B437 /* PBXContainerItemProxy */ = { + 4377597FE31188C83ECB6B18D4CAC57B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5C642AA10FB29936669CC269F42079C6; - remoteInfo = AppAuth; + remoteGlobalIDString = 25C8E397233E3949653DE6336A45B085; + remoteInfo = xcbeautify; }; - 29E012113257E1F6129D3014CFBEB12C /* PBXContainerItemProxy */ = { + 56EE36BC9434C1C3ACA1AD9F74EB2B59 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = D676E21115185671D7258A56944ABE98; - remoteInfo = GTMSessionFetcher; + remoteGlobalIDString = 7DFA91ED3A3D0BC020C3C843A3D1EB38; + remoteInfo = "GoogleSignIn-GoogleSignIn"; }; - 515D8B500320C1D8F813A8B8131BE1C3 /* PBXContainerItemProxy */ = { + 661F22646190FE3170C15E251992BE87 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8627999EF1D5E93E13DAFF580DA8CDCF; - remoteInfo = GTMAppAuth; + remoteGlobalIDString = D676E21115185671D7258A56944ABE98; + remoteInfo = GTMSessionFetcher; }; - 553CC11C52BE63C2C3D35E81207F835E /* PBXContainerItemProxy */ = { + 76BF5F0B6DE53B15B737D40E082F94E1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 5C642AA10FB29936669CC269F42079C6; remoteInfo = AppAuth; }; - 5C491E2FD575A22DFBC0F609025CD3ED /* PBXContainerItemProxy */ = { + 7A1363805A6C925A29BA371A3C7097F0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 22111B9B809C629766088073D2FCF6C4; - remoteInfo = SuperTokensIOS; + remoteGlobalIDString = 5C642AA10FB29936669CC269F42079C6; + remoteInfo = AppAuth; }; - B5F69692969F29D833CE87F8EBD79683 /* PBXContainerItemProxy */ = { + 7D78B4161E9F1F0CF1796288FCD9A4E9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = D676E21115185671D7258A56944ABE98; remoteInfo = GTMSessionFetcher; }; - B729F9705159F42DA556D74A3AFC7ACE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5C642AA10FB29936669CC269F42079C6; - remoteInfo = AppAuth; - }; - E35F4906BC262AF0B21988028751717A /* PBXContainerItemProxy */ = { + 8FF039B3683C5D505C3C30CB054934B9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = D676E21115185671D7258A56944ABE98; remoteInfo = GTMSessionFetcher; }; - F00DECC804F636772C4DD025B85FD19B /* PBXContainerItemProxy */ = { + 99D7F21DF0AF7C596FBAE59EE3EECA17 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7DFA91ED3A3D0BC020C3C843A3D1EB38; - remoteInfo = "GoogleSignIn-GoogleSignIn"; + remoteGlobalIDString = 22111B9B809C629766088073D2FCF6C4; + remoteInfo = SuperTokensIOS; }; - F11B4DEB269C4C33E44123990565B6AF /* PBXContainerItemProxy */ = { + B09171FBEDD0387FBC80884F1CD28AA7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; remoteInfo = Alamofire; }; - FAA5BDAAE10A47505465F11246BEC2EC /* PBXContainerItemProxy */ = { + B60C10E07CC795D001E6BF13FAB4F57E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 8627999EF1D5E93E13DAFF580DA8CDCF; remoteInfo = GTMAppAuth; }; - FFED9CA8D2C211C01702F139C7080279 /* PBXContainerItemProxy */ = { + CA284B8F33C3E5664EBD37387E6DB74C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 25C8E397233E3949653DE6336A45B085; - remoteInfo = xcbeautify; + remoteGlobalIDString = CAD3534FC55B0333104E5117C0A9A324; + remoteInfo = GoogleSignIn; + }; + DA29F12D46B1D0A0DB04DBCA8D4F70FC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5C642AA10FB29936669CC269F42079C6; + remoteInfo = AppAuth; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 003E13ECAC70880ED4CD4F69AA36DA53 /* FrontToken.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrontToken.swift; path = SuperTokensIOS/Classes/FrontToken.swift; sourceTree = ""; }; - 00A86C4680902B51C6A3020A8279BCCC /* GTMAppAuth.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GTMAppAuth.modulemap; sourceTree = ""; }; - 01F8347741E0313E6120E5D094FB4A23 /* Dictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Dictionary.swift; path = SuperTokensIOS/Classes/extensions/Dictionary.swift; sourceTree = ""; }; - 02A89E315984A4903D14EBA8D7A02ECE /* Constants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constants.swift; path = SuperTokensIOS/Classes/Constants.swift; sourceTree = ""; }; - 02E1518AA159378314AC0C2FC1499273 /* OIDClientMetadataParameters.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDClientMetadataParameters.m; path = Source/AppAuthCore/OIDClientMetadataParameters.m; sourceTree = ""; }; - 0338232B0C80053DC53DC8BF0EE01CC6 /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Source/Protected.swift; sourceTree = ""; }; - 0442704984F61F6704A80A7149B4ACDF /* GIDSignInStrings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInStrings.h; path = GoogleSignIn/Sources/GIDSignInStrings.h; sourceTree = ""; }; - 0450CEA25B67C6C1671F9A1C9A4A308F /* AppAuthCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AppAuthCore.h; path = Source/AppAuthCore.h; sourceTree = ""; }; - 052652DC1ED13FB7F9E731BD22C992D3 /* ru.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ru.lproj; path = GoogleSignIn/Sources/Strings/ru.lproj; sourceTree = ""; }; - 052C561F5A6BB218A7139AC77AC34C43 /* GIDSignInInternalOptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInInternalOptions.m; path = GoogleSignIn/Sources/GIDSignInInternalOptions.m; sourceTree = ""; }; - 0611D06D75A341CCCB574B082EFECFA5 /* GIDSignIn.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignIn.m; path = GoogleSignIn/Sources/GIDSignIn.m; sourceTree = ""; }; - 0659F4FB29593BEFEB74134FD5D43E57 /* OIDEndSessionRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDEndSessionRequest.h; path = Source/AppAuthCore/OIDEndSessionRequest.h; sourceTree = ""; }; - 07DE0A6486C1ACA40DA155ED70CD5090 /* SuperTokensIOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SuperTokensIOS.release.xcconfig; sourceTree = ""; }; - 081595D311DFD1BFD63133D031FB714E /* nb.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = nb.lproj; path = GoogleSignIn/Sources/Strings/nb.lproj; sourceTree = ""; }; - 09E71924FB07E0FAF15459DD73B2C6D7 /* GTMKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMKeychain.h; path = GTMAppAuth/Sources/Public/GTMAppAuth/GTMKeychain.h; sourceTree = ""; }; - 0A25BD0003ED28611136C586AB7F54FF /* AppAuth-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AppAuth-prefix.pch"; sourceTree = ""; }; - 0A4D1152DBC49591439680362DF4A063 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; - 0AE8286C5131391C758F980F56CFB1B8 /* OIDServiceConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDServiceConfiguration.m; path = Source/AppAuthCore/OIDServiceConfiguration.m; sourceTree = ""; }; - 0C82DB551DB921FCAF863980E18C3E0A /* AlamofireExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlamofireExtended.swift; path = Source/AlamofireExtended.swift; sourceTree = ""; }; - 0CAE6549FFA610140A40435837C907D8 /* SuperTokensIOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SuperTokensIOS-Info.plist"; sourceTree = ""; }; + 0295D2E9E43FB0221417C760FECDD842 /* ca.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ca.lproj; path = GoogleSignIn/Sources/Strings/ca.lproj; sourceTree = ""; }; + 03C9D9F74CA41A48F375559ACA2D1A1F /* GIDEMMErrorHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDEMMErrorHandler.h; path = GoogleSignIn/Sources/GIDEMMErrorHandler.h; sourceTree = ""; }; + 0408F43C26B3C5A1CB8FC910C51647DF /* GTMSessionFetcher-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GTMSessionFetcher-Info.plist"; sourceTree = ""; }; + 05FFF16BC918583AA3B83EAC952FCB6D /* pt.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pt.lproj; path = GoogleSignIn/Sources/Strings/pt.lproj; sourceTree = ""; }; + 06197E20473C0AA8D7BF828496AAA165 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; + 067048BAF9CF45B8742A1F8FED981177 /* GoogleSignIn-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleSignIn-Info.plist"; sourceTree = ""; }; + 067F1C154570585E0CFD0FCC4DEE8F84 /* GTMSessionFetcher.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMSessionFetcher.release.xcconfig; sourceTree = ""; }; + 077A315CED16B35069E963C4EB834F92 /* xcbeautify.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = xcbeautify.debug.xcconfig; sourceTree = ""; }; + 07C8E048D2D246B8CA8B7456079EEC78 /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = ""; }; + 0815718EC74C5794035FCC912F51020E /* OIDAuthorizationService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthorizationService.h; path = Source/AppAuthCore/OIDAuthorizationService.h; sourceTree = ""; }; + 09F729385C67515AB00F2696CCD085BD /* OIDTokenUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDTokenUtilities.m; path = Source/AppAuthCore/OIDTokenUtilities.m; sourceTree = ""; }; + 0AD4ECE9AB77245C0E2707FA2A3752C0 /* sv.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = sv.lproj; path = GoogleSignIn/Sources/Strings/sv.lproj; sourceTree = ""; }; + 0BFAEB3437ED049A0EC3B8152D338787 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; + 0DC1A4DA82662B4B10A7FDB7F01C772A /* sk.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = sk.lproj; path = GoogleSignIn/Sources/Strings/sk.lproj; sourceTree = ""; }; + 0DD51569803C4345CB4228C6C6874358 /* GIDAuthStateMigration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDAuthStateMigration.h; path = GoogleSignIn/Sources/GIDAuthStateMigration.h; sourceTree = ""; }; + 0E15D027369ADC88AC71E8B0EFF55CCD /* GIDSignInInternalOptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInInternalOptions.m; path = GoogleSignIn/Sources/GIDSignInInternalOptions.m; sourceTree = ""; }; 0E896FCC8701CF29FF6D1C8E3230FC9E /* Pods-iosenv-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-iosenv-umbrella.h"; sourceTree = ""; }; - 0F91A8360246C6A8CCF19CA286441525 /* OIDTokenRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDTokenRequest.m; path = Source/AppAuthCore/OIDTokenRequest.m; sourceTree = ""; }; - 0FC80D43EC57D77956D73A387BBC3300 /* GTMOAuth2KeychainCompatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMOAuth2KeychainCompatibility.m; path = GTMAppAuth/Sources/GTMOAuth2KeychainCompatibility.m; sourceTree = ""; }; - 103BA2BBE743197C8479FAB2350DB830 /* NormalisedURLPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NormalisedURLPath.swift; path = SuperTokensIOS/Classes/NormalisedURLPath.swift; sourceTree = ""; }; - 10BCAE86CDBEB9EC1A4ADC636E681F72 /* ca.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ca.lproj; path = GoogleSignIn/Sources/Strings/ca.lproj; sourceTree = ""; }; + 0FDBAEF524089FC846DA052CFBC110D0 /* OIDRegistrationResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDRegistrationResponse.h; path = Source/AppAuthCore/OIDRegistrationResponse.h; sourceTree = ""; }; 1186659FE859A461CFC198CAC8031A53 /* Pods-iosenv.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-iosenv.modulemap"; sourceTree = ""; }; - 11F11C70879D054941A3BB23F858E984 /* OIDTokenRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDTokenRequest.h; path = Source/AppAuthCore/OIDTokenRequest.h; sourceTree = ""; }; - 123CC2CF156ED69D9DC0082C214B530C /* GTMAppAuthFetcherAuthorization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMAppAuthFetcherAuthorization.h; path = GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization.h; sourceTree = ""; }; - 158A804C067D54F33BA7B7F11AC6BE90 /* pt_BR.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pt_BR.lproj; path = GoogleSignIn/Sources/Strings/pt_BR.lproj; sourceTree = ""; }; - 159CCF78F8506B9A7456C26A6D3087C0 /* OIDTokenUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDTokenUtilities.m; path = Source/AppAuthCore/OIDTokenUtilities.m; sourceTree = ""; }; - 15A923AA0C624EE6BEDD909424A70E05 /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/RequestTaskMap.swift; sourceTree = ""; }; - 15B737379AD79BC910E871239E180DB0 /* vi.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = vi.lproj; path = GoogleSignIn/Sources/Strings/vi.lproj; sourceTree = ""; }; - 16D27716C0E44F3B7133A6613DDF7168 /* OIDAuthorizationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDAuthorizationRequest.m; path = Source/AppAuthCore/OIDAuthorizationRequest.m; sourceTree = ""; }; - 17FF17B13120A125AE8DF365A6364C22 /* GIDSignInStrings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInStrings.m; path = GoogleSignIn/Sources/GIDSignInStrings.m; sourceTree = ""; }; - 1858465BDECBB841167B5836024204C2 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; - 194C6E6754F80343C39F15D0B1FC9565 /* ja.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ja.lproj; path = GoogleSignIn/Sources/Strings/ja.lproj; sourceTree = ""; }; - 19B9A0D52E45E2C75952BE26023839F2 /* it.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = it.lproj; path = GoogleSignIn/Sources/Strings/it.lproj; sourceTree = ""; }; - 1A85DF9BA90196269275E99F50372C69 /* OIDAuthorizationResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthorizationResponse.h; path = Source/AppAuthCore/OIDAuthorizationResponse.h; sourceTree = ""; }; + 145ADE4B90FC215387CBA8C9128A4D30 /* ro.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ro.lproj; path = GoogleSignIn/Sources/Strings/ro.lproj; sourceTree = ""; }; + 1489859B3F7BB358B3A5036BC5F2F79D /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/RequestTaskMap.swift; sourceTree = ""; }; + 1533120CF2E967623F0886D1CB13A99B /* GTMAppAuth.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMAppAuth.release.xcconfig; sourceTree = ""; }; + 16C6C267F4EA5319380F32DB85C55F15 /* GIDSignInButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInButton.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInButton.h; sourceTree = ""; }; + 1748489CFDF3EDB2DD8D7CB36C5F4BAD /* Constants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constants.swift; path = SuperTokensIOS/Classes/Constants.swift; sourceTree = ""; }; + 1862F66F34B9E3B89B71AB96D45D9D6A /* GIDConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDConfiguration.m; path = GoogleSignIn/Sources/GIDConfiguration.m; sourceTree = ""; }; + 18A5FA9A9838689A36DD22B83C3135F4 /* GTMSessionUploadFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionUploadFetcher.m; path = Sources/Core/GTMSessionUploadFetcher.m; sourceTree = ""; }; + 19BAFAEBE67D3207020A82A42CC995E9 /* pt_PT.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pt_PT.lproj; path = GoogleSignIn/Sources/Strings/pt_PT.lproj; sourceTree = ""; }; + 19E20C4F716EE84008539A115ED2C180 /* OIDAuthState+IOS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIDAuthState+IOS.h"; path = "Source/AppAuth/iOS/OIDAuthState+IOS.h"; sourceTree = ""; }; 1AD8C878A5DF97C5D167FA9E1FB5B2B7 /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/SafariServices.framework; sourceTree = DEVELOPER_DIR; }; - 1EE74456FFD17A83ECEA5ABB8F02E767 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; - 1FD790693339A0C711D1966D99BD39CB /* OIDTokenResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDTokenResponse.m; path = Source/AppAuthCore/OIDTokenResponse.m; sourceTree = ""; }; - 2035A8180995C17A53E3286B56E968BE /* AppAuth.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AppAuth.modulemap; sourceTree = ""; }; - 2299DB2DFA5733E4655B56D047BDC9B7 /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Source/Session.swift; sourceTree = ""; }; - 26AE18C7C466BF7151EF35E7C0E2BEA2 /* OIDIDToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDIDToken.m; path = Source/AppAuthCore/OIDIDToken.m; sourceTree = ""; }; - 2726DAFC7364287C6C5B780ED7769DE1 /* OIDTokenResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDTokenResponse.h; path = Source/AppAuthCore/OIDTokenResponse.h; sourceTree = ""; }; - 2927C85C1EA4EE5AD1EFBA5EA25A4E0C /* OIDRegistrationResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDRegistrationResponse.m; path = Source/AppAuthCore/OIDRegistrationResponse.m; sourceTree = ""; }; - 2929585BEAFAA5389A410B5BC5851F76 /* Alamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.release.xcconfig; sourceTree = ""; }; - 2992516F5A51D4BCE7B3478802318908 /* GIDConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDConfiguration.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h; sourceTree = ""; }; - 2B4033776400836F6770C99E76761E0E /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; + 1C4FC60D5C768B4FBC93C759877D195D /* SuperTokensIOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SuperTokensIOS-Info.plist"; sourceTree = ""; }; + 1CD853C8ADEC37D8DF8BEF578296F574 /* Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Alamofire-Info.plist"; sourceTree = ""; }; + 212B5FAA8CF77FFA5DEE929AC2464331 /* AntiCSRF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AntiCSRF.swift; path = SuperTokensIOS/Classes/AntiCSRF.swift; sourceTree = ""; }; + 24A84AD91A937A7E0CF84CFFF6A6A8FB /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; + 2550152E22D380B9C3E011DA694897D1 /* GTMSessionFetcher.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMSessionFetcher.debug.xcconfig; sourceTree = ""; }; + 256E3D20ABAD2E2F55AEB553C12DC457 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDAppAuthFetcherAuthorizationWithEMMSupport.m; path = GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.m; sourceTree = ""; }; + 256E4C1055E76E45B8F50E32A7EF523F /* GTMAppAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMAppAuth.h; path = GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuth.h; sourceTree = ""; }; + 26BB6DEEF5F0F34C22DE1B609E14F12C /* GIDMDMPasscodeState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDMDMPasscodeState_Private.h; path = GoogleSignIn/Sources/GIDMDMPasscodeState_Private.h; sourceTree = ""; }; + 27D8221F341791BFE521892A0D30C8CD /* GIDAuthentication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDAuthentication.h; path = GoogleSignIn/Sources/GIDAuthentication.h; sourceTree = ""; }; + 28E63E8F8B67E5317E8CF03A42C26112 /* id.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = id.lproj; path = GoogleSignIn/Sources/Strings/id.lproj; sourceTree = ""; }; + 29A480C9F8EB047DA0BC6A21ACD38819 /* GIDToken_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDToken_Private.h; path = GoogleSignIn/Sources/GIDToken_Private.h; sourceTree = ""; }; + 2A677C7CC60170058D22E7CEDFECFF37 /* OIDResponseTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDResponseTypes.m; path = Source/AppAuthCore/OIDResponseTypes.m; sourceTree = ""; }; + 2A8D6E22997569C5A4333D80838DDE1C /* AppAuth.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppAuth.release.xcconfig; sourceTree = ""; }; + 2A9651D4CB41959D0F5276D27185EFA9 /* GIDSignInCallbackSchemes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInCallbackSchemes.h; path = GoogleSignIn/Sources/GIDSignInCallbackSchemes.h; sourceTree = ""; }; + 2B69F9769720E044B7F3F163E4F11A3E /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; 2B6A7D5B236B78EAAA4A7279A031A5FA /* Pods-iosenv-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-iosenv-dummy.m"; sourceTree = ""; }; - 2E37481F12476FCA563F1EFA66945B0C /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = SuperTokensIOS/Classes/Utils.swift; sourceTree = ""; }; - 31287FE3D5E539EFD52A60C3FD284217 /* OIDDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDDefines.h; path = Source/AppAuthCore/OIDDefines.h; sourceTree = ""; }; - 31F05AD4300E1AC79CA2AF3DEECCEAC4 /* GIDCallbackQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDCallbackQueue.m; path = GoogleSignIn/Sources/GIDCallbackQueue.m; sourceTree = ""; }; - 331220001981F1767E3477FCDBEA4778 /* GIDMDMPasscodeState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDMDMPasscodeState.h; path = GoogleSignIn/Sources/GIDMDMPasscodeState.h; sourceTree = ""; }; - 33A66DE80CB8FDA322EE3D0C27C10645 /* GIDAuthStateMigration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDAuthStateMigration.m; path = GoogleSignIn/Sources/GIDAuthStateMigration.m; sourceTree = ""; }; - 34E82ECB3E0951051FF0AD6AABC4B926 /* GIDSignIn_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignIn_Private.h; path = GoogleSignIn/Sources/GIDSignIn_Private.h; sourceTree = ""; }; - 37B499C6BA0FE65F167F043C8225C5BB /* GIDSignIn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignIn.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h; sourceTree = ""; }; - 394CBFB20A169E6D97A60D157F8DC432 /* OIDURLSessionProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDURLSessionProvider.h; path = Source/AppAuthCore/OIDURLSessionProvider.h; sourceTree = ""; }; - 3CDF68B768ABA6A44730101D52ADB470 /* OIDGrantTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDGrantTypes.h; path = Source/AppAuthCore/OIDGrantTypes.h; sourceTree = ""; }; - 3D6708E16D812F20226E5001DEE943C6 /* GIDSignInCallbackSchemes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInCallbackSchemes.m; path = GoogleSignIn/Sources/GIDSignInCallbackSchemes.m; sourceTree = ""; }; - 3DA4408BFE8D6AEF5BC55270D87C631D /* GTMSessionFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcher.m; path = Sources/Core/GTMSessionFetcher.m; sourceTree = ""; }; + 2C21F85AE8DC39FD509728476EBA310B /* OIDAuthState+IOS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIDAuthState+IOS.m"; path = "Source/AppAuth/iOS/OIDAuthState+IOS.m"; sourceTree = ""; }; + 2DB7110B2CC0E2A38E084CFEAFF4A451 /* OIDTokenRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDTokenRequest.m; path = Source/AppAuthCore/OIDTokenRequest.m; sourceTree = ""; }; + 2DD2D2172858535FE21235DF1727BD1B /* GTMSessionFetcherService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherService.h; path = Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherService.h; sourceTree = ""; }; + 2DD37316FCFD9E4D4CC384DF56EAC6B5 /* zh_TW.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = zh_TW.lproj; path = GoogleSignIn/Sources/Strings/zh_TW.lproj; sourceTree = ""; }; + 2DEE718A04F32A7E8ABEE69349744805 /* GoogleSignIn.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleSignIn.debug.xcconfig; sourceTree = ""; }; + 2EF0277FC920FB1FB6A360AC6A2B9374 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; + 2F949663C5C9C12F56728D4B64122C9D /* OIDServiceConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDServiceConfiguration.m; path = Source/AppAuthCore/OIDServiceConfiguration.m; sourceTree = ""; }; + 317DB7E1B978C34BAE623D30E38B77A5 /* OIDRegistrationResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDRegistrationResponse.m; path = Source/AppAuthCore/OIDRegistrationResponse.m; sourceTree = ""; }; + 32B65DB61C754034DDB9A7B9EC3BCD88 /* GTMSessionUploadFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionUploadFetcher.h; path = Sources/Core/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h; sourceTree = ""; }; + 33A2173CBDAE363E7DBF77A8593B0BC8 /* OIDResponseTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDResponseTypes.h; path = Source/AppAuthCore/OIDResponseTypes.h; sourceTree = ""; }; + 344026452765BD28208604BCF9ACBAC7 /* GoogleSignIn.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleSignIn.release.xcconfig; sourceTree = ""; }; + 36EFCF4E9692271F4F10CB2F139B0A20 /* fr_CA.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fr_CA.lproj; path = GoogleSignIn/Sources/Strings/fr_CA.lproj; sourceTree = ""; }; + 38E3C1FB627EB33E70A11AD88A999D2D /* OIDAuthStateErrorDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthStateErrorDelegate.h; path = Source/AppAuthCore/OIDAuthStateErrorDelegate.h; sourceTree = ""; }; + 39A16AF264C2273E76F9EC4BC69EE39B /* Result+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Result+Alamofire.swift"; path = "Source/Result+Alamofire.swift"; sourceTree = ""; }; + 39BD92F4D84DBD47B4F6BA98E4D721D2 /* GTMSessionFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcher.h; path = Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcher.h; sourceTree = ""; }; + 3AB91D8AAC7EAEA6AB4213B512C9E2CF /* AppAuth-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AppAuth-Info.plist"; sourceTree = ""; }; + 3C8F798AD1D1BF3B326A00C5F4FC09BF /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; + 3DA2FE99A2BD3B1405A27B0C0F7C7903 /* GIDGoogleUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDGoogleUser.m; path = GoogleSignIn/Sources/GIDGoogleUser.m; sourceTree = ""; }; + 3DCC8CBB8FE2BDE4A9A18A873795622F /* OIDAuthorizationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDAuthorizationRequest.m; path = Source/AppAuthCore/OIDAuthorizationRequest.m; sourceTree = ""; }; + 3E513753A94C4E4686548371C79CA1AD /* AppAuth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AppAuth-umbrella.h"; sourceTree = ""; }; + 3F47FC97AC3248A019AC3CAD30086D43 /* vi.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = vi.lproj; path = GoogleSignIn/Sources/Strings/vi.lproj; sourceTree = ""; }; + 3F81A66887D1B75162C6D4295132C530 /* GoogleSignIn.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleSignIn.modulemap; sourceTree = ""; }; 3FD1B4C1246D643E9476438C28048FA8 /* AppAuth */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AppAuth; path = AppAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4043F1DFF7129AD201D41C95C368356E /* UnauthorisedResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnauthorisedResponse.swift; path = SuperTokensIOS/Classes/UnauthorisedResponse.swift; sourceTree = ""; }; - 408FDF8D98B5A61B15B08A55CAA4514A /* OIDGrantTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDGrantTypes.m; path = Source/AppAuthCore/OIDGrantTypes.m; sourceTree = ""; }; - 44EB305D46EDE4E1F9B36FBDF5280FCA /* GTMKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMKeychain.m; path = GTMAppAuth/Sources/GTMKeychain.m; sourceTree = ""; }; - 455B87FFE67C8DFB6E92F240E806D2C8 /* OIDExternalUserAgentCatalyst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDExternalUserAgentCatalyst.m; path = Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.m; sourceTree = ""; }; - 471E5D934999CF9325640FD165371A2F /* GIDMDMPasscodeCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDMDMPasscodeCache.h; path = GoogleSignIn/Sources/GIDMDMPasscodeCache.h; sourceTree = ""; }; - 472B1B52C47CCB91E64A0C80727C84CE /* AppAuth-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AppAuth-Info.plist"; sourceTree = ""; }; - 479FE04541F2AE70332349F844E9B06E /* GTMAppAuthFetcherAuthorization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMAppAuthFetcherAuthorization.m; path = GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization.m; sourceTree = ""; }; - 498B6CF33252D5D8251D927C1EEC0D7A /* GoogleSignIn.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleSignIn.debug.xcconfig; sourceTree = ""; }; - 4A09FBA4B60E88D8F438E6B668FC4D11 /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = Source/Combine.swift; sourceTree = ""; }; - 4B18D4C216ABE8BA812679B174BAD99F /* el.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = el.lproj; path = GoogleSignIn/Sources/Strings/el.lproj; sourceTree = ""; }; - 4C0D12CD06550E2888C6789085D6AB3D /* AppAuth.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppAuth.debug.xcconfig; sourceTree = ""; }; - 4C4D47F21D57E27093109928AEF63862 /* GTMSessionFetcher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GTMSessionFetcher.modulemap; sourceTree = ""; }; - 4C7BDB00FAABEB7EF7EF2AD2C794B8C8 /* OIDAuthorizationService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthorizationService.h; path = Source/AppAuthCore/OIDAuthorizationService.h; sourceTree = ""; }; - 4C9349B02D7B2091AC651BC675B9B9BE /* AppAuth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AppAuth-dummy.m"; sourceTree = ""; }; + 4045319C187B235BB049202F84060C11 /* GTMSessionFetcherService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherService.m; path = Sources/Core/GTMSessionFetcherService.m; sourceTree = ""; }; + 41BE255105D992B285D521AB5DB616F8 /* ParameterEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoder.swift; path = Source/ParameterEncoder.swift; sourceTree = ""; }; + 41F9B63155D0912FFE92474E18943933 /* OIDGrantTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDGrantTypes.h; path = Source/AppAuthCore/OIDGrantTypes.h; sourceTree = ""; }; + 42C1B1D87F96F6F79EDB3A8821F5DEF3 /* GTMKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMKeychain.m; path = GTMAppAuth/Sources/GTMKeychain.m; sourceTree = ""; }; + 4337BF1C31F7B9662C692D78CD239072 /* en_GB.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en_GB.lproj; path = GoogleSignIn/Sources/Strings/en_GB.lproj; sourceTree = ""; }; + 4350567584C26C4D52D42ED8EC672F91 /* OIDURLSessionProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDURLSessionProvider.m; path = Source/AppAuthCore/OIDURLSessionProvider.m; sourceTree = ""; }; + 44E4EACB812B744E8A75F6BF97585EB4 /* pl.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pl.lproj; path = GoogleSignIn/Sources/Strings/pl.lproj; sourceTree = ""; }; + 45893F72F56198F495F8DD9A0379C1E3 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; + 45E19F623CA54E426FB775EA7F1F61CE /* OIDAuthorizationRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthorizationRequest.h; path = Source/AppAuthCore/OIDAuthorizationRequest.h; sourceTree = ""; }; + 45F28B9BADC53DBB2D5F0D1110192A7C /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Source/Session.swift; sourceTree = ""; }; + 46A6AE8D18EA3AD9C8D9AF524DBD7292 /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustEvaluation.swift; path = Source/ServerTrustEvaluation.swift; sourceTree = ""; }; + 46C953942D8D11F58216B150790C3E1F /* es_MX.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = es_MX.lproj; path = GoogleSignIn/Sources/Strings/es_MX.lproj; sourceTree = ""; }; + 47079D5AF585A92CD34DC0923EBAEBE0 /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Source/Protected.swift; sourceTree = ""; }; + 483D806FC1EBC3DEDD4C8ED74E0DAF1E /* NSBundle+GID3PAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+GID3PAdditions.h"; path = "GoogleSignIn/Sources/NSBundle+GID3PAdditions.h"; sourceTree = ""; }; + 49B7DADDCA8169ED9113BD5660259B52 /* OIDExternalUserAgentRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgentRequest.h; path = Source/AppAuthCore/OIDExternalUserAgentRequest.h; sourceTree = ""; }; + 4AA5D7205DF098044D3739A2B950B5F2 /* GoogleSignIn-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleSignIn-umbrella.h"; sourceTree = ""; }; + 4B4EA8DE6D4D69AF9B4690F2D743786C /* GIDSignInStrings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInStrings.m; path = GoogleSignIn/Sources/GIDSignInStrings.m; sourceTree = ""; }; + 4D9977B12D514891899F6B373FB94A1F /* GIDEMMErrorHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDEMMErrorHandler.m; path = GoogleSignIn/Sources/GIDEMMErrorHandler.m; sourceTree = ""; }; 4E2FCC641839D6ED4FB8ED469AB8FA01 /* Pods-iosenv-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-iosenv-frameworks.sh"; sourceTree = ""; }; - 4E520D6387C91FD7A5E957B399966404 /* URLConvertible+URLRequestConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLConvertible+URLRequestConvertible.swift"; path = "Source/URLConvertible+URLRequestConvertible.swift"; sourceTree = ""; }; - 4F4AA32FB146BCCA946EDFBAB3C2FA13 /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fr.lproj; path = GoogleSignIn/Sources/Strings/fr.lproj; sourceTree = ""; }; - 4F9E06DACF919E19158C2C4C399922AC /* GTMAppAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMAppAuth.h; path = GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuth.h; sourceTree = ""; }; - 5128A5E90084468364B8997CF11BB157 /* OIDFieldMapping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDFieldMapping.h; path = Source/AppAuthCore/OIDFieldMapping.h; sourceTree = ""; }; - 5188C9C419C080F27F2B2122D2B5255F /* OIDServiceConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDServiceConfiguration.h; path = Source/AppAuthCore/OIDServiceConfiguration.h; sourceTree = ""; }; - 536BE4BD4B1EE74434B72D90A4D8724B /* GoogleSignIn.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleSignIn.modulemap; sourceTree = ""; }; - 537BF43A31F256B3FE6192F670A17262 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; - 537FFAC3CC3DF132392AAD9AC59CE1E4 /* sk.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = sk.lproj; path = GoogleSignIn/Sources/Strings/sk.lproj; sourceTree = ""; }; - 53BC36286567CFC570B5B674C634A6AE /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Source/RedirectHandler.swift; sourceTree = ""; }; - 542031D641359A4D65DFA916C30A77D7 /* OIDEndSessionResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDEndSessionResponse.h; path = Source/AppAuthCore/OIDEndSessionResponse.h; sourceTree = ""; }; - 543543B1C483D89C89CB776C88E73FAA /* GIDCallbackQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDCallbackQueue.h; path = GoogleSignIn/Sources/GIDCallbackQueue.h; sourceTree = ""; }; - 556797F145AF7490CF6352CB49AF7891 /* OIDExternalUserAgentIOS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDExternalUserAgentIOS.m; path = Source/AppAuth/iOS/OIDExternalUserAgentIOS.m; sourceTree = ""; }; - 55A58EDADA4AF4F69DC8CDC798D788D6 /* es_MX.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = es_MX.lproj; path = GoogleSignIn/Sources/Strings/es_MX.lproj; sourceTree = ""; }; - 55BB3AFE3CB0066E4D5BCDBA3ABBAD31 /* ro.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ro.lproj; path = GoogleSignIn/Sources/Strings/ro.lproj; sourceTree = ""; }; - 57995DE115F16F5B75C379900ECC016B /* Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Alamofire-Info.plist"; sourceTree = ""; }; - 58D9115A10337BA728DD3C3D7A1781D3 /* GIDSignInPreferences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInPreferences.h; path = GoogleSignIn/Sources/GIDSignInPreferences.h; sourceTree = ""; }; - 5961504C8AE232249CCBE2FC1D115660 /* GTMSessionFetcher.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMSessionFetcher.debug.xcconfig; sourceTree = ""; }; - 5A03479E280253775B5F25F1C054CBA0 /* cs.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = cs.lproj; path = GoogleSignIn/Sources/Strings/cs.lproj; sourceTree = ""; }; - 5A300E136EF83DD50531DBEB845A86B8 /* GIDScopes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDScopes.h; path = GoogleSignIn/Sources/GIDScopes.h; sourceTree = ""; }; - 5A86EB334A8FC1A4AF7E5CDB63008A22 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = GoogleSignIn/Sources/Strings/en.lproj; sourceTree = ""; }; - 5A8B776DD908683F78CDA2BE1533ADD2 /* OIDExternalUserAgentRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgentRequest.h; path = Source/AppAuthCore/OIDExternalUserAgentRequest.h; sourceTree = ""; }; - 5A9A1D5A2ED1D40823B9E505E889D080 /* OIDExternalUserAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgent.h; path = Source/AppAuthCore/OIDExternalUserAgent.h; sourceTree = ""; }; - 5AD272B869996134B5A856C2D7166E13 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; - 5B18E10775D19AA5F87E22292BF167F0 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; - 5BBB9EF80A0D9E5A6601A31B00F45281 /* OIDErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDErrorUtilities.m; path = Source/AppAuthCore/OIDErrorUtilities.m; sourceTree = ""; }; - 5BF18C7396376DC1A3008F0AC10A8F2E /* th.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = th.lproj; path = GoogleSignIn/Sources/Strings/th.lproj; sourceTree = ""; }; + 4E6BF1B6759096F78C168F4ABD1F3541 /* GIDCallbackQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDCallbackQueue.m; path = GoogleSignIn/Sources/GIDCallbackQueue.m; sourceTree = ""; }; + 51BAE9F352D7B9314614F545E7EA530A /* da.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = da.lproj; path = GoogleSignIn/Sources/Strings/da.lproj; sourceTree = ""; }; + 548607007E8062D6715B4B89532F9720 /* GIDProfileData_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDProfileData_Private.h; path = GoogleSignIn/Sources/GIDProfileData_Private.h; sourceTree = ""; }; + 56956C9B2460B2B1E3720689FF202770 /* SuperTokensIOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SuperTokensIOS.modulemap; sourceTree = ""; }; + 56E3DB830AF22F684D24B72C7272F3BB /* OIDAuthorizationResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDAuthorizationResponse.m; path = Source/AppAuthCore/OIDAuthorizationResponse.m; sourceTree = ""; }; + 5712629DFF2FE76E2B58DCE78BBAAA99 /* SuperTokensIOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SuperTokensIOS-prefix.pch"; sourceTree = ""; }; + 5712CE6C45D983C88830A6D4BFA86DC1 /* GTMAppAuthFetcherAuthorization+Keychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GTMAppAuthFetcherAuthorization+Keychain.h"; path = "GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization+Keychain.h"; sourceTree = ""; }; + 5838E12080F2C35C1FEE9FD488FEF2AA /* OIDFieldMapping.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDFieldMapping.m; path = Source/AppAuthCore/OIDFieldMapping.m; sourceTree = ""; }; + 5850EF0637F8DF87FB7B5467753A79EC /* OIDExternalUserAgentIOSCustomBrowser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDExternalUserAgentIOSCustomBrowser.m; path = Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.m; sourceTree = ""; }; + 58AD983B488E57B792F28F86768E2A71 /* GIDEMMSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDEMMSupport.m; path = GoogleSignIn/Sources/GIDEMMSupport.m; sourceTree = ""; }; + 5A1493680B196DC35C8D026EE2BBFEFC /* GIDSignInCallbackSchemes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInCallbackSchemes.m; path = GoogleSignIn/Sources/GIDSignInCallbackSchemes.m; sourceTree = ""; }; + 5C072320E291586283FE7E8EB52F85B7 /* OIDURLSessionProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDURLSessionProvider.h; path = Source/AppAuthCore/OIDURLSessionProvider.h; sourceTree = ""; }; + 5CCF49282E00B6865BA6BFC127FC94D2 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Alamofire; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5D8FFB0C6AB3764B2E7D164F702EFA59 /* AppAuth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AppAuth-umbrella.h"; sourceTree = ""; }; - 5FA033E400C6355B102E6CE66AF2344D /* GIDGoogleUser_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDGoogleUser_Private.h; path = GoogleSignIn/Sources/GIDGoogleUser_Private.h; sourceTree = ""; }; - 5FDF298F2868A21905D01CCBDA2D7A85 /* da.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = da.lproj; path = GoogleSignIn/Sources/Strings/da.lproj; sourceTree = ""; }; - 60FD3B39FC736BF548978BB5568032AB /* OIDScopeUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDScopeUtilities.m; path = Source/AppAuthCore/OIDScopeUtilities.m; sourceTree = ""; }; - 6134DCCF0C3FCBFB2E81B6F0752FD192 /* OIDAuthState+IOS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIDAuthState+IOS.m"; path = "Source/AppAuth/iOS/OIDAuthState+IOS.m"; sourceTree = ""; }; - 613CCA46A00830AB5977AC7162748F4E /* GTMAppAuth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMAppAuth-umbrella.h"; sourceTree = ""; }; - 621C061E86A6F87469DFE2601CA909C4 /* Version.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Version.swift; path = SuperTokensIOS/Classes/Version.swift; sourceTree = ""; }; - 62B9EA9A25C7637CCAD5C389BB546A2D /* OIDIDToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDIDToken.h; path = Source/AppAuthCore/OIDIDToken.h; sourceTree = ""; }; - 65BFCC93B2CC8947A3B247E7C8D700D9 /* google@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "google@3x.png"; path = "GoogleSignIn/Sources/Resources/google@3x.png"; sourceTree = ""; }; - 668E784E70D8DB58FB507583BE80B535 /* uk.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = uk.lproj; path = GoogleSignIn/Sources/Strings/uk.lproj; sourceTree = ""; }; - 66FC8AF4F16352D3FF1123CB6FCDB03B /* OIDScopes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDScopes.h; path = Source/AppAuthCore/OIDScopes.h; sourceTree = ""; }; - 67C7973912F1E2C3DE34C5812E790A69 /* GIDSignInButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInButton.m; path = GoogleSignIn/Sources/GIDSignInButton.m; sourceTree = ""; }; - 6874A918380070BF19DD44D3B5BD219D /* OIDAuthorizationRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthorizationRequest.h; path = Source/AppAuthCore/OIDAuthorizationRequest.h; sourceTree = ""; }; - 69E31850168045356B64E2563B4A7DBB /* NormalisedURLDomain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NormalisedURLDomain.swift; path = SuperTokensIOS/Classes/NormalisedURLDomain.swift; sourceTree = ""; }; - 6A30C0FBA2A9A851160229EAC73D8997 /* GTMSessionFetcherLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherLogging.h; path = Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h; sourceTree = ""; }; - 6AEE8FD5D7AB7630CCAD7661CF392074 /* GTMSessionFetcherService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherService.h; path = Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherService.h; sourceTree = ""; }; - 6B111FC9D0CFDA3B330483B810F1DB65 /* GIDAuthentication_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDAuthentication_Private.h; path = GoogleSignIn/Sources/GIDAuthentication_Private.h; sourceTree = ""; }; - 6B22A8C8ACF44F79F8082992AF491A95 /* AppAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AppAuth.h; path = Source/AppAuth.h; sourceTree = ""; }; - 6C6447C4D5454141D579324570AAABEE /* GIDMDMPasscodeState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDMDMPasscodeState.m; path = GoogleSignIn/Sources/GIDMDMPasscodeState.m; sourceTree = ""; }; - 6C85CE2E525C346E2DC29D00C984BFB9 /* GoogleSignIn.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleSignIn.release.xcconfig; sourceTree = ""; }; - 6DA4EF9C1F57F9EF2DECADD3C1889AF9 /* id.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = id.lproj; path = GoogleSignIn/Sources/Strings/id.lproj; sourceTree = ""; }; - 6DC8FACD460E277EF94D7FA302C73BE5 /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/HTTPMethod.swift; sourceTree = ""; }; + 5DB18303D7AFFDC5EE057F444122DE54 /* String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = String.swift; path = SuperTokensIOS/Classes/extensions/String.swift; sourceTree = ""; }; + 62F8B5D1C2B8F48F210A06F9FD8CE05A /* GIDGoogleUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDGoogleUser.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h; sourceTree = ""; }; + 63E8B34F0FAEB524DB27C78BCDCCBFBE /* OIDEndSessionResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDEndSessionResponse.m; path = Source/AppAuthCore/OIDEndSessionResponse.m; sourceTree = ""; }; + 645C59D0726454F9957777A76F80B1D8 /* URLSessionConfiguration+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSessionConfiguration+Alamofire.swift"; path = "Source/URLSessionConfiguration+Alamofire.swift"; sourceTree = ""; }; + 651DAA1E006E207DD28F4309B2B47DFE /* GTMSessionFetcher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GTMSessionFetcher.modulemap; sourceTree = ""; }; + 6574701D4F012CD9F4036229D65BC463 /* GTMAppAuth-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GTMAppAuth-Info.plist"; sourceTree = ""; }; + 663501C1CC651C026EF0160473E0E9CF /* GTMAppAuth.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GTMAppAuth.modulemap; sourceTree = ""; }; + 6682F8D28EBFBA4EB2C594A7E871FE97 /* GIDSignInPreferences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInPreferences.m; path = GoogleSignIn/Sources/GIDSignInPreferences.m; sourceTree = ""; }; + 689F0579625B24BC0ED8BB4A402474A5 /* ru.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ru.lproj; path = GoogleSignIn/Sources/Strings/ru.lproj; sourceTree = ""; }; + 68D23ED91510367101F348FACF47C11B /* ar.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ar.lproj; path = GoogleSignIn/Sources/Strings/ar.lproj; sourceTree = ""; }; + 6927F36CD736D7391060DD0E8D1C260D /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = SuperTokensIOS/Classes/Utils.swift; sourceTree = ""; }; + 69515D72CBD6F66A8517DB55D4200141 /* nl.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = nl.lproj; path = GoogleSignIn/Sources/Strings/nl.lproj; sourceTree = ""; }; + 6BBFDF2B2B5B3F6F6DC1880730FCA9CB /* GIDProfileData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDProfileData.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDProfileData.h; sourceTree = ""; }; + 6BE60A56B6733E8EE0839D34A52AFAE4 /* GIDSignInStrings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInStrings.h; path = GoogleSignIn/Sources/GIDSignInStrings.h; sourceTree = ""; }; + 6BF7BAC54D253C2043E72F644758A210 /* OIDTokenResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDTokenResponse.m; path = Source/AppAuthCore/OIDTokenResponse.m; sourceTree = ""; }; + 6C55D941313DD67971B0AAB38998DAFB /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; + 6C624BAF398DB8DD513C13E641570DBF /* GTMSessionFetcherLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherLogging.m; path = Sources/Core/GTMSessionFetcherLogging.m; sourceTree = ""; }; + 6F062C7035C086CAE742FA8A98E419BE /* OIDIDToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDIDToken.m; path = Source/AppAuthCore/OIDIDToken.m; sourceTree = ""; }; 6FD122EA0AB9AB2A8FFA5F676C795DF0 /* GTMAppAuth */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GTMAppAuth; path = GTMAppAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7014E052E0F1A35238F6B34C3A8C1F07 /* GIDSignInInternalOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInInternalOptions.h; path = GoogleSignIn/Sources/GIDSignInInternalOptions.h; sourceTree = ""; }; - 7055A4869781CF15DC66A4BF6E4DA582 /* OIDExternalUserAgentIOSCustomBrowser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgentIOSCustomBrowser.h; path = Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.h; sourceTree = ""; }; + 708C2C94819E1438FCCCAE12B4239F41 /* Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concurrency.swift; path = Source/Concurrency.swift; sourceTree = ""; }; + 71CAA18234FED02F60EBFA0D2C9ED330 /* AppAuth-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AppAuth-prefix.pch"; sourceTree = ""; }; 71D3DEDEA3755CBC5E1DA2F41FE26988 /* Pods-iosenv-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iosenv-acknowledgements.plist"; sourceTree = ""; }; - 7306633E5A22209F116EC04A4680C4D8 /* OIDExternalUserAgentSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgentSession.h; path = Source/AppAuthCore/OIDExternalUserAgentSession.h; sourceTree = ""; }; - 732090922AC2DA0D80C8A4185E53429B /* GTMAppAuth-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GTMAppAuth-Info.plist"; sourceTree = ""; }; - 7428949827FE09E5902DA47B3B714C7C /* OIDError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDError.h; path = Source/AppAuthCore/OIDError.h; sourceTree = ""; }; - 74DEEF18D1500A41D11E7303EDC7326B /* OIDServiceDiscovery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDServiceDiscovery.m; path = Source/AppAuthCore/OIDServiceDiscovery.m; sourceTree = ""; }; + 73AB953B123565E3DCF7239B5E7C01EA /* OIDAuthorizationResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthorizationResponse.h; path = Source/AppAuthCore/OIDAuthorizationResponse.h; sourceTree = ""; }; + 73BC221EC0256FB0D832037B0487C873 /* ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist"; sourceTree = ""; }; + 743AFC0FF4030B3E8A8B363EECBE2EA1 /* OIDRegistrationRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDRegistrationRequest.h; path = Source/AppAuthCore/OIDRegistrationRequest.h; sourceTree = ""; }; + 75502DF5F7769C3055D2E4926DCE52B8 /* GoogleSignIn-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleSignIn-dummy.m"; sourceTree = ""; }; + 758A0D8DB0F4F4E6A25AC6A238F4CDD2 /* OIDClientMetadataParameters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDClientMetadataParameters.h; path = Source/AppAuthCore/OIDClientMetadataParameters.h; sourceTree = ""; }; 75CB86D816E4184799EFE5B6E4954307 /* LocalAuthentication.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LocalAuthentication.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/LocalAuthentication.framework; sourceTree = DEVELOPER_DIR; }; - 76AD735E771801171A872A088B5899CA /* OIDResponseTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDResponseTypes.m; path = Source/AppAuthCore/OIDResponseTypes.m; sourceTree = ""; }; + 76BEA1AC9036F9411CAFACA59A0B5575 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; + 77188A15386C12A2A6989FC6A1D5ED37 /* google@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "google@2x.png"; path = "GoogleSignIn/Sources/Resources/google@2x.png"; sourceTree = ""; }; 776ABC110FB6CD59430C53CC897B2F32 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; - 78785AF29EB79EA61798B11FB166743C /* GTMSessionFetcherLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherLogging.m; path = Sources/Core/GTMSessionFetcherLogging.m; sourceTree = ""; }; - 7B33C7D57343DB700CF59DCE854F1547 /* tr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = tr.lproj; path = GoogleSignIn/Sources/Strings/tr.lproj; sourceTree = ""; }; - 7BEC66EC928D80ABBC335C9E7C319B6D /* OIDRegistrationRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDRegistrationRequest.h; path = Source/AppAuthCore/OIDRegistrationRequest.h; sourceTree = ""; }; - 8048F225F3F92426E518BF1F5BEF599E /* GTMSessionFetcher-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GTMSessionFetcher-Info.plist"; sourceTree = ""; }; - 807563300EB8BD93FB5954E25701BCDB /* OIDTokenUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDTokenUtilities.h; path = Source/AppAuthCore/OIDTokenUtilities.h; sourceTree = ""; }; + 798487EA18E263C0B5E08D5547519A10 /* OIDError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDError.h; path = Source/AppAuthCore/OIDError.h; sourceTree = ""; }; + 7A10E4619FF779D6DAB309BF1F337DFF /* GTMSessionFetcher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-umbrella.h"; sourceTree = ""; }; + 7A9D74D69EE4CE754684EADDB6854E96 /* he.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = he.lproj; path = GoogleSignIn/Sources/Strings/he.lproj; sourceTree = ""; }; + 7B0976E01D8977A603C2D872823EB66E /* GIDAuthentication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDAuthentication.m; path = GoogleSignIn/Sources/GIDAuthentication.m; sourceTree = ""; }; + 7B2B2FFAB97A1FFF3BF9EACDE7B49FFD /* GTMAppAuth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMAppAuth-umbrella.h"; sourceTree = ""; }; + 7ED1997C467DFF152616E190C706A1AA /* OIDEndSessionResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDEndSessionResponse.h; path = Source/AppAuthCore/OIDEndSessionResponse.h; sourceTree = ""; }; + 7EF5A61D1B432A94FF9310D1145C2C7A /* it.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = it.lproj; path = GoogleSignIn/Sources/Strings/it.lproj; sourceTree = ""; }; + 7F56C8FB2741B0C35CBDF2D43DCE6295 /* OIDAuthorizationService+IOS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIDAuthorizationService+IOS.m"; path = "Source/AppAuth/iOS/OIDAuthorizationService+IOS.m"; sourceTree = ""; }; 809AB6B59B8CB856EE1C1CF29D425D6B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 8132A8703769D44948D8C9A53171EC6A /* GIDEMMErrorHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDEMMErrorHandler.m; path = GoogleSignIn/Sources/GIDEMMErrorHandler.m; sourceTree = ""; }; - 81A3A9C4C17C2670AF2F02C856D3E2C6 /* EventMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventMonitor.swift; path = Source/EventMonitor.swift; sourceTree = ""; }; - 844EB5B48E8BCAE593DC97DCAA24323D /* OIDError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDError.m; path = Source/AppAuthCore/OIDError.m; sourceTree = ""; }; + 8251F64263A8218EC8548C7541A41BFA /* GTMAppAuthFetcherAuthorization+Keychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GTMAppAuthFetcherAuthorization+Keychain.m"; path = "GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization+Keychain.m"; sourceTree = ""; }; + 82C223B892C5A26CA22897C178321F62 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; + 83D7EEFAB2589888801D4C729E5D49CB /* URLEncodedFormEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLEncodedFormEncoder.swift; path = Source/URLEncodedFormEncoder.swift; sourceTree = ""; }; + 8438B9FAED461AD11D4DB1F3D05F3516 /* AlamofireExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlamofireExtended.swift; path = Source/AlamofireExtended.swift; sourceTree = ""; }; + 845C846F1C876536D2122F420CA207C4 /* GIDToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDToken.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDToken.h; sourceTree = ""; }; 84665582944CFB045E8104EE29A131B4 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 84C185BFFA3E9B03AFDFA8E754B14C65 /* MultipartUpload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartUpload.swift; path = Source/MultipartUpload.swift; sourceTree = ""; }; - 85F228E517D9BD90FBF96FEEFA9372AA /* ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist"; sourceTree = ""; }; + 847150108F4084DBFDAD5CDAD1DC5DFB /* Dictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Dictionary.swift; path = SuperTokensIOS/Classes/extensions/Dictionary.swift; sourceTree = ""; }; + 854F3343E8A89E287610F65E8B6A41E5 /* GIDProfileData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDProfileData.m; path = GoogleSignIn/Sources/GIDProfileData.m; sourceTree = ""; }; 8603A4DB959871DE360EFA9333222D0D /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 864AAA448883F593475F7F7B41882126 /* pt_PT.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pt_PT.lproj; path = GoogleSignIn/Sources/Strings/pt_PT.lproj; sourceTree = ""; }; - 8787738D9B4F98D6A6E005C6E8731FC7 /* nl.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = nl.lproj; path = GoogleSignIn/Sources/Strings/nl.lproj; sourceTree = ""; }; - 87EE9C80F128A65CA2D38BAA5738CF97 /* OIDAuthorizationService+IOS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIDAuthorizationService+IOS.m"; path = "Source/AppAuth/iOS/OIDAuthorizationService+IOS.m"; sourceTree = ""; }; - 88B44379BF15EFF2CD1D180DDEFBE675 /* GTMSessionUploadFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionUploadFetcher.h; path = Sources/Core/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h; sourceTree = ""; }; - 89BE16823D4D2561227B262FD66A93B8 /* OIDAuthState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthState.h; path = Source/AppAuthCore/OIDAuthState.h; sourceTree = ""; }; - 8A90A33A42278E70A581E165F26934DB /* GIDSignInPreferences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInPreferences.m; path = GoogleSignIn/Sources/GIDSignInPreferences.m; sourceTree = ""; }; - 8BE4F2FF1627EAC1610E1DFE1115D8A2 /* SuperTokensIOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SuperTokensIOS.debug.xcconfig; sourceTree = ""; }; + 89FEEB511EE8939035F5DB73A6FDC63E /* cs.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = cs.lproj; path = GoogleSignIn/Sources/Strings/cs.lproj; sourceTree = ""; }; + 8A45C0718055262FDF084203CB9A0C7E /* OIDServiceConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDServiceConfiguration.h; path = Source/AppAuthCore/OIDServiceConfiguration.h; sourceTree = ""; }; + 8A72EF429E13E88E1634041F4F0C6FD4 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = GoogleSignIn/Sources/Strings/en.lproj; sourceTree = ""; }; + 8AA4A99401E1809336F8F11D002AFF15 /* GIDScopes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDScopes.h; path = GoogleSignIn/Sources/GIDScopes.h; sourceTree = ""; }; + 8B1E7EE0E562241832CAD5BB6FA72E53 /* OIDEndSessionRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDEndSessionRequest.h; path = Source/AppAuthCore/OIDEndSessionRequest.h; sourceTree = ""; }; 8BF1D5C4E73D2F1EDA6C141C6811D532 /* Pods-iosenv-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iosenv-Info.plist"; sourceTree = ""; }; - 8C19FAC253FC6224A9DD7313B64DEB83 /* ms.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ms.lproj; path = GoogleSignIn/Sources/Strings/ms.lproj; sourceTree = ""; }; - 8CDCB6DCA3917C2E1A0AFDE3B4BBDD1C /* GIDAuthentication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDAuthentication.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDAuthentication.h; sourceTree = ""; }; + 8BF79BAF5688AA851C1CC95C6704219C /* OIDServiceDiscovery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDServiceDiscovery.m; path = Source/AppAuthCore/OIDServiceDiscovery.m; sourceTree = ""; }; 8D37A58D3DEDB3CEF774AB88A7F2E2F2 /* SuperTokensIOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SuperTokensIOS; path = SuperTokensIOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8DABF9926E4746EFF0E83DC2CDAD32AA /* GoogleSignIn-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleSignIn-umbrella.h"; sourceTree = ""; }; - 8EFF43962D755910ABF8658A210C0246 /* OIDServiceDiscovery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDServiceDiscovery.h; path = Source/AppAuthCore/OIDServiceDiscovery.h; sourceTree = ""; }; - 906E77654FBF0758B3F68112E99E1B27 /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; + 8F56A2933DFE7A9B72C2DC76D96D4BDD /* OIDAuthorizationService+IOS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIDAuthorizationService+IOS.h"; path = "Source/AppAuth/iOS/OIDAuthorizationService+IOS.h"; sourceTree = ""; }; + 9010D90E522982E322ABFFD792BBBE38 /* OIDExternalUserAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgent.h; path = Source/AppAuthCore/OIDExternalUserAgent.h; sourceTree = ""; }; + 9055F629002CF27F85C7E42E66CD1222 /* GIDScopes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDScopes.m; path = GoogleSignIn/Sources/GIDScopes.m; sourceTree = ""; }; + 90B8040EF2B1FCE723D6CB64581BDC55 /* OIDScopeUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDScopeUtilities.m; path = Source/AppAuthCore/OIDScopeUtilities.m; sourceTree = ""; }; + 916F2420757E82B81C9712673CE16242 /* OIDExternalUserAgentIOS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgentIOS.h; path = Source/AppAuth/iOS/OIDExternalUserAgentIOS.h; sourceTree = ""; }; + 917B054FADE7DF8582BE8FF0F2868261 /* StringEncoding+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "StringEncoding+Alamofire.swift"; path = "Source/StringEncoding+Alamofire.swift"; sourceTree = ""; }; 91A24FBF3A7324C4053EDF92AC35AE56 /* Pods-iosenv.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iosenv.debug.xcconfig"; sourceTree = ""; }; - 93D06956562AAC722DEE6B15FC6203E2 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = SuperTokensIOS/Classes/Error.swift; sourceTree = ""; }; - 93D127749CFC36FBAABBD6E9161D1DB1 /* GIDSignInCallbackSchemes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInCallbackSchemes.h; path = GoogleSignIn/Sources/GIDSignInCallbackSchemes.h; sourceTree = ""; }; - 943A7BE177C57D6EFBDD09558715C614 /* OIDURLQueryComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDURLQueryComponent.h; path = Source/AppAuthCore/OIDURLQueryComponent.h; sourceTree = ""; }; - 94F653B993D6CF93573E2632BC005D48 /* GIDProfileData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDProfileData.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDProfileData.h; sourceTree = ""; }; - 94FF3CDE72A43B1C8E52E7BE464D851A /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; - 966FC6677A2E5A75B43E6FB2B1FED446 /* GoogleSignIn-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleSignIn-Info.plist"; sourceTree = ""; }; - 97941AB19AEEF8A939D0E11E37CBFF86 /* GTMSessionUploadFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionUploadFetcher.m; path = Sources/Core/GTMSessionUploadFetcher.m; sourceTree = ""; }; - 9845381C6DE269065F8D889E1DC63D36 /* zh_CN.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = zh_CN.lproj; path = GoogleSignIn/Sources/Strings/zh_CN.lproj; sourceTree = ""; }; - 9864FC972E7414EA01CED01F19D74198 /* he.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = he.lproj; path = GoogleSignIn/Sources/Strings/he.lproj; sourceTree = ""; }; - 98E566C55EA03D54214EC390B45A2E8B /* sv.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = sv.lproj; path = GoogleSignIn/Sources/Strings/sv.lproj; sourceTree = ""; }; - 99243BE0999291E60FCF378E8B54F2E7 /* OIDURLSessionProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDURLSessionProvider.m; path = Source/AppAuthCore/OIDURLSessionProvider.m; sourceTree = ""; }; - 997EAC18D27A9F7076CC42ED0B65BAFB /* OIDAuthorizationResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDAuthorizationResponse.m; path = Source/AppAuthCore/OIDAuthorizationResponse.m; sourceTree = ""; }; - 9A23DEC8828863E5EA405D2ABD8B19B5 /* zh_TW.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = zh_TW.lproj; path = GoogleSignIn/Sources/Strings/zh_TW.lproj; sourceTree = ""; }; - 9A2FBCF6ED477D0A5E93B4232E6CD9B6 /* GTMSessionFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcher.h; path = Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcher.h; sourceTree = ""; }; - 9CCF638969B4FE5625CE3027AB4AB234 /* GIDSignInButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInButton.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInButton.h; sourceTree = ""; }; - 9CD9066B0AB35403B31E7BDCDDAD7AF0 /* GTMAppAuthFetcherAuthorization+Keychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GTMAppAuthFetcherAuthorization+Keychain.h"; path = "GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization+Keychain.h"; sourceTree = ""; }; - 9D1F27E2512376E9163265750CA9297E /* OIDAuthorizationService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDAuthorizationService.m; path = Source/AppAuthCore/OIDAuthorizationService.m; sourceTree = ""; }; + 91C52884C55A9DF5F6BB22227512F000 /* RequestInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestInterceptor.swift; path = Source/RequestInterceptor.swift; sourceTree = ""; }; + 9290CDFF0011ACF98BF6A68C23782140 /* FrontToken.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrontToken.swift; path = SuperTokensIOS/Classes/FrontToken.swift; sourceTree = ""; }; + 92DB83DED7BF7098033BF896592290DC /* GTMSessionFetcher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GTMSessionFetcher-dummy.m"; sourceTree = ""; }; + 93A2EEA4400A64811B5579F8E1941F76 /* OIDExternalUserAgentIOSCustomBrowser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgentIOSCustomBrowser.h; path = Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.h; sourceTree = ""; }; + 9420F1EA5EDECB2F64818BA255FF9B5C /* OIDURLQueryComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDURLQueryComponent.h; path = Source/AppAuthCore/OIDURLQueryComponent.h; sourceTree = ""; }; + 9475C9DC5D9AA66DB9A520CF58C8DC77 /* OIDServiceDiscovery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDServiceDiscovery.h; path = Source/AppAuthCore/OIDServiceDiscovery.h; sourceTree = ""; }; + 9508F03AE16BBFB49E683FBFB91387EA /* ja.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ja.lproj; path = GoogleSignIn/Sources/Strings/ja.lproj; sourceTree = ""; }; + 96670754509D018A215DD462EF37AF41 /* ko.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ko.lproj; path = GoogleSignIn/Sources/Strings/ko.lproj; sourceTree = ""; }; + 96CEDCC52BD93D4D542907A07998FF02 /* URLRequest+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Alamofire.swift"; path = "Source/URLRequest+Alamofire.swift"; sourceTree = ""; }; + 9735360323179892F263AA2EE6AEFF2B /* OIDScopes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDScopes.m; path = Source/AppAuthCore/OIDScopes.m; sourceTree = ""; }; + 986702E8786CCEEEE687EFD62CC8A559 /* AppAuth.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AppAuth.modulemap; sourceTree = ""; }; + 98802E7EC0E2FF5EBEBEA77F18258E25 /* de.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = de.lproj; path = GoogleSignIn/Sources/Strings/de.lproj; sourceTree = ""; }; + 9882CB2A988942EAF7CCF0E0DABE2F94 /* Roboto-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Roboto-Bold.ttf"; path = "GoogleSignIn/Sources/Resources/Roboto-Bold.ttf"; sourceTree = ""; }; + 9928F8F84767007A87BCE322555A902D /* GoogleSignIn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GoogleSignIn.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GoogleSignIn.h; sourceTree = ""; }; + 9A0144709A70F84DCD3E65B4BBCDB3CF /* GIDSignIn.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignIn.m; path = GoogleSignIn/Sources/GIDSignIn.m; sourceTree = ""; }; + 9A36AA6A7062459D35CD02123339C973 /* GTMOAuth2KeychainCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMOAuth2KeychainCompatibility.h; path = GTMAppAuth/Sources/Public/GTMAppAuth/GTMOAuth2KeychainCompatibility.h; sourceTree = ""; }; + 9B504B605E558103E3FE6ABB398C3E2E /* GTMAppAuthFetcherAuthorization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMAppAuthFetcherAuthorization.h; path = GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization.h; sourceTree = ""; }; + 9CB603F9411354BD34E092CE3C014EC6 /* GIDSignIn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignIn.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h; sourceTree = ""; }; + 9CFA03AAB3190A00AC683729E3D8FAC1 /* CachedResponseHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedResponseHandler.swift; path = Source/CachedResponseHandler.swift; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9E00AEE0BA48BBD27B8D8CBAFD37CED9 /* hi.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = hi.lproj; path = GoogleSignIn/Sources/Strings/hi.lproj; sourceTree = ""; }; - 9FA14125173B11C29E756CCF99373E43 /* de.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = de.lproj; path = GoogleSignIn/Sources/Strings/de.lproj; sourceTree = ""; }; - A1865D239E3E7CE6EE951935318E61CE /* pl.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pl.lproj; path = GoogleSignIn/Sources/Strings/pl.lproj; sourceTree = ""; }; - A1E39CEC5330337D23A6D3828084F937 /* AntiCSRF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AntiCSRF.swift; path = SuperTokensIOS/Classes/AntiCSRF.swift; sourceTree = ""; }; - A2B23791D5BA525FB1B03A944A0C9DB9 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; - A3DFBD18C29DAFC3442D705EE455AEFF /* GoogleSignIn-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleSignIn-dummy.m"; sourceTree = ""; }; - A446C3F80EB9B0A87577E4CDA9F023F6 /* ar.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ar.lproj; path = GoogleSignIn/Sources/Strings/ar.lproj; sourceTree = ""; }; + 9DA6937B6DE34F1CDDEA35FDEB5A52B6 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = SuperTokensIOS/Classes/Error.swift; sourceTree = ""; }; + 9DBE9EB1C40A394E6D3B242F19A4B494 /* GIDSignIn_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignIn_Private.h; path = GoogleSignIn/Sources/GIDSignIn_Private.h; sourceTree = ""; }; + 9E892F883D483E54042AB9970F42E607 /* nb.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = nb.lproj; path = GoogleSignIn/Sources/Strings/nb.lproj; sourceTree = ""; }; + A15175572A06EB1F5E5D363008385D60 /* OIDErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDErrorUtilities.m; path = Source/AppAuthCore/OIDErrorUtilities.m; sourceTree = ""; }; + A1DDE36D932030162F1BD4146B48339F /* OIDAuthState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDAuthState.m; path = Source/AppAuthCore/OIDAuthState.m; sourceTree = ""; }; + A2D12F48690FC48034E7894F9E7844DA /* NSBundle+GID3PAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+GID3PAdditions.m"; path = "GoogleSignIn/Sources/NSBundle+GID3PAdditions.m"; sourceTree = ""; }; + A31F7BBADA5335D61D0976BCAFAE096B /* GIDToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDToken.m; path = GoogleSignIn/Sources/GIDToken.m; sourceTree = ""; }; + A35DF8E792BEEA06D1865F6837F718FB /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; + A3710A5607D67A11C7EA8D8036417001 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDAppAuthFetcherAuthorizationWithEMMSupport.h; path = GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h; sourceTree = ""; }; + A50E3DE1441EDD752700F7AF5ECF39BA /* GTMAppAuth.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMAppAuth.debug.xcconfig; sourceTree = ""; }; A52483C5EE2FB2B7290E8C96A830F81C /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - A6DD10E92D541CED1FC26333F0B6EEEF /* GTMSessionFetcherService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherService.m; path = Sources/Core/GTMSessionFetcherService.m; sourceTree = ""; }; - A70148FFE76B3917E0D59DA1BBF80C01 /* SuperTokensIOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SuperTokensIOS.modulemap; sourceTree = ""; }; - A9387A88827FD4099B2A94AA060A8297 /* GTMOAuth2KeychainCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMOAuth2KeychainCompatibility.h; path = GTMAppAuth/Sources/Public/GTMAppAuth/GTMOAuth2KeychainCompatibility.h; sourceTree = ""; }; - AA44611746FA98F2EE7B843767A7CDB2 /* GTMSessionFetcher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-umbrella.h"; sourceTree = ""; }; - AC066356651E36E561EC73D1DCEE07DC /* hu.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = hu.lproj; path = GoogleSignIn/Sources/Strings/hu.lproj; sourceTree = ""; }; - AC51F9E92F96704FA74602BDD1DE41D9 /* OIDResponseTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDResponseTypes.h; path = Source/AppAuthCore/OIDResponseTypes.h; sourceTree = ""; }; - AD281E5405A59F79D2C0A6158AD18E66 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; - AD5144B1E9E778520B7972FEDC795AD3 /* URLSessionConfiguration+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSessionConfiguration+Alamofire.swift"; path = "Source/URLSessionConfiguration+Alamofire.swift"; sourceTree = ""; }; - AD5488212F2A42E64A80D3EF60F417D3 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; - AD688AB212554B064862830DADD11054 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; - ADAC3B2A8F9BA263360CCFBE8939D1EC /* GTMSessionFetcher.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMSessionFetcher.release.xcconfig; sourceTree = ""; }; - AECE582F311BAC63871D4F2E0DD83404 /* pt.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pt.lproj; path = GoogleSignIn/Sources/Strings/pt.lproj; sourceTree = ""; }; - B1D85338E72A588C467B37701CB558CF /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustEvaluation.swift; path = Source/ServerTrustEvaluation.swift; sourceTree = ""; }; - B1E3B1FADB8C30CECECADCD85C35244D /* RequestInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestInterceptor.swift; path = Source/RequestInterceptor.swift; sourceTree = ""; }; - B1E437536B4D6405E884A3936DE1547E /* GTMAppAuth.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMAppAuth.debug.xcconfig; sourceTree = ""; }; - B20510944B99ECD862E211A5D28D3325 /* OIDAuthorizationService+IOS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIDAuthorizationService+IOS.h"; path = "Source/AppAuth/iOS/OIDAuthorizationService+IOS.h"; sourceTree = ""; }; - B30363C15202FD68564BAD5B3A2E922C /* SuperTokensIOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SuperTokensIOS-dummy.m"; sourceTree = ""; }; - B3B87127327A7A2F96237C4CE34C30A3 /* AppAuth.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppAuth.release.xcconfig; sourceTree = ""; }; - B444131D5BD83B6222ED349A034D998A /* xcbeautify.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = xcbeautify.debug.xcconfig; sourceTree = ""; }; - B56BF9AE7EEE7EE1F4C99A657216173F /* OIDErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDErrorUtilities.h; path = Source/AppAuthCore/OIDErrorUtilities.h; sourceTree = ""; }; - B59E3D873866C39664CB30174866449B /* OperationQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "OperationQueue+Alamofire.swift"; path = "Source/OperationQueue+Alamofire.swift"; sourceTree = ""; }; - B7533BFC6D55BBEF3F45A12902E10F09 /* GTMAppAuth.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMAppAuth.release.xcconfig; sourceTree = ""; }; - B9982899E8FE87F5B64020CE84061947 /* ParameterEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoder.swift; path = Source/ParameterEncoder.swift; sourceTree = ""; }; - BA62556306FDB2FD351AD437EB05B564 /* OIDExternalUserAgentIOS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgentIOS.h; path = Source/AppAuth/iOS/OIDExternalUserAgentIOS.h; sourceTree = ""; }; - BB067DCA7F27D7F39C5A8BC8F34AE3E4 /* GIDConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDConfiguration.m; path = GoogleSignIn/Sources/GIDConfiguration.m; sourceTree = ""; }; - BC282B0859DD5E43670C045C8973786B /* GTMSessionFetcher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GTMSessionFetcher-dummy.m"; sourceTree = ""; }; - BF3B83BFDAA0CEB146D20429A86E9878 /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/RetryPolicy.swift; sourceTree = ""; }; + A535EE603DC5B219924402370B9F0CB9 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; + A595CF53BE5E77DF3C54CF3BA1E1F0DB /* fi.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fi.lproj; path = GoogleSignIn/Sources/Strings/fi.lproj; sourceTree = ""; }; + A71F1B4787250777C10AF2C19EA7A6BC /* NormalisedURLDomain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NormalisedURLDomain.swift; path = SuperTokensIOS/Classes/NormalisedURLDomain.swift; sourceTree = ""; }; + A87C8013324C663AB97337E76A79C45B /* tr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = tr.lproj; path = GoogleSignIn/Sources/Strings/tr.lproj; sourceTree = ""; }; + A967314A65E0B3F43A1AC0E076EB89F2 /* OIDExternalUserAgentCatalyst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDExternalUserAgentCatalyst.m; path = Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.m; sourceTree = ""; }; + AA463FECC95B09C914860DD44DC3C391 /* GIDConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDConfiguration.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h; sourceTree = ""; }; + AAD83C1D0792CF3EBC7B2A9FB4EC28C1 /* OIDClientMetadataParameters.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDClientMetadataParameters.m; path = Source/AppAuthCore/OIDClientMetadataParameters.m; sourceTree = ""; }; + AB3E126B716607FB09A1615B309E368D /* hr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = hr.lproj; path = GoogleSignIn/Sources/Strings/hr.lproj; sourceTree = ""; }; + AB9820B091274E5B14E3158C8079AD9C /* OIDAuthorizationService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDAuthorizationService.m; path = Source/AppAuthCore/OIDAuthorizationService.m; sourceTree = ""; }; + ABAFD1E8B76CF20393253BCA461441F7 /* pt_BR.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pt_BR.lproj; path = GoogleSignIn/Sources/Strings/pt_BR.lproj; sourceTree = ""; }; + ADB98C94166C5330129280A21EB048E3 /* SuperTokensIOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SuperTokensIOS.debug.xcconfig; sourceTree = ""; }; + AF4EB2A027F72B811B8E303746C606E2 /* th.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = th.lproj; path = GoogleSignIn/Sources/Strings/th.lproj; sourceTree = ""; }; + AF8EC21E7F922DB35BEFDCAC607D83F8 /* SuperTokensURLProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuperTokensURLProtocol.swift; path = SuperTokensIOS/Classes/SuperTokensURLProtocol.swift; sourceTree = ""; }; + AFAD46CCF416B165F1F10531D2E22349 /* GIDCallbackQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDCallbackQueue.h; path = GoogleSignIn/Sources/GIDCallbackQueue.h; sourceTree = ""; }; + B05D539B5F5382F439C1168E227ACEEE /* EventMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventMonitor.swift; path = Source/EventMonitor.swift; sourceTree = ""; }; + B10303AC6A1CEFE70F54BA8F36B0F5CB /* OIDScopeUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDScopeUtilities.h; path = Source/AppAuthCore/OIDScopeUtilities.h; sourceTree = ""; }; + B24F4F917318857C2491FFE2D6E46AD0 /* google.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = google.png; path = GoogleSignIn/Sources/Resources/google.png; sourceTree = ""; }; + B296AB3D216F584907787EED50AC4516 /* Alamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.release.xcconfig; sourceTree = ""; }; + B407E7C085D68A3D55F0657E03679EC7 /* hu.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = hu.lproj; path = GoogleSignIn/Sources/Strings/hu.lproj; sourceTree = ""; }; + B46DAD64A0EE7B43A1111025A8F76448 /* NormalisedURLPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NormalisedURLPath.swift; path = SuperTokensIOS/Classes/NormalisedURLPath.swift; sourceTree = ""; }; + B475DDEE90F6E4BCBEFBAC05CD54478D /* GTMAppAuth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GTMAppAuth-dummy.m"; sourceTree = ""; }; + B52A72B91DF3FEDE7472A9BF7BBA2F20 /* AppAuthCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AppAuthCore.h; path = Source/AppAuthCore.h; sourceTree = ""; }; + B57533C36D3951675E075226AADDBED4 /* OIDTokenUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDTokenUtilities.h; path = Source/AppAuthCore/OIDTokenUtilities.h; sourceTree = ""; }; + B59B0CB61227B1F4DCB50DEA067C7E32 /* GIDMDMPasscodeCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDMDMPasscodeCache.m; path = GoogleSignIn/Sources/GIDMDMPasscodeCache.m; sourceTree = ""; }; + B6AED7F57300DC710D6B6A76CA7D8978 /* AppAuth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AppAuth-dummy.m"; sourceTree = ""; }; + B842AB1AEAD495798C4429369FF1F57F /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; + B8AD8B8B6B7FB0B50B4329BC97BE5BB5 /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Source/RedirectHandler.swift; sourceTree = ""; }; + B9A23AA6818E9342709F091DBD080C21 /* OIDExternalUserAgentCatalyst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgentCatalyst.h; path = Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.h; sourceTree = ""; }; + BB66BEB5D25130C73B19F93D822C3198 /* es.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = es.lproj; path = GoogleSignIn/Sources/Strings/es.lproj; sourceTree = ""; }; + BBB0DDA308AC5FBD1B38DBE86106E42B /* GIDAuthStateMigration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDAuthStateMigration.m; path = GoogleSignIn/Sources/GIDAuthStateMigration.m; sourceTree = ""; }; + BBBC81D2AF35787348E0E907B0EFB6AC /* OIDAuthState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthState.h; path = Source/AppAuthCore/OIDAuthState.h; sourceTree = ""; }; + BC0000B2E8CA7CF89E4FB2EE8D543FD8 /* GTMKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMKeychain.h; path = GTMAppAuth/Sources/Public/GTMAppAuth/GTMKeychain.h; sourceTree = ""; }; + BC0F3C2D7E5D8D1B9C4A1FF06249DE51 /* GIDMDMPasscodeCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDMDMPasscodeCache.h; path = GoogleSignIn/Sources/GIDMDMPasscodeCache.h; sourceTree = ""; }; + BC3693429DB424D692BF2023C3D39B5E /* el.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = el.lproj; path = GoogleSignIn/Sources/Strings/el.lproj; sourceTree = ""; }; + BDBB32C913397C07021E24595A1EF343 /* google@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "google@3x.png"; path = "GoogleSignIn/Sources/Resources/google@3x.png"; sourceTree = ""; }; + BE6A7456B36F19DB9B35459631B2250E /* OIDFieldMapping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDFieldMapping.h; path = Source/AppAuthCore/OIDFieldMapping.h; sourceTree = ""; }; + BE7FD80BE0F92C8F6D4CFD337674AC8A /* ms.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ms.lproj; path = GoogleSignIn/Sources/Strings/ms.lproj; sourceTree = ""; }; + BF676A1975CB9D6631E1A44FCFB3AB68 /* Version.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Version.swift; path = SuperTokensIOS/Classes/Version.swift; sourceTree = ""; }; C1998E0D8085221AD87F89B614C10E52 /* GTMSessionFetcher */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GTMSessionFetcher; path = GTMSessionFetcher.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C1AC345CB1DE954612F6136B0F613A50 /* StringEncoding+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "StringEncoding+Alamofire.swift"; path = "Source/StringEncoding+Alamofire.swift"; sourceTree = ""; }; - C1D1A7350157BF190A2A52220B973E6C /* fr_CA.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fr_CA.lproj; path = GoogleSignIn/Sources/Strings/fr_CA.lproj; sourceTree = ""; }; - C291C5F7B45CA9AC9CBB9CEFB3CD47BD /* URLEncodedFormEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLEncodedFormEncoder.swift; path = Source/URLEncodedFormEncoder.swift; sourceTree = ""; }; - C44778C7AB804DAB5C5543EEB4EB728E /* en_GB.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en_GB.lproj; path = GoogleSignIn/Sources/Strings/en_GB.lproj; sourceTree = ""; }; - C5B40328DDF6D57D6FD0414A89A24E55 /* OIDURLQueryComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDURLQueryComponent.m; path = Source/AppAuthCore/OIDURLQueryComponent.m; sourceTree = ""; }; - C697AFC91715222DD4118F84B5C92D1F /* URLRequest+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Alamofire.swift"; path = "Source/URLRequest+Alamofire.swift"; sourceTree = ""; }; - C885AE596BF162224C7F68FA77C5BF73 /* GIDAuthentication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDAuthentication.m; path = GoogleSignIn/Sources/GIDAuthentication.m; sourceTree = ""; }; - C8BAA6E46A55EDDA37015EF139AD5C41 /* GIDProfileData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDProfileData.m; path = GoogleSignIn/Sources/GIDProfileData.m; sourceTree = ""; }; + C32D6787FEBC3216E7FEADD32AC5D09E /* GIDMDMPasscodeState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDMDMPasscodeState.m; path = GoogleSignIn/Sources/GIDMDMPasscodeState.m; sourceTree = ""; }; + C455BE79450278BD2B31E9C16CAC0CCE /* GIDSignInInternalOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInInternalOptions.h; path = GoogleSignIn/Sources/GIDSignInInternalOptions.h; sourceTree = ""; }; + C4AADAC1FBCE00CFDAAB5AAC9B002C0D /* xcbeautify.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = xcbeautify.release.xcconfig; sourceTree = ""; }; + C5AB73319CC688C535E401DA635DD853 /* MultipartUpload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartUpload.swift; path = Source/MultipartUpload.swift; sourceTree = ""; }; + C64B085F0C01F6EFB0A537416501AEE4 /* GTMSessionFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcher.m; path = Sources/Core/GTMSessionFetcher.m; sourceTree = ""; }; + C7B0E4A5AAFEFCDE8CD9F960F2AF2B34 /* URLConvertible+URLRequestConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLConvertible+URLRequestConvertible.swift"; path = "Source/URLConvertible+URLRequestConvertible.swift"; sourceTree = ""; }; + C7E7F6A0A818CAB4B2BA1FCAF2680F79 /* OIDTokenRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDTokenRequest.h; path = Source/AppAuthCore/OIDTokenRequest.h; sourceTree = ""; }; + C84581CF9A07A3CAFA068585A85B8001 /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fr.lproj; path = GoogleSignIn/Sources/Strings/fr.lproj; sourceTree = ""; }; + C906FD5FEE7106690E54B394088843F8 /* AppAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AppAuth.h; path = Source/AppAuth.h; sourceTree = ""; }; C9384835461C91C0FFA801AF50DF5393 /* Pods-iosenv.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iosenv.release.xcconfig"; sourceTree = ""; }; - C9F0868B455D7665848B531851E20966 /* fi.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fi.lproj; path = GoogleSignIn/Sources/Strings/fi.lproj; sourceTree = ""; }; - CA1C01D912CB74DBA133DD86A39F71F0 /* NSBundle+GID3PAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+GID3PAdditions.m"; path = "GoogleSignIn/Sources/NSBundle+GID3PAdditions.m"; sourceTree = ""; }; - CEBD36ED4E613C12C3D86FC40AC35F58 /* hr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = hr.lproj; path = GoogleSignIn/Sources/Strings/hr.lproj; sourceTree = ""; }; - CEC11B4E057CF8344B4306870BC1690B /* OIDExternalUserAgentIOSCustomBrowser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDExternalUserAgentIOSCustomBrowser.m; path = Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.m; sourceTree = ""; }; - CEC31FA643F859A3A701F0DB69A429C3 /* OIDAuthState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDAuthState.m; path = Source/AppAuthCore/OIDAuthState.m; sourceTree = ""; }; - CF785ABD1B111F3A644CF38B56C7A62D /* Roboto-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Roboto-Bold.ttf"; path = "GoogleSignIn/Sources/Resources/Roboto-Bold.ttf"; sourceTree = ""; }; - D1D1AAB4D27828C4EA1BC81A044ECA4A /* OIDRegistrationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDRegistrationRequest.m; path = Source/AppAuthCore/OIDRegistrationRequest.m; sourceTree = ""; }; - D23CD1A37BA242DBA37985879A90DD40 /* OIDAuthStateChangeDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthStateChangeDelegate.h; path = Source/AppAuthCore/OIDAuthStateChangeDelegate.h; sourceTree = ""; }; - D2BFFDAA3AE5639BE0A0E674B2FEAE81 /* google@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "google@2x.png"; path = "GoogleSignIn/Sources/Resources/google@2x.png"; sourceTree = ""; }; - D2C0133F3DBC43662E450E74E1616EDC /* GIDGoogleUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDGoogleUser.m; path = GoogleSignIn/Sources/GIDGoogleUser.m; sourceTree = ""; }; - D38CBA514646EAF2A760C9D7FCBEB9CC /* ko.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ko.lproj; path = GoogleSignIn/Sources/Strings/ko.lproj; sourceTree = ""; }; - D5CA3841E05C917530B99A65DE619EF6 /* Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concurrency.swift; path = Source/Concurrency.swift; sourceTree = ""; }; - D6B019C374FD3713CC5A31E3EFD0C80D /* HTTPHeaders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaders.swift; path = Source/HTTPHeaders.swift; sourceTree = ""; }; - D7E79E828A0A08DFD668D6173407DF20 /* SuperTokens.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuperTokens.swift; path = SuperTokensIOS/Classes/SuperTokens.swift; sourceTree = ""; }; - D87554B1B740B4380B7096E31C4903FE /* SuperTokensIOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SuperTokensIOS-umbrella.h"; sourceTree = ""; }; - D9422A75E0B91F2D5DED351D29372877 /* google.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = google.png; path = GoogleSignIn/Sources/Resources/google.png; sourceTree = ""; }; - DA9FAEC76E3039DA1A65C9A94BAB0CB9 /* OIDAuthStateErrorDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthStateErrorDelegate.h; path = Source/AppAuthCore/OIDAuthStateErrorDelegate.h; sourceTree = ""; }; - DBB0FF815FC476F954B42D7C8C8C7993 /* GIDGoogleUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDGoogleUser.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h; sourceTree = ""; }; + C955E0A7D140FCD87AD4017F1FCE8133 /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = Source/Combine.swift; sourceTree = ""; }; + CBAED6817EA9601579B88730267C2E53 /* hi.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = hi.lproj; path = GoogleSignIn/Sources/Strings/hi.lproj; sourceTree = ""; }; + CC53FF5CE0BDAEF0889522098E05658A /* GTMAppAuthFetcherAuthorization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMAppAuthFetcherAuthorization.m; path = GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization.m; sourceTree = ""; }; + CCC31A8DB942D60A2E3B6216CD7A94DC /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationInterceptor.swift; path = Source/AuthenticationInterceptor.swift; sourceTree = ""; }; + CCD87507D7EE8E4883E36597B1411ADA /* OperationQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "OperationQueue+Alamofire.swift"; path = "Source/OperationQueue+Alamofire.swift"; sourceTree = ""; }; + D0056BBBBAC4FEE1026B42FCB39A03CE /* UnauthorisedResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnauthorisedResponse.swift; path = SuperTokensIOS/Classes/UnauthorisedResponse.swift; sourceTree = ""; }; + D03987150C256AB2DFF9CC255319F7DA /* SuperTokensIOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SuperTokensIOS-dummy.m"; sourceTree = ""; }; + D22A0B140E1C3E6715AEE64F7D617C40 /* OIDScopes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDScopes.h; path = Source/AppAuthCore/OIDScopes.h; sourceTree = ""; }; + D311C6082EC32937665FB07904AF4B5D /* RequestCompression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestCompression.swift; path = Source/RequestCompression.swift; sourceTree = ""; }; + D5AD863ED32DA85F13F9CD2C9C42EB0D /* OIDExternalUserAgentIOS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDExternalUserAgentIOS.m; path = Source/AppAuth/iOS/OIDExternalUserAgentIOS.m; sourceTree = ""; }; + D997A29E772673FC9061FFB85712DEB1 /* OIDRegistrationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDRegistrationRequest.m; path = Source/AppAuthCore/OIDRegistrationRequest.m; sourceTree = ""; }; + D99B127F79B59B5F71275975DCED8712 /* GIDSignInButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInButton.m; path = GoogleSignIn/Sources/GIDSignInButton.m; sourceTree = ""; }; + DA0B819B83275F43E3525C2F189239C9 /* SuperTokens.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuperTokens.swift; path = SuperTokensIOS/Classes/SuperTokens.swift; sourceTree = ""; }; + DB3F9CE92891B57FC71505C801C18B0E /* GIDMDMPasscodeState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDMDMPasscodeState.h; path = GoogleSignIn/Sources/GIDMDMPasscodeState.h; sourceTree = ""; }; DC4002FAD1F184BEC088C43C149881FD /* Pods-iosenv-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-iosenv-acknowledgements.markdown"; sourceTree = ""; }; - DC550077196F84C06346647B08227C87 /* OIDFieldMapping.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDFieldMapping.m; path = Source/AppAuthCore/OIDFieldMapping.m; sourceTree = ""; }; - DCAF663E062B54411D5F18532A63CE75 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; - DCF1AA10327C6A87D4DB5A324BB1F33B /* Result+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Result+Alamofire.swift"; path = "Source/Result+Alamofire.swift"; sourceTree = ""; }; - DD2B224F60C0E6F2221EAF7E6213323F /* CachedResponseHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedResponseHandler.swift; path = Source/CachedResponseHandler.swift; sourceTree = ""; }; - DECC97FE572561C96DEC87BCD224D630 /* GIDEMMErrorHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDEMMErrorHandler.h; path = GoogleSignIn/Sources/GIDEMMErrorHandler.h; sourceTree = ""; }; - DF3DB6E1254D068D7F14E58516D7A427 /* OIDExternalUserAgentCatalyst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgentCatalyst.h; path = Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.h; sourceTree = ""; }; - DF77BD406A41DCDDB5FBB890F2CE8BAD /* GTMAppAuthFetcherAuthorization+Keychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GTMAppAuthFetcherAuthorization+Keychain.m"; path = "GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization+Keychain.m"; sourceTree = ""; }; - E02E0129A8F642C094C47BB8A96ECACD /* OIDEndSessionResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDEndSessionResponse.m; path = Source/AppAuthCore/OIDEndSessionResponse.m; sourceTree = ""; }; - E07AEDEC313F31C39D4EBE2C4FDB0BE1 /* GIDAuthStateMigration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDAuthStateMigration.h; path = GoogleSignIn/Sources/GIDAuthStateMigration.h; sourceTree = ""; }; + DCAA5C75ABE4D058107776635665D0F8 /* OIDErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDErrorUtilities.h; path = Source/AppAuthCore/OIDErrorUtilities.h; sourceTree = ""; }; + DD5D0E867A70E89349A3436638C256D3 /* uk.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = uk.lproj; path = GoogleSignIn/Sources/Strings/uk.lproj; sourceTree = ""; }; + DF1C633CB80A588C64D28CAB1976C675 /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/HTTPMethod.swift; sourceTree = ""; }; + E18C333DB085E831B50BE626B76394BF /* GIDSignInResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInResult.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h; sourceTree = ""; }; E23BC8198571E4A574C021C4055A65DC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - E2E1186C5BAD3BFD1E4CE4E1EA3564DF /* GTMAppAuth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GTMAppAuth-dummy.m"; sourceTree = ""; }; - E341F34CFC3E3EAD2C9B887D5FE4FE09 /* GIDMDMPasscodeCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDMDMPasscodeCache.m; path = GoogleSignIn/Sources/GIDMDMPasscodeCache.m; sourceTree = ""; }; - E5243483643BAD91A3355E88FFF822AB /* SuperTokensURLProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuperTokensURLProtocol.swift; path = SuperTokensIOS/Classes/SuperTokensURLProtocol.swift; sourceTree = ""; }; + E2A3C6DE4070A7BBB1DBC8A44835EEB0 /* OIDURLQueryComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDURLQueryComponent.m; path = Source/AppAuthCore/OIDURLQueryComponent.m; sourceTree = ""; }; + E2F02D013E4A3D70D27C357C9032F3E7 /* GIDSignInPreferences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInPreferences.h; path = GoogleSignIn/Sources/GIDSignInPreferences.h; sourceTree = ""; }; E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn-GoogleSignIn */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "GoogleSignIn-GoogleSignIn"; path = GoogleSignIn.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - E622FFB7E845C75D020FDF8A983F5F94 /* es.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = es.lproj; path = GoogleSignIn/Sources/Strings/es.lproj; sourceTree = ""; }; - EAFBC93C94B1FA5BC2632040F5FE2CCD /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; - ED3445F0ECC96157D981924BE98575F4 /* SuperTokensIOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SuperTokensIOS-prefix.pch"; sourceTree = ""; }; - ED8C73EA9615C47CD1D0EB2FA7ACA726 /* OIDScopeUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDScopeUtilities.h; path = Source/AppAuthCore/OIDScopeUtilities.h; sourceTree = ""; }; - EE213852442118EB9767760322EF7332 /* NSBundle+GID3PAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+GID3PAdditions.h"; path = "GoogleSignIn/Sources/NSBundle+GID3PAdditions.h"; sourceTree = ""; }; - EEF68CADA44A4136BA3E134EDD393F46 /* GIDScopes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDScopes.m; path = GoogleSignIn/Sources/GIDScopes.m; sourceTree = ""; }; - EF81A9E5A14D081FB7DEE5F75FBFE504 /* GIDMDMPasscodeState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDMDMPasscodeState_Private.h; path = GoogleSignIn/Sources/GIDMDMPasscodeState_Private.h; sourceTree = ""; }; - F0C0B91F8193429751D8935E6942F484 /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = ""; }; - F1D121CE9ADDC56F0F93BB0A70F399D4 /* String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = String.swift; path = SuperTokensIOS/Classes/extensions/String.swift; sourceTree = ""; }; - F25A92CF4A9B98935221B8B1065EFA5A /* OIDRegistrationResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDRegistrationResponse.h; path = Source/AppAuthCore/OIDRegistrationResponse.h; sourceTree = ""; }; - F3D7B1A5C31C4D3D66ABC9EE2909C5E0 /* xcbeautify.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = xcbeautify.release.xcconfig; sourceTree = ""; }; + E6E0917183B2B05C7E16249C947178CE /* HTTPHeaders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaders.swift; path = Source/HTTPHeaders.swift; sourceTree = ""; }; + E8354AF9316FA45C44209CAB9DE7454C /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; + ED9A9FF68C4DAFDE666E7F927ECD3BC2 /* SuperTokensIOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SuperTokensIOS.release.xcconfig; sourceTree = ""; }; + EE0832BD303D1DB93DC8D4121CD72F75 /* GIDGoogleUser_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDGoogleUser_Private.h; path = GoogleSignIn/Sources/GIDGoogleUser_Private.h; sourceTree = ""; }; + EE0EB6685A113896FD586A7BC83996D6 /* OIDDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDDefines.h; path = Source/AppAuthCore/OIDDefines.h; sourceTree = ""; }; + EEC18560BA9B040695E3158DA0C72B26 /* GIDEMMSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDEMMSupport.h; path = GoogleSignIn/Sources/GIDEMMSupport.h; sourceTree = ""; }; + EF99FAB2EB7EC03DDBD501546FD1B680 /* GTMSessionFetcherLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherLogging.h; path = Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h; sourceTree = ""; }; + F06D826E6B68B02B6FB933553EA384FB /* OIDTokenResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDTokenResponse.h; path = Source/AppAuthCore/OIDTokenResponse.h; sourceTree = ""; }; + F07AD79FDD4CC180D3D45F8237B8E7A3 /* OIDError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDError.m; path = Source/AppAuthCore/OIDError.m; sourceTree = ""; }; + F1ADF02BAFAD47B9D038DAEB55772C1F /* GIDSignInResult_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInResult_Private.h; path = GoogleSignIn/Sources/GIDSignInResult_Private.h; sourceTree = ""; }; + F2144E3E950187D75C343D5AA819EE6D /* GTMOAuth2KeychainCompatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMOAuth2KeychainCompatibility.m; path = GTMAppAuth/Sources/GTMOAuth2KeychainCompatibility.m; sourceTree = ""; }; F43D1802C8DC5245B1D04E5CB47E7B25 /* Pods-iosenv */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-iosenv"; path = Pods_iosenv.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F5C7CE6FB34DC6236E51F3C3E44403AB /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; - F62864FA1123E60873A6281C7A61190F /* OIDAuthState+IOS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIDAuthState+IOS.h"; path = "Source/AppAuth/iOS/OIDAuthState+IOS.h"; sourceTree = ""; }; - F6EA724D360E0FD39B466D53BFDEB4F4 /* OIDScopes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDScopes.m; path = Source/AppAuthCore/OIDScopes.m; sourceTree = ""; }; - F7CD19358355103FC1B1EF543679743D /* OIDClientMetadataParameters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDClientMetadataParameters.h; path = Source/AppAuthCore/OIDClientMetadataParameters.h; sourceTree = ""; }; - FC4D2EDB7AA35254CE463C2D9196BC10 /* GoogleSignIn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GoogleSignIn.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GoogleSignIn.h; sourceTree = ""; }; - FC5EE85E15172763BCCBFE5A5CE4E2E4 /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationInterceptor.swift; path = Source/AuthenticationInterceptor.swift; sourceTree = ""; }; + F44FA006730E4C1EE4C0934853BF3B90 /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/RetryPolicy.swift; sourceTree = ""; }; + F5F1EA38C36E6D6E5FD18F5003488B00 /* OIDGrantTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDGrantTypes.m; path = Source/AppAuthCore/OIDGrantTypes.m; sourceTree = ""; }; + F73C40240F53C808BABD0A0009E41D74 /* OIDAuthStateChangeDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthStateChangeDelegate.h; path = Source/AppAuthCore/OIDAuthStateChangeDelegate.h; sourceTree = ""; }; + F8D095D4EFF13BA45D7E21088FBAC87F /* SuperTokensIOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SuperTokensIOS-umbrella.h"; sourceTree = ""; }; + FA5B14CB58518BEF5DC520D1FC099251 /* OIDIDToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDIDToken.h; path = Source/AppAuthCore/OIDIDToken.h; sourceTree = ""; }; + FA684F565AC52321785C34B8114E7D31 /* OIDEndSessionRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDEndSessionRequest.m; path = Source/AppAuthCore/OIDEndSessionRequest.m; sourceTree = ""; }; + FB4DEB0F920E38C75929CFFAFAF0F721 /* GIDSignInResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInResult.m; path = GoogleSignIn/Sources/GIDSignInResult.m; sourceTree = ""; }; + FC88463E58B60899EBB3512FA2C1B71C /* AppAuth.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppAuth.debug.xcconfig; sourceTree = ""; }; + FD24C5A6481CE6D7932F0894089EA82F /* OIDExternalUserAgentSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgentSession.h; path = Source/AppAuthCore/OIDExternalUserAgentSession.h; sourceTree = ""; }; FD56AB51475BC5F592781EE2692D1412 /* GoogleSignIn */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleSignIn; path = GoogleSignIn.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FDFA27684F7EF8FA6DF0BCD78E2DD7F0 /* GIDProfileData_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDProfileData_Private.h; path = GoogleSignIn/Sources/GIDProfileData_Private.h; sourceTree = ""; }; - FF8184FD92033DDFD49FF96162F53B06 /* OIDEndSessionRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDEndSessionRequest.m; path = Source/AppAuthCore/OIDEndSessionRequest.m; sourceTree = ""; }; + FD662F3AC3A1AA8F2023C1A66734127A /* zh_CN.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = zh_CN.lproj; path = GoogleSignIn/Sources/Strings/zh_CN.lproj; sourceTree = ""; }; + FE5DED812F6F33F1B4E8D07DEFFA61A6 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; + FFA57132E1069FD41114AA7A67A9F3B2 /* GTMSessionFetcherService+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GTMSessionFetcherService+Internal.h"; path = "Sources/Core/GTMSessionFetcherService+Internal.h"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 15DC142A7EE833251AA37FC8E2B8E01F /* Frameworks */ = { + 10FC827FCACE447AC4576DF39B3AD68B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7B068137A8925891446203B5D3D6A4ED /* CFNetwork.framework in Frameworks */, - 0F4037DBF307AC8058BD0A3D35C7E7E9 /* Foundation.framework in Frameworks */, + E3EEB74B9EC99EBB5382B68E218BF63C /* Foundation.framework in Frameworks */, + 40A6BD2DE60503EF0D4B591FA72FBF54 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -663,19 +685,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2DB4560293A4030C46B4728187F95E48 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B47E46A9AE061B331AA5A111D9D75835 /* CoreGraphics.framework in Frameworks */, - E503CCD2253A3675FF0487760DAA134F /* CoreText.framework in Frameworks */, - 40F9F77138F6863683630F3D6EF49A1C /* Foundation.framework in Frameworks */, - 7ECA1AE07A77457A0CA3EC39ED873274 /* LocalAuthentication.framework in Frameworks */, - 98DD160EA700CD6BAFB6A0D28650FB50 /* Security.framework in Frameworks */, - 3ABE01E514CDF3463D30BD6942CE3331 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 302506E051712082C0B5E6E92B04546C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -693,19 +702,25 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 638435ADE77A3B2B34EBAE569CA625A4 /* Frameworks */ = { + 5BF6E64D3157435E5797A5278584A4DC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B99C90E4189B0520A7EE07EC214EBB97 /* Foundation.framework in Frameworks */, - C9514906ECA6C0CF90BA47074C2A4CE9 /* Security.framework in Frameworks */, + D7BCBE1EB4A638403C265CE2199EFF1B /* CFNetwork.framework in Frameworks */, + 8E85763AE29BEF0A46EE875B8F069E8E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8C0B997889FCB0F9560A6D2BD0A87A36 /* Frameworks */ = { + D37776EE31012C0DC3ACACC053C3D870 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 8D9DD3BFAECC99954598490B34B04EAC /* CoreGraphics.framework in Frameworks */, + A75576711AB8CC3BF861A187101CCF6E /* CoreText.framework in Frameworks */, + 9B291E6D6C39E0075D71CE5C3F15410C /* Foundation.framework in Frameworks */, + 1E8E4003C67D1BB3C9661AFD5825DABF /* LocalAuthentication.framework in Frameworks */, + D68FC1BE3E727BDC1E96521FB2542175 /* Security.framework in Frameworks */, + 80E535AEBF73EA88406F76E631199045 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -718,270 +733,180 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + FB663AFDD79516ADE3660A3DDA3C2588 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 09503166B3F354E5745CBF14E6328F8A /* Support Files */ = { - isa = PBXGroup; - children = ( - 2035A8180995C17A53E3286B56E968BE /* AppAuth.modulemap */, - 4C9349B02D7B2091AC651BC675B9B9BE /* AppAuth-dummy.m */, - 472B1B52C47CCB91E64A0C80727C84CE /* AppAuth-Info.plist */, - 0A25BD0003ED28611136C586AB7F54FF /* AppAuth-prefix.pch */, - 5D8FFB0C6AB3764B2E7D164F702EFA59 /* AppAuth-umbrella.h */, - 4C0D12CD06550E2888C6789085D6AB3D /* AppAuth.debug.xcconfig */, - B3B87127327A7A2F96237C4CE34C30A3 /* AppAuth.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AppAuth"; - sourceTree = ""; - }; - 12F37D8AA9351CA666C89634482AEAD6 /* GoogleSignIn */ = { - isa = PBXGroup; - children = ( - 8CDCB6DCA3917C2E1A0AFDE3B4BBDD1C /* GIDAuthentication.h */, - C885AE596BF162224C7F68FA77C5BF73 /* GIDAuthentication.m */, - 6B111FC9D0CFDA3B330483B810F1DB65 /* GIDAuthentication_Private.h */, - E07AEDEC313F31C39D4EBE2C4FDB0BE1 /* GIDAuthStateMigration.h */, - 33A66DE80CB8FDA322EE3D0C27C10645 /* GIDAuthStateMigration.m */, - 543543B1C483D89C89CB776C88E73FAA /* GIDCallbackQueue.h */, - 31F05AD4300E1AC79CA2AF3DEECCEAC4 /* GIDCallbackQueue.m */, - 2992516F5A51D4BCE7B3478802318908 /* GIDConfiguration.h */, - BB067DCA7F27D7F39C5A8BC8F34AE3E4 /* GIDConfiguration.m */, - DECC97FE572561C96DEC87BCD224D630 /* GIDEMMErrorHandler.h */, - 8132A8703769D44948D8C9A53171EC6A /* GIDEMMErrorHandler.m */, - DBB0FF815FC476F954B42D7C8C8C7993 /* GIDGoogleUser.h */, - D2C0133F3DBC43662E450E74E1616EDC /* GIDGoogleUser.m */, - 5FA033E400C6355B102E6CE66AF2344D /* GIDGoogleUser_Private.h */, - 471E5D934999CF9325640FD165371A2F /* GIDMDMPasscodeCache.h */, - E341F34CFC3E3EAD2C9B887D5FE4FE09 /* GIDMDMPasscodeCache.m */, - 331220001981F1767E3477FCDBEA4778 /* GIDMDMPasscodeState.h */, - 6C6447C4D5454141D579324570AAABEE /* GIDMDMPasscodeState.m */, - EF81A9E5A14D081FB7DEE5F75FBFE504 /* GIDMDMPasscodeState_Private.h */, - 94F653B993D6CF93573E2632BC005D48 /* GIDProfileData.h */, - C8BAA6E46A55EDDA37015EF139AD5C41 /* GIDProfileData.m */, - FDFA27684F7EF8FA6DF0BCD78E2DD7F0 /* GIDProfileData_Private.h */, - 5A300E136EF83DD50531DBEB845A86B8 /* GIDScopes.h */, - EEF68CADA44A4136BA3E134EDD393F46 /* GIDScopes.m */, - 37B499C6BA0FE65F167F043C8225C5BB /* GIDSignIn.h */, - 0611D06D75A341CCCB574B082EFECFA5 /* GIDSignIn.m */, - 34E82ECB3E0951051FF0AD6AABC4B926 /* GIDSignIn_Private.h */, - 9CCF638969B4FE5625CE3027AB4AB234 /* GIDSignInButton.h */, - 67C7973912F1E2C3DE34C5812E790A69 /* GIDSignInButton.m */, - 93D127749CFC36FBAABBD6E9161D1DB1 /* GIDSignInCallbackSchemes.h */, - 3D6708E16D812F20226E5001DEE943C6 /* GIDSignInCallbackSchemes.m */, - 7014E052E0F1A35238F6B34C3A8C1F07 /* GIDSignInInternalOptions.h */, - 052C561F5A6BB218A7139AC77AC34C43 /* GIDSignInInternalOptions.m */, - 58D9115A10337BA728DD3C3D7A1781D3 /* GIDSignInPreferences.h */, - 8A90A33A42278E70A581E165F26934DB /* GIDSignInPreferences.m */, - 0442704984F61F6704A80A7149B4ACDF /* GIDSignInStrings.h */, - 17FF17B13120A125AE8DF365A6364C22 /* GIDSignInStrings.m */, - FC4D2EDB7AA35254CE463C2D9196BC10 /* GoogleSignIn.h */, - EE213852442118EB9767760322EF7332 /* NSBundle+GID3PAdditions.h */, - CA1C01D912CB74DBA133DD86A39F71F0 /* NSBundle+GID3PAdditions.m */, - A3D8859094513A89BEE34D5187FC16F4 /* Resources */, - 51E5A5E18E7F16838682551750D6C0E6 /* Support Files */, - ); - name = GoogleSignIn; - path = GoogleSignIn; - sourceTree = ""; - }; - 148A38A62C6438CCEBA8CBF42283A296 /* Support Files */ = { - isa = PBXGroup; - children = ( - B444131D5BD83B6222ED349A034D998A /* xcbeautify.debug.xcconfig */, - F3D7B1A5C31C4D3D66ABC9EE2909C5E0 /* xcbeautify.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/xcbeautify"; - sourceTree = ""; - }; - 16A3C2BF4FF9202A70D49FCCC58D43B2 /* xcbeautify */ = { + 02E1B8A6DC937831CE74E41B6FAEB92D /* xcbeautify */ = { isa = PBXGroup; children = ( - 148A38A62C6438CCEBA8CBF42283A296 /* Support Files */, + 692852D02D1DF07C8BB896282710540F /* Support Files */, ); name = xcbeautify; path = xcbeautify; sourceTree = ""; }; - 2337FA2748F1276EA97EE447E39ACED8 /* Support Files */ = { - isa = PBXGroup; - children = ( - 00A86C4680902B51C6A3020A8279BCCC /* GTMAppAuth.modulemap */, - E2E1186C5BAD3BFD1E4CE4E1EA3564DF /* GTMAppAuth-dummy.m */, - 732090922AC2DA0D80C8A4185E53429B /* GTMAppAuth-Info.plist */, - 613CCA46A00830AB5977AC7162748F4E /* GTMAppAuth-umbrella.h */, - B1E437536B4D6405E884A3936DE1547E /* GTMAppAuth.debug.xcconfig */, - B7533BFC6D55BBEF3F45A12902E10F09 /* GTMAppAuth.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/GTMAppAuth"; - sourceTree = ""; - }; - 28E59EB78175AF8119D870582A60B8A8 /* Support Files */ = { + 11EF48CA86B5BBAF7F43D9A9D05BBDD2 /* Support Files */ = { isa = PBXGroup; children = ( - 4C4D47F21D57E27093109928AEF63862 /* GTMSessionFetcher.modulemap */, - BC282B0859DD5E43670C045C8973786B /* GTMSessionFetcher-dummy.m */, - 8048F225F3F92426E518BF1F5BEF599E /* GTMSessionFetcher-Info.plist */, - AA44611746FA98F2EE7B843767A7CDB2 /* GTMSessionFetcher-umbrella.h */, - 5961504C8AE232249CCBE2FC1D115660 /* GTMSessionFetcher.debug.xcconfig */, - ADAC3B2A8F9BA263360CCFBE8939D1EC /* GTMSessionFetcher.release.xcconfig */, + 56956C9B2460B2B1E3720689FF202770 /* SuperTokensIOS.modulemap */, + D03987150C256AB2DFF9CC255319F7DA /* SuperTokensIOS-dummy.m */, + 1C4FC60D5C768B4FBC93C759877D195D /* SuperTokensIOS-Info.plist */, + 5712629DFF2FE76E2B58DCE78BBAAA99 /* SuperTokensIOS-prefix.pch */, + F8D095D4EFF13BA45D7E21088FBAC87F /* SuperTokensIOS-umbrella.h */, + ADB98C94166C5330129280A21EB048E3 /* SuperTokensIOS.debug.xcconfig */, + ED9A9FF68C4DAFDE666E7F927ECD3BC2 /* SuperTokensIOS.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/GTMSessionFetcher"; + path = "../Target Support Files/SuperTokensIOS"; sourceTree = ""; }; - 372A54A44DD0CE81E18C5504CBDA5D3E /* SuperTokensIOS */ = { + 17F4A0FD5C8312E147A9D402DCAC9D33 /* GoogleSignIn */ = { isa = PBXGroup; children = ( - A1E39CEC5330337D23A6D3828084F937 /* AntiCSRF.swift */, - 02A89E315984A4903D14EBA8D7A02ECE /* Constants.swift */, - 01F8347741E0313E6120E5D094FB4A23 /* Dictionary.swift */, - 93D06956562AAC722DEE6B15FC6203E2 /* Error.swift */, - 003E13ECAC70880ED4CD4F69AA36DA53 /* FrontToken.swift */, - 69E31850168045356B64E2563B4A7DBB /* NormalisedURLDomain.swift */, - 103BA2BBE743197C8479FAB2350DB830 /* NormalisedURLPath.swift */, - F1D121CE9ADDC56F0F93BB0A70F399D4 /* String.swift */, - D7E79E828A0A08DFD668D6173407DF20 /* SuperTokens.swift */, - E5243483643BAD91A3355E88FFF822AB /* SuperTokensURLProtocol.swift */, - 4043F1DFF7129AD201D41C95C368356E /* UnauthorisedResponse.swift */, - 2E37481F12476FCA563F1EFA66945B0C /* Utils.swift */, - 621C061E86A6F87469DFE2601CA909C4 /* Version.swift */, - F60738866E15B3F6677ACA242F7D1420 /* Support Files */, + A3710A5607D67A11C7EA8D8036417001 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.h */, + 256E3D20ABAD2E2F55AEB553C12DC457 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.m */, + 27D8221F341791BFE521892A0D30C8CD /* GIDAuthentication.h */, + 7B0976E01D8977A603C2D872823EB66E /* GIDAuthentication.m */, + 0DD51569803C4345CB4228C6C6874358 /* GIDAuthStateMigration.h */, + BBB0DDA308AC5FBD1B38DBE86106E42B /* GIDAuthStateMigration.m */, + AFAD46CCF416B165F1F10531D2E22349 /* GIDCallbackQueue.h */, + 4E6BF1B6759096F78C168F4ABD1F3541 /* GIDCallbackQueue.m */, + AA463FECC95B09C914860DD44DC3C391 /* GIDConfiguration.h */, + 1862F66F34B9E3B89B71AB96D45D9D6A /* GIDConfiguration.m */, + 03C9D9F74CA41A48F375559ACA2D1A1F /* GIDEMMErrorHandler.h */, + 4D9977B12D514891899F6B373FB94A1F /* GIDEMMErrorHandler.m */, + EEC18560BA9B040695E3158DA0C72B26 /* GIDEMMSupport.h */, + 58AD983B488E57B792F28F86768E2A71 /* GIDEMMSupport.m */, + 62F8B5D1C2B8F48F210A06F9FD8CE05A /* GIDGoogleUser.h */, + 3DA2FE99A2BD3B1405A27B0C0F7C7903 /* GIDGoogleUser.m */, + EE0832BD303D1DB93DC8D4121CD72F75 /* GIDGoogleUser_Private.h */, + BC0F3C2D7E5D8D1B9C4A1FF06249DE51 /* GIDMDMPasscodeCache.h */, + B59B0CB61227B1F4DCB50DEA067C7E32 /* GIDMDMPasscodeCache.m */, + DB3F9CE92891B57FC71505C801C18B0E /* GIDMDMPasscodeState.h */, + C32D6787FEBC3216E7FEADD32AC5D09E /* GIDMDMPasscodeState.m */, + 26BB6DEEF5F0F34C22DE1B609E14F12C /* GIDMDMPasscodeState_Private.h */, + 6BBFDF2B2B5B3F6F6DC1880730FCA9CB /* GIDProfileData.h */, + 854F3343E8A89E287610F65E8B6A41E5 /* GIDProfileData.m */, + 548607007E8062D6715B4B89532F9720 /* GIDProfileData_Private.h */, + 8AA4A99401E1809336F8F11D002AFF15 /* GIDScopes.h */, + 9055F629002CF27F85C7E42E66CD1222 /* GIDScopes.m */, + 9CB603F9411354BD34E092CE3C014EC6 /* GIDSignIn.h */, + 9A0144709A70F84DCD3E65B4BBCDB3CF /* GIDSignIn.m */, + 9DBE9EB1C40A394E6D3B242F19A4B494 /* GIDSignIn_Private.h */, + 16C6C267F4EA5319380F32DB85C55F15 /* GIDSignInButton.h */, + D99B127F79B59B5F71275975DCED8712 /* GIDSignInButton.m */, + 2A9651D4CB41959D0F5276D27185EFA9 /* GIDSignInCallbackSchemes.h */, + 5A1493680B196DC35C8D026EE2BBFEFC /* GIDSignInCallbackSchemes.m */, + C455BE79450278BD2B31E9C16CAC0CCE /* GIDSignInInternalOptions.h */, + 0E15D027369ADC88AC71E8B0EFF55CCD /* GIDSignInInternalOptions.m */, + E2F02D013E4A3D70D27C357C9032F3E7 /* GIDSignInPreferences.h */, + 6682F8D28EBFBA4EB2C594A7E871FE97 /* GIDSignInPreferences.m */, + E18C333DB085E831B50BE626B76394BF /* GIDSignInResult.h */, + FB4DEB0F920E38C75929CFFAFAF0F721 /* GIDSignInResult.m */, + F1ADF02BAFAD47B9D038DAEB55772C1F /* GIDSignInResult_Private.h */, + 6BE60A56B6733E8EE0839D34A52AFAE4 /* GIDSignInStrings.h */, + 4B4EA8DE6D4D69AF9B4690F2D743786C /* GIDSignInStrings.m */, + 845C846F1C876536D2122F420CA207C4 /* GIDToken.h */, + A31F7BBADA5335D61D0976BCAFAE096B /* GIDToken.m */, + 29A480C9F8EB047DA0BC6A21ACD38819 /* GIDToken_Private.h */, + 9928F8F84767007A87BCE322555A902D /* GoogleSignIn.h */, + 483D806FC1EBC3DEDD4C8ED74E0DAF1E /* NSBundle+GID3PAdditions.h */, + A2D12F48690FC48034E7894F9E7844DA /* NSBundle+GID3PAdditions.m */, + 856FF20036642AA1BAFBA1E8064BBEB9 /* Resources */, + CA8B1692A176606750676F19A7F48D2D /* Support Files */, ); - name = SuperTokensIOS; - path = SuperTokensIOS; + name = GoogleSignIn; + path = GoogleSignIn; sourceTree = ""; }; - 51E5A5E18E7F16838682551750D6C0E6 /* Support Files */ = { + 1988058C68A72C692E8E2CC40290D33C /* Support Files */ = { isa = PBXGroup; children = ( - 536BE4BD4B1EE74434B72D90A4D8724B /* GoogleSignIn.modulemap */, - A3DFBD18C29DAFC3442D705EE455AEFF /* GoogleSignIn-dummy.m */, - 966FC6677A2E5A75B43E6FB2B1FED446 /* GoogleSignIn-Info.plist */, - 8DABF9926E4746EFF0E83DC2CDAD32AA /* GoogleSignIn-umbrella.h */, - 498B6CF33252D5D8251D927C1EEC0D7A /* GoogleSignIn.debug.xcconfig */, - 6C85CE2E525C346E2DC29D00C984BFB9 /* GoogleSignIn.release.xcconfig */, - 85F228E517D9BD90FBF96FEEFA9372AA /* ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist */, + 986702E8786CCEEEE687EFD62CC8A559 /* AppAuth.modulemap */, + B6AED7F57300DC710D6B6A76CA7D8978 /* AppAuth-dummy.m */, + 3AB91D8AAC7EAEA6AB4213B512C9E2CF /* AppAuth-Info.plist */, + 71CAA18234FED02F60EBFA0D2C9ED330 /* AppAuth-prefix.pch */, + 3E513753A94C4E4686548371C79CA1AD /* AppAuth-umbrella.h */, + FC88463E58B60899EBB3512FA2C1B71C /* AppAuth.debug.xcconfig */, + 2A8D6E22997569C5A4333D80838DDE1C /* AppAuth.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/GoogleSignIn"; - sourceTree = ""; - }; - 5769CB3D81C817CB174346979AD7CE96 /* GTMSessionFetcher */ = { - isa = PBXGroup; - children = ( - 701937FC7524F2E3E8D3E929C08D7AE0 /* Core */, - 28E59EB78175AF8119D870582A60B8A8 /* Support Files */, - ); - name = GTMSessionFetcher; - path = GTMSessionFetcher; + path = "../Target Support Files/AppAuth"; sourceTree = ""; }; - 59B8BF96F28FB93DB799E520FBD55E89 /* ExternalUserAgent */ = { + 54B73CDFD24D5B4DF43BCCC5FAECA837 /* ExternalUserAgent */ = { isa = PBXGroup; children = ( - 6B22A8C8ACF44F79F8082992AF491A95 /* AppAuth.h */, - B20510944B99ECD862E211A5D28D3325 /* OIDAuthorizationService+IOS.h */, - 87EE9C80F128A65CA2D38BAA5738CF97 /* OIDAuthorizationService+IOS.m */, - F62864FA1123E60873A6281C7A61190F /* OIDAuthState+IOS.h */, - 6134DCCF0C3FCBFB2E81B6F0752FD192 /* OIDAuthState+IOS.m */, - DF3DB6E1254D068D7F14E58516D7A427 /* OIDExternalUserAgentCatalyst.h */, - 455B87FFE67C8DFB6E92F240E806D2C8 /* OIDExternalUserAgentCatalyst.m */, - BA62556306FDB2FD351AD437EB05B564 /* OIDExternalUserAgentIOS.h */, - 556797F145AF7490CF6352CB49AF7891 /* OIDExternalUserAgentIOS.m */, - 7055A4869781CF15DC66A4BF6E4DA582 /* OIDExternalUserAgentIOSCustomBrowser.h */, - CEC11B4E057CF8344B4306870BC1690B /* OIDExternalUserAgentIOSCustomBrowser.m */, + C906FD5FEE7106690E54B394088843F8 /* AppAuth.h */, + 8F56A2933DFE7A9B72C2DC76D96D4BDD /* OIDAuthorizationService+IOS.h */, + 7F56C8FB2741B0C35CBDF2D43DCE6295 /* OIDAuthorizationService+IOS.m */, + 19E20C4F716EE84008539A115ED2C180 /* OIDAuthState+IOS.h */, + 2C21F85AE8DC39FD509728476EBA310B /* OIDAuthState+IOS.m */, + B9A23AA6818E9342709F091DBD080C21 /* OIDExternalUserAgentCatalyst.h */, + A967314A65E0B3F43A1AC0E076EB89F2 /* OIDExternalUserAgentCatalyst.m */, + 916F2420757E82B81C9712673CE16242 /* OIDExternalUserAgentIOS.h */, + D5AD863ED32DA85F13F9CD2C9C42EB0D /* OIDExternalUserAgentIOS.m */, + 93A2EEA4400A64811B5579F8E1941F76 /* OIDExternalUserAgentIOSCustomBrowser.h */, + 5850EF0637F8DF87FB7B5467753A79EC /* OIDExternalUserAgentIOSCustomBrowser.m */, ); name = ExternalUserAgent; sourceTree = ""; }; - 653BCBBEDFCA2E4A7469050D5F0696DB /* Alamofire */ = { - isa = PBXGroup; - children = ( - 1858465BDECBB841167B5836024204C2 /* AFError.swift */, - 94FF3CDE72A43B1C8E52E7BE464D851A /* Alamofire.swift */, - 0C82DB551DB921FCAF863980E18C3E0A /* AlamofireExtended.swift */, - FC5EE85E15172763BCCBFE5A5CE4E2E4 /* AuthenticationInterceptor.swift */, - DD2B224F60C0E6F2221EAF7E6213323F /* CachedResponseHandler.swift */, - 4A09FBA4B60E88D8F438E6B668FC4D11 /* Combine.swift */, - D5CA3841E05C917530B99A65DE619EF6 /* Concurrency.swift */, - AD5488212F2A42E64A80D3EF60F417D3 /* DispatchQueue+Alamofire.swift */, - 81A3A9C4C17C2670AF2F02C856D3E2C6 /* EventMonitor.swift */, - D6B019C374FD3713CC5A31E3EFD0C80D /* HTTPHeaders.swift */, - 6DC8FACD460E277EF94D7FA302C73BE5 /* HTTPMethod.swift */, - 1EE74456FFD17A83ECEA5ABB8F02E767 /* MultipartFormData.swift */, - 84C185BFFA3E9B03AFDFA8E754B14C65 /* MultipartUpload.swift */, - AD281E5405A59F79D2C0A6158AD18E66 /* NetworkReachabilityManager.swift */, - 2B4033776400836F6770C99E76761E0E /* Notifications.swift */, - B59E3D873866C39664CB30174866449B /* OperationQueue+Alamofire.swift */, - B9982899E8FE87F5B64020CE84061947 /* ParameterEncoder.swift */, - 906E77654FBF0758B3F68112E99E1B27 /* ParameterEncoding.swift */, - 0338232B0C80053DC53DC8BF0EE01CC6 /* Protected.swift */, - 53BC36286567CFC570B5B674C634A6AE /* RedirectHandler.swift */, - F5C7CE6FB34DC6236E51F3C3E44403AB /* Request.swift */, - B1E3B1FADB8C30CECECADCD85C35244D /* RequestInterceptor.swift */, - 15A923AA0C624EE6BEDD909424A70E05 /* RequestTaskMap.swift */, - EAFBC93C94B1FA5BC2632040F5FE2CCD /* Response.swift */, - AD688AB212554B064862830DADD11054 /* ResponseSerialization.swift */, - DCF1AA10327C6A87D4DB5A324BB1F33B /* Result+Alamofire.swift */, - BF3B83BFDAA0CEB146D20429A86E9878 /* RetryPolicy.swift */, - B1D85338E72A588C467B37701CB558CF /* ServerTrustEvaluation.swift */, - 2299DB2DFA5733E4655B56D047BDC9B7 /* Session.swift */, - 0A4D1152DBC49591439680362DF4A063 /* SessionDelegate.swift */, - C1AC345CB1DE954612F6136B0F613A50 /* StringEncoding+Alamofire.swift */, - 4E520D6387C91FD7A5E957B399966404 /* URLConvertible+URLRequestConvertible.swift */, - C291C5F7B45CA9AC9CBB9CEFB3CD47BD /* URLEncodedFormEncoder.swift */, - C697AFC91715222DD4118F84B5C92D1F /* URLRequest+Alamofire.swift */, - AD5144B1E9E778520B7972FEDC795AD3 /* URLSessionConfiguration+Alamofire.swift */, - A2B23791D5BA525FB1B03A944A0C9DB9 /* Validation.swift */, - 787CB0E4864DBE4E84D1F3E4192562CB /* Support Files */, - ); - name = Alamofire; - path = Alamofire; - sourceTree = ""; - }; - 666396EE78F6FFF35CFE3A7CBBD7302F /* AppAuth */ = { + 5D7E3F7D8D0D4444B72A52DEA3A34900 /* SuperTokensIOS */ = { isa = PBXGroup; children = ( - D9F2713AD6E38295AE024BE74F044D2C /* Core */, - 59B8BF96F28FB93DB799E520FBD55E89 /* ExternalUserAgent */, - 09503166B3F354E5745CBF14E6328F8A /* Support Files */, + 212B5FAA8CF77FFA5DEE929AC2464331 /* AntiCSRF.swift */, + 1748489CFDF3EDB2DD8D7CB36C5F4BAD /* Constants.swift */, + 847150108F4084DBFDAD5CDAD1DC5DFB /* Dictionary.swift */, + 9DA6937B6DE34F1CDDEA35FDEB5A52B6 /* Error.swift */, + 9290CDFF0011ACF98BF6A68C23782140 /* FrontToken.swift */, + A71F1B4787250777C10AF2C19EA7A6BC /* NormalisedURLDomain.swift */, + B46DAD64A0EE7B43A1111025A8F76448 /* NormalisedURLPath.swift */, + 5DB18303D7AFFDC5EE057F444122DE54 /* String.swift */, + DA0B819B83275F43E3525C2F189239C9 /* SuperTokens.swift */, + AF8EC21E7F922DB35BEFDCAC607D83F8 /* SuperTokensURLProtocol.swift */, + D0056BBBBAC4FEE1026B42FCB39A03CE /* UnauthorisedResponse.swift */, + 6927F36CD736D7391060DD0E8D1C260D /* Utils.swift */, + BF676A1975CB9D6631E1A44FCFB3AB68 /* Version.swift */, + 11EF48CA86B5BBAF7F43D9A9D05BBDD2 /* Support Files */, ); - name = AppAuth; - path = AppAuth; + name = SuperTokensIOS; + path = SuperTokensIOS; sourceTree = ""; }; - 701937FC7524F2E3E8D3E929C08D7AE0 /* Core */ = { + 623150D8225D8B7048518720A6709FC7 /* GTMAppAuth */ = { isa = PBXGroup; children = ( - 9A2FBCF6ED477D0A5E93B4232E6CD9B6 /* GTMSessionFetcher.h */, - 3DA4408BFE8D6AEF5BC55270D87C631D /* GTMSessionFetcher.m */, - 6A30C0FBA2A9A851160229EAC73D8997 /* GTMSessionFetcherLogging.h */, - 78785AF29EB79EA61798B11FB166743C /* GTMSessionFetcherLogging.m */, - 6AEE8FD5D7AB7630CCAD7661CF392074 /* GTMSessionFetcherService.h */, - A6DD10E92D541CED1FC26333F0B6EEEF /* GTMSessionFetcherService.m */, - 88B44379BF15EFF2CD1D180DDEFBE675 /* GTMSessionUploadFetcher.h */, - 97941AB19AEEF8A939D0E11E37CBFF86 /* GTMSessionUploadFetcher.m */, + 256E4C1055E76E45B8F50E32A7EF523F /* GTMAppAuth.h */, + 9B504B605E558103E3FE6ABB398C3E2E /* GTMAppAuthFetcherAuthorization.h */, + CC53FF5CE0BDAEF0889522098E05658A /* GTMAppAuthFetcherAuthorization.m */, + 5712CE6C45D983C88830A6D4BFA86DC1 /* GTMAppAuthFetcherAuthorization+Keychain.h */, + 8251F64263A8218EC8548C7541A41BFA /* GTMAppAuthFetcherAuthorization+Keychain.m */, + BC0000B2E8CA7CF89E4FB2EE8D543FD8 /* GTMKeychain.h */, + 42C1B1D87F96F6F79EDB3A8821F5DEF3 /* GTMKeychain.m */, + 9A36AA6A7062459D35CD02123339C973 /* GTMOAuth2KeychainCompatibility.h */, + F2144E3E950187D75C343D5AA819EE6D /* GTMOAuth2KeychainCompatibility.m */, + F4DDE65757B74DB3BBB04CFAC268F7DB /* Support Files */, ); - name = Core; + name = GTMAppAuth; + path = GTMAppAuth; sourceTree = ""; }; - 787CB0E4864DBE4E84D1F3E4192562CB /* Support Files */ = { + 692852D02D1DF07C8BB896282710540F /* Support Files */ = { isa = PBXGroup; children = ( - 5B18E10775D19AA5F87E22292BF167F0 /* Alamofire.modulemap */, - DCAF663E062B54411D5F18532A63CE75 /* Alamofire-dummy.m */, - 57995DE115F16F5B75C379900ECC016B /* Alamofire-Info.plist */, - 5AD272B869996134B5A856C2D7166E13 /* Alamofire-prefix.pch */, - 537BF43A31F256B3FE6192F670A17262 /* Alamofire-umbrella.h */, - F0C0B91F8193429751D8935E6942F484 /* Alamofire.debug.xcconfig */, - 2929585BEAFAA5389A410B5BC5851F76 /* Alamofire.release.xcconfig */, + 077A315CED16B35069E963C4EB834F92 /* xcbeautify.debug.xcconfig */, + C4AADAC1FBCE00CFDAAB5AAC9B002C0D /* xcbeautify.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/Alamofire"; + path = "../Target Support Files/xcbeautify"; sourceTree = ""; }; 793CB42F82BE9F614B886BC953CCDB5B /* Pods-iosenv */ = { @@ -1001,65 +926,76 @@ path = "Target Support Files/Pods-iosenv"; sourceTree = ""; }; - A18AE100A59B7E3078F5FAA5187F957B /* Pods */ = { + 7A6C155B131F1E5A266AECB182DA6FD9 /* Pods */ = { isa = PBXGroup; children = ( - 653BCBBEDFCA2E4A7469050D5F0696DB /* Alamofire */, - 666396EE78F6FFF35CFE3A7CBBD7302F /* AppAuth */, - 12F37D8AA9351CA666C89634482AEAD6 /* GoogleSignIn */, - C8A53688046C52439772A0BA6DBD7A38 /* GTMAppAuth */, - 5769CB3D81C817CB174346979AD7CE96 /* GTMSessionFetcher */, - 372A54A44DD0CE81E18C5504CBDA5D3E /* SuperTokensIOS */, - 16A3C2BF4FF9202A70D49FCCC58D43B2 /* xcbeautify */, + FCEE12F43A1F8BCF4708EAFD02AD3C12 /* Alamofire */, + 82C1AFF9CAA93145991E76760A98FC72 /* AppAuth */, + 17F4A0FD5C8312E147A9D402DCAC9D33 /* GoogleSignIn */, + 623150D8225D8B7048518720A6709FC7 /* GTMAppAuth */, + FB71B0AFB1F50962BE5CDC5A7759DAA3 /* GTMSessionFetcher */, + 5D7E3F7D8D0D4444B72A52DEA3A34900 /* SuperTokensIOS */, + 02E1B8A6DC937831CE74E41B6FAEB92D /* xcbeautify */, ); name = Pods; sourceTree = ""; }; - A3D8859094513A89BEE34D5187FC16F4 /* Resources */ = { + 82C1AFF9CAA93145991E76760A98FC72 /* AppAuth */ = { + isa = PBXGroup; + children = ( + E4205AC18FE1D29242947F352E03A40A /* Core */, + 54B73CDFD24D5B4DF43BCCC5FAECA837 /* ExternalUserAgent */, + 1988058C68A72C692E8E2CC40290D33C /* Support Files */, + ); + name = AppAuth; + path = AppAuth; + sourceTree = ""; + }; + 856FF20036642AA1BAFBA1E8064BBEB9 /* Resources */ = { isa = PBXGroup; children = ( - A446C3F80EB9B0A87577E4CDA9F023F6 /* ar.lproj */, - 10BCAE86CDBEB9EC1A4ADC636E681F72 /* ca.lproj */, - 5A03479E280253775B5F25F1C054CBA0 /* cs.lproj */, - 5FDF298F2868A21905D01CCBDA2D7A85 /* da.lproj */, - 9FA14125173B11C29E756CCF99373E43 /* de.lproj */, - 4B18D4C216ABE8BA812679B174BAD99F /* el.lproj */, - 5A86EB334A8FC1A4AF7E5CDB63008A22 /* en.lproj */, - C44778C7AB804DAB5C5543EEB4EB728E /* en_GB.lproj */, - E622FFB7E845C75D020FDF8A983F5F94 /* es.lproj */, - 55A58EDADA4AF4F69DC8CDC798D788D6 /* es_MX.lproj */, - C9F0868B455D7665848B531851E20966 /* fi.lproj */, - 4F4AA32FB146BCCA946EDFBAB3C2FA13 /* fr.lproj */, - C1D1A7350157BF190A2A52220B973E6C /* fr_CA.lproj */, - D9422A75E0B91F2D5DED351D29372877 /* google.png */, - D2BFFDAA3AE5639BE0A0E674B2FEAE81 /* google@2x.png */, - 65BFCC93B2CC8947A3B247E7C8D700D9 /* google@3x.png */, - 9864FC972E7414EA01CED01F19D74198 /* he.lproj */, - 9E00AEE0BA48BBD27B8D8CBAFD37CED9 /* hi.lproj */, - CEBD36ED4E613C12C3D86FC40AC35F58 /* hr.lproj */, - AC066356651E36E561EC73D1DCEE07DC /* hu.lproj */, - 6DA4EF9C1F57F9EF2DECADD3C1889AF9 /* id.lproj */, - 19B9A0D52E45E2C75952BE26023839F2 /* it.lproj */, - 194C6E6754F80343C39F15D0B1FC9565 /* ja.lproj */, - D38CBA514646EAF2A760C9D7FCBEB9CC /* ko.lproj */, - 8C19FAC253FC6224A9DD7313B64DEB83 /* ms.lproj */, - 081595D311DFD1BFD63133D031FB714E /* nb.lproj */, - 8787738D9B4F98D6A6E005C6E8731FC7 /* nl.lproj */, - A1865D239E3E7CE6EE951935318E61CE /* pl.lproj */, - AECE582F311BAC63871D4F2E0DD83404 /* pt.lproj */, - 158A804C067D54F33BA7B7F11AC6BE90 /* pt_BR.lproj */, - 864AAA448883F593475F7F7B41882126 /* pt_PT.lproj */, - 55BB3AFE3CB0066E4D5BCDBA3ABBAD31 /* ro.lproj */, - CF785ABD1B111F3A644CF38B56C7A62D /* Roboto-Bold.ttf */, - 052652DC1ED13FB7F9E731BD22C992D3 /* ru.lproj */, - 537FFAC3CC3DF132392AAD9AC59CE1E4 /* sk.lproj */, - 98E566C55EA03D54214EC390B45A2E8B /* sv.lproj */, - 5BF18C7396376DC1A3008F0AC10A8F2E /* th.lproj */, - 7B33C7D57343DB700CF59DCE854F1547 /* tr.lproj */, - 668E784E70D8DB58FB507583BE80B535 /* uk.lproj */, - 15B737379AD79BC910E871239E180DB0 /* vi.lproj */, - 9845381C6DE269065F8D889E1DC63D36 /* zh_CN.lproj */, - 9A23DEC8828863E5EA405D2ABD8B19B5 /* zh_TW.lproj */, + 68D23ED91510367101F348FACF47C11B /* ar.lproj */, + 0295D2E9E43FB0221417C760FECDD842 /* ca.lproj */, + 89FEEB511EE8939035F5DB73A6FDC63E /* cs.lproj */, + 51BAE9F352D7B9314614F545E7EA530A /* da.lproj */, + 98802E7EC0E2FF5EBEBEA77F18258E25 /* de.lproj */, + BC3693429DB424D692BF2023C3D39B5E /* el.lproj */, + 8A72EF429E13E88E1634041F4F0C6FD4 /* en.lproj */, + 4337BF1C31F7B9662C692D78CD239072 /* en_GB.lproj */, + BB66BEB5D25130C73B19F93D822C3198 /* es.lproj */, + 46C953942D8D11F58216B150790C3E1F /* es_MX.lproj */, + A595CF53BE5E77DF3C54CF3BA1E1F0DB /* fi.lproj */, + C84581CF9A07A3CAFA068585A85B8001 /* fr.lproj */, + 36EFCF4E9692271F4F10CB2F139B0A20 /* fr_CA.lproj */, + B24F4F917318857C2491FFE2D6E46AD0 /* google.png */, + 77188A15386C12A2A6989FC6A1D5ED37 /* google@2x.png */, + BDBB32C913397C07021E24595A1EF343 /* google@3x.png */, + 7A9D74D69EE4CE754684EADDB6854E96 /* he.lproj */, + CBAED6817EA9601579B88730267C2E53 /* hi.lproj */, + AB3E126B716607FB09A1615B309E368D /* hr.lproj */, + B407E7C085D68A3D55F0657E03679EC7 /* hu.lproj */, + 28E63E8F8B67E5317E8CF03A42C26112 /* id.lproj */, + 7EF5A61D1B432A94FF9310D1145C2C7A /* it.lproj */, + 9508F03AE16BBFB49E683FBFB91387EA /* ja.lproj */, + 96670754509D018A215DD462EF37AF41 /* ko.lproj */, + BE7FD80BE0F92C8F6D4CFD337674AC8A /* ms.lproj */, + 9E892F883D483E54042AB9970F42E607 /* nb.lproj */, + 69515D72CBD6F66A8517DB55D4200141 /* nl.lproj */, + 44E4EACB812B744E8A75F6BF97585EB4 /* pl.lproj */, + 05FFF16BC918583AA3B83EAC952FCB6D /* pt.lproj */, + ABAFD1E8B76CF20393253BCA461441F7 /* pt_BR.lproj */, + 19BAFAEBE67D3207020A82A42CC995E9 /* pt_PT.lproj */, + 145ADE4B90FC215387CBA8C9128A4D30 /* ro.lproj */, + 9882CB2A988942EAF7CCF0E0DABE2F94 /* Roboto-Bold.ttf */, + 689F0579625B24BC0ED8BB4A402474A5 /* ru.lproj */, + 0DC1A4DA82662B4B10A7FDB7F01C772A /* sk.lproj */, + 0AD4ECE9AB77245C0E2707FA2A3752C0 /* sv.lproj */, + AF4EB2A027F72B811B8E303746C606E2 /* th.lproj */, + A87C8013324C663AB97337E76A79C45B /* tr.lproj */, + DD5D0E867A70E89349A3436638C256D3 /* uk.lproj */, + 3F47FC97AC3248A019AC3CAD30086D43 /* vi.lproj */, + FD662F3AC3A1AA8F2023C1A66734127A /* zh_CN.lproj */, + 2DD37316FCFD9E4D4CC384DF56EAC6B5 /* zh_TW.lproj */, ); name = Resources; sourceTree = ""; @@ -1087,22 +1023,35 @@ name = "Targets Support Files"; sourceTree = ""; }; - C8A53688046C52439772A0BA6DBD7A38 /* GTMAppAuth */ = { + ADCC051EE5FF2BDC022F1EC642C3D9DE /* Core */ = { isa = PBXGroup; children = ( - 4F9E06DACF919E19158C2C4C399922AC /* GTMAppAuth.h */, - 123CC2CF156ED69D9DC0082C214B530C /* GTMAppAuthFetcherAuthorization.h */, - 479FE04541F2AE70332349F844E9B06E /* GTMAppAuthFetcherAuthorization.m */, - 9CD9066B0AB35403B31E7BDCDDAD7AF0 /* GTMAppAuthFetcherAuthorization+Keychain.h */, - DF77BD406A41DCDDB5FBB890F2CE8BAD /* GTMAppAuthFetcherAuthorization+Keychain.m */, - 09E71924FB07E0FAF15459DD73B2C6D7 /* GTMKeychain.h */, - 44EB305D46EDE4E1F9B36FBDF5280FCA /* GTMKeychain.m */, - A9387A88827FD4099B2A94AA060A8297 /* GTMOAuth2KeychainCompatibility.h */, - 0FC80D43EC57D77956D73A387BBC3300 /* GTMOAuth2KeychainCompatibility.m */, - 2337FA2748F1276EA97EE447E39ACED8 /* Support Files */, + 39BD92F4D84DBD47B4F6BA98E4D721D2 /* GTMSessionFetcher.h */, + C64B085F0C01F6EFB0A537416501AEE4 /* GTMSessionFetcher.m */, + EF99FAB2EB7EC03DDBD501546FD1B680 /* GTMSessionFetcherLogging.h */, + 6C624BAF398DB8DD513C13E641570DBF /* GTMSessionFetcherLogging.m */, + 2DD2D2172858535FE21235DF1727BD1B /* GTMSessionFetcherService.h */, + 4045319C187B235BB049202F84060C11 /* GTMSessionFetcherService.m */, + FFA57132E1069FD41114AA7A67A9F3B2 /* GTMSessionFetcherService+Internal.h */, + 32B65DB61C754034DDB9A7B9EC3BCD88 /* GTMSessionUploadFetcher.h */, + 18A5FA9A9838689A36DD22B83C3135F4 /* GTMSessionUploadFetcher.m */, ); - name = GTMAppAuth; - path = GTMAppAuth; + name = Core; + sourceTree = ""; + }; + CA8B1692A176606750676F19A7F48D2D /* Support Files */ = { + isa = PBXGroup; + children = ( + 3F81A66887D1B75162C6D4295132C530 /* GoogleSignIn.modulemap */, + 75502DF5F7769C3055D2E4926DCE52B8 /* GoogleSignIn-dummy.m */, + 067048BAF9CF45B8742A1F8FED981177 /* GoogleSignIn-Info.plist */, + 4AA5D7205DF098044D3739A2B950B5F2 /* GoogleSignIn-umbrella.h */, + 2DEE718A04F32A7E8ABEE69349744805 /* GoogleSignIn.debug.xcconfig */, + 344026452765BD28208604BCF9ACBAC7 /* GoogleSignIn.release.xcconfig */, + 73BC221EC0256FB0D832037B0487C873 /* ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/GoogleSignIn"; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { @@ -1110,70 +1059,99 @@ children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, F119B4A0ABE017AECEE69836596133B2 /* Frameworks */, - A18AE100A59B7E3078F5FAA5187F957B /* Pods */, + 7A6C155B131F1E5A266AECB182DA6FD9 /* Pods */, A99421861F165AD1FEF1F54183D17E4B /* Products */, AB0558DBFAD33E68937433418E4BFACD /* Targets Support Files */, ); sourceTree = ""; }; - D9F2713AD6E38295AE024BE74F044D2C /* Core */ = { + E2E8D4165E60E475F5887C77AFAFC9F1 /* Support Files */ = { isa = PBXGroup; children = ( - 0450CEA25B67C6C1671F9A1C9A4A308F /* AppAuthCore.h */, - 6874A918380070BF19DD44D3B5BD219D /* OIDAuthorizationRequest.h */, - 16D27716C0E44F3B7133A6613DDF7168 /* OIDAuthorizationRequest.m */, - 1A85DF9BA90196269275E99F50372C69 /* OIDAuthorizationResponse.h */, - 997EAC18D27A9F7076CC42ED0B65BAFB /* OIDAuthorizationResponse.m */, - 4C7BDB00FAABEB7EF7EF2AD2C794B8C8 /* OIDAuthorizationService.h */, - 9D1F27E2512376E9163265750CA9297E /* OIDAuthorizationService.m */, - 89BE16823D4D2561227B262FD66A93B8 /* OIDAuthState.h */, - CEC31FA643F859A3A701F0DB69A429C3 /* OIDAuthState.m */, - D23CD1A37BA242DBA37985879A90DD40 /* OIDAuthStateChangeDelegate.h */, - DA9FAEC76E3039DA1A65C9A94BAB0CB9 /* OIDAuthStateErrorDelegate.h */, - F7CD19358355103FC1B1EF543679743D /* OIDClientMetadataParameters.h */, - 02E1518AA159378314AC0C2FC1499273 /* OIDClientMetadataParameters.m */, - 31287FE3D5E539EFD52A60C3FD284217 /* OIDDefines.h */, - 0659F4FB29593BEFEB74134FD5D43E57 /* OIDEndSessionRequest.h */, - FF8184FD92033DDFD49FF96162F53B06 /* OIDEndSessionRequest.m */, - 542031D641359A4D65DFA916C30A77D7 /* OIDEndSessionResponse.h */, - E02E0129A8F642C094C47BB8A96ECACD /* OIDEndSessionResponse.m */, - 7428949827FE09E5902DA47B3B714C7C /* OIDError.h */, - 844EB5B48E8BCAE593DC97DCAA24323D /* OIDError.m */, - B56BF9AE7EEE7EE1F4C99A657216173F /* OIDErrorUtilities.h */, - 5BBB9EF80A0D9E5A6601A31B00F45281 /* OIDErrorUtilities.m */, - 5A9A1D5A2ED1D40823B9E505E889D080 /* OIDExternalUserAgent.h */, - 5A8B776DD908683F78CDA2BE1533ADD2 /* OIDExternalUserAgentRequest.h */, - 7306633E5A22209F116EC04A4680C4D8 /* OIDExternalUserAgentSession.h */, - 5128A5E90084468364B8997CF11BB157 /* OIDFieldMapping.h */, - DC550077196F84C06346647B08227C87 /* OIDFieldMapping.m */, - 3CDF68B768ABA6A44730101D52ADB470 /* OIDGrantTypes.h */, - 408FDF8D98B5A61B15B08A55CAA4514A /* OIDGrantTypes.m */, - 62B9EA9A25C7637CCAD5C389BB546A2D /* OIDIDToken.h */, - 26AE18C7C466BF7151EF35E7C0E2BEA2 /* OIDIDToken.m */, - 7BEC66EC928D80ABBC335C9E7C319B6D /* OIDRegistrationRequest.h */, - D1D1AAB4D27828C4EA1BC81A044ECA4A /* OIDRegistrationRequest.m */, - F25A92CF4A9B98935221B8B1065EFA5A /* OIDRegistrationResponse.h */, - 2927C85C1EA4EE5AD1EFBA5EA25A4E0C /* OIDRegistrationResponse.m */, - AC51F9E92F96704FA74602BDD1DE41D9 /* OIDResponseTypes.h */, - 76AD735E771801171A872A088B5899CA /* OIDResponseTypes.m */, - 66FC8AF4F16352D3FF1123CB6FCDB03B /* OIDScopes.h */, - F6EA724D360E0FD39B466D53BFDEB4F4 /* OIDScopes.m */, - ED8C73EA9615C47CD1D0EB2FA7ACA726 /* OIDScopeUtilities.h */, - 60FD3B39FC736BF548978BB5568032AB /* OIDScopeUtilities.m */, - 5188C9C419C080F27F2B2122D2B5255F /* OIDServiceConfiguration.h */, - 0AE8286C5131391C758F980F56CFB1B8 /* OIDServiceConfiguration.m */, - 8EFF43962D755910ABF8658A210C0246 /* OIDServiceDiscovery.h */, - 74DEEF18D1500A41D11E7303EDC7326B /* OIDServiceDiscovery.m */, - 11F11C70879D054941A3BB23F858E984 /* OIDTokenRequest.h */, - 0F91A8360246C6A8CCF19CA286441525 /* OIDTokenRequest.m */, - 2726DAFC7364287C6C5B780ED7769DE1 /* OIDTokenResponse.h */, - 1FD790693339A0C711D1966D99BD39CB /* OIDTokenResponse.m */, - 807563300EB8BD93FB5954E25701BCDB /* OIDTokenUtilities.h */, - 159CCF78F8506B9A7456C26A6D3087C0 /* OIDTokenUtilities.m */, - 943A7BE177C57D6EFBDD09558715C614 /* OIDURLQueryComponent.h */, - C5B40328DDF6D57D6FD0414A89A24E55 /* OIDURLQueryComponent.m */, - 394CBFB20A169E6D97A60D157F8DC432 /* OIDURLSessionProvider.h */, - 99243BE0999291E60FCF378E8B54F2E7 /* OIDURLSessionProvider.m */, + 76BEA1AC9036F9411CAFACA59A0B5575 /* Alamofire.modulemap */, + A35DF8E792BEEA06D1865F6837F718FB /* Alamofire-dummy.m */, + 1CD853C8ADEC37D8DF8BEF578296F574 /* Alamofire-Info.plist */, + 5CCF49282E00B6865BA6BFC127FC94D2 /* Alamofire-prefix.pch */, + 06197E20473C0AA8D7BF828496AAA165 /* Alamofire-umbrella.h */, + 07C8E048D2D246B8CA8B7456079EEC78 /* Alamofire.debug.xcconfig */, + B296AB3D216F584907787EED50AC4516 /* Alamofire.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/Alamofire"; + sourceTree = ""; + }; + E34B770C7074C4EF987C2DA980841E68 /* Support Files */ = { + isa = PBXGroup; + children = ( + 651DAA1E006E207DD28F4309B2B47DFE /* GTMSessionFetcher.modulemap */, + 92DB83DED7BF7098033BF896592290DC /* GTMSessionFetcher-dummy.m */, + 0408F43C26B3C5A1CB8FC910C51647DF /* GTMSessionFetcher-Info.plist */, + 7A10E4619FF779D6DAB309BF1F337DFF /* GTMSessionFetcher-umbrella.h */, + 2550152E22D380B9C3E011DA694897D1 /* GTMSessionFetcher.debug.xcconfig */, + 067F1C154570585E0CFD0FCC4DEE8F84 /* GTMSessionFetcher.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/GTMSessionFetcher"; + sourceTree = ""; + }; + E4205AC18FE1D29242947F352E03A40A /* Core */ = { + isa = PBXGroup; + children = ( + B52A72B91DF3FEDE7472A9BF7BBA2F20 /* AppAuthCore.h */, + 45E19F623CA54E426FB775EA7F1F61CE /* OIDAuthorizationRequest.h */, + 3DCC8CBB8FE2BDE4A9A18A873795622F /* OIDAuthorizationRequest.m */, + 73AB953B123565E3DCF7239B5E7C01EA /* OIDAuthorizationResponse.h */, + 56E3DB830AF22F684D24B72C7272F3BB /* OIDAuthorizationResponse.m */, + 0815718EC74C5794035FCC912F51020E /* OIDAuthorizationService.h */, + AB9820B091274E5B14E3158C8079AD9C /* OIDAuthorizationService.m */, + BBBC81D2AF35787348E0E907B0EFB6AC /* OIDAuthState.h */, + A1DDE36D932030162F1BD4146B48339F /* OIDAuthState.m */, + F73C40240F53C808BABD0A0009E41D74 /* OIDAuthStateChangeDelegate.h */, + 38E3C1FB627EB33E70A11AD88A999D2D /* OIDAuthStateErrorDelegate.h */, + 758A0D8DB0F4F4E6A25AC6A238F4CDD2 /* OIDClientMetadataParameters.h */, + AAD83C1D0792CF3EBC7B2A9FB4EC28C1 /* OIDClientMetadataParameters.m */, + EE0EB6685A113896FD586A7BC83996D6 /* OIDDefines.h */, + 8B1E7EE0E562241832CAD5BB6FA72E53 /* OIDEndSessionRequest.h */, + FA684F565AC52321785C34B8114E7D31 /* OIDEndSessionRequest.m */, + 7ED1997C467DFF152616E190C706A1AA /* OIDEndSessionResponse.h */, + 63E8B34F0FAEB524DB27C78BCDCCBFBE /* OIDEndSessionResponse.m */, + 798487EA18E263C0B5E08D5547519A10 /* OIDError.h */, + F07AD79FDD4CC180D3D45F8237B8E7A3 /* OIDError.m */, + DCAA5C75ABE4D058107776635665D0F8 /* OIDErrorUtilities.h */, + A15175572A06EB1F5E5D363008385D60 /* OIDErrorUtilities.m */, + 9010D90E522982E322ABFFD792BBBE38 /* OIDExternalUserAgent.h */, + 49B7DADDCA8169ED9113BD5660259B52 /* OIDExternalUserAgentRequest.h */, + FD24C5A6481CE6D7932F0894089EA82F /* OIDExternalUserAgentSession.h */, + BE6A7456B36F19DB9B35459631B2250E /* OIDFieldMapping.h */, + 5838E12080F2C35C1FEE9FD488FEF2AA /* OIDFieldMapping.m */, + 41F9B63155D0912FFE92474E18943933 /* OIDGrantTypes.h */, + F5F1EA38C36E6D6E5FD18F5003488B00 /* OIDGrantTypes.m */, + FA5B14CB58518BEF5DC520D1FC099251 /* OIDIDToken.h */, + 6F062C7035C086CAE742FA8A98E419BE /* OIDIDToken.m */, + 743AFC0FF4030B3E8A8B363EECBE2EA1 /* OIDRegistrationRequest.h */, + D997A29E772673FC9061FFB85712DEB1 /* OIDRegistrationRequest.m */, + 0FDBAEF524089FC846DA052CFBC110D0 /* OIDRegistrationResponse.h */, + 317DB7E1B978C34BAE623D30E38B77A5 /* OIDRegistrationResponse.m */, + 33A2173CBDAE363E7DBF77A8593B0BC8 /* OIDResponseTypes.h */, + 2A677C7CC60170058D22E7CEDFECFF37 /* OIDResponseTypes.m */, + D22A0B140E1C3E6715AEE64F7D617C40 /* OIDScopes.h */, + 9735360323179892F263AA2EE6AEFF2B /* OIDScopes.m */, + B10303AC6A1CEFE70F54BA8F36B0F5CB /* OIDScopeUtilities.h */, + 90B8040EF2B1FCE723D6CB64581BDC55 /* OIDScopeUtilities.m */, + 8A45C0718055262FDF084203CB9A0C7E /* OIDServiceConfiguration.h */, + 2F949663C5C9C12F56728D4B64122C9D /* OIDServiceConfiguration.m */, + 9475C9DC5D9AA66DB9A520CF58C8DC77 /* OIDServiceDiscovery.h */, + 8BF79BAF5688AA851C1CC95C6704219C /* OIDServiceDiscovery.m */, + C7E7F6A0A818CAB4B2BA1FCAF2680F79 /* OIDTokenRequest.h */, + 2DB7110B2CC0E2A38E084CFEAFF4A451 /* OIDTokenRequest.m */, + F06D826E6B68B02B6FB933553EA384FB /* OIDTokenResponse.h */, + 6BF7BAC54D253C2043E72F644758A210 /* OIDTokenResponse.m */, + B57533C36D3951675E075226AADDBED4 /* OIDTokenUtilities.h */, + 09F729385C67515AB00F2696CCD085BD /* OIDTokenUtilities.m */, + 9420F1EA5EDECB2F64818BA255FF9B5C /* OIDURLQueryComponent.h */, + E2A3C6DE4070A7BBB1DBC8A44835EEB0 /* OIDURLQueryComponent.m */, + 5C072320E291586283FE7E8EB52F85B7 /* OIDURLSessionProvider.h */, + 4350567584C26C4D52D42ED8EC672F91 /* OIDURLSessionProvider.m */, ); name = Core; sourceTree = ""; @@ -1186,19 +1164,74 @@ name = Frameworks; sourceTree = ""; }; - F60738866E15B3F6677ACA242F7D1420 /* Support Files */ = { + F4DDE65757B74DB3BBB04CFAC268F7DB /* Support Files */ = { isa = PBXGroup; children = ( - A70148FFE76B3917E0D59DA1BBF80C01 /* SuperTokensIOS.modulemap */, - B30363C15202FD68564BAD5B3A2E922C /* SuperTokensIOS-dummy.m */, - 0CAE6549FFA610140A40435837C907D8 /* SuperTokensIOS-Info.plist */, - ED3445F0ECC96157D981924BE98575F4 /* SuperTokensIOS-prefix.pch */, - D87554B1B740B4380B7096E31C4903FE /* SuperTokensIOS-umbrella.h */, - 8BE4F2FF1627EAC1610E1DFE1115D8A2 /* SuperTokensIOS.debug.xcconfig */, - 07DE0A6486C1ACA40DA155ED70CD5090 /* SuperTokensIOS.release.xcconfig */, + 663501C1CC651C026EF0160473E0E9CF /* GTMAppAuth.modulemap */, + B475DDEE90F6E4BCBEFBAC05CD54478D /* GTMAppAuth-dummy.m */, + 6574701D4F012CD9F4036229D65BC463 /* GTMAppAuth-Info.plist */, + 7B2B2FFAB97A1FFF3BF9EACDE7B49FFD /* GTMAppAuth-umbrella.h */, + A50E3DE1441EDD752700F7AF5ECF39BA /* GTMAppAuth.debug.xcconfig */, + 1533120CF2E967623F0886D1CB13A99B /* GTMAppAuth.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/SuperTokensIOS"; + path = "../Target Support Files/GTMAppAuth"; + sourceTree = ""; + }; + FB71B0AFB1F50962BE5CDC5A7759DAA3 /* GTMSessionFetcher */ = { + isa = PBXGroup; + children = ( + ADCC051EE5FF2BDC022F1EC642C3D9DE /* Core */, + E34B770C7074C4EF987C2DA980841E68 /* Support Files */, + ); + name = GTMSessionFetcher; + path = GTMSessionFetcher; + sourceTree = ""; + }; + FCEE12F43A1F8BCF4708EAFD02AD3C12 /* Alamofire */ = { + isa = PBXGroup; + children = ( + 82C223B892C5A26CA22897C178321F62 /* AFError.swift */, + FE5DED812F6F33F1B4E8D07DEFFA61A6 /* Alamofire.swift */, + 8438B9FAED461AD11D4DB1F3D05F3516 /* AlamofireExtended.swift */, + CCC31A8DB942D60A2E3B6216CD7A94DC /* AuthenticationInterceptor.swift */, + 9CFA03AAB3190A00AC683729E3D8FAC1 /* CachedResponseHandler.swift */, + C955E0A7D140FCD87AD4017F1FCE8133 /* Combine.swift */, + 708C2C94819E1438FCCCAE12B4239F41 /* Concurrency.swift */, + A535EE603DC5B219924402370B9F0CB9 /* DispatchQueue+Alamofire.swift */, + B05D539B5F5382F439C1168E227ACEEE /* EventMonitor.swift */, + E6E0917183B2B05C7E16249C947178CE /* HTTPHeaders.swift */, + DF1C633CB80A588C64D28CAB1976C675 /* HTTPMethod.swift */, + 45893F72F56198F495F8DD9A0379C1E3 /* MultipartFormData.swift */, + C5AB73319CC688C535E401DA635DD853 /* MultipartUpload.swift */, + 0BFAEB3437ED049A0EC3B8152D338787 /* NetworkReachabilityManager.swift */, + 24A84AD91A937A7E0CF84CFFF6A6A8FB /* Notifications.swift */, + CCD87507D7EE8E4883E36597B1411ADA /* OperationQueue+Alamofire.swift */, + 41BE255105D992B285D521AB5DB616F8 /* ParameterEncoder.swift */, + E8354AF9316FA45C44209CAB9DE7454C /* ParameterEncoding.swift */, + 47079D5AF585A92CD34DC0923EBAEBE0 /* Protected.swift */, + B8AD8B8B6B7FB0B50B4329BC97BE5BB5 /* RedirectHandler.swift */, + B842AB1AEAD495798C4429369FF1F57F /* Request.swift */, + D311C6082EC32937665FB07904AF4B5D /* RequestCompression.swift */, + 91C52884C55A9DF5F6BB22227512F000 /* RequestInterceptor.swift */, + 1489859B3F7BB358B3A5036BC5F2F79D /* RequestTaskMap.swift */, + 2B69F9769720E044B7F3F163E4F11A3E /* Response.swift */, + 6C55D941313DD67971B0AAB38998DAFB /* ResponseSerialization.swift */, + 39A16AF264C2273E76F9EC4BC69EE39B /* Result+Alamofire.swift */, + F44FA006730E4C1EE4C0934853BF3B90 /* RetryPolicy.swift */, + 46A6AE8D18EA3AD9C8D9AF524DBD7292 /* ServerTrustEvaluation.swift */, + 45F28B9BADC53DBB2D5F0D1110192A7C /* Session.swift */, + 3C8F798AD1D1BF3B326A00C5F4FC09BF /* SessionDelegate.swift */, + 917B054FADE7DF8582BE8FF0F2868261 /* StringEncoding+Alamofire.swift */, + C7B0E4A5AAFEFCDE8CD9F960F2AF2B34 /* URLConvertible+URLRequestConvertible.swift */, + 83D7EEFAB2589888801D4C729E5D49CB /* URLEncodedFormEncoder.swift */, + 96CEDCC52BD93D4D542907A07998FF02 /* URLRequest+Alamofire.swift */, + 645C59D0726454F9957777A76F80B1D8 /* URLSessionConfiguration+Alamofire.swift */, + 2EF0277FC920FB1FB6A360AC6A2B9374 /* Validation.swift */, + E2E8D4165E60E475F5887C77AFAFC9F1 /* Support Files */, + ); + name = Alamofire; + path = Alamofire; sourceTree = ""; }; FCF240ECEAB2DD29399A9FC1C4BDC91D /* iOS */ = { @@ -1219,67 +1252,65 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 21DAE4FF14902DFE0DDEBEBCEB6074E9 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - A0ADE174C817D317A1F11BCDD48F4108 /* GTMAppAuth.h in Headers */, - 9E446BE4057BFB71D703FBA219517E40 /* GTMAppAuth-umbrella.h in Headers */, - D340F603D2D378520C7DF6D1017C5867 /* GTMAppAuthFetcherAuthorization.h in Headers */, - 85EA64E2C72CFDEC660AAB46F068F1FA /* GTMAppAuthFetcherAuthorization+Keychain.h in Headers */, - 3B20EA4BC0B328E2542C518273FA7046 /* GTMKeychain.h in Headers */, - 5E3B1A932202F529808ECC95A1E21886 /* GTMOAuth2KeychainCompatibility.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 30FCB41FB612F0AE884B40FFAC34F267 /* Headers */ = { + 13B4D4EEB79A0D1988BDF83C67093A82 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 83D57DB0E3A54C32CBA0D0016AEFA14C /* GIDAuthentication.h in Headers */, - 83B4A147D4A32E34545F4D90AA7B4B77 /* GIDAuthentication_Private.h in Headers */, - 2C42D05841AC97AE4FFA70F95A5610FF /* GIDAuthStateMigration.h in Headers */, - A31E2FAFD93E85FF3F021F2CF38A4584 /* GIDCallbackQueue.h in Headers */, - F6DFD56872F184E473D37C178A6DB8FD /* GIDConfiguration.h in Headers */, - 137BDF0EE751F552141D6AC020B1D394 /* GIDEMMErrorHandler.h in Headers */, - E0BA0581C7AD618009FC7C169933CC7A /* GIDGoogleUser.h in Headers */, - F23CEE6326992BCA15408CE8A833123A /* GIDGoogleUser_Private.h in Headers */, - 1FC7BC3300D243C6384E261B8C51AC95 /* GIDMDMPasscodeCache.h in Headers */, - 7B8662965A406B52E017499708C29093 /* GIDMDMPasscodeState.h in Headers */, - 6EC47D96896B62B9CED5D78A005BB008 /* GIDMDMPasscodeState_Private.h in Headers */, - 3E93075919B22148CD9361C6DACAFEE3 /* GIDProfileData.h in Headers */, - A6074CBFF1FE87653517816278A8426F /* GIDProfileData_Private.h in Headers */, - E2FE2CB957779A7DCA1AD95C1215BC56 /* GIDScopes.h in Headers */, - 676AD319ADD01A7155529B799B390095 /* GIDSignIn.h in Headers */, - F159FDF0C26037758BF2D029A4BDEF6E /* GIDSignIn_Private.h in Headers */, - 64BC39E045C7E99063F138A036CC7497 /* GIDSignInButton.h in Headers */, - DEC596E428B53B359D47145C9AE70DE5 /* GIDSignInCallbackSchemes.h in Headers */, - 5F3AD462CBA6F095208AFF445452C1A3 /* GIDSignInInternalOptions.h in Headers */, - 288D17CC844B96865AF761D3BF5B2BCE /* GIDSignInPreferences.h in Headers */, - DCDDF8ED590ED356A4BE24876B61D844 /* GIDSignInStrings.h in Headers */, - CE0C5D7338C636262AEF7C03E0D679B6 /* GoogleSignIn.h in Headers */, - 736C74E8327DC190B406B29A91F14DC3 /* GoogleSignIn-umbrella.h in Headers */, - FA57677851302C0F13C69A459895DCEF /* NSBundle+GID3PAdditions.h in Headers */, + 52E02FFD7AFB3E17B64EE78A328C90E4 /* GTMSessionFetcher.h in Headers */, + BD4BF06258EF0C10B4B4148C06BA2552 /* GTMSessionFetcher-umbrella.h in Headers */, + 994CFA40B4C5DCFBB44D5C87C67A8DFB /* GTMSessionFetcherLogging.h in Headers */, + F488E83EAE25B20CEEA7964AB4C9D4AC /* GTMSessionFetcherService.h in Headers */, + D9561F519F6A9A149DA575763CDBF97C /* GTMSessionFetcherService+Internal.h in Headers */, + 1E6168B407933688D8EA3AA66E729E2D /* GTMSessionUploadFetcher.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 52E6F7B26483BE3BC9393C6C05D32424 /* Headers */ = { + 187A695464397D98D5BE188F47FDB6A3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 005B319B494ED2DAA239B9939A504DFC /* Alamofire-umbrella.h in Headers */, + 626FA39B40467D3D10F75FFD561D5D98 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.h in Headers */, + 5E6C259D8A95587237F775DE48C9E794 /* GIDAuthentication.h in Headers */, + D5719B165C0769CDB56797822F9A1E9D /* GIDAuthStateMigration.h in Headers */, + 6184B44006EEB08920BCBC9C89E42321 /* GIDCallbackQueue.h in Headers */, + 2CB304656EFE129CD57D675EC4C49BDD /* GIDConfiguration.h in Headers */, + 69B53E4A8079382FDEDEBE386C0C0A63 /* GIDEMMErrorHandler.h in Headers */, + EBDD7C160A59CECF9A1105CE9EAD1060 /* GIDEMMSupport.h in Headers */, + 7688E908B66AF5D9244C10F24A995391 /* GIDGoogleUser.h in Headers */, + 4C567889124696748960689155BB8691 /* GIDGoogleUser_Private.h in Headers */, + E778EB057250544395A904A0A44878F6 /* GIDMDMPasscodeCache.h in Headers */, + CD86DADC8B652D9338EA26569F21C002 /* GIDMDMPasscodeState.h in Headers */, + 3312C165C4A0F52E47D5BF1F5B831247 /* GIDMDMPasscodeState_Private.h in Headers */, + 457AAE6CF4889E50A69CC1CD6B0A75D0 /* GIDProfileData.h in Headers */, + D913C8BDF0EBCBF88A315025E4141D2D /* GIDProfileData_Private.h in Headers */, + 7C8C119226894820851AD645116589AA /* GIDScopes.h in Headers */, + 9E760C26EA5C6FA3CAFCC46A6060560F /* GIDSignIn.h in Headers */, + 7D9AB49C109F63DAB4AC7679523F315A /* GIDSignIn_Private.h in Headers */, + 5FBA17D69B45E313C317128A02326A88 /* GIDSignInButton.h in Headers */, + 7B254F4570114B8C9182328273C9B4C8 /* GIDSignInCallbackSchemes.h in Headers */, + 7BFF1E5A1F4B3678E8A8B59771235FDF /* GIDSignInInternalOptions.h in Headers */, + CEAD8DA8D7FCBD39A6540E35C3F40F61 /* GIDSignInPreferences.h in Headers */, + 7230B8E455EE7235C0D577397975605B /* GIDSignInResult.h in Headers */, + 19DD4581BE19AE590907FCF479F23768 /* GIDSignInResult_Private.h in Headers */, + 94906F9D82EC826CDD706AFD7E50F734 /* GIDSignInStrings.h in Headers */, + 035956CCF35FA56AD2CD0D01F572D70F /* GIDToken.h in Headers */, + 48507EA6A09E5F6AB9DE03BCE1D439FF /* GIDToken_Private.h in Headers */, + D5AAB7C418BE483A6E12F1A716395E1F /* GoogleSignIn.h in Headers */, + 3770FE86535BBC5091EDC7A26A4F583C /* GoogleSignIn-umbrella.h in Headers */, + 8D8C06CA832855F7F2A4866C3FF294B0 /* NSBundle+GID3PAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5D4A23923F18F9A4977664BA5D4D0FE7 /* Headers */ = { + 21DAE4FF14902DFE0DDEBEBCEB6074E9 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - A8905D943987A0395A54227F68C657F4 /* GTMSessionFetcher.h in Headers */, - 23F701817EF696D1C38ADCE923CEE04E /* GTMSessionFetcher-umbrella.h in Headers */, - B1F3C53DB512FB766262E99D8BB33E6F /* GTMSessionFetcherLogging.h in Headers */, - 41783AF25B90325153D3EC0FEBB2D8C9 /* GTMSessionFetcherService.h in Headers */, - A895456CE7035D7B4611F02D49268554 /* GTMSessionUploadFetcher.h in Headers */, + A0ADE174C817D317A1F11BCDD48F4108 /* GTMAppAuth.h in Headers */, + 9E446BE4057BFB71D703FBA219517E40 /* GTMAppAuth-umbrella.h in Headers */, + D340F603D2D378520C7DF6D1017C5867 /* GTMAppAuthFetcherAuthorization.h in Headers */, + 85EA64E2C72CFDEC660AAB46F068F1FA /* GTMAppAuthFetcherAuthorization+Keychain.h in Headers */, + 3B20EA4BC0B328E2542C518273FA7046 /* GTMKeychain.h in Headers */, + 5E3B1A932202F529808ECC95A1E21886 /* GTMOAuth2KeychainCompatibility.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1344,6 +1375,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + ED12AA7015568FEE3FAA009FC97DAAD5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F038D81F7ABAA15CF03246AD4BF334F7 /* Alamofire-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -1385,11 +1424,11 @@ }; 7DFA91ED3A3D0BC020C3C843A3D1EB38 /* GoogleSignIn-GoogleSignIn */ = { isa = PBXNativeTarget; - buildConfigurationList = 4EB3C38ED30ED179253549F7F3E231E0 /* Build configuration list for PBXNativeTarget "GoogleSignIn-GoogleSignIn" */; + buildConfigurationList = 2B9A5FD1B856CE8AA0D5496E5CF2C878 /* Build configuration list for PBXNativeTarget "GoogleSignIn-GoogleSignIn" */; buildPhases = ( - AF7167FD8C95098D4E5FEA6722163A99 /* Sources */, - 8C0B997889FCB0F9560A6D2BD0A87A36 /* Frameworks */, - B6C1865D4BB433F64DE4F18A8445B98F /* Resources */, + 8DEB688CCB8503B92D2E23ACD0D8B331 /* Sources */, + FB663AFDD79516ADE3660A3DDA3C2588 /* Frameworks */, + 755AA04D3D3474C475DCFB38FC409D63 /* Resources */, ); buildRules = ( ); @@ -1412,8 +1451,8 @@ buildRules = ( ); dependencies = ( - 9F88F1545741E815FCE30F2573F28D69 /* PBXTargetDependency */, - 76B4D6BD310BE83424885D1897E6B625 /* PBXTargetDependency */, + 63064AA728D7BEE894954DAFB4E7042D /* PBXTargetDependency */, + F08C9AC3BD95D50B864931E10972B6E8 /* PBXTargetDependency */, ); name = GTMAppAuth; productName = GTMAppAuth; @@ -1422,20 +1461,20 @@ }; CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */ = { isa = PBXNativeTarget; - buildConfigurationList = BA2432079C4BF8AB52AF589664C88B11 /* Build configuration list for PBXNativeTarget "GoogleSignIn" */; + buildConfigurationList = 2D97C185A5D514FB434B640B16109400 /* Build configuration list for PBXNativeTarget "GoogleSignIn" */; buildPhases = ( - 30FCB41FB612F0AE884B40FFAC34F267 /* Headers */, - 15D5FFCBC73B7485BDCF8EECE8DCE17F /* Sources */, - 2DB4560293A4030C46B4728187F95E48 /* Frameworks */, - B7F39BF53B8135D4EB9FF2CFFF72661D /* Resources */, + 187A695464397D98D5BE188F47FDB6A3 /* Headers */, + 893EF1C6B555F86739CD28143DE803FF /* Sources */, + D37776EE31012C0DC3ACACC053C3D870 /* Frameworks */, + 2601A5E022F946805AD2DCFEDF882720 /* Resources */, ); buildRules = ( ); dependencies = ( - A6AD46941192A9CEE1FA37E5B95791DA /* PBXTargetDependency */, - 89D626F0728E81D3C2B01FA1A98FC529 /* PBXTargetDependency */, - 0DD0090F87A57C93202E7B908B90E0FD /* PBXTargetDependency */, - DF87EFCE7EC94DDDDC83103F11234A5E /* PBXTargetDependency */, + 515C04B4EE5044071A94FA4CC161A3EE /* PBXTargetDependency */, + 19452690F9A3E47725DE18FDCB8F1016 /* PBXTargetDependency */, + 9374B3BD1FC3104BA8D7C3D122D7CAE8 /* PBXTargetDependency */, + 5DF62498354CCE63117BA2AB204327E6 /* PBXTargetDependency */, ); name = GoogleSignIn; productName = GoogleSignIn; @@ -1444,12 +1483,12 @@ }; D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */ = { isa = PBXNativeTarget; - buildConfigurationList = BE3D2044734BA18B7B04E9BA3829D56A /* Build configuration list for PBXNativeTarget "GTMSessionFetcher" */; + buildConfigurationList = 75D667C6ED56110E4313C6F44C580DCC /* Build configuration list for PBXNativeTarget "GTMSessionFetcher" */; buildPhases = ( - 5D4A23923F18F9A4977664BA5D4D0FE7 /* Headers */, - D56F05A5C5D4267F8B8C597751616A28 /* Sources */, - 638435ADE77A3B2B34EBAE569CA625A4 /* Frameworks */, - 0D8D2FDC64C9D4639F15903EE302F857 /* Resources */, + 13B4D4EEB79A0D1988BDF83C67093A82 /* Headers */, + 95E054025B3E3BB98BB202223625FDAF /* Sources */, + 10FC827FCACE447AC4576DF39B3AD68B /* Frameworks */, + 437126F391316E3FD8F1695E351F677D /* Resources */, ); buildRules = ( ); @@ -1462,12 +1501,12 @@ }; EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */ = { isa = PBXNativeTarget; - buildConfigurationList = 8A212264186B8822192F9C369D7DE4BB /* Build configuration list for PBXNativeTarget "Alamofire" */; + buildConfigurationList = D7761A54AFA2998F27E0BC2FACC2EB53 /* Build configuration list for PBXNativeTarget "Alamofire" */; buildPhases = ( - 52E6F7B26483BE3BC9393C6C05D32424 /* Headers */, - F5D2A45FBA06D86A537CB441D5BF4FF4 /* Sources */, - 15DC142A7EE833251AA37FC8E2B8E01F /* Frameworks */, - E9D4145FA41F60FFAB33A07796D9ED97 /* Resources */, + ED12AA7015568FEE3FAA009FC97DAAD5 /* Headers */, + 277C3B3F937C6D40D2B777A164FAB89D /* Sources */, + 5BF6E64D3157435E5797A5278584A4DC /* Frameworks */, + 565FD2058706F22D2347B30C65280F30 /* Resources */, ); buildRules = ( ); @@ -1490,13 +1529,13 @@ buildRules = ( ); dependencies = ( - E161AE33C72EA05FB74D64A28EF30A69 /* PBXTargetDependency */, - 6D41891267EE8CD2B4E5329F7AF849C6 /* PBXTargetDependency */, - E64E81FFDC2637B540CA444EA8CF1963 /* PBXTargetDependency */, - 2DB6A3E20904F1AF0CED68463301C054 /* PBXTargetDependency */, - 31F4965BC930BBFF6CAFCCD642F030BD /* PBXTargetDependency */, - 596523D191759F6B93D84BB8E95B6CCA /* PBXTargetDependency */, - D68A55331B00DE70BA6ED1D45FEE6DE4 /* PBXTargetDependency */, + EDAD37BEDD0E11CBFFF100ECE361656B /* PBXTargetDependency */, + 13D6F9FBEBFEB4DC8B91D5B6F95C85BF /* PBXTargetDependency */, + 2267C50EE82F4412D86DE3016250B2E6 /* PBXTargetDependency */, + 62105E84632FDB2DDD68C46BC4743715 /* PBXTargetDependency */, + 66BE69C25E0A38DBD4C3A4A81E341B99 /* PBXTargetDependency */, + 827EC126A6A84423696B2769199726C6 /* PBXTargetDependency */, + 5F50A6727B957464FD0C52467E61B7D8 /* PBXTargetDependency */, ); name = "Pods-iosenv"; productName = Pods_iosenv; @@ -1509,8 +1548,8 @@ BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1300; - LastUpgradeCheck = 1300; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 14.0"; @@ -1576,10 +1615,11 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 0D8D2FDC64C9D4639F15903EE302F857 /* Resources */ = { + 2601A5E022F946805AD2DCFEDF882720 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + C80E6A729D4A289850B7EFF27521998D /* GoogleSignIn-GoogleSignIn in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1590,85 +1630,84 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 65A3FD9BD8BC90D92253A17F9BCCC465 /* Resources */ = { + 437126F391316E3FD8F1695E351F677D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 6A8691D9D62A92267A23BD533B3D4D7C /* Resources */ = { + 565FD2058706F22D2347B30C65280F30 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - B6C1865D4BB433F64DE4F18A8445B98F /* Resources */ = { + 65A3FD9BD8BC90D92253A17F9BCCC465 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C4ED6AF38FF2BA503B4FE2AE160D88C3 /* ar.lproj in Resources */, - D34D4F3F16A624799D6304266B46CFCE /* ca.lproj in Resources */, - 0554BFC1425DD4A370E049CF9F994B2C /* cs.lproj in Resources */, - E90E170121D17B98C02DF50D4F295E8E /* da.lproj in Resources */, - 2C0EF0620F4C818C0221B62FA6F69227 /* de.lproj in Resources */, - C8F14EFE1D32300A99520CC95F142059 /* el.lproj in Resources */, - 5C7DCE6E075A28236AC6DC724D5C28FC /* en.lproj in Resources */, - 1477198BFDCBDD6E122E35D28A59EBA3 /* en_GB.lproj in Resources */, - B0578577EF66EF804E7971C0539B0A1E /* es.lproj in Resources */, - 07F5638A22401A568CFAF65B438A4E1B /* es_MX.lproj in Resources */, - 8ABC98D87A147ACE0C78D76714481F50 /* fi.lproj in Resources */, - 778E8B222F6AE9E6656BBB108E0E25FD /* fr.lproj in Resources */, - C1E2C53757818E0F3AD166E0E5D67447 /* fr_CA.lproj in Resources */, - 1A530EB48C9DC0AB51F790E6711F4681 /* google.png in Resources */, - DB62B806BF4CED6D159B42EF7B8B7F12 /* google@2x.png in Resources */, - 0E751E1B2A7D90F933267D2C4A2328F7 /* google@3x.png in Resources */, - 11B2E874F819409973EDE8A7A4197B49 /* he.lproj in Resources */, - 6155165AE2EF8CF95AF643BEEC2FB621 /* hi.lproj in Resources */, - 58E5C2A4AE72375476E8B32DA2C54054 /* hr.lproj in Resources */, - AC9D6C33BC6BDFFBD5AA07B81D949F0D /* hu.lproj in Resources */, - 4261308E4AB331C21D60AEF1631470CA /* id.lproj in Resources */, - F379A500B6AA1AE39D30AD851EDD516B /* it.lproj in Resources */, - 0957B854DC888C7B4B8298FFA2CDD5A8 /* ja.lproj in Resources */, - F8204251164204834D7B51004E53CF8B /* ko.lproj in Resources */, - 90A3E0ADB41D8C4A05EE2491C6CA9A40 /* ms.lproj in Resources */, - DCE53DB0FF2266DBEABAFFF79B618147 /* nb.lproj in Resources */, - ECA83DAAF37943F7402834A57D697DFC /* nl.lproj in Resources */, - CC401652930FFB66DD8DC9CDCDC1F3C4 /* pl.lproj in Resources */, - 367491B7F9C8EAC9EC7FC68157A16B96 /* pt.lproj in Resources */, - 22E255E236F99AC5413C8E29922E3562 /* pt_BR.lproj in Resources */, - BD8BD4F66D9ACB7440D966A103DBA8FF /* pt_PT.lproj in Resources */, - 9A3A6C5978DD6D3398EA352719EBEAE4 /* ro.lproj in Resources */, - D534D720BF7DBD6BC976E108B520DC06 /* Roboto-Bold.ttf in Resources */, - 5A0C59BECA67B070264B77F01A7E28FD /* ru.lproj in Resources */, - 204678C7E51D4577299DBB1A86DC83F8 /* sk.lproj in Resources */, - 79684F0538090B4F2B07DC2337899FA4 /* sv.lproj in Resources */, - 746D95954096A158A259E75E0E463D5E /* th.lproj in Resources */, - 97D48924C3D0D34891A68822F954FC63 /* tr.lproj in Resources */, - 5307FCC2761EC3663F5894BC48F6520A /* uk.lproj in Resources */, - FC0DDE2ED7078D1E09408CC74B4FC3E6 /* vi.lproj in Resources */, - E9A7C114A547A54A4AEBC072ADB5362F /* zh_CN.lproj in Resources */, - A90C5E0FD8A1FE159D9D32BA0F5BCA38 /* zh_TW.lproj in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - B7F39BF53B8135D4EB9FF2CFFF72661D /* Resources */ = { + 6A8691D9D62A92267A23BD533B3D4D7C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - DF52D786A8770CCB89E0DB063D82E522 /* GoogleSignIn-GoogleSignIn in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E4923BF05CD070C0AA64025B1DF7C446 /* Resources */ = { + 755AA04D3D3474C475DCFB38FC409D63 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 801D43EF19228E51CB5E7ECA6E47A18C /* ar.lproj in Resources */, + 14EC2466FE81E8A2D8148B2B9B9A679A /* ca.lproj in Resources */, + 4A67CD0C8EED91FD95539586E7F14DDC /* cs.lproj in Resources */, + 5E77172DFB73C0D61173D4C19D9E7A9B /* da.lproj in Resources */, + 34DB157A5FCDF1B3FC72788DF5373E02 /* de.lproj in Resources */, + FFABF453FDBCC634A0061854D9D601BC /* el.lproj in Resources */, + F94536DC3935FC4BDA0A1E38706C22D4 /* en.lproj in Resources */, + A62A2C8C360880C56DB05A6F32C23123 /* en_GB.lproj in Resources */, + 41D37087A3EDD6BF2573B048A69F6E0F /* es.lproj in Resources */, + 85E73D48929DF5FFF94649C65FA7B2A9 /* es_MX.lproj in Resources */, + B682445292759FF5EA0D6AD3C156AED2 /* fi.lproj in Resources */, + D21C95F1115C3305635BE409C42EED97 /* fr.lproj in Resources */, + 4C5541449D8B932A592DE114F66F3E71 /* fr_CA.lproj in Resources */, + 2ABFED6053E3DCE35108F86A24AA30EC /* google.png in Resources */, + BCA5BDDE0647F2309582BB791BB33BDC /* google@2x.png in Resources */, + 1391EF7729CF84BDAC1CA463C3CC7B74 /* google@3x.png in Resources */, + B990D0DEBBBA0D8610F3959CD85FA24D /* he.lproj in Resources */, + F105B4E5866134DEC2010F1FE1EA49A9 /* hi.lproj in Resources */, + B1E04E3C7BDADB428C6B014B7BC0C9F4 /* hr.lproj in Resources */, + EC3DF5242EA092DC76F727C37D57937A /* hu.lproj in Resources */, + D384ECCD671D1D00D7F94E51EBA700F8 /* id.lproj in Resources */, + D8D38BCEC6338AE9F182C7E3EE86DF37 /* it.lproj in Resources */, + C26F7121AA27D3A476524E613354DE39 /* ja.lproj in Resources */, + EF2E7C80FA7AEDC65939302390CA3A94 /* ko.lproj in Resources */, + D95FAB0C6CD03ED4E29580E75EA22828 /* ms.lproj in Resources */, + D541A0BB022D65591E55A3F5DBBF20E4 /* nb.lproj in Resources */, + BCCD41C7A6E91DAC811942D3CB7CA13F /* nl.lproj in Resources */, + 0E7346845B009FB1B0F53AA7E70684C4 /* pl.lproj in Resources */, + 359A3AC81C7E40A9210575D3A3D73CFC /* pt.lproj in Resources */, + AF688EB1395DE8CA0C424FDB97E71DCE /* pt_BR.lproj in Resources */, + 53CB5EE102FC3BC44BB7E3858B45EBF0 /* pt_PT.lproj in Resources */, + 33A4AF1DF3276F9DBD8864EB51E19CF8 /* ro.lproj in Resources */, + 071A8971D126195770CF369ED688118F /* Roboto-Bold.ttf in Resources */, + F5231FD892706B53033F49A879EF5B6E /* ru.lproj in Resources */, + 7C4C5A4E9F7F9A3143A4731034EA4495 /* sk.lproj in Resources */, + 9C10BA357865C80E1578D416BDBF081B /* sv.lproj in Resources */, + 191A3EF24465CEB11F9F268C8FACCCA4 /* th.lproj in Resources */, + D9D1DF0D6135ECFAC0889469431D5EAA /* tr.lproj in Resources */, + 3700520959247EC427FB8D0328D515A0 /* uk.lproj in Resources */, + 6E9F679D22C2D21C4A2438BFA842232C /* vi.lproj in Resources */, + E986F7ED48EFDB2195E30D89DD2253EE /* zh_CN.lproj in Resources */, + C333F9FD02C4EBB8DE0B596FE8F48D97 /* zh_TW.lproj in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E9D4145FA41F60FFAB33A07796D9ED97 /* Resources */ = { + E4923BF05CD070C0AA64025B1DF7C446 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1678,28 +1717,48 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 15D5FFCBC73B7485BDCF8EECE8DCE17F /* Sources */ = { + 277C3B3F937C6D40D2B777A164FAB89D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 47410143C6FC4CE127EF8EF916A5D3D4 /* GIDAuthentication.m in Sources */, - 30A907372DD49DF9D7F247FBBCBC161F /* GIDAuthStateMigration.m in Sources */, - E7B0A51E30EDA1D3D84A69DD17F9CF6D /* GIDCallbackQueue.m in Sources */, - 57E6BEDC0BB006C6C95FFAE186CA7A8F /* GIDConfiguration.m in Sources */, - 7831CBDF377BAEC952506E72637F0ED5 /* GIDEMMErrorHandler.m in Sources */, - F8473F19A98E8C04DA797F91A71F8443 /* GIDGoogleUser.m in Sources */, - 8B4187E73E36BD0ED44C5FC332FA7472 /* GIDMDMPasscodeCache.m in Sources */, - 4D2805E08DD5504529DD9EFE864C1C1C /* GIDMDMPasscodeState.m in Sources */, - 1AACBC39D664A8AD7BB189A5005DAE8B /* GIDProfileData.m in Sources */, - D6EA3D1F76403E9BCB02CCA1F9F608B8 /* GIDScopes.m in Sources */, - 72ECE251BB85F8FA98DB01202F204E65 /* GIDSignIn.m in Sources */, - 0DCE6362B0F7FFE4944EEEE264F44E05 /* GIDSignInButton.m in Sources */, - 821FB438CE312546EE32383F6EA99E65 /* GIDSignInCallbackSchemes.m in Sources */, - 8CE97FF0E58BCE9AFEE153CFB2BD8383 /* GIDSignInInternalOptions.m in Sources */, - 6E3BD15973DAE572329F6B0D6DC831DF /* GIDSignInPreferences.m in Sources */, - EE2C1A0DD32A33303C09254902FEAADC /* GIDSignInStrings.m in Sources */, - 3F654EF9FAD6324FADB46F22AF942EDE /* GoogleSignIn-dummy.m in Sources */, - 936DA16C80D36E96495E80374C4FEFD3 /* NSBundle+GID3PAdditions.m in Sources */, + 320C0D7A88AA812EFB20016BA1F5D7AE /* AFError.swift in Sources */, + 81E6A0FF7F286008345ECFA3A2103FA8 /* Alamofire.swift in Sources */, + D09FBBADAF7C5C757AA5AB5DFE54BD25 /* Alamofire-dummy.m in Sources */, + F2415AE8678DE2698B7AD7D88B1A5C0F /* AlamofireExtended.swift in Sources */, + 197457852FC83E905248660B0F930452 /* AuthenticationInterceptor.swift in Sources */, + 04A8430BFC619C34E5F4D3878D094380 /* CachedResponseHandler.swift in Sources */, + 385BC4B250B6A6DB8AAAEA77D5B7A46F /* Combine.swift in Sources */, + 78B1DD1219182494A6AFAD26AAB20AA6 /* Concurrency.swift in Sources */, + 8E698F134A953250D5834C8B83CDAD34 /* DispatchQueue+Alamofire.swift in Sources */, + 82FD97FBBEFE51E2D3B434AF4954FC93 /* EventMonitor.swift in Sources */, + 529173B31EFCD3D199E79866AFBEC86C /* HTTPHeaders.swift in Sources */, + F66CC47AD425C8D57BD149AFD09C2AFE /* HTTPMethod.swift in Sources */, + 737747B9A98257DB58112C3A23686669 /* MultipartFormData.swift in Sources */, + 732C29255F73EF3D83D49BD4F8FEAA8F /* MultipartUpload.swift in Sources */, + BAB17A1C6CAD14B3788973EAF8466C93 /* NetworkReachabilityManager.swift in Sources */, + 3A59D8FBAF9A54906E3644AC80465AFB /* Notifications.swift in Sources */, + 7D64BC3E6CAA4AB54EAC0AAADE93F578 /* OperationQueue+Alamofire.swift in Sources */, + B17D933C8F8BC6A4F91AA620D7D7A870 /* ParameterEncoder.swift in Sources */, + 482B74C0548970BB9C095E2D8530E421 /* ParameterEncoding.swift in Sources */, + 079F0820555C5B86C9FBD5EC6344137F /* Protected.swift in Sources */, + ECE6F23823454A8FDB3F97CE1A7CD182 /* RedirectHandler.swift in Sources */, + 5B92A66A66BD639411C3D839A0F87B0C /* Request.swift in Sources */, + A523488C60BF961290D0B1ABB9ADACEC /* RequestCompression.swift in Sources */, + 1AFD57838680DF58184FF94D14C7F3FF /* RequestInterceptor.swift in Sources */, + ECF2F956B37A4C28B228BC291A57AD6E /* RequestTaskMap.swift in Sources */, + AA721ECC2B36AFB7D9FE70C83E6D63F9 /* Response.swift in Sources */, + 3FA127A261BB563409868A0DC21807B2 /* ResponseSerialization.swift in Sources */, + F6E94E8EE1CE35F49B9091BE8748587B /* Result+Alamofire.swift in Sources */, + 643A7AFFB7AEB70B2B9B7E0926055023 /* RetryPolicy.swift in Sources */, + 77AB6AF4BFC6DE016DA7C057B5799C84 /* ServerTrustEvaluation.swift in Sources */, + 282FCD4EA8B05830E9108690B8CD336B /* Session.swift in Sources */, + E6251F02EE12804D1B66AE32E716E664 /* SessionDelegate.swift in Sources */, + C04739CBCEE445B66192BFA708655EDF /* StringEncoding+Alamofire.swift in Sources */, + D0560E8E2E5EB407B5D8E0381BF453FA /* URLConvertible+URLRequestConvertible.swift in Sources */, + C8269B42DED12AB1F275648D0BD32E45 /* URLEncodedFormEncoder.swift in Sources */, + 11CCD832BD537718892C6A216A38490A /* URLRequest+Alamofire.swift in Sources */, + 67B10FEAA3B7E5387D20E76B1085E94D /* URLSessionConfiguration+Alamofire.swift in Sources */, + D368E6F70C5E6998548A72E65F92432D /* Validation.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1781,190 +1840,178 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AF7167FD8C95098D4E5FEA6722163A99 /* Sources */ = { + 893EF1C6B555F86739CD28143DE803FF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E2B6E6E693C283EF9EA674AFA8D4ABC0 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.m in Sources */, + C266072BDF15A9DE317F4C5C3AA71448 /* GIDAuthentication.m in Sources */, + FBEAD3D7CC06F1C9B1A2051C9183E770 /* GIDAuthStateMigration.m in Sources */, + 33D9EB7C1F362EB29C6B6B466E075957 /* GIDCallbackQueue.m in Sources */, + 4D45D093583A1740E65AAEE76983506C /* GIDConfiguration.m in Sources */, + 6ECA7A2734AE58ABDA4E743462EFCFBD /* GIDEMMErrorHandler.m in Sources */, + D38238AFB141BEDED91BC80BBE62B921 /* GIDEMMSupport.m in Sources */, + 80ABA6ADA9A7CBB82D8B3643AB6DF428 /* GIDGoogleUser.m in Sources */, + 8EB2A9FFA454CF8C25CFCB4F9B6E4CDB /* GIDMDMPasscodeCache.m in Sources */, + 4E2BCBDEB08C21AE94EE9DC81B71835F /* GIDMDMPasscodeState.m in Sources */, + A087910C9EA4649572B1B524CB08AB41 /* GIDProfileData.m in Sources */, + 428C0B4A61D3AF4A8546E1F33E80756E /* GIDScopes.m in Sources */, + ED53CE337631169205936C6CC9BA929F /* GIDSignIn.m in Sources */, + 105D363726CF65E8035DA2E7C35E9C53 /* GIDSignInButton.m in Sources */, + C47AA202C9949468E285F71E52F59D53 /* GIDSignInCallbackSchemes.m in Sources */, + 510356A3123F6C92F73351DBA1C62EDC /* GIDSignInInternalOptions.m in Sources */, + 5E6C63EDB46681D3217C20D104746D35 /* GIDSignInPreferences.m in Sources */, + 20126504B21BF96F7634D526C7950036 /* GIDSignInResult.m in Sources */, + 753603CE7D6B3142CFE5F9C2EA0B15D7 /* GIDSignInStrings.m in Sources */, + A51A5125B59B90F3DCA65A668C989E13 /* GIDToken.m in Sources */, + 9BCA8F259B631193A4D32A6E5C967661 /* GoogleSignIn-dummy.m in Sources */, + E2225A5D2909D0EC7D24B7C335C42CB1 /* NSBundle+GID3PAdditions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D56F05A5C5D4267F8B8C597751616A28 /* Sources */ = { + 8DEB688CCB8503B92D2E23ACD0D8B331 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C61BA42440ABEA7FC4307D2AB9785916 /* GTMSessionFetcher.m in Sources */, - 1BE29F87B82599DCB36904C603C9B599 /* GTMSessionFetcher-dummy.m in Sources */, - 59726A57C503CC1616F0EE99A7AC2156 /* GTMSessionFetcherLogging.m in Sources */, - 69523590CAA81D4D816D60CF5D7266CC /* GTMSessionFetcherService.m in Sources */, - 5DB430EEC058A52BA9502A1133C6903E /* GTMSessionUploadFetcher.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F5D2A45FBA06D86A537CB441D5BF4FF4 /* Sources */ = { + 95E054025B3E3BB98BB202223625FDAF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D0EA90FBF83350C49E6EF6C8A98D6F00 /* AFError.swift in Sources */, - F17A4CA4664CABB331D39FE902E06843 /* Alamofire.swift in Sources */, - 55AABB1FB38F61A3369ACC555FF3046D /* Alamofire-dummy.m in Sources */, - 1EE44196E7BCE57AD96A2C751651EF40 /* AlamofireExtended.swift in Sources */, - 7483E5327027263F7E4B94A2997191C4 /* AuthenticationInterceptor.swift in Sources */, - 2CBE3651CA006E19F5D64A2DE9B9A028 /* CachedResponseHandler.swift in Sources */, - 46A64A43AFA057B6B63C8F0C12F509B4 /* Combine.swift in Sources */, - 9C9030DEDB0DF955B16FE08C50892D57 /* Concurrency.swift in Sources */, - EEC150B66BCCD6C80FDA7E4D1975166B /* DispatchQueue+Alamofire.swift in Sources */, - CEBFFEED65D877702B2F36102528CF6D /* EventMonitor.swift in Sources */, - 7E02F5B62BE00E97847DF549FFED2490 /* HTTPHeaders.swift in Sources */, - D6B4751CED01D53E4A1B6A571AAA2F83 /* HTTPMethod.swift in Sources */, - 7FE695DA8EE7FF1286556E06B692009B /* MultipartFormData.swift in Sources */, - E9B4C89E7EB3B27D46AFCA452C3D426F /* MultipartUpload.swift in Sources */, - A29100AA1876DDEFF6F54694A51FDB0E /* NetworkReachabilityManager.swift in Sources */, - 2CCD13099063CD560E3067BD132914FA /* Notifications.swift in Sources */, - E54654D504A42C24F284A68F87F7671D /* OperationQueue+Alamofire.swift in Sources */, - 99D058E53EFEE3AC4857CDE3DBA5C004 /* ParameterEncoder.swift in Sources */, - 68FB2DCB4C77DBCAF9A6037E470F2BDE /* ParameterEncoding.swift in Sources */, - A53BDE589BDD6483F3EEDCE5EA1DCCD3 /* Protected.swift in Sources */, - 045DE6EBF9B2F63F60F5BE60C1198E06 /* RedirectHandler.swift in Sources */, - B3658C29BBDE1033F6269A92E612CB30 /* Request.swift in Sources */, - DD902FE8D6824681C929D028655AE121 /* RequestInterceptor.swift in Sources */, - DA34899BEF0668D76CBCE8C4CE47B97B /* RequestTaskMap.swift in Sources */, - 75966A9262648D4647D764E3E76BC6AC /* Response.swift in Sources */, - 824D816B1EE404F2DD400EE678695CBE /* ResponseSerialization.swift in Sources */, - 04A896288CE3A59B530250337A5F8362 /* Result+Alamofire.swift in Sources */, - 33A7D0F2D03004CE256A75E03DF33C70 /* RetryPolicy.swift in Sources */, - B704B198B9B520D449260877E300D821 /* ServerTrustEvaluation.swift in Sources */, - 81B8D2B7CEB25C2448B0BC9B33591A65 /* Session.swift in Sources */, - 1976BB7D7E26A12E29283E71154B63B3 /* SessionDelegate.swift in Sources */, - 7F1BB526AAE3ECDCE90127D9D0E10261 /* StringEncoding+Alamofire.swift in Sources */, - 8D75FC8D7476C9674234F39F1A820D8C /* URLConvertible+URLRequestConvertible.swift in Sources */, - 7930C94414B4C661867AC4FBE82E996C /* URLEncodedFormEncoder.swift in Sources */, - BC0ECA8F22DEDE8886E189CD0EAA1197 /* URLRequest+Alamofire.swift in Sources */, - 808C960C82D708FC1A42C581D6CB4940 /* URLSessionConfiguration+Alamofire.swift in Sources */, - 3C4059621E23842C19D4EB5D35B41989 /* Validation.swift in Sources */, + C25761CF87F539A1E504DC9F07C8F285 /* GTMSessionFetcher.m in Sources */, + 0D21458D0FFF973416F4D31FA64B5F51 /* GTMSessionFetcher-dummy.m in Sources */, + B8F5A8378BBD44AAF3726835866F0434 /* GTMSessionFetcherLogging.m in Sources */, + 7615564B6AEE0156376571A5BF892AA0 /* GTMSessionFetcherService.m in Sources */, + F0B1E83092B416DE9D4C9FEA5079AA07 /* GTMSessionUploadFetcher.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0DD0090F87A57C93202E7B908B90E0FD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GTMSessionFetcher; - target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; - targetProxy = B5F69692969F29D833CE87F8EBD79683 /* PBXContainerItemProxy */; - }; - 2DB6A3E20904F1AF0CED68463301C054 /* PBXTargetDependency */ = { + 13D6F9FBEBFEB4DC8B91D5B6F95C85BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GTMSessionFetcher; - target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; - targetProxy = E35F4906BC262AF0B21988028751717A /* PBXContainerItemProxy */; + name = AppAuth; + target = 5C642AA10FB29936669CC269F42079C6 /* AppAuth */; + targetProxy = 7A1363805A6C925A29BA371A3C7097F0 /* PBXContainerItemProxy */; }; - 31F4965BC930BBFF6CAFCCD642F030BD /* PBXTargetDependency */ = { + 19452690F9A3E47725DE18FDCB8F1016 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleSignIn; - target = CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */; - targetProxy = 1A2A4F170C11942B2BC4CA56EBB683F0 /* PBXContainerItemProxy */; + name = GTMAppAuth; + target = 8627999EF1D5E93E13DAFF580DA8CDCF /* GTMAppAuth */; + targetProxy = B60C10E07CC795D001E6BF13FAB4F57E /* PBXContainerItemProxy */; }; - 596523D191759F6B93D84BB8E95B6CCA /* PBXTargetDependency */ = { + 2267C50EE82F4412D86DE3016250B2E6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SuperTokensIOS; - target = 22111B9B809C629766088073D2FCF6C4 /* SuperTokensIOS */; - targetProxy = 5C491E2FD575A22DFBC0F609025CD3ED /* PBXContainerItemProxy */; + name = GTMAppAuth; + target = 8627999EF1D5E93E13DAFF580DA8CDCF /* GTMAppAuth */; + targetProxy = 21AF13FE299404C2FA3C4149D7304DE2 /* PBXContainerItemProxy */; }; - 6D41891267EE8CD2B4E5329F7AF849C6 /* PBXTargetDependency */ = { + 515C04B4EE5044071A94FA4CC161A3EE /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = AppAuth; target = 5C642AA10FB29936669CC269F42079C6 /* AppAuth */; - targetProxy = B729F9705159F42DA556D74A3AFC7ACE /* PBXContainerItemProxy */; + targetProxy = 76BF5F0B6DE53B15B737D40E082F94E1 /* PBXContainerItemProxy */; }; - 76B4D6BD310BE83424885D1897E6B625 /* PBXTargetDependency */ = { + 5DF62498354CCE63117BA2AB204327E6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GTMSessionFetcher; - target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; - targetProxy = 29E012113257E1F6129D3014CFBEB12C /* PBXContainerItemProxy */; + name = "GoogleSignIn-GoogleSignIn"; + target = 7DFA91ED3A3D0BC020C3C843A3D1EB38 /* GoogleSignIn-GoogleSignIn */; + targetProxy = 56EE36BC9434C1C3ACA1AD9F74EB2B59 /* PBXContainerItemProxy */; }; - 89D626F0728E81D3C2B01FA1A98FC529 /* PBXTargetDependency */ = { + 5F50A6727B957464FD0C52467E61B7D8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GTMAppAuth; - target = 8627999EF1D5E93E13DAFF580DA8CDCF /* GTMAppAuth */; - targetProxy = 515D8B500320C1D8F813A8B8131BE1C3 /* PBXContainerItemProxy */; + name = xcbeautify; + target = 25C8E397233E3949653DE6336A45B085 /* xcbeautify */; + targetProxy = 4377597FE31188C83ECB6B18D4CAC57B /* PBXContainerItemProxy */; }; - 9F88F1545741E815FCE30F2573F28D69 /* PBXTargetDependency */ = { + 62105E84632FDB2DDD68C46BC4743715 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AppAuth; - target = 5C642AA10FB29936669CC269F42079C6 /* AppAuth */; - targetProxy = 553CC11C52BE63C2C3D35E81207F835E /* PBXContainerItemProxy */; + name = GTMSessionFetcher; + target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; + targetProxy = 661F22646190FE3170C15E251992BE87 /* PBXContainerItemProxy */; }; - A6AD46941192A9CEE1FA37E5B95791DA /* PBXTargetDependency */ = { + 63064AA728D7BEE894954DAFB4E7042D /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = AppAuth; target = 5C642AA10FB29936669CC269F42079C6 /* AppAuth */; - targetProxy = 29C239EB5C503479BB32B4539F61B437 /* PBXContainerItemProxy */; + targetProxy = DA29F12D46B1D0A0DB04DBCA8D4F70FC /* PBXContainerItemProxy */; }; - D68A55331B00DE70BA6ED1D45FEE6DE4 /* PBXTargetDependency */ = { + 66BE69C25E0A38DBD4C3A4A81E341B99 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = xcbeautify; - target = 25C8E397233E3949653DE6336A45B085 /* xcbeautify */; - targetProxy = FFED9CA8D2C211C01702F139C7080279 /* PBXContainerItemProxy */; + name = GoogleSignIn; + target = CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */; + targetProxy = CA284B8F33C3E5664EBD37387E6DB74C /* PBXContainerItemProxy */; }; - DF87EFCE7EC94DDDDC83103F11234A5E /* PBXTargetDependency */ = { + 827EC126A6A84423696B2769199726C6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "GoogleSignIn-GoogleSignIn"; - target = 7DFA91ED3A3D0BC020C3C843A3D1EB38 /* GoogleSignIn-GoogleSignIn */; - targetProxy = F00DECC804F636772C4DD025B85FD19B /* PBXContainerItemProxy */; + name = SuperTokensIOS; + target = 22111B9B809C629766088073D2FCF6C4 /* SuperTokensIOS */; + targetProxy = 99D7F21DF0AF7C596FBAE59EE3EECA17 /* PBXContainerItemProxy */; + }; + 9374B3BD1FC3104BA8D7C3D122D7CAE8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GTMSessionFetcher; + target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; + targetProxy = 7D78B4161E9F1F0CF1796288FCD9A4E9 /* PBXContainerItemProxy */; }; - E161AE33C72EA05FB74D64A28EF30A69 /* PBXTargetDependency */ = { + EDAD37BEDD0E11CBFFF100ECE361656B /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Alamofire; target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = F11B4DEB269C4C33E44123990565B6AF /* PBXContainerItemProxy */; + targetProxy = B09171FBEDD0387FBC80884F1CD28AA7 /* PBXContainerItemProxy */; }; - E64E81FFDC2637B540CA444EA8CF1963 /* PBXTargetDependency */ = { + F08C9AC3BD95D50B864931E10972B6E8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GTMAppAuth; - target = 8627999EF1D5E93E13DAFF580DA8CDCF /* GTMAppAuth */; - targetProxy = FAA5BDAAE10A47505465F11246BEC2EC /* PBXContainerItemProxy */; + name = GTMSessionFetcher; + target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; + targetProxy = 8FF039B3683C5D505C3C30CB054934B9 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 0696C95B048C4F913357244AB80F35AD /* Release */ = { + 081BE3261F8F58D15FF4D16A8EE31367 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6C85CE2E525C346E2DC29D00C984BFB9 /* GoogleSignIn.release.xcconfig */; + baseConfigurationReference = 077A315CED16B35069E963C4EB834F92 /* xcbeautify.debug.xcconfig */; buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleSignIn"; - IBSC_MODULE = GoogleSignIn; - INFOPLIST_FILE = "Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - PRODUCT_NAME = GoogleSignIn; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); SDKROOT = iphoneos; - SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; }; - name = Release; + name = Debug; }; - 081BE3261F8F58D15FF4D16A8EE31367 /* Debug */ = { + 2D6DE48ED36A8D62E19980CBCB0F4104 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B444131D5BD83B6222ED349A034D998A /* xcbeautify.debug.xcconfig */; + baseConfigurationReference = C4AADAC1FBCE00CFDAAB5AAC9B002C0D /* xcbeautify.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; }; - 149B0D4C56EF20F4B4E081B3D71335D2 /* Release */ = { + 400BC1273D5539E59AF620BE36A17C01 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B7533BFC6D55BBEF3F45A12902E10F09 /* GTMAppAuth.release.xcconfig */; + baseConfigurationReference = C9384835461C91C0FFA801AF50DF5393 /* Pods-iosenv.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; @@ -1972,21 +2019,23 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-iosenv/Pods-iosenv-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth.modulemap"; - PRODUCT_MODULE_NAME = GTMAppAuth; - PRODUCT_NAME = GTMAppAuth; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-iosenv/Pods-iosenv.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -1994,27 +2043,77 @@ }; name = Release; }; - 2D6DE48ED36A8D62E19980CBCB0F4104 /* Release */ = { + 4BC7450F9457737EE3E637BA155B56F7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F3D7B1A5C31C4D3D66ABC9EE2909C5E0 /* xcbeautify.release.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", "$(inherited)", - "@executable_path/Frameworks", ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; }; - name = Release; + name = Debug; }; - 3116465253E5D2735E81E263946C254A /* Debug */ = { + 60BA9E8E89D51ECC3F51C8CAECC9C726 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4C0D12CD06550E2888C6789085D6AB3D /* AppAuth.debug.xcconfig */; + baseConfigurationReference = 2550152E22D380B9C3E011DA694897D1 /* GTMSessionFetcher.debug.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -2023,18 +2122,17 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/AppAuth/AppAuth-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AppAuth/AppAuth-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/AppAuth/AppAuth.modulemap"; - PRODUCT_MODULE_NAME = AppAuth; - PRODUCT_NAME = AppAuth; + MODULEMAP_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap"; + PRODUCT_MODULE_NAME = GTMSessionFetcher; + PRODUCT_NAME = GTMSessionFetcher; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -2045,10 +2143,11 @@ }; name = Debug; }; - 461921B3A725421F267CD1C26D55180C /* Release */ = { + 769AD1402BB4FAFA14D71FF18FA99D2E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ADAC3B2A8F9BA263360CCFBE8939D1EC /* GTMSessionFetcher.release.xcconfig */; + baseConfigurationReference = ED9A9FF68C4DAFDE666E7F927ECD3BC2 /* SuperTokensIOS.release.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -2057,17 +2156,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SuperTokensIOS/SuperTokensIOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SuperTokensIOS/SuperTokensIOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap"; - PRODUCT_MODULE_NAME = GTMSessionFetcher; - PRODUCT_NAME = GTMSessionFetcher; + MODULEMAP_FILE = "Target Support Files/SuperTokensIOS/SuperTokensIOS.modulemap"; + PRODUCT_MODULE_NAME = SuperTokensIOS; + PRODUCT_NAME = SuperTokensIOS; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -2079,25 +2179,26 @@ }; name = Release; }; - 4784F4E392ADBB877D765743751BBA08 /* Debug */ = { + 7B08175144D9BAEB35E393077EC88BD8 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 498B6CF33252D5D8251D927C1EEC0D7A /* GoogleSignIn.debug.xcconfig */; + baseConfigurationReference = 344026452765BD28208604BCF9ACBAC7 /* GoogleSignIn.release.xcconfig */; buildSettings = { + CODE_SIGNING_ALLOWED = NO; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleSignIn"; IBSC_MODULE = GoogleSignIn; INFOPLIST_FILE = "Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; PRODUCT_NAME = GoogleSignIn; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Debug; + name = Release; }; - 5AB37E03E3E3A42A2938B0D8746B6B59 /* Debug */ = { + 859E8832FC0E6D15F8B017733E248186 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5961504C8AE232249CCBE2FC1D115660 /* GTMSessionFetcher.debug.xcconfig */; + baseConfigurationReference = 2A8D6E22997569C5A4333D80838DDE1C /* AppAuth.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2107,50 +2208,114 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AppAuth/AppAuth-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AppAuth/AppAuth-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap"; - PRODUCT_MODULE_NAME = GTMSessionFetcher; - PRODUCT_NAME = GTMSessionFetcher; + MODULEMAP_FILE = "Target Support Files/AppAuth/AppAuth.modulemap"; + PRODUCT_MODULE_NAME = AppAuth; + PRODUCT_NAME = AppAuth; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; + }; + 8B5A46FF8D3C1289CDEE3BAFACABCD2A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; }; - 71391320649BDC6CE2ACAF7BD7D69517 /* Debug */ = { + 8C20B4DC49AAE80A57103552AB4053E4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B1E437536B4D6405E884A3936DE1547E /* GTMAppAuth.debug.xcconfig */; + baseConfigurationReference = 2DEE718A04F32A7E8ABEE69349744805 /* GoogleSignIn.debug.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth.modulemap"; - PRODUCT_MODULE_NAME = GTMAppAuth; - PRODUCT_NAME = GTMAppAuth; + MODULEMAP_FILE = "Target Support Files/GoogleSignIn/GoogleSignIn.modulemap"; + PRODUCT_MODULE_NAME = GoogleSignIn; + PRODUCT_NAME = GoogleSignIn; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -2161,9 +2326,9 @@ }; name = Debug; }; - 769AD1402BB4FAFA14D71FF18FA99D2E /* Release */ = { + 91B7EF062E4C57614683CFFF4332D843 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 07DE0A6486C1ACA40DA155ED70CD5090 /* SuperTokensIOS.release.xcconfig */; + baseConfigurationReference = ADB98C94166C5330129280A21EB048E3 /* SuperTokensIOS.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2177,7 +2342,7 @@ GCC_PREFIX_HEADER = "Target Support Files/SuperTokensIOS/SuperTokensIOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SuperTokensIOS/SuperTokensIOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -2191,43 +2356,38 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 7EC45F896F1C03CD943D9B22FA1E6D43 /* Release */ = { + 945475389E6998558FD49D72931F006F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C9384835461C91C0FFA801AF50DF5393 /* Pods-iosenv.release.xcconfig */; + baseConfigurationReference = 344026452765BD28208604BCF9ACBAC7 /* GoogleSignIn.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-iosenv/Pods-iosenv-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-iosenv/Pods-iosenv.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/GoogleSignIn/GoogleSignIn.modulemap"; + PRODUCT_MODULE_NAME = GoogleSignIn; + PRODUCT_NAME = GoogleSignIn; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -2235,42 +2395,43 @@ }; name = Release; }; - 7FBCC101004B1E51482FEF20B838FA2E /* Release */ = { + ACC628E3E41F703E9390BEECA9E86A9E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6C85CE2E525C346E2DC29D00C984BFB9 /* GoogleSignIn.release.xcconfig */; + baseConfigurationReference = A50E3DE1441EDD752700F7AF5ECF39BA /* GTMAppAuth.debug.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/GoogleSignIn/GoogleSignIn.modulemap"; - PRODUCT_MODULE_NAME = GoogleSignIn; - PRODUCT_NAME = GoogleSignIn; + MODULEMAP_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth.modulemap"; + PRODUCT_MODULE_NAME = GTMAppAuth; + PRODUCT_NAME = GTMAppAuth; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 880219FBBFBA4B703A46B5F770D59ADF /* Debug */ = { + B7D9E7CD650F798EC835C67DACFEBC4F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0C0B91F8193429751D8935E6942F484 /* Alamofire.debug.xcconfig */; + baseConfigurationReference = 07C8E048D2D246B8CA8B7456079EEC78 /* Alamofire.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2284,7 +2445,7 @@ GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -2303,76 +2464,11 @@ }; name = Debug; }; - 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */ = { + C1E2FC53F80199E32191A964A7E19E25 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 91A24FBF3A7324C4053EDF92AC35AE56 /* Pods-iosenv.debug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 91B7EF062E4C57614683CFFF4332D843 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8BE4F2FF1627EAC1610E1DFE1115D8A2 /* SuperTokensIOS.debug.xcconfig */; - buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2382,112 +2478,53 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SuperTokensIOS/SuperTokensIOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SuperTokensIOS/SuperTokensIOS-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-iosenv/Pods-iosenv-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/SuperTokensIOS/SuperTokensIOS.modulemap"; - PRODUCT_MODULE_NAME = SuperTokensIOS; - PRODUCT_NAME = SuperTokensIOS; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-iosenv/Pods-iosenv.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - B571F951C4D4608741B406C1F18093F6 /* Debug */ = { + DB9CAFC27F6824D854A8A6E3CAD1D6C9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 498B6CF33252D5D8251D927C1EEC0D7A /* GoogleSignIn.debug.xcconfig */; + baseConfigurationReference = FC88463E58B60899EBB3512FA2C1B71C /* AppAuth.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AppAuth/AppAuth-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AppAuth/AppAuth-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/GoogleSignIn/GoogleSignIn.modulemap"; - PRODUCT_MODULE_NAME = GoogleSignIn; - PRODUCT_NAME = GoogleSignIn; + MODULEMAP_FILE = "Target Support Files/AppAuth/AppAuth.modulemap"; + PRODUCT_MODULE_NAME = AppAuth; + PRODUCT_NAME = AppAuth; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -2498,11 +2535,10 @@ }; name = Debug; }; - C02070B15C1BFEDE0986A7D210DF099F /* Debug */ = { + E42B8E34E5912AD709858B49B88A6A31 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91A24FBF3A7324C4053EDF92AC35AE56 /* Pods-iosenv.debug.xcconfig */; + baseConfigurationReference = 067F1C154570585E0CFD0FCC4DEE8F84 /* GTMSessionFetcher.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2512,33 +2548,50 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-iosenv/Pods-iosenv-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-iosenv/Pods-iosenv.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap"; + PRODUCT_MODULE_NAME = GTMSessionFetcher; + PRODUCT_NAME = GTMSessionFetcher; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Release; + }; + E7F698503721620DE27AECDBB0815621 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2DEE718A04F32A7E8ABEE69349744805 /* GoogleSignIn.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleSignIn"; + IBSC_MODULE = GoogleSignIn; + INFOPLIST_FILE = "Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + PRODUCT_NAME = GoogleSignIn; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; name = Debug; }; - C787002FA4C4FE6BC561E4294D831DFB /* Release */ = { + F5F3306F2C09AB4B623C805497E28D51 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B3B87127327A7A2F96237C4CE34C30A3 /* AppAuth.release.xcconfig */; + baseConfigurationReference = B296AB3D216F584907787EED50AC4516 /* Alamofire.release.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -2547,22 +2600,22 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/AppAuth/AppAuth-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AppAuth/AppAuth-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/AppAuth/AppAuth.modulemap"; - PRODUCT_MODULE_NAME = AppAuth; - PRODUCT_NAME = AppAuth; + MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; + PRODUCT_MODULE_NAME = Alamofire; + PRODUCT_NAME = Alamofire; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -2570,9 +2623,9 @@ }; name = Release; }; - F95E4C330E939A7027D8A4E361545DBB /* Release */ = { + FD8A73AF73B5FB40EA148FC4DB8B43E1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2929585BEAFAA5389A410B5BC5851F76 /* Alamofire.release.xcconfig */; + baseConfigurationReference = 1533120CF2E967623F0886D1CB13A99B /* GTMAppAuth.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2583,22 +2636,21 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; + MODULEMAP_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth.modulemap"; + PRODUCT_MODULE_NAME = GTMAppAuth; + PRODUCT_NAME = GTMAppAuth; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -2612,89 +2664,89 @@ 1166072F19D605AE7E4B016DD27CFA21 /* Build configuration list for PBXNativeTarget "GTMAppAuth" */ = { isa = XCConfigurationList; buildConfigurations = ( - 71391320649BDC6CE2ACAF7BD7D69517 /* Debug */, - 149B0D4C56EF20F4B4E081B3D71335D2 /* Release */, + ACC628E3E41F703E9390BEECA9E86A9E /* Debug */, + FD8A73AF73B5FB40EA148FC4DB8B43E1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 308DBE7C47FA87F2A3527A31C3CB6758 /* Build configuration list for PBXAggregateTarget "xcbeautify" */ = { + 2B9A5FD1B856CE8AA0D5496E5CF2C878 /* Build configuration list for PBXNativeTarget "GoogleSignIn-GoogleSignIn" */ = { isa = XCConfigurationList; buildConfigurations = ( - 081BE3261F8F58D15FF4D16A8EE31367 /* Debug */, - 2D6DE48ED36A8D62E19980CBCB0F4104 /* Release */, + E7F698503721620DE27AECDBB0815621 /* Debug */, + 7B08175144D9BAEB35E393077EC88BD8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + 2D97C185A5D514FB434B640B16109400 /* Build configuration list for PBXNativeTarget "GoogleSignIn" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */, - 9E406C6AAF85E580207CD97B0044DEAB /* Release */, + 8C20B4DC49AAE80A57103552AB4053E4 /* Debug */, + 945475389E6998558FD49D72931F006F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4EB3C38ED30ED179253549F7F3E231E0 /* Build configuration list for PBXNativeTarget "GoogleSignIn-GoogleSignIn" */ = { + 308DBE7C47FA87F2A3527A31C3CB6758 /* Build configuration list for PBXAggregateTarget "xcbeautify" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4784F4E392ADBB877D765743751BBA08 /* Debug */, - 0696C95B048C4F913357244AB80F35AD /* Release */, + 081BE3261F8F58D15FF4D16A8EE31367 /* Debug */, + 2D6DE48ED36A8D62E19980CBCB0F4104 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7F30EF97B77F6FB5E284C8BBBF3861B6 /* Build configuration list for PBXNativeTarget "SuperTokensIOS" */ = { + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 91B7EF062E4C57614683CFFF4332D843 /* Debug */, - 769AD1402BB4FAFA14D71FF18FA99D2E /* Release */, + 4BC7450F9457737EE3E637BA155B56F7 /* Debug */, + 8B5A46FF8D3C1289CDEE3BAFACABCD2A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8A212264186B8822192F9C369D7DE4BB /* Build configuration list for PBXNativeTarget "Alamofire" */ = { + 75D667C6ED56110E4313C6F44C580DCC /* Build configuration list for PBXNativeTarget "GTMSessionFetcher" */ = { isa = XCConfigurationList; buildConfigurations = ( - 880219FBBFBA4B703A46B5F770D59ADF /* Debug */, - F95E4C330E939A7027D8A4E361545DBB /* Release */, + 60BA9E8E89D51ECC3F51C8CAECC9C726 /* Debug */, + E42B8E34E5912AD709858B49B88A6A31 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AA5A2205A881DE5528CA6FE384DDD74F /* Build configuration list for PBXNativeTarget "AppAuth" */ = { + 7F30EF97B77F6FB5E284C8BBBF3861B6 /* Build configuration list for PBXNativeTarget "SuperTokensIOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3116465253E5D2735E81E263946C254A /* Debug */, - C787002FA4C4FE6BC561E4294D831DFB /* Release */, + 91B7EF062E4C57614683CFFF4332D843 /* Debug */, + 769AD1402BB4FAFA14D71FF18FA99D2E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BA2432079C4BF8AB52AF589664C88B11 /* Build configuration list for PBXNativeTarget "GoogleSignIn" */ = { + AA5A2205A881DE5528CA6FE384DDD74F /* Build configuration list for PBXNativeTarget "AppAuth" */ = { isa = XCConfigurationList; buildConfigurations = ( - B571F951C4D4608741B406C1F18093F6 /* Debug */, - 7FBCC101004B1E51482FEF20B838FA2E /* Release */, + DB9CAFC27F6824D854A8A6E3CAD1D6C9 /* Debug */, + 859E8832FC0E6D15F8B017733E248186 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BE3D2044734BA18B7B04E9BA3829D56A /* Build configuration list for PBXNativeTarget "GTMSessionFetcher" */ = { + C1A238D8FB80DC318FC18599C2F37331 /* Build configuration list for PBXNativeTarget "Pods-iosenv" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5AB37E03E3E3A42A2938B0D8746B6B59 /* Debug */, - 461921B3A725421F267CD1C26D55180C /* Release */, + C1E2FC53F80199E32191A964A7E19E25 /* Debug */, + 400BC1273D5539E59AF620BE36A17C01 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C1A238D8FB80DC318FC18599C2F37331 /* Build configuration list for PBXNativeTarget "Pods-iosenv" */ = { + D7761A54AFA2998F27E0BC2FACC2EB53 /* Build configuration list for PBXNativeTarget "Alamofire" */ = { isa = XCConfigurationList; buildConfigurations = ( - C02070B15C1BFEDE0986A7D210DF099F /* Debug */, - 7EC45F896F1C03CD943D9B22FA1E6D43 /* Release */, + B7D9E7CD650F798EC835C67DACFEBC4F /* Debug */, + F5F3306F2C09AB4B623C805497E28D51 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Pods.xcodeproj/xcuserdata/nemi.xcuserdatad/xcschemes/Pods-iosenv.xcscheme b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Pods.xcodeproj/xcuserdata/nemi.xcuserdatad/xcschemes/Pods-iosenv.xcscheme index d802d5f29..2d8a3c741 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Pods.xcodeproj/xcuserdata/nemi.xcuserdatad/xcschemes/Pods-iosenv.xcscheme +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Pods.xcodeproj/xcuserdata/nemi.xcuserdatad/xcschemes/Pods-iosenv.xcscheme @@ -1,6 +1,6 @@ isShown + orderHint + 0 AppAuth.xcscheme isShown + orderHint + 1 GTMAppAuth.xcscheme isShown + orderHint + 4 GTMSessionFetcher.xcscheme isShown + orderHint + 5 GoogleSignIn-GoogleSignIn.xcscheme isShown + orderHint + 3 GoogleSignIn.xcscheme isShown + orderHint + 2 Pods-iosenv.xcscheme isShown + orderHint + 6 SuperTokensIOS.xcscheme isShown + orderHint + 7 xcbeautify.xcscheme isShown + orderHint + 8 SuppressBuildableAutocreation diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/SuperTokensIOS/SuperTokensIOS/Classes/Version.swift b/v2/src/plugins/codeTypeChecking/iosenv/Pods/SuperTokensIOS/SuperTokensIOS/Classes/Version.swift index bb4bffbb7..fc7167603 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/SuperTokensIOS/SuperTokensIOS/Classes/Version.swift +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/SuperTokensIOS/SuperTokensIOS/Classes/Version.swift @@ -8,6 +8,6 @@ import Foundation internal class Version { - static let supported_fdi: [String] = ["1.16", "1.17"] - static let sdkVersion = "0.2.5" + static let supported_fdi: [String] = ["1.16", "1.17", "1.18"] + static let sdkVersion = "0.2.6" } diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire-Info.plist b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire-Info.plist index 643e600cf..d1ca5f018 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire-Info.plist +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 5.6.2 + 5.8.1 CFBundleSignature ???? CFBundleVersion diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig index 7d169c44f..dbfd4d146 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig @@ -1,11 +1,12 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "CFNetwork" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig index 7d169c44f..dbfd4d146 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig @@ -1,11 +1,12 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "CFNetwork" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth-Info.plist b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth-Info.plist index 2f66809b3..bd1b39158 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth-Info.plist +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.6.0 + 1.6.2 CFBundleSignature ???? CFBundleVersion diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth.debug.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth.debug.xcconfig index bba549906..dc98a5c13 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth.debug.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth.debug.xcconfig @@ -4,6 +4,7 @@ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 OTHER_LDFLAGS = $(inherited) -framework "SafariServices" -weak_framework "AuthenticationServices" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/AppAuth PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth.release.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth.release.xcconfig index bba549906..dc98a5c13 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth.release.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/AppAuth/AppAuth.release.xcconfig @@ -4,6 +4,7 @@ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 OTHER_LDFLAGS = $(inherited) -framework "SafariServices" -weak_framework "AuthenticationServices" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/AppAuth PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist index 10f280eb4..6efd1867f 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.3.1 + 2.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.debug.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.debug.xcconfig index 7eaec581b..19db02ec1 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.debug.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.debug.xcconfig @@ -6,6 +6,7 @@ HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" OTHER_LDFLAGS = $(inherited) -framework "AppAuth" -framework "GTMSessionFetcher" -framework "SafariServices" -framework "Security" -weak_framework "AuthenticationServices" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/GTMAppAuth PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.release.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.release.xcconfig index 7eaec581b..19db02ec1 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.release.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.release.xcconfig @@ -6,6 +6,7 @@ HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" OTHER_LDFLAGS = $(inherited) -framework "AppAuth" -framework "GTMSessionFetcher" -framework "SafariServices" -framework "Security" -weak_framework "AuthenticationServices" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/GTMAppAuth PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist index 7f71fffcf..56509df06 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.1.0 + 3.1.1 CFBundleSignature ???? CFBundleVersion diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.debug.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.debug.xcconfig index b1f76295d..da91a3f2e 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.debug.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.debug.xcconfig @@ -4,6 +4,7 @@ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 OTHER_LDFLAGS = $(inherited) -framework "Security" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/GTMSessionFetcher PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.release.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.release.xcconfig index b1f76295d..da91a3f2e 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.release.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.release.xcconfig @@ -4,6 +4,7 @@ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 OTHER_LDFLAGS = $(inherited) -framework "Security" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/GTMSessionFetcher PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist index d2b23dfda..750b9a15c 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 6.2.4 + 7.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-umbrella.h b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-umbrella.h index e37964aea..f4222061c 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-umbrella.h +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-umbrella.h @@ -10,12 +10,13 @@ #endif #endif -#import "GIDAuthentication.h" #import "GIDConfiguration.h" #import "GIDGoogleUser.h" #import "GIDProfileData.h" #import "GIDSignIn.h" #import "GIDSignInButton.h" +#import "GIDSignInResult.h" +#import "GIDToken.h" #import "GoogleSignIn.h" FOUNDATION_EXPORT double GoogleSignInVersionNumber; diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.debug.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.debug.xcconfig index e23744f11..c87505dc4 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.debug.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.debug.xcconfig @@ -3,11 +3,12 @@ COMBINE_HIDPI_IMAGES = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn DEFINES_MODULE = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GID_SDK_VERSION=6.2.4 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GID_SDK_VERSION=7.0.0 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" OTHER_LDFLAGS = $(inherited) -framework "AppAuth" -framework "CoreGraphics" -framework "CoreText" -framework "Foundation" -framework "GTMAppAuth" -framework "GTMSessionFetcher" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "UIKit" -weak_framework "AuthenticationServices" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleSignIn PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.release.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.release.xcconfig index e23744f11..c87505dc4 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.release.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.release.xcconfig @@ -3,11 +3,12 @@ COMBINE_HIDPI_IMAGES = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn DEFINES_MODULE = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GID_SDK_VERSION=6.2.4 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GID_SDK_VERSION=7.0.0 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" OTHER_LDFLAGS = $(inherited) -framework "AppAuth" -framework "CoreGraphics" -framework "CoreText" -framework "Foundation" -framework "GTMAppAuth" -framework "GTMSessionFetcher" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "UIKit" -weak_framework "AuthenticationServices" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleSignIn PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist index 501548284..f51a4b1fe 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleIdentifier ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion @@ -13,7 +13,7 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 6.2.4 + 7.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv-Info.plist b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv-Info.plist index 2243fe6e2..19cf209d2 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv-Info.plist +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv-frameworks.sh b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv-frameworks.sh index c81e2d81c..20b3d69a9 100755 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv-frameworks.sh +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv-frameworks.sh @@ -18,7 +18,7 @@ echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +SWIFT_STDLIB_PATH="${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" BCSYMBOLMAP_DIR="BCSymbolMaps" @@ -41,7 +41,7 @@ install_framework() if [ -L "${source}" ]; then echo "Symlinked..." - source="$(readlink "${source}")" + source="$(readlink -f "${source}")" fi if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv.debug.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv.debug.xcconfig index 5eb2a0a4d..e4b544747 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv.debug.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv.debug.xcconfig @@ -4,7 +4,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth/AppAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth/GTMAppAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn/GoogleSignIn.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SuperTokensIOS/SuperTokensIOS.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "AppAuth" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreText" -framework "Foundation" -framework "GTMAppAuth" -framework "GTMSessionFetcher" -framework "GoogleSignIn" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "SuperTokensIOS" -framework "UIKit" -weak_framework "AuthenticationServices" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv.release.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv.release.xcconfig index 5eb2a0a4d..e4b544747 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv.release.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/Pods-iosenv/Pods-iosenv.release.xcconfig @@ -4,7 +4,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth/AppAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth/GTMAppAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn/GoogleSignIn.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SuperTokensIOS/SuperTokensIOS.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "AppAuth" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreText" -framework "Foundation" -framework "GTMAppAuth" -framework "GTMSessionFetcher" -framework "GoogleSignIn" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "SuperTokensIOS" -framework "UIKit" -weak_framework "AuthenticationServices" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS-Info.plist b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS-Info.plist index c83163f61..583f3a70b 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS-Info.plist +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.2.5 + 0.2.6 CFBundleSignature ???? CFBundleVersion diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS.debug.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS.debug.xcconfig index 568c5f2b9..cfd877919 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS.debug.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS.debug.xcconfig @@ -1,10 +1,11 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SuperTokensIOS GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SuperTokensIOS PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS.release.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS.release.xcconfig index 568c5f2b9..cfd877919 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS.release.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/SuperTokensIOS/SuperTokensIOS.release.xcconfig @@ -1,10 +1,11 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SuperTokensIOS GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SuperTokensIOS PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/xcbeautify/xcbeautify.debug.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/xcbeautify/xcbeautify.debug.xcconfig index 61c04aeb8..cfb5b2ad8 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/xcbeautify/xcbeautify.debug.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/xcbeautify/xcbeautify.debug.xcconfig @@ -3,6 +3,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/xcbeautify GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/xcbeautify PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/xcbeautify/xcbeautify.release.xcconfig b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/xcbeautify/xcbeautify.release.xcconfig index 61c04aeb8..cfb5b2ad8 100644 --- a/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/xcbeautify/xcbeautify.release.xcconfig +++ b/v2/src/plugins/codeTypeChecking/iosenv/Pods/Target Support Files/xcbeautify/xcbeautify.release.xcconfig @@ -3,6 +3,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/xcbeautify GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/xcbeautify PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/v2/src/plugins/codeTypeChecking/iosenv/Pods/xcbeautify/xcbeautify b/v2/src/plugins/codeTypeChecking/iosenv/Pods/xcbeautify/xcbeautify index aa19f11f32562715176461b87d80826a326fe80f..c5032969912e798354cccb9d457bb37cb7a43552 100755 GIT binary patch literal 6095559 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ʷa}k!J%xHWv9CXS^Gi${wx)eKRGg2 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