Guides and Surveys iOS SDK

Amplitude's Guides and Surveys iOS SDK enables you to deploy Guides and Surveys in your iOS applications.

This SDK is in Open Beta

This feature is in open beta and under active development.

Requirements

The Guides and Surveys iOS SDK requires:

Install and initialize the SDK

Guides and Surveys supports different installation options to work best with your existing Amplitude implementation, if you have one.

Using Amplitude iOS Swift 1.13.0+

First, install the Guides and Surveys iOS SDK with Swift Package Manager or CocoaPods.

  1. In Xcode, click File > Add Packages...
  2. Enter the repository URL https://github.com/amplitude/Amplitude-Engagement-Swift
  3. Select the Amplitude-Engagement-Swift package, version 1.6.0.
  4. Click Add Package.
Add the following line to your Podfile, then run pod install.
pod 'AmplitudeEngagementSwift', '~> 1.6.0'

Note

We don't update our docs on each release. You can check for the latest version here: https://github.com/amplitude/Amplitude-Engagement-Swift

Initialize the SDK

Next, make sure to initialize the SDK.

import AmplitudeEngagementSwift


let amplitudeEngagement = AmplitudeEngagement("YOUR_API_KEY")


let configuration = Configuration(
  apiKey: API_KEY
)
let amplitude = Amplitude(configuration: configuration)
amplitude.add(plugin: amplitudeEngagement.getPlugin())

Configuration options

Parameter Type Description
apiKey string Required. API key of the Amplitude project you want to use.
initOptions.serverZone EU or US Optional. Sets the Amplitude server zone. Set this to EU for Amplitude projects created in EU data center. Default: US
initOptions.logLevel LogLevel.None or LogLevel.Error or LogLevel.Warn or LogLevel.Verbose or LogLevel.Debug. Optional. Sets the log level. Default: LogLevel.Warn
initOptions.locale string Optional. Sets the locale for localization. Default: undefined. Not setting a language means the default language is used.

Use the same API key for Guides & Surveys and Analytics

To avoid analytics mismatches and ensure accurate data collection, use the same API key for both Guides & Surveys and your Analytics SDK. Both should reference the same Amplitude project. Using different API keys can cause:

  • The SDK to fetch guides and surveys from the wrong project
  • Analytics data to appear in different projects
  • Insights and survey responses are incomplete or mismatched

Make sure the API key you provide to Guides & Surveys matches the API key used to initialize your Amplitude Analytics SDK.

Note

After you call amplitude.add, you are technically done installing. While screen tracking and element targeting are optional, it's highly recommended to set up URL handling for preview mode.

Add your application to project settings

After installing the SDK, add your iOS application to your Amplitude project settings so it appears as a platform option when you create guides and surveys.

To add your application:

  1. Navigate to Settings > Projects in Amplitude.
  2. Select your project.
  3. Navigate to the General tab.
  4. In the Platform section, click + Add Platform.
  5. Select iOS from the platform list.
  6. Enter your application details:
    • App name: Your app's display name
    • Bundle ID: Your iOS bundle identifier (for example, com.example.myapp)
  7. Click Save.

After you add your application, it appears as a platform option when you create or edit guides and surveys. This enables you to target your iOS users and preview guides directly in your app.

Find your bundle ID

Your iOS bundle identifier is defined in your Xcode project settings under General > Identity > Bundle Identifier.

Not using Amplitude Swift 1.13.0+

In this case, installation is very similar to above; however, you need to manually call .boot.

First, install the Guides and Surveys iOS SDK with Swift Package Manager or CocoaPods.

  1. In Xcode, click File > Add Packages...
  2. Enter the repository URL https://github.com/amplitude/Amplitude-Engagement-Swift
  3. Select the Amplitude-Engagement-Swift package, version 1.6.0.
  4. Click Add Package.
Add the following line to your Podfile, then run pod install.
pod 'AmplitudeEngagementSwift', '~> 1.6.0'

Note

We don't update our docs on each release. You can check for the latest version here: https://github.com/amplitude/Amplitude-Engagement-Swift

Initialize the SDK

import AmplitudeEngagementSwift


let amplitudeEngagement = AmplitudeEngagement("YOUR_API_KEY")


let configuration = Configuration(
  apiKey: API_KEY
)
let amplitude = Amplitude(configuration: configuration)
amplitude.add(plugin: amplitudeEngagement.getPlugin())

Configuration options

Parameter Type Description
apiKey string Required. API key of the Amplitude project you want to use.
initOptions.serverZone EU or US Optional. Sets the Amplitude server zone. Set this to EU for Amplitude projects created in EU data center. Default: US
initOptions.logLevel LogLevel.None or LogLevel.Error or LogLevel.Warn or LogLevel.Verbose or LogLevel.Debug. Optional. Sets the log level. Default: LogLevel.Warn
initOptions.locale string Optional. Sets the locale for localization. Default: undefined. Not setting a language means the default language is used.

