Connect the Spire or Geode GNSS Receiver to iOS App

23 Aug 1970

This information applies to Spire, Geode GNS3, and GNS2.

There are two methods to connect the Spire, Geode GNS3, Geode GNS2 receiver to an iOS app.

Method 1: Connect through Core Location API

One method is to pair the receiver through Bluetooth™ to the iOS device and access the data through the Core Location API. As long as the receiver is turned on, paired, and within range, it takes the place of the integrated location sensor for access via the Core Location API. When connected through the Core Location API, your app won't have true accuracy data, or raw NMEA stream. The app will only get the location data provided through the iOS location manager: Lat/Long, Altitude, Velocity, and Heading. 

For more information, see Core Location | Apple Developer Documentation and OS Location Services vs. Direct Connection to a GPS Receiver.

Method 2: Develop an App that Communicates with the Spire or Geode

Apple places controls on how apps made for iPhone and iPad communicate with external accessories like the Spire or Geode GNSS receiver. If an app only needs access to Location Services, no additional changes are needed. If the app needs to communicate directly with the receiver—for full NMEA data, accuracy information, and receiver configuration—specific modifications in the app are necessary.

MFi Compliance and Certification

The Juniper receivers, Spire and Geode, and Juniper Connect for iOS comply with the Apple MFi Program, which means: 

Develop iPhone and iPad App to Communicate with Spire and Geode

iPhone and iPad apps must comply with requirements in the Apple Developer Program. In addition to Apple's requirements, apps that need to communicate directly with the Spire and/or Geode receiver(s) as an external accessory must do the following:

  1. Specify protocol names for the Spire and Geode.

    1. In the app, go to Info.plistUISupportedExternalAccessoryProtocols.

    2. Enter the following value: com.junipersys.geode
      This key value allows the app to connect directly with the Spire and/or Geode.

    Apple provides comprehensive documentation on the External Accessory framework. For more information, see Apple Documentation > External Accessory.

  2. Submit an MFi Product Plan.
    As part of the MFi approval process, Apple requires that associated apps and accessories submit MFi Product Plan ID (PPID) information for both parties. An app wanting to connect with the Spire and Geode must include the corresponding Juniper Systems MFi PPID(s) in the app metadata Review Notes field.

  3. Ask Juniper Systems to submit PPID information.
    Without MFi PPID submissions from both your company and ours, Apple will not approve the app for distribution in the App Store.

    To initiate this exchange of information, contact Juniper Systems at techsupport@junipersys.com and provide the following details about your iPhone or iPad app:

    1. Name of the app as it will appear in the App Store

    2. Version number

    3. Bundle identifier

    4. Functional overview

    5. Contact information for App developer. Juniper Systems will reach out if there is an update to the MFi PPID information.

Communicate with the Spire and Geode using EAAccessoryManager

Once authorized, developers can communicate directly with the Spire and Geode via an EASession using the EAAccessoryManager, as follows.

  1. Find the Spire and/or Geode receiver in the accessory manager (should match the protocol we provide).
    https://developer.apple.com/documentation/externalaccessory/eaaccessorymanager

  2. Get the EAAccessory instance from the manager.
    https://developer.apple.com/documentation/externalaccessory/eaaccessory

  3. Use the EAAccessory instance to connect via an EASession.
    https://developer.apple.com/documentation/externalaccessory/easession

  4. Sample code in Objective C:
    https://github.com/rvndios/EADemo

With direct access to NMEA data, you can use RMS data, such as from the GST string, to achieve a better indication of statistical location accuracy. If you have limited or no access to real-time data from the GNSS receiver, you can use the following samples.

Sample Code

Description

Geode-NMEA-Messages-sample.txt

Uses Default NMEA-0183 version 4.1 data with the default settings applied. Ends with custom battery level message.

Geode-GST-RRE-only-sample.txt

Shows only the GST and RRE messages enabled for statistical accuracy information. Ends with custom battery level message.

Parsing of NMEA Message Components

The Spire contains the u-blox ZED-X20P receiver. The u-blox X20 HPG 2.02 Interface description (i.e. technical reference manual) shows the parsing for all of the components of each NMEA message, including GST for indicating sub-meter horizontal positioning accuracies. The Geode GNS3 contains the Hemisphere OEM P34 receiver, and the Geode GNS2 contains the Hemisphere OEM P206 receiver. The Hemisphere GNSS Technical Reference Manual shows the parsing for all of the components of each NMEA message, including GST and RRE for indicating sub-meter horizontal positioning accuracies.


The following sample code from Juniper Connect shows how EHE (Estimated Horizontal Error) is determined based on the NMEA RRE string data (or fallback to GST) from the Juniper receiver.

if (LatitudeErrorEstimation != null && LongitudeErrorEstimation != null)
{
      return Math.Sqrt(Math.Pow(LongitudeErrorEstimation.Value, 2) + Math.Pow(LatitudeErrorEstimation.Value, 2));
}

 

 

Reviewed & Approved: CB, JF 30APR2026