Get started
You can try Kickstart Exchange in your own app without creating an account. When you are ready to take part, register the app to receive its live API key.
Add Kickstart Exchange to your app
In Xcode, choose File > Add Package Dependencies, enter https://github.com/twostraws/KickstartSDK, select the latest available version, then link the KickstartExchange 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.
Link KickstartExchange only to a main app binary. On watchOS, use it only in a standalone app, not in a companion watch app embedded in an iPhone app. Do not include the package in app extensions, App Clips, widgets, notifications, or keyboards.
ExchangeBannerAdView(apiKey: "preview")
The reserved preview key loads the current sample advert from the Exchange server in Debug builds and the Simulator. It requires no account, creates no application session, records no impressions or clicks, and shows nothing in shipping builds.
To connect a real app, choose Add an app, paste its App Store link, and pick the platforms its advert should appear on. If its App Store developer ID has not already been verified for your Exchange 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.
import KickstartExchange
import SwiftUI
struct SettingsFooter: View {
var body: some View {
ExchangeBannerAdView(apiKey: "ks_live_REPLACE_WITH_API_KEY")
}
}
Use the API key directly in the view. Keep the card behind your existing entitlement check if premium or ad-free customers should not see adverts.
Debug builds and the Simulator automatically receive non-counting test adverts. In shipping mode, the SDK sends a locally verified Apple-signed App Transaction when StoreKit provides one, with no refresh or App Store sync prompt. Kickstart Exchange processes the signed JWS transiently and immediately discards it. The session counts only after Exchange successfully verifies a Production App Transaction for the registered app. If signed evidence is unavailable or cannot be verified, the app receives a non-counting session instead.
If the Production Verification card on the Integration tab reports verification_service_unavailable, Exchange verification is temporarily unavailable. This is not a client integration error.
Customizing ad appearance
You can preview a banner in Xcode using your own sample app name, subtitle, and icon:
#Preview {
ExchangeBannerAdView.preview(
appName: "Example App",
subtitle: "Example subtitle",
icon: Image("ExampleIcon")
)
}
Four SwiftUI modifiers adjust the card’s presentation:
ExchangeBannerAdView(apiKey: "ks_live_REPLACE_WITH_API_KEY")
.exchangeAdCornerStyle(.rounded)
.exchangeAdStroke(.orange)
.exchangeAdActionTextColor(.orange)
.exchangeAdDisclosureBackgroundColor(.purple)
exchangeAdCornerStyle(_:)chooses.squareor.roundedcard corners. Both preserve the advertised app icon’s standard rounding.exchangeAdStroke(_:)sets the card’s one-point stroke color.exchangeAdActionTextColor(_:)sets the App Store action button’s text color.exchangeAdDisclosureBackgroundColor(_:)sets the ad disclosure button’s background color.
These modifiers flow down through SwiftUI’s environment, so applying them to a container styles every Exchange banner inside it.
Complete App Privacy in App Store Connect
Kickstart Exchange's privacy manifest declares Usage Data: Product Interaction and Usage Data: Advertising Data. Both are unlinked from identity and are not used for tracking. Follow these steps for the version of your app that includes Kickstart Exchange:
- In App Store Connect, choose Apps, select your app, then select App Privacy in the sidebar.
- If App Privacy has not been set up yet, select Get Started, choose Yes, we collect data from this app, then select Next. Otherwise, select Edit next to Data Types.
- Under Usage Data, select Product Interaction and Advertising Data, then save your selections or continue when prompted.
- Open Product Interaction. Select Third-Party Advertising, Developer’s Advertising or Marketing, Analytics, and App Functionality. Answer No when asked whether the data is linked to the user’s identity, answer No when asked whether it is used for tracking, then save.
- Open Advertising Data. Select Third-Party Advertising, Developer’s Advertising or Marketing, Analytics, and App Functionality. Answer No when asked whether the data is linked to the user’s identity, answer No when asked whether it is used for tracking, then save.
- Review the Product Page Preview, select Publish, then confirm Publish.
Do not remove any disclosure required by your app or another SDK. Do not select User ID, Device ID, Purchase History, or any Location data type solely for Kickstart Exchange. Your app must provide its own complete privacy-policy URL that mentions Kickstart Exchange and links to the Kickstart Exchange privacy notice.
Apple can change App Store Connect, so compare these answers with Apple's current App Privacy guidance before publishing.
Points, and how adverts are chosen
The standard starting balance is 200 points. Showing one advert earns one point; being advertised once costs two. The more points an account has, the more likely its apps are to appear.
Your account can hold up to 50,000 points across all your apps. At the cap, adverts still appear and count in analytics, but they neither earn points for your account nor cost points for the advertiser. Earning resumes when your balance falls below the cap. Each app can also earn up to 10,000 points per day.
When no funded app is a match for a particular advert slot, that slot can be filled by an app whose owner has run out of points – but only if that owner has shown adverts for other people within the last 30 days. Adverts you receive that way cost nothing. If you stop showing adverts, your own apps stop appearing once your points run out, because Kickstart Exchange only carries apps that are taking part.
What each app status means
- Waiting for ownership: you've added the app, and we're waiting for its verification code to appear on your website or in your App Store promotional text.
- Awaiting approval: ownership is verified, and a human is reviewing the app. You'll get an email when that's done.
- Active: the app is fully set up, so it can show adverts to earn points and its own advert can appear in other apps.
- Out of points: the app still earns points by showing adverts, but it has none left to spend, so its own advert only appears in slots no funded app wanted – and only while you're still showing adverts, as described above.
- Paused: you paused the app yourself, from its Overview page. You can pause showing adverts, pause being advertised, or both – so an app can keep showing adverts for other people while its own advert stays out of circulation, or the reverse. When only one is paused, the status reads Not showing adverts or Not being advertised instead. Resume either at any time.
- Suspended: Kickstart Exchange suspended the app, usually after an upheld report. It isn't showing adverts or being advertised, and its Overview page explains why.