> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tappify.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Add the Tappify SDK to your iOS app in three steps — no config screens, no auth wiring.

Three steps. These are the exact snippets shown on your app's dashboard setup page — copy
them from there if you'd rather paste your app's real key and scheme straight in.

<Steps>
  <Step title="Add the package">
    Add the Tappify SDK to your app via Swift Package Manager:

    <CodeGroup>
      ```txt Package dependency theme={null}
      https://github.com/tappify-dev/tappify-ios-dist
      ```
    </CodeGroup>

    Xcode resolves the latest release. If prompted for credentials, you need read
    access to the package — ask your Tappify admin and they'll add you.
  </Step>

  <Step title="Start the SDK">
    One line at launch — for example in `AppDelegate.application(_:didFinishLaunchingWithOptions:)`.
    `appKey` is a publishable key: it identifies your app and authorizes nothing.

    <CodeGroup>
      ```swift AppDelegate.swift theme={null}
      Tappify.start(appKey: "tpf_pk_<your 12-hex suffix>")
      ```
    </CodeGroup>
  </Step>

  <Step title="Register the URL scheme">
    Lets activation links open your app directly when a teammate pairs a device. Add this to
    `Info.plist` — your dashboard's setup page shows the exact scheme for your app; it's
    `tappify-<the same 12 hex characters from your appKey>`.

    <CodeGroup>
      ```xml Info.plist theme={null}
      <key>CFBundleURLTypes</key>
      <array>
          <dict>
              <key>CFBundleURLSchemes</key>
              <array>
                  <string>tappify-&lt;your 12-hex suffix&gt;</string>
              </array>
          </dict>
      </array>
      ```
    </CodeGroup>
  </Step>
</Steps>

That's it. The SDK stays completely inert — no network calls, no UI, no capture — until a
device is actually paired. The first time your app launches with the SDK started, your
dashboard's setup page flips from "waiting for first launch…" to connected.

<Note>
  `appKey` is a publishable key, the same way a Stripe `pk_` key is publishable. It
  identifies your app; it doesn't authorize anything by itself. All authorization happens
  server-side when a device pairs.
</Note>

From here, pair a device from your dashboard and the pill appears on your TestFlight build.
See [Activating devices](/sdk/activating-devices) for how pairing works.

## Optional

<CardGroup cols={2}>
  <Card title="Tag SwiftUI screens" icon="tag" href="/sdk/screen-names">
    Fix mushy auto-generated screen names in composed SwiftUI views with `.tappifyScreen(_:)`.
  </Card>

  <Card title="Team-wide pairing" icon="people-group" href="/sdk/team-wide-pairing">
    Share one device pairing across every app your team ships.
  </Card>
</CardGroup>

If your app avoids runtime method swizzling, or your app/scene delegate doesn't implement
any URL-handling methods at all, see [`Tappify.handle(url:)`](/sdk/api-surface#tappify-handle-url) in the API reference —
the manual path for routing activation links yourself.
