# Swift quickstart

Source: https://www.sheepit.ai/docs/sdks/swift

SheepitKit, the Swift package for iOS, iPadOS, macOS, tvOS and watchOS. It tracks events, reads flags and experiments, and captures crashes.

- Package: [SheepitKit](https://github.com/goatech-ai/sheepit-swift)
- Runs on: iOS 16+ · macOS 13+ · tvOS 16+ · watchOS 9+

## 1. Get an API key

Don't have an account yet? [Create one, free](https://www.sheepit.ai/signup). Then open Settings → API Keys in the dashboard and copy the publishable key (lp_pub_…). It is safe to ship inside a browser or app bundle.

## 2. Install

In Xcode, choose File → Add Package Dependencies…, paste the URL below, and set the Dependency Rule to Exact Version 0.6.0.

`URL`:

```bash
https://github.com/goatech-ai/sheepit-swift.git
```

Or, in Package.swift:

`Package.swift`:

```swift
dependencies: [
    // exact: — the mirror's 1.x tags are OLDER code exporting SheepitSDK, not
    // SheepitKit, and semver ranks them highest. Never take a range that reaches them.
    .package(url: "https://github.com/goatech-ai/sheepit-swift.git", exact: "0.6.0"),
],
targets: [
    .target(
        name: "MyApp",
        dependencies: [.product(name: "SheepitKit", package: "sheepit-swift")]
    ),
]
```

## 3. Initialize and send your first event

`MyApp.swift`:

```swift
import SheepitKit

let sheepit = SheepitClient.create(config: .init(
    apiKey: "lp_pub_..."
))

sheepit.track("signup_completed", properties: ["plan": "pro"])
```

## 4. Read a flag and an experiment

```swift
// Returns the default until the first config fetch lands.
let showNewCheckout = sheepit.flag("new_checkout", default: .bool(false)).boolValue == true

let variant = sheepit.experiment("pricing_page").variant
```

## 5. Identify users

```swift
// After login:
sheepit.identify(userId: "user_123")

// identify() takes no traits. Track the value for dashboards and
// metrics — event properties are NOT evaluable by flag rules; use
// group membership (user_group) to target on it:
sheepit.track("plan_selected", properties: ["plan": "pro"])

// On logout:
sheepit.reset()
```

## 6. Check that it worked

Run the app, then open Events in the dashboard. The signup_completed event shows up within about a minute.

## Worth knowing

- Pin the exact version. The repository also has older 1.0.x tags, which Xcode's default "Up to Next Major" rule would pick. They contain an older SDK with a different product name.
- The SDK refreshes config in the background (configRefreshInterval, 5 minutes by default), so a flag change is not instant on a running app. Lower the interval if you need changes to land sooner.
- Crash capture is on by default. Performance monitoring is off until you turn it on in the config.
- Events are tagged with your app's CFBundleShortVersionString unless you pass appVersion.
- Self-hosted install? Add apiUrl: "https://<your-install>/api" to the config. The docs inside your install's dashboard show the exact value.
