> For the complete documentation index, see [llms.txt](https://docs.movesdk.com/move-platform/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.movesdk.com/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/api-interface/ios/setup.md).

# Setup

Before services can be started a user object must be setup to use the SDK and a services configuration must be provided.

### Setup Auth/Config

Authenticates a user to be used with the SDK.

```swift
func setup(auth: MoveAuth, config: MoveConfig)
```

| **Parameters** |                                                                                          |                              |
| -------------- | ---------------------------------------------------------------------------------------- | ---------------------------- |
| auth           | [MoveAuth](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveauth.md#ios)     | User account object.         |
| config         | [MoveConfig](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveconfig.md#ios) | Move services configuration. |

### Update Config

Change the config originally passed in setup.

```swift
func update(config: MoveConfig)
```

| Parameters |                                                                                          |                              |
| ---------- | ---------------------------------------------------------------------------------------- | ---------------------------- |
| config     | [MoveConfig](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveconfig.md#ios) | Move services configuration. |

Occasionally this functionality is needed for deployed apps when a projects configuration is updated on the backend.

{% hint style="warning" %}
**Precondition:** SDK user/config should be setup.
{% endhint %}

### Update authentication

Updates SDK [MoveAuth](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveauth.md). On SDK auth expiry, the [auth state listener](#set-sdk-auth-state-listener) will trigger expired state. The host app is expected to fetch a new [MoveAuth](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveauth.md) using its project API key and pass it to the MoveSDK using the following API:

```swift
func update(auth: MoveAuth, completion: ((MoveAuthError?) -> Void)? = nil)
```

| **Parameter** |                                                                                                                                    |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| auth          | The user's updated [MoveAuth](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveauth.md#ios) object with the new token. |

| **Callback** |                                                                                                                                                                                                  |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| completion   | Block that gets invoked on auth update completion with an optional [MoveAuthError](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveautherror.md#ios) for potential updating errors. |

{% hint style="warning" %}
**Precondition:** SDK user/config should be setup.
{% endhint %}

### **Get SDK Auth State**

Gets the current [MoveAuthState](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveauthstate.md).

```swift
func getAuthState() -> MoveAuthState
```

| **Return**                                                                                 |                  |
| ------------------------------------------------------------------------------------------ | ---------------- |
| [MoveAuthState](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveauthstate.md) | Latest SDK State |

### **Set SDK Auth State Listener**

Provide a block to be invoked every time [MoveAuthState](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveauthstate.md) changes.

```swift
func setAuthStateUpdateListener(_ listener: AuthStateCallback)
```

| **Callback**                                                                                                                    |                                                                                                                                           |
| ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| [AuthStateCallback](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/listeners-callbacks.md#auth-state-update-listener) | Block that gets invoked every time [MoveAuthState](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveauthstate.md) is updated. |

{% hint style="warning" %}

### Authentication Expiry

The host app is expected to monitor [MoveAuthState](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveauthstate.md) updates via`authStateUpdateListener`(Android / [iOS](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/api-interface/ios/services.md#set-sdk-auth-state-listener)) API and handle those changes accordingly.

Check [Authentication updates and expiry](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveauthstate.md#authentication-updates-and-expiry) for more details about authentication expiry and renewal.
{% endhint %}

### **Set SDK Initialization Listener**

Provide a block to be invoked when configuration fetch failed.

```swift
func setInitializationListener(_ listener: MoveInitializationCallback)
```

| **Callback**               |                                                                                    |
| -------------------------- | ---------------------------------------------------------------------------------- |
| MoveInitializationCallback | Block that gets invoked every time **configuration** fetch from the server failed. |

### Shutdown

Shutdown SDK shared instance.

Stops SDK services, send the queued user data, and de-initializes the SDK. After that is executed,  the [MoveSDKState](/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/movestate.md) will transit to `.uninitialized`.

```swift
func shutDown(force: Bool, _ callback: ((MoveShutdownResult) -> Void)?)
```

<table data-header-hidden><thead><tr><th width="139">Callback</th><th width="90"></th><th></th></tr></thead><tbody><tr><td><strong>Parameters</strong></td><td><strong>Default</strong></td><td></td></tr><tr><td>force</td><td>true</td><td>If true, <em>shutdown</em> executes immediately. Pending Data may be lost.</td></tr><tr><td>callback</td><td>nil</td><td>Returns a <a href="/move-platform/~/changes/1lLi1pFRKkteajbXv0hC/sdk/models/moveshutdownresult.md#ios">MoveShutdownResult</a> upon completion. May fail if not forced.</td></tr></tbody></table>

{% hint style="warning" %}
**Precondition:** SDK user/config should be setup.
{% endhint %}
