---
# System prepended metadata

title: Initialize Web3auth Core Kit tkey ios SDK

---

# Initialize Web3auth Core Kit tkey ios SDK

After installation, the next step to using Web3Auth Core Kit tKey SDK is to Initialize the SDK. The Initialization takes a few steps, including initiating the tKey SDK with the service provider and modules.

## configuration of service provider

Service Provider in tKey is used for generating a Share A, i.e. the private key share managed by a wallet service provider via their authentication flows. This share in our key infrastructure refers to the social login aspect, where we associate a private key share with the user's social login, enabling the seamless login experience.

In order to configure your service provider, you must use [CustomAuth Swift SDK](https://github.com/torusresearch/customauth-swift-sdk).
Since CustomAuth Swift SDK is not automatically installed when you install tkey ios SDK, let's start with installation first.

### Usage of CustomAuth Swift SDK

You can find more detailed [document here.](https://github.com/torusresearch/customauth-swift-sdk) 

#### 1. Installation

##### Swift package manager

In project settings, add the Github URL as a swift package dependency.

```swift
import PackageDescription

let package = Package(
    name: "CustomAuth",
    dependencies: [
        .package(name: "CustomAuth", url: "https://github.com/torusresearch/customauth-swift-sdk", from: "2.4.0"))
    ]
)
```

##### Cocoapods

```ruby
pod 'CustomAuth', '~> 5.0.0'
```

##### Manual import or other packages

If you require a package manager other than SPM or Cocoapods, do reach out to
hello@tor.us or alternatively clone the repo manually and import as a framework
in your project

#### 2. Initialization

Initalize the SDK depending on the login you require. The example below does so
for a single google login. `redirectURL` refers to a url for the login flow to
redirect into your app, it should have a scheme that is registered by your app,
for example `com.mycompany.myapp://redirect`. `browserRedirectURL` refers to a
page that the browser should use in the login flow, it should have a http or
https scheme.

```swift
import CustomAuth

let sub = SubVerifierDetails(loginType: .installed, // default .web
                            loginProvider: .google,
                            clientId: "<your-client-id>",
                            verifierName: "<verifier-name>",
                            redirectURL: "<your-redirect-url>",
                            browserRedirectURL: "<your-browser-redirect-url>")

let tdsdk = CustomAuth(aggregateVerifierType: "<type-of-verifier>", aggregateVerifierName: "<verifier-name>", subVerifierDetails: [sub], network: <etherum-network-to-use>)

// controller is used to present a SFSafariViewController.
tdsdk.triggerLogin(controller: <UIViewController>?, browserType: <method-of-opening-browser>, modalPresentationStyle: <style-of-modal>).done{ data in
    print("private key rebuild", data)
}.catch{ err in
    print(err)
}
```
Logins are dependent on verifier scripts/verifiers. There are other verifiers
including `single_id_verifier`, `and_aggregate_verifier`,
`or_aggregate_verifier` and `single_logins` of which you may need to use
depending on your required logins. To get your application's verifier script
setup, do reach out to hello@tor.us or to read more about verifiers do checkout
[the docs](https://docs.tor.us/customauth/supported-authenticators-verifiers).

### After finished configuration of CustomAuth SDK

function `triggerLogin()` returns a promise that resolve with a Dictionary that contain at least `privateKey` and `publicAddress` field.
Initialize the service provider with the privateKey retrived by result of `triggerLogin()`.

```swift
tdsdk.triggerLogin(controller: <UIViewController>?, browserType: <method-of-opening-browser>, modalPresentationStyle: <style-of-modal>).done{ data in
    print("private key rebuild", data)
    let key = data["privateKey"]
    service_provider = try! ServiceProvider(enable_logging: true, postbox_key: key)
}.catch{ err in
    print(err)
}
```

