> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ones1ght.com/llms.txt
> Use this file to discover all available pages before exploring further.

# iOS SDK

## 0.2.6

* Fixed the floor not being found after returning from the background (`E3007`) — the SDK now scans the floor beacons directly for up to 10 seconds when the positioning engine starts

## 0.2.5

* Resuming positioning now restarts the engine when it has stopped producing positions (a session error, or no position for more than 5 seconds)

## 0.2.4

* The positioning engine now runs only while the app is on screen — calling `begin()` in the background starts the engine when the app comes to the foreground
* The engine now stops when the app goes to the background or terminates, and the leftover floor-detection beacon region is cleared
* Fixed opening the app after a background start ending immediately with `E3007`
* Fixed zones disappearing from the map on floors with a floor plan after the live connection reconnects

## 0.2.3

* No SDK code or behavior changes (docs and code snippets only)
* MCP code snippets now reflect the 'Always' location permission on iOS 27.2 and later
* MCP code snippets now install with `from: "0.2.2"`

## 0.2.2

* Floor detection now uses multiple locators (switching to a new floor requires 3 or more)
* The first floor is now confirmed after observing for 1 second
* The engine now reopens the UWB session by itself when it drops
* Added the [Always location permission](/en/developers/sdk/integration/ios#always-location-permission) section to the setup guide (required on iOS 27.2 and later)

## 0.2.1

* Added `SdkError.floorNotSet` — exhaustive `switch` statements need a new case
* Calling `setFloorMap(floor)` without a building now raises `floorNotSet` (`E3001`)
* Positioning key problems are now reported as `E1007` instead of `E1002`
* Devices without Bluetooth are now reported as `E2002` instead of `E2003`
* Zone exit (EXIT) is now sent and `onZoneExit` called when the app goes to the background
* Fixed the same zone entry being sent twice after returning from the background
* Fixed duplicate entry events when the engine restarts because of a zone change

## 0.2.0

* Internal types (`ApiClient`, `Req…`, `Res…`, `SdkDefaults`, etc.) are no longer public
* Removed `MockPositioningProvider` — adopt `PositioningProvider` directly
* `permissions()` → `requestPermission()` (shows the system prompt)
* `putProfile(_:_:)` → `replaceProfile(_:attributes:)` (missing attributes are deleted)
* `getProfile(_:)` → `fetchProfile(_:)`
* `floor(_:_:)` → `floor(buildingId:floorId:)`
* `send()` → `uploadPendingPositions()`, `empty()` → `discardPendingPositions()`
* For the full list, see the [CHANGELOG 0.2.0](https://github.com/onecheck-inc/OneS1ght-iOS-SDK/blob/main/CHANGELOG.md#020--2026-10-02) (Korean; old names only warn)
* Added `FloorSession.onFloorDetected`, `onStopped` and `StopReason`
* If the engine stops, it retries after 3, 10 and 30 seconds, then ends the session (`.engineFailed`)
* Pause now persists across a trip to the background
* `onDebugLog` code lines now have finer levels and are merged into one line
* `E3001` (floor not set) is no longer reported to the console
* Fixed a crash when `empty()` was called during a coordinate upload
* Fixed zone callbacks and pause being ignored with `begin(provider:)`
* Fixed runaway coordinate and log uploads while offline
* Fixed `begin()` failing with `E1004` when `identify` was called before `initialize`
* Fixed `baseURL` not being applied to building, floor and zone lookups

## 0.1.24

* Fixed positioning not coming back when started with Bluetooth off
* Added `E2004` (Bluetooth off) — previously reported as `E2003`

## 0.1.23

* Fixed `begin()` being silently ignored right after `end()`
* Added a warning log when `begin()` is skipped because positioning is already running

## 0.1.22

* Fixed zone enter/exit notifications firing during `pause()`
* Fixed the session turning back off when started while the engine was stopping

## 0.1.21

* Fixed zones newly drawn in the console at runtime not being detected
* Coordinates pause for about 1.5 seconds while the engine restarts after a zone change

## 0.1.20

* Added `FloorSession.pause()`, `resume()` and `isPaused`

## 0.1.19

* Log level for states that keep working, such as `E2001` and `E2002`, changed to WARN
* Reworded `E3001` (starting without a floor is a normal path)

## 0.1.18

* Removed the `geoSdkKey` argument from `initialize`
* Removed the `geoPartnerKey` and `geoBaseUrl` accessors
* The positioning key now comes only from the console — `E1007` if missing
* `E1005` and `E1006` no longer occur

## 0.1.17

* Minimum iOS 15 → 18; Xcode 27 (iOS 27 SDK) required
* Positioning works only on iOS 27 and later — `osVersionTooLow` below that
* `NSBluetoothAlwaysUsageDescription` must be added to `Info.plist`
* `NSLocationTemporaryUsageDescriptionDictionary` (key `Positioning`) must be added
* The engine now finds the floor even if the app does not set one
* Positioning and map keys now come from the console
* The SDK now requests location permission itself
* Added new codes such as `E1007`, `E3007`, `E3008`, `E3009` and `E4004`
* Zone detection moved to the engine; console zone detection values (`inDist`, etc.) are no longer used

## 0.1.16

* Floor plan and zones are now shown even if the locator lookup fails
* Added `E3006 locatorsFetchFailed`

## 0.1.15

* `E3005 planMissing` changed to `I3002 planMissing` (INFO)

## 0.1.14

* Positioning now works on floors without a floor plan
* Added `Locator.isPlaced`
* Without a floor plan, `Floor` size and origin are 0 — check `hasPlan`

## 0.1.13

* Fixed the debug log example in the `0.1.12` tag not compiling

## 0.1.12

* `onDebugLog` and `onLog` closure arguments changed to `{ level, line in }`
* Added `LogLevel` (`Comparable`)

## 0.1.11

* Fixed detection continuing after all zones were deleted
* Added `setLanguage(_:)`

## 0.1.10

* Fixed positioning not restarting after an interruption

## 0.1.9

* `initialize` no longer fails on unsupported devices — checked in `begin()` instead
* Fixed live change events not arriving
* Fixed the floor list lookup downloading whole floor plans

## 0.1.8

* Live change events (`onConfigChanged`) are now connected before positioning starts

## 0.1.7

* Fixed an empty floor list when floor IDs arrived as numbers

## 0.1.6

* Fixed the integration example not compiling (no code changes)

## 0.1.5

* Repository moved to `onecheck-inc/OneS1ght-iOS-SDK`
* The `package:` identifier must also be changed to `OneS1ght-iOS-SDK`

## 0.1.4

* Initial releases up to 0.1.4 — see the [CHANGELOG](https://github.com/onecheck-inc/OneS1ght-iOS-SDK/blob/main/CHANGELOG.md)
* `0.1.3` and below fail to initialize against the production server — use `0.1.12` or later


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.