Manage user attributes
Fetch the current user's attributes
Invoke the following api to get the list of attributes assigned to the user.
func fetchAttributes() async {    do {        let attributes = try await Amplify.Auth.fetchUserAttributes()        print("User attributes - \(attributes)")    } catch let error as AuthError{        print("Fetching user attributes failed with error \(error)")    } catch {        print("Unexpected error: \(error)")    }}func fetchAttributes() -> AnyCancellable {    Amplify.Publisher.create {        try await Amplify.Auth.fetchUserAttributes()        }.sink {            if case let .failure(authError) = $0 {                print("Fetch user attributes failed with error \(authError)")            }        }        receiveValue: { attributes in            print("User attributes - \(attributes)")        }}Update user attribute
Invoke the update api for creating new or updating existing user attributes.
func updateAttribute() async {    do {        let updateResult = try await Amplify.Auth.update(            userAttribute: AuthUserAttribute(.phoneNumber, value: "+2223334444")        )
        switch updateResult.nextStep {        case .confirmAttributeWithCode(let deliveryDetails, let info):            print("Confirm the attribute with details send to - \(deliveryDetails) \(String(describing: info))")        case .done:            print("Update completed")        }    } catch let error as AuthError {        print("Update attribute failed with error \(error)")    } catch {        print("Unexpected error: \(error)")    }}func updateAttribute() -> AnyCancellable {    Amplify.Publisher.create {        try await Amplify.Auth.update(          userAttribute: AuthUserAttribute(.phoneNumber, value: "+2223334444")        )    }.sink {        if case let .failure(authError) = $0 {            print("Update attribute failed with error \(authError)")        }    }    receiveValue: { updateResult in        switch updateResult.nextStep {        case .confirmAttributeWithCode(let deliveryDetails, let info):            print("Confirm the attribute with details send to - \(deliveryDetails) \(info)")        case .done:            print("Update completed")        }    }}Verify user attribute
Some attributes require confirmation for the attribute update to complete. If the attribute need to be confirmed, the result of the above api will be CONFIRM_ATTRIBUTE_WITH_CODE. A confirmation code will be sent to the delivery medium mentioned in the delivery details. When the user gets the confirmation code, you can present a UI to the user to enter the code and invoke the confirm attribute api with their input:
func confirmAttribute() async {    do {        try await Amplify.Auth.confirm(userAttribute: .email, confirmationCode: "390739")        print("Attribute verified")    } catch let error as AuthError {        print("Update attribute failed with error \(error)")    } catch {        print("Unexpected error: \(error)")    }}func confirmAttribute() -> AnyCancellable {    Amplify.Publisher.create {        try await Amplify.Auth.confirm(userAttribute: .email, confirmationCode: "390739")        }.sink {            if case let .failure(authError) = $0 {                print("Update attribute failed with error \(authError)")            }        }        receiveValue: { _ in            print("Attribute verified")        }}Send user attribute verification code
If an attribute needs to be verified while the user is authenticated, invoke the send api as shown below:
func resendCode() async {    do {        let deliveryDetails = try await Amplify.Auth.resendConfirmationCode(forUserAttributeKey: .email)        print("Resend code send to - \(deliveryDetails)")    } catch let error as AuthError {        print("Resend code failed with error \(error)")    } catch {        print("Unexpected error: \(error)")    }}func resendCode() -> AnyCancellable {    Amplify.Publisher.create {        try await Amplify.Auth.resendConfirmationCode(forUserAttributeKey: .email)        }.sink {            if case let .failure(authError) = $0 {                print("Resend code failed with error \(authError)")            }        }        receiveValue: { deliveryDetails in            print("Resend code sent to - \(deliveryDetails)")        }}