Mapbox iOS SDK

The Mapbox iOS SDK is an open-source framework for embedding interactive map views with scalable, customizable vector maps into Cocoa Touch applications on iOS 8.0 and above using Objective-C, Swift, or Interface Builder. It takes stylesheets that conform to the Mapbox Style Specification, applies them to vector tiles that conform to the Mapbox Vector Tile Specification, and renders them using OpenGL.

Mapbox iOS SDK screenshots

For setup information, check out the Mapbox iOS SDK homepage. For detailed usage instructions, read “First steps with the Mapbox iOS SDK” and consult the online examples. A full changelog is also available.

If you have any questions, please contact our support team. We welcome your bug reports and feature requests.

Changes in version 3.5.0

Packaging

  • The minimum deployment target for this SDK is now iOS 8. (#8129)
  • Added support for the Carthage dependency manager. See our website for setup instructions. (#8257)
  • While running your application in the iOS Simulator, you will receive a notice in the console if a newer version of this SDK is available. (#8282)

Internationalization

  • Added support for right-to-left text and Arabic ligatures in labels. (#6984, #7123)
  • Improved the line wrapping behavior of point-placed labels, especially labels written in Chinese and Japanese. (#6828, #7446)
  • CJK characters now remain upright in vertically oriented labels that have line placement, such as road labels. (#7114)
  • Added Catalan, Chinese (Simplified and Traditional), Dutch, Finnish, French, German, Japanese, Lithuanian, Polish, Portuguese (Brazilian), Russian, Spanish, Swedish, Ukrainian, and Vietnamese localizations. (#7316, #7899, #7999, #8113, #8256)

Styles

  • Added support for data-driven styling in the form of source and composite style functions. MGLStyleFunction is now an abstract class, with MGLCameraStyleFunction providing the behavior of MGLStyleFunction in previous releases. New MGLStyleFunction subclasses allow you to vary a style attribute by the values of attributes of features in the source. (#7596)
  • Added methods to MGLShapeSource and MGLVectorSource for querying features loaded by the source, whether or not they’re visible on the map. (#8263)
  • Added circleStrokeColor, circleStrokeWidth, and circleStrokeOpacity properties to MGLCircleStyleLayer and support for corresponding properties in style JSON files. (#7356)
  • Point-placed labels in symbol style layers are now placed at more optimal locations within polygons. (#7465)
  • Fixed flickering that occurred when manipulating a style layer. (#7616)
  • Symbol style layers can now render point collections (known as multipoints in GeoJSON). (#7445)
  • Added a transition property to MGLStyle to customize the timing of changes to style layers. (#7711)
  • Added properties to MGLStyleLayer subclasses to customize the timing of transitions between values of individual attributes. (#8225)
  • Fixed an issue causing lines and text labels toward the top of the map view to appear blurry when the map is tilted. (#7444)
  • Fixed incorrect interpolation of style functions in Boolean-typed style attributes. (#7526)
  • Removed support for the ref property in layers in style JSON files. (#7586)
  • Fixed an issue that collapsed consecutive newlines within text labels. (#7446)
  • Fixed artifacts when drawing particularly acute line joins. (#7786)
  • Fixed an issue in which a vector style layer predicate involving the $id key path would exclude all features from the layer. (#7989, #7971)
  • Fixed an issue causing vector style layer predicates to be evaluated as if each feature had a $type attribute of 1, 2, or 3. The $type key path can now be compared to Point, LineString, or Polygon, as described in the documentation. (#7971)
  • When setting an MGLShapeSource’s shape to an MGLFeature instance, any UIColor attribute value is now converted to the equivalent CSS string representation for use with MGLInterpolationModeIdentity in style functions. (#8025)
  • An exception is no longer thrown if layers or sources are removed from a style before they are added. (#7962)
  • Renamed MGLStyleConstantValue to MGLConstantStyleValue. For compatibility with previous releases, MGLStyleConstantValue is now an alias of MGLConstantStyleValue. (#8090)
  • Fixed a crash that could occur when switching styles after adding an MGLSource to the style. (#8298)

Annotations and user interaction

  • Added a method to MGLMapViewDelegate, -mapView:shouldChangeFromCamera:toCamera:, that you can implement to restrict which parts the user can navigate to using gestures. (#5584)
  • Annotations are no longer deselected when the map is panned or zoomed, even if the annotation moves out of the visible bounds. (#8022)
  • Changing the coordinates of a point annotation no longer deselects the annotation. (#8269)
  • Fixed an issue that could cause a crash when point annotations were added and removed while simultaneously querying source features. (#8374)
  • Fixed an issue preventing MGLMapView from adding a polyline annotation with the same coordinates as a polygon annotation. (#8355)
  • Fixed an issue where translucent, non-view-backed point annotations along tile boundaries would be drawn darker than expected. (#6832)
  • Double-tap and two-finger tap gestures now zoom to the nearest integer zoom level. (#8027)
  • The MGLAnnotationView.annotation property is now read-write. (#8139)
  • Enabled the one-finger zoom gesture on iPad. To execute this gesture, tap twice; on second tap, hold your finger on the map and pan up to zoom in, or down to zoom out. (#8379)

Networking and offline maps

  • Offline pack notifications are now posted by MGLOfflinePack instances instead of the shared MGLOfflineStorage object. For backwards compatibility, the userInfo dictionary still indicates the pack’s state and progress. (#7952)
  • Fixed a memory leak in MGLMapView. (#7956)
  • Fixed an issue that could prevent a cached style from appearing while the device is offline. (#7770)
  • Fixed an issue that could prevent a style from loading when reestablishing a network connection. (#7902)
  • MGLOfflineStorage instances now support a delegate conforming to MGLOfflineStorageDelegate, which allows altering URLs before they are requested from the Internet. (#8084)

Other changes

  • Fixed an issue that, among other things, caused various islands to disappear at certain zoom levels. (#7621)
  • Added a method to MGLMapView that allows you to specify a predicate when querying for visible features. (#8256)
  • Fixed flickering that occurred when panning past the antimeridian. (#7574)
  • Fixed an issue that sometimes caused crashes when the SDK interacted with the file system in the background. (#8125)
  • Added a MGLDistanceFormatter class for formatting geographic distances. (#7888)
  • Fixed an issue that was causing the system location indicator to stay on in background after telemetry was disabled. (#7833)