iOS Swift Native
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
LandingView - Authentication, SDK initialization, and navigation
ARLocalizationView - AR localization (Single-frame and Multi-frame)
ARObjectTrackingView - AR object tracking with outline mesh rendering
API Reference
MultiSetConfig - Configuration parameters
MultiSetCallback - SDK event callbacks and
FalsePositiveInfoLocalizationResult - Pose data,
GeoCoordinatesandGeoPose
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:
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
Select your target iOS device (AR requires a physical device)
Press Cmd + R to build and run
The app opens on the LandingView, where the SDK authenticates automatically
Localization: Select a mode (Single-Frame or Multi-Frame) and tap Start Localization to enter ARLocalizationView
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.authTokenchanges 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 (
onLocalizationFailureoronObjectTrackingFailure) with the authentication error in its message.MultiSet.shared.isAuthenticatedremainstrue.
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?

