iOS SDK
Kixo iOS SDK stöder Swift 5.9+ och iOS 16+ för analys, attribuering, push, livscykelspårning och sessionsåterspelning. Replay använder inspelningsreglage på projektnivå och försiktiga standardinställningar för de tyngre delarna. Det finns inget separat minimikrav för OS eller enhetsmodell utöver paketets iOS 16 deployment target. SDK:t distribueras via Swift Package Manager och spårar automatiskt skärmar, tryck, sessioner, krascher, pushnotiser och livscykelhändelser med ett enda anrop till Kixo.configure. Spårning av nätverksanrop är valfritt.
Installation
Swift Package Manager
Gå till File → Add Package Dependencies i Xcode och ange:
https://github.com/kixoio/kixo-ios-sdkOm du hanterar beroenden i Package.swift använder du det binära release-paketet och den här produkten:
dependencies: [
.package(
url: "https://github.com/kixoio/kixo-ios-sdk",
from: "1.0.21"
),
],
targets: [
.target(
name: "YourApp",
dependencies: [
.product(name: "Kixo", package: "kixo-ios-sdk"),
]
)
]Konfigurera
Initiera Kixo i din SwiftUI-struct App eller i AppDelegate:
import Kixo
@main
struct MyApp: App {
init() {
Kixo.configure(
projectId: "YOUR_PROJECT_ID",
apiKey: "YOUR_API_KEY"
)
}
var body: some Scene {
WindowGroup { ContentView() }
}
}Obs!
En rad räcker. SDK:t använder produktionsmiljön som standard, den hanterade ingest-värden och aktiverar de vanliga autospårarna. Åsidosätt enskilda flaggor med ConfigurationOptions(...) bara när du behöver.
Konfigurationsalternativ
Kixo.configure(
projectId: "YOUR_PROJECT_ID",
apiKey: "YOUR_API_KEY",
options: ConfigurationOptions(
autoTrackScreens: true,
autoTrackTaps: true,
autoTrackNetwork: false,
autoTrackCrashes: true,
autoTrackSessions: true,
autoTrackPush: true,
sessionTimeout: 30,
flushInterval: 30,
flushAt: 20,
maxBufferSize: 200,
// apiHost: nil → managed Kixo ingest host
// debug: nil → true in DEBUG, false otherwise
// environment: nil → production
)
)Obs!
Konfiguration som styrs från servern. Varje flagga för enskilda spårare kan också ändras från sidan Settings → Data Collection i dashboarden. Projektinställningarna kan åsidosätta lokala standardvärden.
Automatiskt spårade händelser
screen_view— direkta visningar av view controllers i UIKit och navigering i SwiftUIscreen_visit— ett strukturerat besök som avslutas vid navigering eller när appen går i bakgrunden, med vistelsetid, engagemangsantal, skärmens identitet och flödesmetadatasession_start/session_endtap— knapptryckningar och gestigenkännarecrash— insamlad diagnostik för krascher och undantagnetwork— valfria sanerade aggregat för nätverksanrop och ruttdiagnostikpush_received/push_open/push_dismissed/push_silent/push_action— hela push-livscykelnpush_permission/push_token_invalidatedlifecycle— övergångar mellan förgrund / bakgrund / appstart
Anpassade händelser
Kixo.track("purchase_completed", properties: [
"product_id": "SKU-123",
"amount": 49.99,
"currency": "USD",
])Typade hjälpfunktioner för händelser
Ett smidigt lager ovanpå Kixo.track för händelser som Kixo känner igen på namn (purchase, signup, subscribe_start, trial_start, cancel, upgrade, activation, share, invite). Ger validering av egenskapers form vid kompilering och en enda källa till sanning för nyckelnamn — backendens detektor för standardhändelser matchar ordagrant.
Kixo.trackPurchase(
amount: 49.99,
currency: "USD",
productId: "pro_yearly"
)
Kixo.trackSubscriptionStart(
plan: "pro",
amount: 9.99,
currency: "USD",
interval: .month
)
Kixo.trackSignup(method: "google")
Kixo.trackTrialStart(plan: "pro", days: 14)
Kixo.trackCancel(plan: "pro", reason: "too_expensive")
Kixo.trackUpgrade(fromPlan: "free", toPlan: "pro")
Kixo.trackActivation(event: "first_post_published")
Kixo.trackShare(channel: "twitter", contentId: "post_123")
Kixo.trackInvite(channel: "email", recipientCount: 5)Identifiera användare
Reserverade standardnycklar för egenskaper har prefixet $ enligt Mixpanel-konventionen. Då hålls de isär från era egna anpassade traits och lyfts in i dashboardens profilkolumner. Använd den typade enumen StandardProperty eller strängen med prefixet $ — se Standardkatalog för egenskaper nedan för hela listan med 37 nycklar.
Kixo.identify("user_123", traits: [
"$email": "jane@example.com", // identity
"$name": "Jane Doe", // identity
"$plan": "pro", // subscription pack
"$lifetime_orders": 12, // e-commerce pack
"signup_source": "twitter_ad" // custom trait
])Märk upp en användare för segmentering
Använd setUserProperty med ett boolesk-värde för att ge användaren en enkel ja/nej-tagg. Taggen ligger kvar mellan sessioner och används i segment, e-postkampanjer och frågor i chatten — utan någon extra konfiguration utöver anropet till SDK.
// Tag a user as subscribed — segments + campaigns can target this
Kixo.setUserProperty("subscribe", value: true)
// VIP membership
Kixo.setUserProperty("vip", value: true)
// String + numeric values work too
Kixo.setUserProperty("plan_tier", value: "enterprise")
Kixo.setUserProperty("lifetime_orders", value: 42)
// Bulk-set
Kixo.setUserProperties([
"subscribe": true,
"plan_tier": "enterprise",
])Egenskaper sparas i UserDefaults mellan appstarter och läggs automatiskt till på varje utgående händelse. I chatten kan du skriva saker som "skicka ett välkomstmejl till användare där subscribe är true" — Kixo bygger segmentet och skapar ett mallutkast åt dig. Rensas vid Kixo.reset().
Standardkatalog för egenskaper
Reserverade egenskapsnycklar har prefixet $, så att de hålls åtskilda från dina egna traits. Kixo har en katalog med 37 nycklar i 3 universella paket (identitet, geografi, livscykel) och 5 B2B-paket för olika produktområden (prenumeration, e-handel, media, marknadsplats, lojalitet). Ange de som passar din produkt — dashboarden anpassar sig och visar bara de paket du faktiskt fyller med data.
Identitet
Alltid relevant. Anger kolumnerna i profilhuvudet.
| Nyckel | Typ | Beskrivning |
|---|---|---|
$email | sträng | Primär e-postadress, ofta nyckeln som används för att slå ihop identiteter. |
$phone | sträng | Telefonnummer i E.164-format. |
$name | sträng | Fullständigt visningsnamn. |
$first_name | sträng | Förnamn. |
$last_name | sträng | Efternamn. |
$avatar_url | sträng | Fullständig URL till användarens avatarbild. |
Geografi
Geografisk kontext.
| Nyckel | Typ | Beskrivning |
|---|---|---|
$country | sträng | Landskod enligt ISO 3166. |
$city | sträng | Stadsnamn. |
$region | sträng | Delstat eller provins. |
$timezone | sträng | IANA-zon som America/Los_Angeles. |
$language | sträng | IETF-tagg som en eller ru-RU. |
$locale | sträng | Fullständig språkversionsidentifierare. |
Livscykel
När vi senast såg dem.
| Nyckel | Typ | Beskrivning |
|---|---|---|
$created | ISO8601 | Tidpunkt för registrering eller kontoskapande. |
$last_seen | ISO8601 | Tidpunkt för senaste aktivitet. |
Prenumeration
Ange om produkten har abonnemang.
| Nyckel | Typ | Beskrivning |
|---|---|---|
$plan | sträng | Slug för nivå — free, pro, enterprise. |
$subscription_status | sträng | active / trial / cancelled / past_due. |
$trial_ends | ISO8601 | När den nuvarande provperioden löper ut. |
$mrr | tal | Månatlig återkommande intäkt i kontots valuta. |
$subscription_started | ISO8601 | När den nuvarande prenumerationen började. |
E-handel
Ange om ni säljer produkter.
| Nyckel | Typ | Beskrivning |
|---|---|---|
$lifetime_orders | tal | Antal slutförda beställningar. |
$lifetime_revenue | tal | Total kostnad. |
$aov | tal | Genomsnittligt ordervärde. |
$last_purchase | ISO8601 | Senaste genomförda köp. |
$first_purchase | ISO8601 | Första genomförda köp. |
$cart_abandoned_count | tal | Totalt antal övergivna varukorgar. |
Media
Ange om ni publicerar innehåll.
| Nyckel | Typ | Beskrivning |
|---|---|---|
$content_tier | sträng | free / premium / paid. |
$subscribed_categories | CSV-sträng eller array | Kategorier som användaren följer. |
$watch_time_total | tal | Total visningstid i sekunder. |
$last_played | ISO8601 | Senaste uppspelningsstart. |
Marknadsplats
Ange om ni är en plattform med två sidor.
| Nyckel | Typ | Beskrivning |
|---|---|---|
$seller_tier | sträng | Slug för säljarens nivå. |
$buyer_tier | sträng | Slug för köparsidan. |
$listings_count | tal | Aktiva annonser som användaren äger. |
$reviews_count | tal | Omdömen som användaren har fått. |
$verified | boolesk | KYC-status. |
Lojalitet
Används för engagemangs- och belöningsprogram.
| Nyckel | Typ | Beskrivning |
|---|---|---|
$loyalty_points | tal | Aktuellt saldo för inlösbara poäng. |
$vip_level | sträng | Slug för VIP-nivå. |
$referral_count | tal | Lyckade rekommendationer som tillskrivits den här användaren. |
Tips
Saknas ditt mönster? Använd vanliga nycklar för anpassade egenskaper. De visas i dashboardens panel för Custom Traits utan att ta plats i profilkolumnerna. De fem vertikalpaketen ovan är genomtänkta gissningar om de vanligaste B2B-uppläggen — kundspecifik terminologi, till exempel shipping_plan, lämnas utan prefix.
Superegenskaper
Nyckel/värde-par per session som automatiskt läggs till på varje utgående händelse. Till skillnad från identify traits, som beskriver identiteten, beskriver super-properties sessionskontexten — aktiv A/B-variant, build flavor och aktiverade feature flags. De sparas i UserDefaults mellan appstarter och rensas vid reset(). Vid krock har alltid properties per händelse på track företräde.
Kixo.setSuperProperty("build_flavor", value: "beta")
Kixo.setSuperProperties([
"ab_variant": "B",
"referrer_campaign": "autumn-launch",
])
// Sugar for A/B tracking — keys as 'experiment_<id>'.
Kixo.setExperimentVariant("checkout_v2", variant: "variant_a")
Kixo.unsetSuperProperty("build_flavor")
Kixo.clearSuperProperties()Skärmspårning i SwiftUI
Skärmvisningar i SwiftUI spåras automatiskt när SDK:t kan avgöra vyns namn. Vill du ha mer kontroll eller egna namn använder du vymodifieraren .kixoScreen():
struct HomeView: View {
var body: some View {
VStack { Text("Welcome") }
.kixoScreen("HomeView")
}
}Sessionsåterspelning
Replay återskapar det användaren faktiskt såg — SDK:t fångar skärmens bildrutor, HEIC-kodade, tillsammans med en strukturell ögonblicksbild av vyhierarkin, och spelaren i dashboarden syr ihop dem till en spolbar uppspelning bredvid händelsetidslinjen. Konfigurera replay för projektet i Översikt → Inställningar → Sessionsrepris; SDK:t läser den policyn automatiskt och uppdaterar den medan appen körs.
Kixo.configure(
projectId: "YOUR_PROJECT_ID",
apiKey: "YOUR_API_KEY"
)I dashboarden styr du om replay är aktiverat, maskering, inspelningslägen och om native replay får ladda upp via mobilnätet. Om uppladdning via mobilnät är avstängd kan bildrutor fortfarande samlas i en begränsad buffert på enheten; uppladdningen väntar tills ett tillåtet nätverk finns.
SDK:t samlar in den data som är aktiverad i projektet samt de händelser och egenskaper som appen skickar.
Maskering och integritet
Eftersom replay fångar pixlar sker maskeringen på enheten innan någon bildruta kodas. Lösenord och andra känsliga fält upptäcks och maskeras automatiskt, och text som fångas i den strukturella ögonblicksbilden passerar ett PII-filter. Om du vill maskera något eget — en privat meddelandetråd, ett kontosaldo eller en utkastsvy — sätter du kxRedact på vyn. Kixo rasteriserar då en täckande rektangel över vyns gränser före HEIC-kodning, så att dess pixlar aldrig lämnar enheten.
balanceLabel.kxRedact = true
cardNumberField.kxRedact = trueTips
Tryck som fångas upp på skärmar som spelas upp i replay används också i dashboardens mobila värmekarta, så att du kan se var användare trycker på varje skärm utan extra konfiguration av SDK:t. Replay omfattas av projektets plan; när bildruteinsamling inte är tillgänglig registrerar SDK:t fortfarande sessionsmetadata utan att ladda upp bildruteströmmen.
Pushnotiser
SDK:t installerar en AppDelegate-proxy vid körning på Kixo.configure — tysta pushnotiser (content-available: 1) och synliga pushnotiser som levereras i bakgrunden fångas upp automatiskt. Du behöver inte lägga till någon kod i AppDelegate. Befintliga implementationer av UNUserNotificationCenterDelegate fortsätter att köras som vanligt; Kixo kapslar in dem.
Registrera enhetstokenen via den vanliga didRegisterForRemoteNotificationsWithDeviceToken:
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
let token = deviceToken.map { String(format: "%02x", $0) }.joined()
Kixo.setPushToken(token)
}Om appen använder Firebase Messaging skickar du dess registreringstoken med provider: .firebase. Kixo sparar leverantören och levererar via FCM HTTP v1. Konfigurera appens Firebase service account i Kixo innan ni skickar kampanjer.
func messaging(_ messaging: Messaging, didReceiveRegistrationToken token: String?) {
guard let token else { return }
Kixo.setPushToken(token, provider: .firebase)
}Leverans och offlinebeteende
SDK:t köar händelser lokalt, skickar dem i batcher och försöker igen vid tillfälliga fel med backoff. Om insamlingen pausas i projektinställningarna skickas inga nya händelser förrän insamlingen aktiveras igen.
Diagnostik
Skrivskyddad hälsobild. Praktisk på felsökningsskärmar eller i smoke tests — svarar på "varför kommer inte mina händelser fram?" utan att du behöver en debugger.
let diag = Kixo.diagnostics()
print(diag.queue.bufferedEventCount) // events waiting to flush
print(diag.paused) // collection paused state
print(diag.environment) // configured environment
print(diag.apiHost) // configured ingest hostTvinga tömning av kön (för tester)
Synkron överlagring som blockerar i upp till timeout sekunder medan en flush slutförs. Avsedd för XCTest-fixtures — anropa aldrig från huvudtråden.
func testEventLanded() {
Kixo.track("test_event")
let landed = Kixo.flush(timeout: 5.0)
XCTAssertTrue(landed)
}Återställ
Rensar identitet, superegenskaper och den sparade kön. Anropa vid utloggning så att efterföljande händelser inte tillskrivs föregående användare.
Kixo.reset()