For the complete documentation index, see llms.txt. This page is also available as Markdown.

iOS Swift Native

Add VPS localization and object tracking to an iOS app with the MultiSet Swift SDK, including quick start, requirements and token renewal.

Overview

The MultiSet iOS SDK provides Visual Positioning System (VPS) localization capabilities for iOS applications. It enables precise indoor and outdoor localization using camera-based visual recognition against pre-mapped 3D environments.

GitHub Repository: https://github.com/MultiSet-AI/multiset-ios-sdk.git

Table of Contents

Sample Views

API Reference

Quick Start

The sample project comes pre-configured with the SDK framework and all necessary dependencies. Follow these steps to get up and running:

1. Clone the Repository

2. Open the Project

Open the .xcodeproj file in Xcode.

3. Configure Credentials

Open SDKConfig.swift and replace the placeholder values with your credentials:

Property
Description
Required

baseURL

API host, defaults to production

No

clientId

Your client identifier

Yes

clientSecret

Your secret key

Yes

mapCode

Single map identifier

One of these is required

mapSetCode

MapSet identifier

One of these is required

objectCodes

Codes to track in object tracking mode

Only for object tracking

To obtain credentials, visit: https://developer.multiset.ai/credentials

4. Build and Run

  1. Select your target iOS device (AR requires a physical device)

  2. Press Cmd + R to build and run

  3. The app opens on the LandingView, where the SDK authenticates automatically

  4. Localization: Select a mode (Single-Frame or Multi-Frame) and tap Start Localization to enter ARLocalizationView

  5. Object Tracking: Tap Start Object Tracking to enter ARObjectTrackingView

Requirements

  • iOS 16.0+

  • ARKit compatible device (iPhone 6s or later)

  • Camera permission

  • Internet connectivity

API Environment

Every endpoint the SDK calls is built from MultiSetConfig.baseURL, which defaults to the production API at https://api.multiset.ai. Override it to point a build at a staging, on-premise or proxied deployment:

The value is applied at initialize(config:callback:), before authentication. An access token is only valid against the host that issued it, so switching environments later requires release() followed by a fresh initialize(...). Read MultiSet.shared.activeBaseURL to see which host requests are going to.

Session Length and Token Renewal

Access tokens issued by the MultiSet API are short-lived, measured in minutes rather than hours. The SDK renews them for you: it reads each token's own lifetime, refreshes ahead of expiry, and if a request is rejected with HTTP 401 it refreshes once and replays that request. Concurrent requests share a single renewal rather than each triggering their own.

Nothing is required of your app, and sessions of any length work without re-initializing. Two consequences are worth knowing:

  • MultiSet.shared.authToken changes during a session. Read it at the point of use and never cache it.

  • If renewal ultimately fails, for example because credentials were revoked mid-session, the error surfaces through the operation that was in flight (onLocalizationFailure or onObjectTrackingFailure) with the authentication error in its message. MultiSet.shared.isAuthenticated remains true.

Handling False Positives

In visually repetitive spaces the server can return a confident pose for the wrong location, which the user sees as the mesh jumping several metres. Enabling the pose consistency check makes the SDK compare each result against the device's own AR trajectory and discard results that contradict it:

A discarded result leaves the AR scene untouched and calls onLocalizationFalsePositive(info:) instead of onLocalizationSuccess. See Pose Consistency Settings for tuning guidance.

Info.plist Configuration

Add the following keys to your Info.plist:

License

Copyright (c) 2026 MultiSet AI. All rights reserved. Licensed under the MultiSet License. For license details, visit www.multiset.ai.

Last updated

Was this helpful?