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

# iOS FAQ

> Answers to common questions about the Desmo iOS SDK.

## Is the SDK safe to run in production?

Yes. The SDK is designed to run continuously during delivery sessions:

* It batches telemetry to reduce network overhead.
* It uses efficient system APIs for motion and networking.
* You control which environment it talks to (`.sandbox` vs `.live`).

We still recommend starting with a small pilot group and monitoring app performance and crash reports.

## What happens if the device is offline?

If the device is temporarily offline:

* `startSession` and `stopSession` may fail if the backend cannot be reached.
* Telemetry uploads can be delayed until connectivity returns.

Integration tips:

* Handle errors from `startSession` and `stopSession` gracefully in your UI.
* Consider allowing drivers to retry `stopSession` if the first attempt fails.

## Can I disable or remove the SDK?

Yes. You can:

* Stop calling `Desmo.setup` and any session APIs.
* Remove the `DesmoTraceSDK` package from your app target in Xcode.

If you need to immediately disable ingest on the backend side, you can revoke the publishable key in the Desmo dashboard.

## How do I test without affecting production data?

Use:

* A **sandbox** publishable key (`pk_sandbox_...`).
* `environment: .sandbox` when calling `Desmo.setup`.

This keeps test sessions and telemetry separate from live deliveries. You can create dedicated sandbox projects/tenants as needed.

## What are session types and when should I use each?

Every session requires a `SessionType`:

| Type       | When to use                       |
| ---------- | --------------------------------- |
| `.pickup`  | Driver is collecting a package    |
| `.drop`    | Driver is delivering a package    |
| `.transit` | Driver is traveling between stops |

For `.pickup` and `.drop`, you must provide an address. For `.transit`, the address is optional.

## How do I request permissions upfront?

Call `Desmo.requestPermissions()` during app onboarding to ensure all sensor data flows immediately when sessions start:

```swift theme={null}
Desmo.requestPermissions {
    if Desmo.hasRequiredPermissions() {
        // Ready to record
    }
}
```

This is optional but recommended for best data quality.

## How do I see what the SDK is doing?

* Enable logging (the default) so that:
  * Session start/stop and HTTP status codes are printed to the console.
  * You can see basic telemetry upload behavior.
* Use the [Logging, Debugging & Troubleshooting](/essentials/ios-logging-debugging) guide for a detailed checklist.

## How do I upgrade the SDK?

When a new version is released:

1. In Xcode, open **Package Dependencies**.
2. Update `desmo-iOS-sdk` to the desired version (for example, bump the minimum from `1.0.2` to a newer tag).
3. Rebuild and rerun your tests.

Because integration goes through `Desmo.setup`, `startSession`, and `stopSession`, most changes are backwards compatible as long as you stay within the same major version.

## Who do I contact for support?

For API keys, backend configuration, or integration questions:

* Reach out to your Desmo contact.
* Or use the support channel linked from the Desmo dashboard.
