# Setup

Before services can be started a user object must be setup to use the SDK and a services configuration must be provided (see [iOS Quick Start](https://docs.movesdk.com/move-platform/sdk/getting-started/ios/quick-start)).

### Setup Auth/Config

Authenticates a user to be used with the SDK.

```swift
func setup(authCode: String, config: MoveConfig, options: MoveOptions, callback: @escaping MoveAuthCallback)
```

| **Parameters** |                                                                                              |                                 |
| -------------- | -------------------------------------------------------------------------------------------- | ------------------------------- |
| authCode       | String                                                                                       | Auth code.                      |
| config         | [MoveConfig](https://docs.movesdk.com/move-platform/models/moveconfig#ios)                   | Move services configuration.    |
| options        | [MoveOptions](https://docs.movesdk.com/move-platform/models/moveoptions#ios)                 | Move SDK service options dict.  |
| callback       | [MoveAuthCallback](https://docs.movesdk.com/move-platform/models/listeners-callbacks#ios-12) | Called after setup with result. |

Setup with auth tokens:

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

| **Parameters** |                                                                              |                                |
| -------------- | ---------------------------------------------------------------------------- | ------------------------------ |
| auth           | [MoveAuth](https://docs.movesdk.com/move-platform/models/moveauth#ios)       | User account object.           |
| config         | [MoveConfig](https://docs.movesdk.com/move-platform/models/moveconfig#ios)   | Move services configuration.   |
| options        | [MoveOptions](https://docs.movesdk.com/move-platform/models/moveoptions#ios) | Move SDK service options dict. |

{% hint style="warning" %}
Deprecated, use [setup(authCode: ...) ](#setup-auth-config)instead
{% endhint %}

### Update Config

Change the config originally passed in setup.

<pre class="language-swift"><code class="lang-swift"><strong>func update(config: MoveConfig, options: MoveOptions? = nil)
</strong></code></pre>

| Parameters |                                                                              |                                |
| ---------- | ---------------------------------------------------------------------------- | ------------------------------ |
| config     | [MoveConfig](https://docs.movesdk.com/move-platform/models/moveconfig#ios)   | Move services configuration.   |
| options    | [MoveOptions](https://docs.movesdk.com/move-platform/models/moveoptions#ios) | Move SDK service options dict. |

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](https://docs.movesdk.com/move-platform/sdk/models/moveauth). The host app was expected to fetch a new [MoveAuth](https://docs.movesdk.com/move-platform/sdk/models/moveauth) using its project API key and pass it to the MoveSDK using the following API:

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

{% hint style="danger" %}
**Deprecated:** Token expiry is no longer a valid auth state forwarded to the app and does not need to be handled.
{% endhint %}

### **Get SDK Auth State**

Gets the current [MoveAuthState](https://docs.movesdk.com/move-platform/sdk/models/moveauthstate).

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

| **Return**                                                                       |                  |
| -------------------------------------------------------------------------------- | ---------------- |
| [MoveAuthState](https://docs.movesdk.com/move-platform/sdk/models/moveauthstate) | Latest SDK State |

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

Provide a block to be invoked every time [MoveAuthState](https://docs.movesdk.com/move-platform/sdk/models/moveauthstate) changes.

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

| **Callback**                                                                                                      |                                                                                                                                 |
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| [AuthStateCallback](https://docs.movesdk.com/move-platform/models/listeners-callbacks#auth-state-update-listener) | Block that gets invoked every time [MoveAuthState](https://docs.movesdk.com/move-platform/sdk/models/moveauthstate) is updated. |

{% hint style="warning" %}

### Authentication Expiry

The host app is expected to monitor [MoveAuthState](https://docs.movesdk.com/move-platform/sdk/models/moveauthstate) updates via`authStateUpdateListener`API and handle those changes accordingly.

Check [Authentication updates and expiry](https://docs.movesdk.com/move-platform/models/moveauthstate#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** |                                                                                    |
| ------------ | ---------------------------------------------------------------------------------- |
|              | 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](https://docs.movesdk.com/move-platform/sdk/models/movestate) 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="../../../models/moveshutdownresult#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 %}
