Mapbox welcomes participation and contributions from everyone. Please read CONTRIBUTING.md to get started.
- Applications linking against the SDK static framework no longer need to add
-ObjC
to the Other Linker Flags (OTHER_LDFLAGS
) build setting. If you previously added this flag solely for this SDK, removing the flag may potentially reduce the overall size of your application. (#4641) - Removed the
armv7s
slice from the SDK to reduce its size. iPhone 5 and iPhone 5c automatically use thearmv7
slice instead. (#4641) - MGLPointAnnotation and custom MGLAnnotation implementations (but not MGLMultiPoint) can be backed by an MGLAnnotationView instead of an MGLAnnotationImage. MGLAnnotationView is a subclass of UIView, so you can use Core Animation and other familiar technologies with it. To associate an MGLAnnotation with an MGLAnnotationView, implement
-mapView:viewForAnnotation:
in your MGLMapViewDelegate class. (#4801) - The user dot now moves smoothly between user location updates while user location tracking is disabled. (#1582)
- An MGLAnnotation can be relocated by changing its
coordinate
property in a KVO-compliant way. An MGLMultiPoint cannot be relocated. (#3835) - Setting the
image
property of an MGLAnnotationImage tonil
resets it to the default red pin image and reclaims resources that can be used to customize additional annotations. (#3835) MGLOfflinePackProgress
now indicates how many tiles have been downloaded and how much space they take up. (#4874)- The compass, user dot, and visible annotations are now accessible to VoiceOver users. (#1496)
- The SDK is now localizable. No localizations are currently provided, other than English, but if you need a particular localization, you can install the SDK manually and drop a .lproj folder into the framework. (#4783)
- Fixed an issue preventing KVO change notifications from being generated on MGLMapView’s
userTrackingMode
key path when-setUserTrackingMode:animated:
is called. (#4724) - Rendering now occurs on the main thread, fixing a hang when calling
-[MGLMapView styleURL]
before the map view has fully loaded or while the application is in the background. (#2909) - Improved responsiveness when zooming in then immediately panning around. (#4595)
- Added category methods on NSValue for converting to and from the structure types defined in MGLGeometry.h. (#4802)
- Added NSFormatter subclasses for converting geographic coordinates and directions into display strings. (#4802)
- Added a new method,
-[MGLMapView cameraThatFitsCoordinateBounds:]
, to get a camera that you can pass into-setCamera:
that fits the given coordinate bounds. (#4790) - Added a
-reloadStyle:
action to MGLMapView to force a reload of the current style. (#4728) - A more specific user agent string is now sent with style and tile requests. (#4012)
- Mapbox Telemetry is automatically disabled while the host application is running in the iOS Simulator. (#4726)
- Suppressed “Unable to make space for entry” console spew. (#4708)
- Removed unused SVG files from the SDK’s resource bundle. (#4641)
- Deprecated
-[MGLMapView emptyMemoryCache]
. (#4725) - Added
MGLCoordinateInCoordinateBounds()
, a function that tests whether or not a coordinate is in a given bounds. (#5053) - An MGLAnnotationView can be repositioned in relation to the associated MGLAnnotation.coordinate by changing its
centerOffset
property. (#5059) - An MGLAnnotationView can be rotated to match the rotation pitch of the associated map view.
- Added a new option to
MGLMapDebugMaskOptions
,MGLMapDebugWireframesMask
, that shows wireframes instead of the usual rendered output. (#4359)
- Existing MGLStyle class methods that return default style URLs have been deprecated in favor of new methods that require an explicit style version parameter. The deprecated, unversioned methods continue to return version 8 of the respective styles and will not be updated as new versions of the styles are released. (#4759)
- Deprecated
+[MGLStyle emeraldStyleURL]
with no replacement method. To use the Emerald style going forward, we recommend that you use the underlying URL. (#4759) - Added
+[MGLStyle outdoorsStyleURLWithVersion:]
for the new Outdoors style. (#4759) - The Hybrid style is now called Satellite Streets. (#4759)
- Fixed a hang that could occur if the host application attempts to set user defaults on a background queue. (#4745)
- User location heading updates now resume properly when an app becomes active again. (#4674)
- Fixed an issue causing hyperlinks in the documentation to be displayed as raw Markdown syntax when viewed in Xcode’s Quick Help popover or sidebar. (#4760)
- If you’ve previously installed the SDK as a static framework, the installation workflow has changed to address issues when submitting your application to the App Store or installing it on a device. Upon upgrading to this version of the SDK, you’ll need to add Mapbox.bundle to the Copy Bundle Resources build phase and remove Mapbox.framework from the Embed Frameworks build phase. (#4455)
- Offline packs can now be downloaded to allow users to view specific regions of the map offline. A new MGLOfflineStorage class provides APIs for managing MGLOfflinePacks. (#4221)
- Tiles and other resources are cached in the same file that holds offline resources. The combined cache file is located in a subdirectory of the user’s Application Support directory, which means iOS will not delete the file when disk space runs low. (#4377)
- Fixed an issue where the map view’s center would always be calculated as if the view occupied the entire screen. (#4504)
- The user dot no longer disappears after panning the map across the antimeridian at low zoom levels. (#4275)
- The map no longer recoils when panning quickly at low zoom levels. (#4214)
- Fixed an issue causing the map to pan the wrong way when the user pinches unevenly. (#4427)
- The maximum zoom level is capped at 21 due to rendering issues at higher zoom levels. (#4417)
- An icon laid out along a line no longer appears if it would extend past the end of the line. Some one-way arrows no longer point the wrong way. (#3839)
- Fixed warping of dashed lines near sharp corners. (#3914)
- Telemetry location gathering now occurs only when the device is in motion. (#4115)
- An account’s monthly active users metric only counts a user once a map view is displayed to that user. (#3713)
- A .dSYM bundle is included with the dynamic framework to facilitate symbolication of crash logs.
- Updated documentation to reflect the requirement that you must embed the dynamic framework in the “Embedded Binaries” section in Xcode. (#4011)
- Polygons and polylines now default to using the map view’s tint color. (#4028)
- The user dot no longer lags when panning the map. (#3683)
- The Improve This Map tool now uses the same zoom level that is currently being shown in the map view. (#4068)
- Fixed a formatting issue in the documentation for
MGLCoordinateBoundsIsEmpty()
. (#3958)
- You can once again install the static framework without manually linking several framework and library dependencies. (#4029)
- The location manager used by MGLMapView to show the user’s location is now paused when the application is sent to the background. (#4034)
- Corrected the dynamic framework’s minimum deployment target to iOS 8.0. (#3872)
- Fixed Fabric compatibility. (#3847)
- Fixed a crash that can occur when reselecting an annotation. (#3881)
- Fixed an issue preventing the Latitude inspectable from working when it is set before setting the Zoom Level inspectable in Interface Builder. (#3886)
- Fixed an issue that incorrectly expanded the tappable area of an annotation and prevented the annotation’s alignment rect insets from having any effect on the tappable area. (#3898)
- Fixed an issue preventing
-[MGLMapViewDelegate mapView:tapOnCalloutForAnnotation:]
from being called when a non-custom callout view is tapped. (#3875)
- The SDK is now distributed as a dynamic framework instead of a static library, resulting in a simpler installation workflow and significantly reduced download size. The framework contains both simulator and device content. If you install the dynamic framework manually, you’ll need to strip out the simulator content before submitting your application to the App Store due to an Xcode bug; see the installation instructions included with the framework for details. (#3183)
- Fixed an issue causing the entire MGLMapView to leak. (#3448)
MGLMapView
methods that alter the viewport now accept optional completion handlers. (#3090)- You can now modify an annotation’s image after adding the annotation to the map. (#3146)
- Tapping now selects annotations more reliably. Tapping near the top of a large annotation image now selects that annotation. An annotation image’s alignment insets influence how far away the user can tap and still select the annotation. For example, if your annotation image has a large shadow, you can keep that shadow from being tappable by excluding it from the image’s alignment rect. (#3261)
- Annotations remain visible after switching to a different style. (#3049)
- The minimum and maximum zoom levels can now be configured using the
minimumZoomLevel
andmaximumZoomLevel
properties, respectively. The map is no longer limited to zoom level 18: by default, the maximum zoom level is now 20, allowing for a more detailed map in urban areas. (#3712) - A new method on MGLMapView,
-flyToCamera:withDuration:completionHandler:
, lets you transition between viewpoints along an arc as if by aircraft. (#3171, #3301) - MGLMapCamera’s
altitude
values now match those of MKMapCamera. (#3362) - MGLMapView properties like
centerCoordinate
andcamera
now offset the center to account for any translucent top or bottom bar. As a result, when user tracking is enabled and the map view is an immediate child of a view controller, the user dot is centered in the unobscured portion of the map view. To override this offset, modify thecontentInset
property; you may also need to set the containing view controller’sautomaticallyAdjustsScrollViewInsets
property toNO
. (#3583) - In user tracking mode, the user dot stays in a fixed position within MGLMapView while the map pans smoothly. A new property,
userLocationVerticalAlignment
, determines the user dot’s fixed position. (#3589) - When the user tracking mode is set to
MGLUserTrackingModeFollowWithCourse
, an optionaltargetCoordinate
is kept within sight at all times as the user changes location. This property, in conjunction with theuserLocationVerticalAlignment
property, may be useful for displaying the user’s progress toward a waypoint. (#3680) - Heading or course tracking mode can now be enabled as soon as an MGLMapView is initialized. (#3680)
- Zooming and rotation gestures no longer disable user tracking mode. (#3589)
- User tracking mode starts out at a lower zoom level by default. (#3589)
- Fixed an issue with small map views not properly fitting annotations within bounds. (#3407)
- When the user rotates the map to within 7° of true north, the map view now snaps to true north. (#3403)
- The map view’s background can now be transparent or translucent, as long as the style’s background layer is transparent or translucent and
MGLMapView.opaque
is set toNO
. (#3096) - Documentation is now generated by jazzy instead of appledoc. ♪♫ (#3203)
- New API to provide a custom callout view to the map for annotations. (#3456)
- Made telemetry on/off setting available in-app. (#3445)
- Fixed an issue with users not being counted by Mapbox if they had disabled telemetry. (#3495)
- Fixed crash caused by MGLAnnotationImage with non-integer width or height (#2198)
- Fixed “include of non-modular header” errors in Swift projects managed by CocoaPods. (#3679)
- Avoids triggering the blue background location status bar when user has granted "when in use" permission. (#3671)
- Deprecated the
debugActive
property and-toggleDebug
method on MGLMapView in favor of a newdebugMask
property that exposes individual style debugging options. (#3742)
- Fixed CoreTelephony.framework crash. (#3170)
- Fixed an issue preventing the compass from responding to taps after the compass is moved programmatically. (#3117)
- CocoaPods is now distributed via a (static) framework. (#3181)
- If you install this SDK via CocoaPods, CocoaPods version 0.38.0 or above is required. (#2132)
- The
styleID
property has been removed from MGLMapView. Instead, set thestyleURL
property to an NSURL in the formmapbox://styles/STYLE_ID
. If you previously set the style ID in Interface Builder’s Attributes inspector, delete thestyleID
entry from the User Defined Runtime Attributes section of the Identity inspector, then set the new “Style URL” inspectable to a value in the formmapbox://styles/STYLE_ID
. (#2632) - Default styles such as Streets are no longer bundled with the SDK; instead, they are loaded at runtime from the style API on mapbox.com. As always, you can use these default styles with any valid access token, and Streets continues to be
MGLMapView
’s initial style. ThebundledStyleURLs
property onMGLMapView
has been deprecated in favor of several class methods onMGLStyle
that provide direct access to the default styles. (#2746) - The SDK now builds with Bitcode enabled. A version of libMapbox.a with Bitcode disabled is also available. (#2332, #3003)
- The style URL can be set to a local resource:
asset://local-color.json
andlocal-color.json
both resolve to a file namedlocal-color.json
in the application’s root folder. (#3087) - The double-tap-drag gesture for zooming in and out is now consistent with the Google Maps SDK. (#2153)
- A new
MGLAnnotationImage.enabled
property allows you to disable touch events on individual annotations. (#2501) - Fixed a rendering issue that caused one-way arrows along tile boundaries to point due east instead of in the direction of travel. (#2530)
- Fixed an issue that prevented zoom level–dependent style properties from updating after zooming programmatically with animation. (#2951)
- Performance and appearance improvements during annotation adds & removes. (#1688)
- Overall improved performance during renders by not rendering faster than necessary. (#1975)
- Fixed a rendering issue with styles that use the
background-pattern
property. (#2531) - Fixed a crash when reusing a single
MGLMapView
across multipleUIViewController
s. (#2969) - Fixed a crash on iPod touch and other devices or simulators without a cell carrier. (#2687)
- Eliminated flickering when opening and closing an overlay, such as an alert or action sheet. (#2309)
- Labels can now line wrap on hyphens and other punctuation. (#2598)
- A new delegate callback was added for observing taps to annotation callout views. (#2596)
-mapViewRegionIsChanging:
is now sent to the map view’s delegate during gestures. (#2700)- Improved gesture recognition while the map is tilted. (#2770)
-mapViewWillStartLoadingMap:
and-mapViewDidFinishLoadingMap:
delegate methods now work. (#2706)- Removed CoreTelephony.framework dependency. (#2581)
- Improved user location annotation responsiveness. (#2643)
- Built with Xcode 6.4 to not yet trigger Bitcode compatibility until Xcode 7 stabilizes. (#2332)
- Fixes for Xcode 7 and Bitcode. (#2238)
- A two-finger vertical swipe now tilts the map into perspective mode. (#2116)
- A new
MGLMapCamera
API allows you to transition multiple viewpoint properties, including rotation and pitch, simultaneously with an optional custom duration and timing function. (#2193) - A new user tracking mode,
MGLUserTrackingModeFollowWithCourse
, has been added for indicating the current direction of travel. (#2068) - Version 8 (
v8
) of the Mapbox GL style spec is now required. If you are using a customv7
style, it needs to be upgraded using this migrator script. (#2052) - Applications built with Mapbox GL no longer crash when Location Services launches them in background mode. (#1821, #1869)
- Fixed a crash when adding annotations to an
MGLMapView
inside-viewDidLoad
. (#1874) - The user location annotation view now indicates the location reading’s accuracy and the device’s heading. (#2010)
- Eliminated linker warnings and errors when building against the iOS 9.0 SDK in Xcode 7. (#1962)
- Worked around a bug in the iOS 9.0 SDK that caused a crash on launch. (#1958)
- User location tracking no longer sends
MGLMapView
into an invalid region on iOS 9. (#1925) - Eliminated console spew in the iOS demo application that was related to Mapbox Metrics HTTP requests. (#1937)
- Implemented
-[MGLMapView showAnnotations:animated:]
. (#2050) - Fixed a crash adding a shape annotation with zero points. (#2098)
- Debug mode now displays information useful for debugging the label collision algorithm. (#1808)
- Minor style updates. (#1910)
- The CocoaPods pod now contains a
README.md
file. (#1886)
Repackaging 2.0.0-pre.1 as it contained no issues.
Repackaging 0.5.1 as the Mapbox iOS SDK 2.0.0 series.
- Added support for CocoaPods 0.38.0. (#1876)
- Support for runtime marker imagery. (#941)
- Added
Map::fitBounds()
for region-based viewport setting. (#1092) - Added a raster satellite bundled style and improved raster rendering. (#963)
- Improved round line joins for semi-transparent lines. (#1839)
- Improved map render lifecycle notifications. (#1026)
- Fixed a bug that caused annotations not to show at zoom level zero. (#1279)
- Fixed a bug with the ordering of shape layers. (#1866)
- Other bug fixes and performance improvements.
- Breaking: Headers now make use of lightweight generics, eliminating many unnecessary casts when working with annotations in Swift 2.0 in Xcode 7. (#1711)
- Breaking:
-mapView:symbolNameForAnnotation:
has been removed from theMGLMapViewDelegate
protocol. Implement-mapView:imageForAnnotation:
instead, which accepts images at runtime. (#941) - Breaking:
MGLMapView.direction
is now expressed in terms of degrees clockwise from true north, as indicated in the documentation, rather than counterclockwise. (#1789) - A Satellite style showing Mapbox Satellite imagery is now bundled with Mapbox GL. (#1845)
- Improved
UIView
tracking to the map. (#1813) - Delegate method
-[MGLMapViewDelegate mapView:didFailToLocateUserWithError:]
now works. (#1608) - It is now possible to fit the map’s viewport to a coordinate bounding box via
-[MGLMapView setVisibleCoordinateBounds:animated:]
or to a specific set of coordinates via-[MGLMapView setVisibleCoordinates:count:edgePadding:animated:]
. (#1783, #1795) - The logo and ℹ️ no longer disappear or get distorted after embedding MGLMapView in a different view, and you can now access these subviews directly via properties on MGLMapView. (#1779, #1815)
- Raster tiles now look sharper midway between two zoom levels. (#1843)
- Resetting the map rotation to north no longer also resets the user location tracking mode. (#1809)
-[MGLMapView convertPoint:toCoordinateFromView:]
now returns accurate coordinates on iPhone 6. (#1827)- Fixed an issue in which
-[MGLMapView direction]
would sometimes return 360 instead of 0. (#1829) - Build against iOS 8.4. (#1868)
- Support for polyline and polygon shape annotations. (#1655)
- Improved placement and density of labels. (#1666, blog)
- Improved z-ordering appearance of point markers. (#988)
- Fixed an issue in which certain features, such as roundabouts, were not rendered completely. (#1725)
- Many bug fixes and performance and stability improvements.
- Improved tests.
- Breaking:
MGLMapView
no longer manages Mapbox access tokens directly; an access token cannot be passed in when initializing the map view. Instead, setMGLMapboxAccessToken
to your access token in your app’sInfo.plist
file, or call+[MGLAccountManager setAccessToken:]
before initializing the map view. If you were setting the access token inside an Interface Builder inspectable, also remove it from the User Defined Runtime Attributes section of the Identity inspector. (#1553) - Breaking:
MGLAccountManager
's-setMapboxMetricsEnabledSettingShownInApp:
has been removed. If you implement a Mapbox Metrics switch inside your app, instead of inside a Settings bundle, setMGLMapboxMetricsEnabledSettingShownInApp
toYES
in theInfo.plist
file. (#1553) - Breaking:
MGLMapView
's-mapID
has been renamed to-styleID
. (#1561) - Headers have been audited for nullability, improving type safety in both Objective-C and Swift 1.2 when compiling with Xcode 6.3 or above. (#1578)
- Fixed an issue in which the map would sometimes spin 180° while rotating the map with two fingers. (#1453)
- Added a shortcut to the Mapbox Metrics switch in
MGLMapView
's action sheet that is attached to the ℹ️ button. (#1611) MGLMapView
now supports Interface Builder designables. When you add anMGLMapView
to a storyboard, it displays instructions for getting set up directly on the storyboard canvas. (#1573)- The default title for the user location annotation is now “You Are Here”. You can customize the title by setting
mapView.userAnnotation.title
. (#1559) - Internal use of the Reachability library has been cleaned up so that your app can include its own copy of Reachability. (#1718)
- Now distribute a binary stripped of debugging symbols by default with an optional, secondary symbols build. (#1650)
- Temporarily removed
IBDesignable
support on iOS.
- Initial iOS beta release.
Known issues:
- None.