> For the complete documentation index, see [llms.txt](https://docs.tryterra.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tryterra.co/help-center/help-topics/data-api-sdk/realtime-streaming-and-ble/ios-streaming-info-plist-bluetooth-keys.md).

# Why does iOS realtime streaming fail TestFlight upload?

**iOS realtime streaming needs Bluetooth (and optionally Motion) usage-description keys in `Info.plist`** so permissions are requested at first launch and submission passes review.

Add these to `ios/Runner/Info.plist`:

* `NSBluetoothPeripheralUsageDescription`
* `NSBluetoothAlwaysUsageDescription`

Missing these causes the device scan to do nothing and App Store / TestFlight submission failures, even though local builds succeed.

{% hint style="info" %}
For Apple Watch streaming, a native Swift watchOS companion app is additionally required.
{% endhint %}

See the [iOS (Swift) streaming reference](https://docs.tryterra.co/reference/streaming-api/reference/ios-swift) for setup.
