Get started
Kickstart Signal uses the same account, app registration, and API key as Kickstart Exchange. Eligible registered apps can use Signal immediately. Registering a new app takes a few minutes plus a human review.
Open Signal for your app
Sign in to your Kickstart dashboard, open the app, and choose the Signal tab. You can enable or disable comments and voting here.
To register a new app, choose Add an app and paste its App Store link. If its App Store developer ID has not already been verified for your account, we’ll give you a short verification code to publish on the app’s listed website or paste into its App Store promotional text. Apps from a developer ID already verified for your account skip that step. Every app still needs human approval before its API key appears.
Add Kickstart Signal to your app
In Xcode, choose File > Add Package Dependencies, enter https://github.com/twostraws/KickstartSDK, select the latest available version, then link the KickstartSignal product to your app target. The package requires Xcode 26 and supports iOS 18, iPadOS 18, macOS 15, tvOS 18, visionOS 2, and watchOS 11 or later. If you already use KickstartExchange, it comes from the same package.
Place the board inside a NavigationStack wherever it suits your app:
import KickstartSignal
import SwiftUI
struct FeedbackView: View {
var body: some View {
NavigationStack {
SignalBoardView(apiKey: "ks_live_REPLACE_WITH_API_KEY")
}
}
}
If the board is already inside a navigation stack, use SignalBoardView directly. When presenting it in a sheet, put the NavigationStack inside the sheet.
To try an interactive sample board without an API key, use SignalBoardView.demo() inside a navigation stack.
The API key is on the app’s Integration tab, and it is the same key Kickstart Exchange uses. It identifies your app rather than you: it ships inside the binary, grants no access to your dashboard, and can be reissued at any time. Reissuing it moves Exchange and Signal to the new key together.
The first time someone votes or submits a request or comment, the SDK creates a random identifier for that installation and keeps it locally. It lets Signal count each installation’s vote once and avoid duplicate submissions when retrying. Browsing the board does not create or send this identifier. It is not tied to a person or an Apple ID, and there is no API for attaching personal information to it.
Customizing the board
Set a tint color with SwiftUI’s .tint() modifier. You can provide your own titles and messages through your app’s string catalog. The board follows your app’s light or dark appearance.
Comments and voting can be switched on or off together from the dashboard.
All visible text is localized, and users can filter by status and sort by votes or by newest. Where Apple’s Translation framework is available, they can translate a request into their own language on the device.
Moderation
Every new request and comment starts private. The Signal tab shows them as a queue, where you can approve, edit, reject, or merge each one. Approving publishes it to everyone using the app; editing first is fine, and expected for typos or vague titles. Merging folds a duplicate into the request you keep and records the merge.
Published requests carry a status: open, planned, in progress, completed, or declined. Your own comments are published immediately and marked as coming from the developer. You can unpublish or delete anything you previously approved.
Complete App Privacy in App Store Connect
If you send premium status, disclose Purchase History for App Functionality, not linked to identity, and not used for tracking.
Signal does not use feedback data for tracking, advertising, or marketing. It is designed for infrequent, optional feedback outside your app’s primary purpose, with users entering and explicitly submitting their feedback each time. We consider this anonymous feedback eligible under Apple’s Optional Disclosure guidelines, but we encourage you to read it for yourself and make your own decision. Keep your app’s other required disclosures and include Signal in your privacy policy.
Your data
The account page offers two Signal actions. Download Signal data downloads one compressed JSON file containing boards, requests, comments, votes, and request history. Clear all Signal boards removes feedback and request history while keeping boards and their settings. Your Kickstart account, registered apps, and Kickstart Exchange data remain.
Deleting an app from your dashboard removes its Signal board with it, and deleting your account removes Exchange participation and Signal boards together. The confirmation for each says so before anything is deleted.
Board availability
- Available: the app is approved, and neither the account nor Signal access is suspended.
- Interactions off: existing approved requests remain visible, but comments and voting are unavailable.
- Unavailable: the app is unapproved, or the account or Signal access is suspended. An Exchange-only suspension does not suspend Signal.