# Packages and Configuration Options

The SDK consists of a few packages. You’ll get the most value out of Customer.io when you use all our packages together, but this lets you omit packages for features you don’t intend to use.

## SDK packages[](#sdk-packages)

To minimize our SDK’s impact on your app’s size, we’ve split the SDK into packages. You can limit your install to the packages that you need for your project.

You must install the *CioDataPipelines* package. It lets you identify people, which you must do before you can send them messages, track their events, etc.

Package Product

Required?

Description

CioDataPipelines

✅

`identify` people and `track` events

CioMessagingPushAPN

Receive push notifications over Apple’s Push Notification Service (APNs)

CioMessagingPushFCM

Receive push notifications over Google Firebase Cloud Messaging (FCM)

CioFirebaseWrapper

Required for FCM push notifications. Provides Firebase Cloud Messaging integration

CioMessagingInApp

Receive in-app notifications

CioLocation

[Enrich user profiles with accurate device location](/integrations/sdk/ios/tracking/location)

### Configuration options[](#configuration-options)

When you install the SDK via CocoaPods, you can find our packages by replacing the `Cio` in package names with `CustomerIO/`—e.g. `CustomerIO/DataPipelines`. For FCM push notifications, you’ll need both `CustomerIO/MessagingPushFCM` and `CustomerIO/FirebaseWrapper`.

## Configuration options[](#configuration-options-1)

You’ll call configuration options before you initialize the SDK with `SDKConfigBuilder`. When you initialize the SDK, you can pass configuration options. In most cases, you’ll want to stick with the defaults, but you might do things like change the `logLevel` when testing updates to your app.

```swift
import CioDataPipelines

let config = SDKConfigBuilder(cdpApiKey: "YOUR_CDP_API_KEY") // Mandatory for all customers
            .migrationSiteId("YOUR_SITE_ID") // Mandatory only for migrating customers
            .autoTrackDeviceAttributes(true)
            .region(.EU) 

CustomerIO.initialize(withConfig: config.build()) 
```

Option

Type

Default

Description

`cdpApiKey`

string

**Required**: the key you'll use to initialize the SDK and send data to Customer.io

`region`

`.EU` or `.US`

`.US`

**Required if your account is in the EU region**. This sets your account region in the format `Region.US`.

`apiHost`

string

The domain you’ll proxy requests through. You’ll only need to set this (and `cdnHost`) if you’re [proxying requests](#proxying-requests).

`autoTrackDeviceAttributes`

boolean

`true`

Automatically gathers information about devices, like operating system, device locale, model, app version, etc

`autoTrackUIKitScreenViews`

boolean

`false`

**For UIKit-based apps**: if true, the SDK automatically sends `screen` events for every screen your audience visits.

`cdnHost`

string

The domain you’ll fetch configuration settings from. You’ll only need to set this (and `apiHost`) if you’re [proxying requests](#proxying-requests).

`logLevel`

string

`error`

Sets the level of logs you can view from the SDK. Set to `debug` or `info` to see more logging output.

`migrationSiteId`

string

**Required if you're updating from 2.x**: the credential for previous versions of the SDK. This key is used to send remaining tasks to Customer.io when your audience updates your app.

`screenViewUse`

`.all` or `.inApp`

`all`

`screenView: .all` (Default): Screen events are sent to Customer.io. You can use these events to build segments, trigger campaigns, and target in-app messages.  
  
`screenView: inApp`: Screen view events not sent to Customer.io. You’ll *only* use them to target in-app messages based on page rules.

`trackApplicationLifecycleEvents`

boolean

`true`

Set to `false` if you don't want the app to send lifecycle events

## Proxying requests[](#proxying-requests)

By default, requests go through our domain at `cdp.customer.io`. You can proxy requests through your own domain to provide a better privacy and security story, especially when submitting your app to app stores.

To proxy requests, you’ll need to set the `apiHost` and `cdnHost` properties in your `SDKConfigBuilder`. While these are separate settings, you should set them to the same URL.

While you need to initialize the SDK with a `cdpApiKey`, you can set this to any value you want. You only need to pass your actual key when you send requests from your server backend to Customer.io. If you want to secure requests to your proxy server, you can set the `cdpApiKey` to a value representing basic authentication credentials that you handle on your own. See [proxying requests](/integrations/data-in/proxying-requests) for more information.

```swift
let config = SDKConfigBuilder(cdpApiKey: "YOUR_CDP_API_KEY")
            .apiHost("YOUR_PROXY_HOST")
            .cdnHost("YOUR_CDN_HOST")

CustomerIO.initialize(withConfig: config.build())
```

## visionOS Support[](#visionos-support)

The iOS SDK supports VisionOS. We have a handy sample app that demonstrates how to use the SDK with Vision Pro devices, along with a handy readme, in the [`Apps/VisionOS` directory](https://github.com/customerio/customerio-ios/tree/main/Apps/VisionOS).

[![a preview of the visionOS sample app where you can set traits to test your implementation](https://docs.customer.io/images/visionos-sample-app.png)](#0b4b32a8e0964b9632fb11c770e6d060-lightbox)

We’ve only tested the iOS SDK with visionOS using Swift Package Manager. If you use CocoaPods, everything *might* work, but we can’t guarantee it.

Also, for now, we *only* support Apple’s Push Notification Service (APNS) for visionOS. You won’t be able to send push notifications to Vision Pro devices using Firebase Cloud Messaging (FCM).