## Overview

The Kevel iOS SDK makes the ad serving and UserDB features of Kevel easily available for iOS apps. It is an open source project hosted on Github.

## Github Open Source iOS SDK

[https://github.com/adzerk/adzerk-ios-sdk](https://github.com/adzerk/adzerk-ios-sdk)

> 🚧
>
> ### iOS Version
>
> iOS SDK is designed for iOS v8.0 and later.

## Getting the SDK

The SDK can be installed via [Carthage](https://github.com/Carthage/Carthage) or [CocoaPods](https://cocoapods.org/). It can also be installed manually.

## Detailed Documentation

We have detailed developer-level documentation on the project's website at [https://adzerk.github.io/adzerk-ios-sdk/](https://adzerk.github.io/adzerk-ios-sdk/)

## Examples

### Fetching an Ad Decision

Swift

```swift
import AdzerkSDK

// Demo network, site, & ad type IDs; find your own via the Adzerk UI!
DecisionSDK.defaultNetworkId = 23
DecisionSDK.defaultSiteId = 667480

let client = DecisionSDK()

var p = Placements.custom(divName: "div0", adTypes: [5])

var reqOpts = PlacementRequest<StandardPlacement>.Options()
reqOpts.userKey = "abc"
reqOpts.keywords = ["keyword1", "keyword2"]

client.request(placements: [p], options: reqOpts) {response in
  dump(response)
}
```

### Recording Impressions

Use with the fetch ad example above.

Swift

```swift
client.request(placements: [p], options: reqOpts) {
    switch $0 {
    case .success(let response):
        for decision in response.decisions {
            print(decision.key)

for selection in decision.value {
                dump(selection, maxDepth: 3)

print("\nFiring impression pixel...")
                client.recordImpression(pixelURL: selection.impressionUrl!)
            }
        }

case .failure(let error):
        print(error)
    }
}
```

### UserDB: Reading User Record

Swift

```swift
import AdzerkSDK

// Demo network ID; find your own via the Adzerk UI!
DecisionSDK.defaultNetworkId = 23

let keyStore = UserKeyStoreKeychain()
keyStore.save(userKey: "abc")

let client = DecisionSDK(keyStore: keyStore)

client.userDB().readUser() {response in
  dump(response)
}
```

### UserDB: Setting Custom Properties

Swift

```swift
import AdzerkSDK

// Demo network ID; find your own via the Adzerk UI!
DecisionSDK.defaultNetworkId = 23

let keyStore = UserKeyStoreKeychain()
keyStore.save(userKey: "abc")

let props:[String: AnyCodable] = [\
    "favoriteColor":  .string("blue"),\
    "favoriteNumber": .int(42),\
    "favoriteFoods":  .array([\
        .string("strawberries"),\
        .string("chocolate"),\
    ])\
]

client.userDB().postProperties(props) {response in
  dump(response)
}
```

## Building an iOS Project with the SDK

Once you have installed the SDK, you can import `AdzerkSDK` in the `AppDelegate` and define your networkID and siteID.

The [readme](https://github.com/adzerk/adzerk-ios-sdk/blob/master/README.md) on Github has full documentation for usage.

> 🚧
>
> ### By default, warnings and errors will be printed to the console. If you want logs, be sure to set your logging level to production before deploying your app. The [readme](https://github.com/adzerk/adzerk-ios-sdk#logging) has more details and instructions.
