SDK for iOS Developer's Guide

App Submission Requirements

This section contains important information on how to prepare your SDK for iOS-enabled app for App Store submission. Be sure to follow the advice here to avoid store rejections caused by HERE SDK.

Remove Simulator Architectures

Apple rejects apps that are submitted to the App Store with simulator-specific architectures (x86_64, i386). Similarly, Xcode also gives an error if you try to export these apps for other types of deployment. Prior to exporting your app you should strip simulator-specific architectures from the NMAKit framework binary and rebuild your app.

Figure 1. Exporting According to Deployment Type

A script is provided with HERE SDK to strip the simulator architectures from NMAKit library. Before you build your app to upload to the store, make a copy of NMAKit.framework and run the script to create a framework that only contains ARM device architectures (arm64, armv7). This modified version of the framework should be included in any builds destined for the app store.

This script is located at the following location:
{SDK Root}/framework/strip_sim.sh
To run the script, open a terminal, go to the directory containing the script, and execute it from there.

You can also add a script as part of your Xcode build process to automatically strip unnecessary architectures from frameworks. Depending on your build environment this may work better than managing separate versions of NMAKit.framework. For more details about this solution see this article on Stack Overflow.

Declare Private Data Access

Starting with iOS 10 you should statically declare access to private user data such as address book and device location before submitting your app to the App Store. Each declaration requires adding a key and a purpose string in your app Info.plist file.

The following shows the required SDK for iOS data access declarations. You can use the recommended <string> entries in your app Info.plist, or you can choose strings that are appropriate for your app.

Note: All SDK for iOS apps must have these declaration entries for the App Store submission process. App users are only prompted for the appropriate data access if your app uses the relevant HERE SDK feature.
<key>NSLocationWhenInUseUsageDescription</key>
<string>This is needed to determine your current location</string>
<key>NSCameraUsageDescription</key>
<string>This is needed for the LiveSight augmented reality feature</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>This is needed for the Bluetooth-based indoor positioning feature</string>
<key>NSMotionUsageDescription</key>
<string>This is needed for the indoor positioning feature</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This is needed to determine your current location</string>

You can find more information about these keys in the following article: https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html.

Questions About Privacy Access Settings

HERE SDK contains references to the following methods:
  • [CLLocationManager startMonitoringForRegion:]
  • [CLLocationManager startRangingBeaconsInRegion:]
  • [CLLocationManager requestAlwaysAuthorization]
However, these calls are only performed if your app uses HERE Positioning feature.

Due to the presence of these calls in HERE SDK framework, you may be asked additional questions about Location and iBeacons during App Store submission even if you are not using HERE Positioning. The following contains some information to help with your App Store submission process.

If your app does not use HERE Positioning:

  • Q: Does this app detect startMonitoringForRegion:, startRangingBeaconsInRegion:, or both?

    A: These methods are referenced by SDK for iOS framework which is embedded in the app. However, due to the manner in which the App uses SDK for iOS these methods are never actually called.

  • Q: What is the user experience when the app detects the presence of a beacon?

    A: Please see above, the beacons are not utilized by the app due to the manner in which the app uses SDK for iOS.

  • Q: What features in this app use background location?

    If your app utilizes background navigation (for example, if your app calls [NMANavigationManager backgroundNavigationEnabled]), then you can answer "Navigation". Otherwise you can answer "Background location is not utilized due to the manner in which the app uses SDK for iOS".

  • If this app uses 3rd party SDKs for iBeacons, please provide links to their documentation showing that background location is required for it to function.

    A: Please see above, iBeacons are not utilized due to the manner in which the app uses SDK for iOS.

If your app uses HERE Positioning:

  • Q: Does this app detect startMonitoringForRegion:, startRangingBeaconsInRegion:, or both?

    A: Both methods are used by embedded SDK for iOS framework to more accurately determine the user's current location indoors.

  • Q: What is the user experience when the app detects the presence of a beacon?

    A: SDK for iOS uses the presence of beacons to provide accurate 3D location information indoors.

  • Q: What features in this app use background location?

    A: Background location is used to accurately determine the user's current position indoors and also navigation if your app uses background navigation. (For example, if your app calls [NMANavigationManager backgroundNavigationEnabled])

  • Q: If this app uses 3rd party SDKs for iBeacons, please provide links to their documentation showing that background location is required for it to function.

    A: You can find SDK for iOS and its indoor positioning feature documentation at https://developer.here.com/mobile-sdks/documentation/ios-hybrid-plus/topics/advanced-positioning.html

App Transport Security (ATS) Exception

If your application uses HERE Positioning feature, you need to add an exception to your application Info.plist file. This exception key triggers additional review during the App Store submission process, and you are required to provide justification for including it.

Feature Info.plist Entry Explanation
HERE Positioning
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>here.com</key>
    <dict>
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <key>NSIncludesSubdomains</key>
      <true/>
    </dict>
  </dict>
</dict>
This key is required because HERE SDK currently downloads indoor radio maps via HTTP.