LOD - iOS SDK
V 3.0.0 (released 15-09-2025)
Support
- The LANDMARKS ID SDK supports iOS 15.6 and above.
Setup Instructions
Using CocoaPods
- If you previously included the SDK manually please delete both
LandmarksIDiOS.frameworkandBDPointSDK.frameworkfrom the project. - Include the LandmarksID pod in the Podfile.
pod 'LANDMARKSID-LOD-SDK', :git => 'https://github.com/LANDMARKSID/ios-lod-sdk.git', :tag => '3.0.0'
- Run
pod install.
An example application is available in the Examples folder of the GitHub repository.
Local Installation (Manual Download)
- Go to the GitHub releases page and download the latest
LandmarksIDiOS.xcframework.zipfile. - Extract the zip file to get
LandmarksIDiOS.xcframework. - In Xcode, open your project and navigate to your app target.
- Go to Project Navigator → Select your project → Select your target → General tab.
- Under Frameworks, Libraries, and Embedded Content, click the + button.
- Click Add Other... → Add Files... and select the extracted
LandmarksIDiOS.xcframework. - Ensure the framework is set to "Embed & Sign".
- The SDK depends on the Bluedot Point SDK. Download
BDPointSDK.xcframework.zipfrom the Bluedot release page, extract it and addBDPointSDK.xcframeworkfollowing steps 5–7.
Swift Package Manager (SPM)
Option 1: Using Xcode Package Manager
- In Xcode, open your project and go to File → Add Package Dependencies.
- Enter the following repository URL:
https://github.com/LANDMARKSID/ios-lod-sdk.git - Select the latest version available (3.0.0).
- Click Add Package and wait for Xcode to resolve the dependency.
- Select LandmarksIDiOS from the list and click Add Package.
iOS Configuration Information
- Locate the app's
Info.plistfile in the Supporting Files folder of the Xcode project. - Select the file once to display the Key/Value pairs in the editor pane.
- Find an existing entry titled 'Required background modes' or create one if it does not exist.
- Select the (+) icon and select from the drop-down list provided: App registers for location updates.
Required background updates description
Usage description is required to be set in the applications info.plist when utilising Location services.
- Locate the app's
info.plistfile in the Supporting Files folder of the Xcode project. - Select the icon and set the below description values for the application (It is mandatory that all are set).
- `Privacy - Location Always and When In Use Usage Description`
- `Privacy - Location Always Usage Description`
- `Privacy - Location When In Use Usage Description`
Local Notification Permission Prompt
The SDK is configured to prompt Local Notification Permissions as default. To disable the notification permission prompt, the following key should be declared in the info.plist:
- Locate the app’s info.plist file in the Supporting Files folder.
- Select the (+) icon to add a new key. BDPointLocalNotificationEnabled, and set the value to Boolean Type.
- `set the value to YES to enable default notification prompt`
- `set the value to NO to disable default notification prompt`
Edit the AppDelegate
Import the LANDMARKS ID SDK
import LandmarksIDiOSCopy the following snippet into
application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Boollet appId = "APP_ID" let appSecret = "APP_SECRET" let apiKey = "API_KEY" let landmarksManager = LandmarksIDManagerDelegate.initialize(appId, appSecret: appSecret, apiKey: apiKey) landmarksManager?.setup() LandmarksIDLocationManager.getInstance().locationDelegate = landmarksManager LandmarksIDLocationManager.getInstance().sessionDelegate = landmarksManager
HINT: Store your secrets safely, like in an .xcconfig file, to avoid committing them to the code.
Required Application State Transition Management
The LANDMARKS ID SDK must be notified when the application is terminated and when there is a transiton between the Foreground / Background
Call the function below inside applicationWillTerminate(_ application: UIApplication) when the application is terminated.
DispatchQueue.global(qos: .utility).async {
LandmarksIDManagerDelegate.sharedManager().applicationWillTerminate()
}
Call the function below inside applicationDidEnterBackground(_ application: UIApplication)when the application transitions into the background.
DispatchQueue.global(qos: .utility).async {
LandmarksIDManagerDelegate.sharedManager().stopTracking()
}
Call the function below inside applicationWillEnterForeground(_ application: UIApplication) when the application transitions into the Foreground.
DispatchQueue.global(qos: .utility).async {
LandmarksIDManagerDelegate.sharedManager().startTracking()
}
Optional Controls
Requesting Location Permissions
Call the function below to initiate a user location permissions request via the SDK. It is good practice to set a location usage explaination within the Info.plist describing how you intend to use user's location data (Strongly recommended).
LandmarksIDManagerDelegate.sharedManager().requestLocationPermissions(CLAuthorizationStatus.authorizedAlways)
Controlling User Data Collection
These functions are designed for applications that have controls in place for managing device level data collection. When the isAllowedToRecordData function is set to false the LANDMARKS ID SDK will not record any data from the device.
Checking if it is allowed to collect data for the user (Default:
true).LandmarksIDManagerDelegate.sharedManager().isAllowedToRecordData()Stop recording data for the user.
LandmarksIDManagerDelegate.sharedManager().stopRecordingData()Restart recording data for the user.
LandmarksIDManagerDelegate.sharedManager().restartRecordingData()
Sending Additional Data
User data that is collected by, or made available to, the application can be attach to the LANDMARKS ID SDK session as custom values. These will be recorded by the LANDMARKS ID SDK with each location event. Multiple custom values can be passed into each function.
Standardised - Functions provisioned for specific user data
- Set Clients Customer ID
LandmarksIDManagerDelegate.sharedManager().customerId = "CUSTOMER_ID"
Custom - Functions provisioned for all other non specific user data
Set an integer value
LandmarksIDManagerDelegate.sharedManager().setCustomInt("rank", value: 12)Set a float value
LandmarksIDManagerDelegate.sharedManager().setCustomFloat("score", value: 23.29)Set a string value
LandmarksIDManagerDelegate.sharedManager().setCustomString("mobile", value: "123134323432")
Contact Details
If you have any further questions please do not hesitate to contact our friendly team at;
