Vier SDKs, eine Version
Flutter, Expo, Web/React und Swift erscheinen gemeinsam und tragen immer dieselbe Version — heute 2.0. Jedes bringt dieselbe Tester-Oberfläche in deine App.
Flutter
Für Flutter-Apps auf Android und iOS.
Installieren · pub.devflutter pub add testerpaykit Expo / React Native
Für Expo- und React-Native-Apps.
Installieren · npmnpx expo install @testerpaykit/expo Web / React
Für Web-Apps mit React, Next.js oder Vite.
Installieren · npmnpm install @testerpaykit/react Swift (iOS, macOS)
Für native iOS- und macOS-Apps, mit eingebauter SwiftUI-Tester-Oberfläche.
PaketSwift Package — auf Anfrage Noch nicht in einem öffentlichen Paketverzeichnis. Schreib uns, dann schicken wir dir das Paket.
Was alle vier können
- ✓Bug melden: Formular mit Screenshot und Markierung, Sprache, Schnellaktionen
- ✓Allgemeines Feedback
- ✓Nachtest nach einem Fix, mit Urteil pro Schritt
- ✓Verdienst im Tester-Menü, Tour, Deutsch und Englisch
- ✓Live-Verbindung zu Claude Code (Beta): Claude sieht den Bildschirm und deine Notizen und kann sich durch deine eigene App tippen
- ✓Checkliste „Was testen?“: Tester haken die Schritte in der App ab
KI-Läufe (Auto-Test, KI-Nachtest nach einem Fix) gibt es nur mit Flutter und Expo.
Auf einen Blick
| Funktion | Flutter | Expo | Web | Swift |
|---|---|---|---|---|
| Bug-Report, Feedback, Nachtest | ✓ | ✓ | ✓ | ✓ |
| Live-Verbindung zu Claude Code (Beta) | ✓ | ✓ | ✓ | ✓ |
| Checkliste „Was testen?“ | ✓ | ✓ | ✓ | ✓ |
| KI-Läufe: Auto-Test, KI-Nachtest | ✓ | ✓ | — | — |
Kurze Beispiele
import 'package:flutter/material.dart';
import 'package:testerpaykit/testerpaykit.dart';
final _navigatorKey = GlobalKey<NavigatorState>();
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
final tpk = await TesterPayKit.initialize(
config: TesterPayKitConfig(
projectId: '<project-uuid>',
apiBaseUrl: 'https://api.testerpaykit.com',
enableTesterMode: true,
),
);
runApp(MaterialApp(
navigatorKey: _navigatorKey,
navigatorObservers: [tpk.navigatorObserver],
builder: (context, child) => TesterPayKitWrapper(
sdk: tpk,
navigatorKey: _navigatorKey,
child: child ?? const SizedBox.shrink(),
),
home: const HomeScreen(),
));
} import { TpkExpo, useShake } from '@testerpaykit/expo';
import { useEffect, useState } from 'react';
export function App() {
const [tpk, setTpk] = useState<TpkExpo | null>(null);
useEffect(() => {
TpkExpo.init({
projectId: '<project-uuid>',
testerCode: '<tester-invite-code>',
}).then(setTpk);
}, []);
useShake({
enabled: !!tpk,
onShake: () => {
tpk?.submitBug({
title: 'Shake-reported bug',
description: 'Reported by shaking the device.',
currentScreen: 'HomeScreen',
severity: 'medium',
});
},
});
return null;
} import { useEffect, useState } from 'react';
import { TesterPayKit } from '@testerpaykit/sdk';
import { TesterPayKitApiClient } from '@testerpaykit/api-client';
import { IndexedDBAdapter } from '@testerpaykit/storage-browser';
import { TpkTesterHub } from '@testerpaykit/react';
export function Tpk({ screen }: { screen: string }) {
const [sdk, setSdk] = useState<TesterPayKit | null>(null);
useEffect(() => {
const instance = new TesterPayKit({
apiKey: '',
projectId: '<project-uuid>',
testerId: '<tester-invite-code>',
deviceId: crypto.randomUUID(),
storage: new IndexedDBAdapter(),
apiClient: new TesterPayKitApiClient({ apiKey: '' }),
deviceMetadata: { os: 'Web', osVersion: navigator.userAgent, deviceModel: 'browser', appVersion: '1.0.0', sdkVersion: '2.0.0', timezoneOffset: -new Date().getTimezoneOffset() },
appMetadata: { bundleId: 'com.example.web', version: '1.0.0', buildNumber: '1' },
autoStartSession: true,
});
void instance.init().then(() => setSdk(instance));
}, []);
return sdk ? <TpkTesterHub sdk={sdk} currentScreen={screen} /> : null;
} Das Beispiel importiert außerdem @testerpaykit/sdk, @testerpaykit/api-client und @testerpaykit/storage-browser; mit pnpm diese ausdrücklich hinzufügen.
import SwiftUI
import TesterPayKit
let sdk = try await TesterPayKit.initialize(
config: TesterPayKitConfig(
projectId: "<project-uuid>",
testerCode: "<tester-invite-code>",
apiBaseURL: URL(string: "https://api.testerpaykit.com")!
)
)
try await sdk.startSession()
ContentView()
.tpkFeedbackOverlay() Bereit zum Einbauen?
Lege ein Projektkonto an und richte das SDK für deine App ein. Mit bestehendem Konto kannst du dich in der Web-Konsole anmelden.