expo-kickstart-exchange
v0.1.1
Published
Kickstart Exchange banner adverts for Expo apps - an Expo module wrapping KickstartSDK's SwiftUI advert view, plus a config plugin for the iOS deployment target.
Maintainers
Readme
Expo Kickstart Exchange
Expo module wrapping KickstartSDK — the Swift package for Kickstart Exchange, a free cross-promotion network for indie Apple-platform apps.
Ships a native SwiftUI banner advert view plus a config plugin that raises the iOS deployment
target the SDK requires. iOS only: on Android and web the banner renders null.
Installation
npx expo install expo-kickstart-exchange// app.json
{
"expo": {
"plugins": ["expo-kickstart-exchange"]
}
}Then npx expo prebuild --clean -p ios (or a fresh EAS build). This is a native module, so it
does not work in Expo Go, use a development build.
Usage
import { KickstartBannerAd } from 'expo-kickstart-exchange';
<KickstartBannerAd
apiKey={__DEV__ ? 'preview' : 'ks_live_...'}
colorScheme="dark"
cornerStyle="rounded"
strokeColor="#2a2a2a"
actionTextColor="#e11d48"
style={{ marginHorizontal: 16 }}
/>;The card measures its own height (React Native owns the width), so give it a width — or let it stretch — and leave the height alone.
Props
| Prop | Type | Default | Notes |
| --- | --- | --- | --- |
| apiKey | string \| undefined | — | Required. undefined or '' renders nothing rather than requesting an advert. |
| cornerStyle | 'square' \| 'rounded' | 'rounded' | The advertised app icon keeps its own rounding either way. |
| colorScheme | 'system' \| 'light' \| 'dark' | 'system' | Set the color scheme. |
| strokeColor | string | none | One point wide card border. |
| actionTextColor | string | SDK default | Text color of the App Store action button. |
| disclosureBackgroundColor | string | SDK default | Background of the ad disclosure button. |
| style | StyleProp<ViewStyle> | - | Layout only - see below. |
API key
Register the app at https://exchange.kickstart.tools to get a ks_live_… key. In debug builds
and the simulator, apiKey="preview" renders the server's sample advert with no account (it shows
nothing in release builds).
What the config plugin does
KickstartSDK declares .iOS(.v18) and carries no @available annotations while using iOS 18-only
API (@Entry, onScrollVisibilityChange), so nothing lower compiles - and CocoaPods refuses to
install this pod against a lower app deployment target. The plugin therefore raises, never lowers:
ios.deploymentTargetin Podfile.properties.json to18.0;IPHONEOS_DEPLOYMENT_TARGETon the app target in the Xcode project.
If you also configure expo-build-properties,
set ios.deploymentTarget to "18.0" (or higher) there as well - depending on plugin order it can
overwrite the value this plugin sets. The plugin prints a warning when it spots a lower one.
App Store obligations
The SDK ships a privacy manifest declaring Usage Data → Product Interaction and Usage Data → Advertising Data (unlinked, non-tracking). Both must also be declared in App Store Connect, and your privacy policy has to mention and link Kickstart Exchange. See https://exchange.kickstart.tools/guide#app-privacy.
Development
npm install # runs scripts/build.js via `prepare`
npm run build # src -> build (tsc watch mode in an interactive terminal)
npm run build:plugin # plugin/src -> plugin/build (likewise)
npm run clean # removes build/ and plugin/build/
npm run lintprepare and prepublishOnly both run scripts/build.js, which cleans and builds both targets
with EXPO_NONINTERACTIVE=1. Without that, expo-module build adds tsc's --watch flag whenever
stdout is a TTY, and npm install / npm publish hang on the build instead of finishing.
License
MIT
