Octet Mobile SDK
Provable location for iOS and Android apps.
The SDK is distributed on GitHub (add it via Swift Package Manager or Maven). It gets its license by attesting your app at first launch, so no key ships in the app. Register your app once (see Prerequisites): the first 1,000 active users each month are free, no credit card.
The Octet SDK turns a location check into a verdict (YES, NO, or INDETERMINATE) and, when it can answer, a signed proof anyone can verify offline with octet-verify or on-device with Octet.verify.
This documentation describes the Octet SDK 2.0.0, a major release. Licensing moved to an attested bootstrap: the SDK proves the app's identity at first launch instead of carrying a key. The 1.x docs stay at /docs/v1.2/.
Pick a starting point
- Shipping an iOS app → iOS Quick Start
- Shipping an Android app → Android Quick Start
- Evaluating the SDK → Proof of Location
- Seeing what your users experience → UX
- Verifying a proof yourself → On-device Verification
- Looking up a symbol → API Reference
- Upgrading from 1.x → Migrating from 1.x
- Debugging an error → Troubleshooting & FAQ
What the SDK does
You call sdk.loc.isWithin(region: …). You get back a Verdict of YES, NO, or INDETERMINATE, and on YES or NO a cryptographic proof a third party can verify offline.
What this documentation covers
- Getting Started. Prerequisites, install, first verdict.
- Concepts. What proofs are, the verdict values, regions, time semantics, and the license model.
- API Reference. Per-symbol pages, Swift and Kotlin side by side.
- Sample Apps. The OctetSample demo apps for iOS and Android.
- Troubleshooting. Indexed by what you see in
verdict.reasonorLicenseError. - UX. What the person sees in your app while the SDK works, beat by beat, with the trace beside it.
What the SDK is not
- Not a navigation library. It reports whether a device was at a claimed place at a claimed time, not where to go next.
- Not a spoof detector you can wire into your own user-flagging. Spoof signals fold into the verdict. You get a
reasoncode (for exampleATTESTATION_FAILED), not the sensor-level detail of which signal fired. Exposing that is a security risk: it tells an attacker exactly what to defeat.