Products
Depend on
Orbit for everything, or on a single module when you want only one surface in your binary.
Install with Swift Package Manager
1
Add the package
In Xcode, File, then Add Package Dependencies, pointed at
https://github.com/Parsaa-Company/Orbit-SDK.2
Pick a product
Add
Orbit to your app target, or OrbitVitals or OrbitCapture on their own.3
Start it once, early
Call
Orbit.Vitals.start and Orbit.Capture.start in application(_:didFinishLaunchingWithOptions:) or a SwiftUI App.init. See SDK configuration.Package.swift:
Platforms
A multiplatform app needs no
#if of its own on any of them.
Privacy manifests ship with the SDK
Every module carries its ownPrivacyInfo.xcprivacy at the root of its resource bundle, as Apple requires of a third party SDK. You do not write or copy one for the SDK’s own behaviour.
NSPrivacyTrackingisfalse, with no tracking domains. The SDK never reads the IDFA and never prompts for App Tracking Transparency.OrbitVitalsdeclaresCrashData,PerformanceDataandOtherDiagnosticData, each linked to the app and never to the person.OrbitCapturedeclares product interaction and other usage data, plusUserID(becauseCapture.setUserexists) andPurchaseHistory(because the revenue surface exists). An SDK declares what it can collect, not only what your build happens to use.NSPrivacyAccessedAPITypesis empty, on both. The SDK uses no required reason API: noUserDefaults, no file timestamps, no disk space query, no system boot time. The on-disk queue encodes its timestamps and byte counts in the file names precisely so it never has to ask the file system for them.
Binary size
Release__TEXT + __DATA of the module objects, which is what lands in a customer’s binary. The budget is 1 MiB per module.
What an app actually links, for the three shapes:
OrbitPolicy is the capture policy document and the evaluation both surfaces have to agree on. It is not a product and nothing imports it directly, but it is why OrbitVitals honours the same targets and the same per-session sampling OrbitCapture does, from one implementation rather than two.
Measured overhead
Measured rather than claimed, over a 5-minute scripted session against the same app with the SDK off. iOS Simulator, iPhone18,1 on Apple M1, 300 seconds per configuration, 60 screens, 300 taps, 200 network calls and 1,000 log lines.
Against the baseline:
- Defaults: +0.08 points of CPU, +3.0 MB of peak memory, 26 KB sent per minute.
- Replay: +0.25 points of CPU, +4.7 MB, 45 KB per minute.
- Bodies: +0.34 points of CPU, +5.5 MB, 26 KB per minute.
- Live stream: +0.57 points of CPU, +6.9 MB, 49 KB per minute.
The CPU column is the whole process, so the scripted session’s own work is most of it. What the SDK costs is the difference between the rows, and a CI job fails the build if that difference moves past 5 points.
Next
SDK configuration
Every field of
CaptureConfiguration and VitalsConfiguration, and where the key comes from.What the SDK collects
Automatic, explicit, and what never leaves the device.