Swift
Send events to Pieowl from iOS, macOS, tvOS and watchOS apps with the HTTP API, using URLSession.
Pieowl doesn't ship a Swift SDK. You send events from Swift with a plain HTTP request to the Track API. The example below uses URLSession and JSONSerialization from Foundation, so there is no package to add. It works on iOS, macOS, tvOS and watchOS.
Looking for a step-by-step tutorial? Read the Swift analytics guide.
Before you start
You need a client ID and a client secret. Find them in the dashboard under Settings → Developers → Keys. Apps can't send the browser headers Pieowl uses to check where a request comes from, so app requests include the secret.
Send an event
Every request is a POST to https://api.pieowl.com/track with a JSON body of { "type": ..., "payload": ... }.
import Foundation
enum Pieowl {
private static let trackURL = URL(string: "https://api.pieowl.com/track")!
private static let clientId = "YOUR_CLIENT_ID"
private static let clientSecret = "YOUR_CLIENT_SECRET"
@discardableResult
static func send(_ type: String, _ payload: [String: Any]) async throws -> Int {
var request = URLRequest(url: trackURL)
request.httpMethod = "POST"
request.timeoutInterval = 5
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue(clientId, forHTTPHeaderField: "pieowl-client-id")
request.setValue(clientSecret, forHTTPHeaderField: "pieowl-client-secret")
request.httpBody = try JSONSerialization.data(
withJSONObject: ["type": type, "payload": payload]
)
let (_, response) = try await URLSession.shared.data(for: request)
return (response as? HTTPURLResponse)?.statusCode ?? 0
}
}async URLSession calls need iOS 15, macOS 12, tvOS 15 or watchOS 8.
Usage
Call send from a Task, for example Task { try? await Pieowl.send(...) }.
Tracking events
try await Pieowl.send("track", [
"name": "signup",
"profileId": "user_123", // optional
"properties": ["plan": "pro"],
])Tracking screen views
To fill the pages report, send a screen_view event with the screen name in __path:
try await Pieowl.send("track", [
"name": "screen_view",
"properties": ["__path": "/settings"],
])Identifying users
try await Pieowl.send("identify", [
"profileId": "user_123", // required
"firstName": "Joe",
"lastName": "Doe",
"email": "joe@doe.com",
"properties": ["tier": "premium"],
])Incrementing and decrementing properties
value is optional and defaults to 1.
try await Pieowl.send("increment", ["profileId": "user_123", "property": "visits", "value": 1])
try await Pieowl.send("decrement", ["profileId": "user_123", "property": "credits", "value": 1])Good to know
- Errors:
sendreturns the HTTP status. A2xxstatus means Pieowl accepted the request. Network errors throw, so usetry?if analytics must never interrupt your app. - Offline: Requests fail while the device is offline. If you need offline support, store events and send them later.
- More event types: Revenue, groups and the full request schema are in the Track API reference.