Boot the SDK

// Basic boot with user ID
amplitudeEngagement.boot("USER_ID")

// Advanced boot with options

let bootOptions = AmplitudeBootOptions(
  user_id: "USER_ID",
  device_id: "DEVICE_ID",
  user_properties: ["key": "value"]
  integrations: [
    { event, eventProperties in
        // Custom event handler
    }
  ]
)
amplitudeEngagement.boot(options: bootOptions)

Note

After you call amplitudeEngagement.boot, you are technically done installing. While screen tracking and element targeting are optional, we highly recommend setting up URL handling for preview mode.

Screen tracking and element targeting

Screen tracking and element targeting are technically optional, but can be very helpful for making your guides and surveys feel more targeted.

Enable screen tracking

Required for screen-based targeting and the Time on Screen trigger. The screen string (eg "HomeScreen" in the example below) is compared with the string provided in the guide or survey page targeting section.

// Track screen views to trigger guides based on screens
amplitudeEngagement.screen("HomeScreen")

Warning

Screen Viewed events from the Amplitude iOS Swift SDK's Autocapture feature are auto-forwarded to the Engagement SDK.

Enable element targeting

Pin and tooltip guides require the ability for the SDK to target specific elements on screen. To enable this in your app, give the element a unique identifier.

// Swift UI
MySwiftView {
    // Content
}
.amplitudeView("MySwiftView", onTrigger: {
    // Optional code to run with tap element action
}

// UIKit
let myView = MyUIKitView(...)
myView.accessibilityIdentifier = "MyView"

Other SDK Methods

Manage themes

Configure the visual theme mode if your app supports light and dark modes.

// Set the theme mode
amplitudeEngagement.setThemeMode(ThemeMode.DARK) // Options: AUTO, LIGHT, DARK

Router configuration

Configure how Guides and Surveys handles screen navigation.

engagement.setRouter { identifier in
  // Your screen handling and navigation
}
Parameter Type Description
identifier String Required. A screen identifier (or route) that tells your app where to navigate.
router (closure) (String) -> Void Required. A function (closure) you implement to handle screen navigation when Guides or Surveys need to change screens.

Update link behavior

After you configure the router with setRouter(), update the link behavior setting in the Guides and Surveys interface. For any link actions in your guides or surveys, change the behavior to Use router. This ensures that the guide or survey uses the custom router function instead of the default browser navigation.

Reset

Reset a guide or survey to a specific step.

amplitudeEngagement.reset(key = "GUIDE_KEY", stepIndex = 0)
Parameter Type Description
key string Required. The guide or survey's key.
stepIndex number Required. The zero-based index of the step to reset to. Defaults to the initial step.

List

Retrieve a list of all live guides and surveys along with their status.

val guidesAndSurveys = amplitudeEngagement.list()

Show

Display a specific guide or survey. Ignores any targeting rules and limits except for screen targeting.

amplitudeEngagement.show(key = "GUIDE_KEY")
Parameter Type Description
key string Required. The guide or survey's key.

Forward event

If you don't use the plugin, but want to trigger Guides using events.

amplitudeEngagement.forwardEvent([
  "event_type": "my event type", 
  "event_properties": [String: String]()
])

Close all

Close all active guides and surveys.

amplitudeEngagement.closeAll()

Simulate Guides and Surveys for preview

To use preview mode to test a guide or survey in your app, configure a custom URL scheme.

Add your mobile app to project settings

Before you can use preview mode, add your iOS app to your project settings in Amplitude:

  1. In Amplitude, navigate to Settings > Organization Settings > Projects.
  2. Select your project.
  3. Click the Guides and Surveys tab.
  4. In the App Management section, click Add App.
  5. Enter your iOS app's bundle ID (for example, com.example.MyApp).
  6. Click Save.

After you add your app, Amplitude generates a unique URL scheme for mobile preview.

Locate the mobile URL scheme

After adding your app to project settings, locate the URL scheme:

  1. In the Guides and Surveys tab of your project settings, find the URL scheme (mobile) field.
  2. Copy its value, for example, amp-abc123.

Add the URL scheme in Xcode

  1. Open your iOS project in Xcode.
  2. In the Project navigator, select your app's target.
  3. On the Info tab, locate the URL Types section.
  4. Add a new URL type with the following values:
    • Identifier: Provide a descriptive name, like AmplitudeURLScheme.
    • URL Schemes: Paste the value you copied from Amplitude, for example amp-abc123.
// In your AppDelegate or SceneDelegate
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    if amplitudeEngagement.handleUrl(url) {
        return true
    }
    // Handle other URL schemes
    return false
}

Changelog

You can access the changelog here.

Was this page helpful?

June 23rd, 2025

Need help? Contact Support

Visit Amplitude.com

Have a look at the Amplitude Blog

Learn more at Amplitude Academy

© 2025 Amplitude, Inc. All rights reserved. Amplitude is a registered trademark of Amplitude, Inc.