Is this the correct way to connect and receive NMEA data from Reach RX on iOS using ExternalAccessory?

Hi everyone,

I’m developing an iOS app that communicates with a Reach RX (MFi) receiver using Apple’s ExternalAccessory framework. I want to confirm whether this is really the “official” or recommended way to connect, receive NMEA data, and send RTCM3 corrections.

My current implementation uses the com.emlid.nmea and com.emlid.corrections protocols, creating two EASession instances — one for input (NMEA) and one for output (RTCM):

let nmeaProtocolString = "com.emlid.nmea"
let correctionsProtocolString = "com.emlid.corrections"

The basic logic is:

  1. Detect connected devices via EAAccessoryManager.
  2. Open one session to receive NMEA using inputStream, and another to send corrections using outputStream.
  3. Process the binary data received (usually ASCII-formatted NMEA sentences like $GNGGA, etc.).
  4. Use Combine and SwiftUI to update the UI based on the connection status and data received.

My questions for the community and the Emlid team:

*Is this the architecture Emlid recommends for interacting with Reach RX on iOS?

  • Is this use of ExternalAccessory correct for receiving NMEA data and sending NTRIP corrections?
  • Is there any official documentation or more recent examples recommending a different or more efficient strategy?
  • Am I missing anything important regarding communication or error handling?

Any feedback, suggestions, or recommendations would be greatly appreciated.

Thanks in advance :raising_hands:

Hi @andres.mora, welcome to the community!

I am checking this further and will let you know when I have some updates.

1 Like

Hi Andrés,

It’s great to hear you’re integrating your app with the Reach RX. I think you got everything right. This is the expected approach to the integration.

We do have an integration doc, it might still be useful, although it mostly adds smaller details to the general structure you’ve already laid out.

I’d say the tricky part in terms of error handling is the NTRIP client, as you need to establish and automatically reestablish the connection with casters, and possibly provide verbose errors to the user.

Please let us know how else we can help!

3 Likes