## Install Dependencies After initialization in your project directory with `amplify init`, edit your `Podfile` with the following: ```ruby target 'MyApp' do ##Replace MyApp with your application name use_frameworks! pod 'AWSMobileClient' # Required dependency pod 'AWSAuthUI' # Optional dependency required to use drop-in UI pod 'AWSUserPoolsSignIn' # Optional dependency required to use drop-in UI end ``` Next run the following command: ```bash pod install --repo-update ``` Open the **.xcworkspace** file for your project (close the **.xcodeproj** file if you already have it open). The CLI will create the `awsconfiguration.json` file in your project directory. In the Finder, drag `awsconfiguration.json` into Xcode under the top Project Navigator folder (the folder name should match your Xcode project name). When the `Options` dialog box appears, do the following: * Clear the `Copy items if needed` check box. * Choose `Create groups`, and then choose `Finish`. Build your project once to ensure all frameworks are pulled in and compile. ## Automated Setup Run the following command in your project's root folder: ```bash amplify add auth ``` > If you have previously enabled an Amplify category that uses Auth behind the scenes, e.g. Storage category, you may already have an Auth configuration. In such a case, run `amplify auth update` command to edit your configuration. The Amplify CLI prompts will help you to customize your auth configuration: - Customize sign-in/registration flow - Customize email and SMS messages for Multi-Factor Authentication - Customize attributes for your users, e.g. name, email - Enable 3rd party authentication providers like Facebook, Twitter, Google and Amazon After configuring your Authentication options, update your backend: ```bash amplify push ``` ### Lambda Triggers The CLI allows you to configure [Lambda Triggers](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html) for your Amazon Cognito User Pool. These enable you to add custom functionality to your registration and authentication flows. [Read more](/cli/usage/lambda-triggers) ## Manual Setup For manual configuration without the CLI, you must have an `awsconfiguration.json` file with the following: ```json { "IdentityManager": { "Default": {} }, "CredentialsProvider": { "CognitoIdentity": { "Default": { "PoolId": "XX-XXXX-X:XXXXXXXX-XXXX-1234-abcd-1234567890ab", "Region": "XX-XXXX-X" } } }, "CognitoUserPool": { "Default": { "PoolId": "XX-XXXX-X_abcd1234", "AppClientId": "XXXXXXXX", "Region": "XX-XXXX-X" } } } ``` If you are using both Cognito User and Identity Pools you will need all of the keys mentioned above. ### Initialization Open the `AppDelegate.swift` file in your Xcode project, import `AWSMobileClient` and add to the `application` function: ```swift import AWSMobileClient @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { // Initialize AWSMobileClient singleton AWSMobileClient.default().initialize { (userState, error) in if let userState = userState { print("UserState: \(userState.rawValue)") } else if let error = error { print("error: \(error.localizedDescription)") } } return true } ... ``` Build and run your program to see the initialized client in Xcode messages. Since you haven't logged in yet it will print a state of `signedOut`. The `userState` returns an ENUM which you can perform different actions in your workflow. For example, now add to the `viewDidLoad()` function of your `ViewController.swift`: ```swift import AWSMobileClient ... override func viewDidLoad() { super.viewDidLoad() switch( AWSMobileClient.default().currentUserState) { case .signedIn: DispatchQueue.main.async { print("Logged In") } case .signedOut: DispatchQueue.main.async { print("Signed Out") } default: AWSMobileClient.default().signOut() } } ``` You might leverage the above workflow to perform other actions in the `signedIn` case, such as calling [GraphQL APIs with AWS AppSync](/sdk/api/graphql) or uploading content with [Amazon S3](/sdk/storage/getting-started).