Skip to main content
Version: 0.3.0

Noughty Tours iOS SDK

NoughtyToursSDK is a capture SDK. It drives the device that produces a virtual tour: LiDAR structure capture, panorama capture, local storage, and background upload to the Noughty Reality platform.

It vends its capture screens as view controllers you push onto your own navigation stack, and reports what the user did through a single onEvent closure per screen. It is not a viewer and it does not render finished tours.

The SDK owns the domain (property → floor → room → panorama scan), the capture runtimes, local storage, and sync. You own navigation, your login, and your chrome.

Requirements​

PlatformiOS 17+
DevicesA real device with a LiDAR scanner for anything that captures or syncs — check NoughtyTours.isDeviceSupported before offering capture
Architecturesarm64 only: device and Apple-silicon simulator slices
CapabilitiesApp Attest on your own App ID, plus NSCameraUsageDescription
BackendA pk_ios_* publishable key issued to your app by The Noughty Fox
Localizationen, de, ro, ru — the screens localize themselves; there is no string-override hook

Shape of the API​

One NoughtyTours instance for the whole process, built from a Configuration and started once at launch. Everything else hangs off it.

AreaSymbols
CoreNoughtyTours, Configuration, APIEnvironment
Host-providedOrganizationProviderType, SettingsProviderType, RecordingResolution, PanoramaProcessing, FloorPlanStyle, UIVersion
Screensproperties
EventsPropertyFlowEvent
HandlesProperty, Floor
ProgressPropertyStatus, SyncState, statusUpdates(for:)
ErrorsNoughtyToursError, AuthError, NoughtyToursEntity
DiagnosticsLog, LogLevel, LogCategory

Authentication​

Device attestation, not tokens you mint. The device attests against your App ID using Apple's App Attest, scoped to an organisation your app supplies through OrganizationProviderType. Nothing syncs until attestation succeeds.

See App Attest.

What this SDK does not do​

  • It has no opinion about your users. There is no login here. You authenticate your users your own way and hand the SDK only the selected organisation, through OrganizationProviderType. The SDK's own auth is device-level and separate.
  • It stores no settings. It never touches UserDefaults; every knob comes from you through SettingsProviderType.
  • It presents nothing over your UI — no alerts, no modals over your stack. It navigates only below the entry screen you placed. Failures arrive through an onEvent failed case or are thrown as NoughtyToursError.
  • It is offline-first. Capture never blocks on connectivity; uploads and sync are additive and happen in the background.

Pages​

PageContent
InstallationSwift Package Manager, deployment target
App AttestCapability setup, device auth, revoking a session
Getting startedProviders, start(), placing the first screen
ScreensThe two entry points, and the flow inside them
Events and handlesPropertyFlowEvent, and Property / Floor
Progress and syncPropertyStatus, SyncState, background upload
ErrorsNoughtyToursError, AuthError
LoggingLog, LogLevel, LogCategory
Release notesWhat changed in each release