Release Notes

The Google Maps API team updates this changelog with each new release of
the Maps SDK for iOS. The changelog lists the releases by date and
includes any new features, bug fixes or significant performance
improvements.

Consult the getting started guide for information on how to
download the most recent version of the Maps SDK for iOS.

Version 3.1.0 - April 16, 2019

Fixes an issue where a crash could occur if markup entities were added to the
map before the map was ready to draw.

Version 3.0.0 - January, 2019

Support for iOS 8.0 has been dropped. The new minimum is iOS 9.0.

Known Issues:

There is an occasional rendering bug when using the polygon overlay feature.

Old Style Removed - November 1, 2018

Features:

Removed support for the old basemap style. The opt-in and opt-out API
options (see below) are no longer supported. This applies to all versions of
the Maps SDK for iOS. See the
blog post
for more information about the new style.

New Style Default - June 28, 2018

Features:

Enabled the new basemap style by default. You can still opt-out temporarily
if you need time to modify your app to accommodate the new style. If you do,
please follow Issue 72853293 which contains the timeline for end of
support of the previous basemap style. We will be posting updates there as
they are available.

To opt-out, use the code snippet
below. The best place to do this in your app is right after providing your
API key, via GMSServices provideAPIKey. You must be using at least
Version 2.6.0 in order to opt-out. If you had previously opted-in to the new
basemap style, this should replace the code you added to opt-in. See the
blog post
for more information about the new style.

New Style Opt-In - February 13, 2018

Features:

Enabled opt-in for the new basemap style. To opt-in, use the code snippet
below. The best place to do this in your app is right after providing your
API key, via GMSServices provideAPIKey. You must be using at least
Version 2.6.0 in order to opt-in. See the
blog post
for more information about the new style.

Version 2.6.0 - February 6, 2018

Features:

Added a mechanism for developers to enable experimental features.

Added a click listener to the My Location dot. This allows developers to
respond to interactions with the My Location dot.

Added a Source attribute to Panorama searches allowing them to be
restricted to outdoor-only results. Note that this feature is experimental
and some searches may still include indoor panoramas (Issue 72250080).

GMSMapView and GMSPanoramaView managed subviews are now positioned within
iPhone X device safe areas by default.

Resolved Issues:

Fixed an issue where Xcode 9's Main Thread Checker warns that [UIApplication
applicationState] is being called on a background thread.
(Issue 63322270.)

Fixed an issue where setting either navigationLinksHidden or
streetNamesHidden to YES still resulted in the navigation links and street
names appearing. (Issue 64210766.)

Note: Support for Xcode 7.3 has been dropped. The new minimum is Xcode 8.0.

Version 2.4 - August 2, 2017

Note:
- The armv7s architecture in the frameworks has been removed. Devices which
previously used armv7s are still supported using the armv7 architecture.
All applications using the default architecture settings in any supported
version of Xcode should not notice any change.Note:
- The layout of the static frameworks has changed. There is no longer a
Versions directory. The contents of Versions/A has been moved to the root
directory of the framework. Developers who manually integrate frameworks
with their project should take additional care during the upgrade.Note:
- Support for Xcode 7.3 will be dropped with 2.5.0.

Resolved Issues

Addressed a crash when using GMSPanoramaView with an application moving to
the background state. (Issue 63665236.)

Version 2.3.1 - June 19, 2017

Resolved Issues

Fixed an issue where navigating between panoramas did not consistently raise
GMSPanoramaView delegate events. (Issue 62290311.)

Fixed an issue resulting in a crash when UIWebView and GMSPanoramaView are
both in the view hierarchy at the same time. (Issue 62279895.)

Version 2.3 - May 30, 2017

Improvements

The internals of the GMSPanoramaView and associated classes have had a
significant overhaul. These changes should generally give improved
performance.

Dropped support for iOS 7, which enabled the use of modern core data
threading models. This means that applications should be able to use
-com.apple.CoreData.ConcurrencyDebug 1 when debugging with iOS 10 devices.
(Issue 35829579.)

Note:
- The armv7s architecture in the frameworks will be removed in 2.4. Devices
which previously used armv7s can continue to be supported using the armv7
architecture. All applications using the default architecture settings
in any supported version of Xcode shouldn't notice any change.

Version 2.2 - February 14, 2017

Features

Added the cameraTargetBounds property to GMSMapView.
This property restricts the camera target to the specified bounds area.
Subsequent gestures are then also restricted to keep the camera target
within the specified bounds.

The userData property of GMSMarker was moved to its parent class
GMSOverlay. This enables the property to be used with the GMSPolyline,
GMSPolygon, GMSCircle, and GMSGroundOverlay classes.

Improvements

Fixes naming of certain enum cases in Swift. The following enums are
affected: GMSMapViewType, GMSFrameRate, GMSMarkerAnimation, and
GMSLengthKind.

Resolved Issues

Fixed an issue where the mapViewSnapshotReady delegate method was
sometimes raised too early (Issue 10799.)

Note:
- iOS 7 support is intended to be dropped starting with 2.3. 2.2.x will be
the last release series to support iOS 7.

Version 2.1.1 - November 8, 2016

Resolved Issues

Fixed an issue which caused many Road Shields to not be displayed when
custom styling is active even if the custom styling didn't attempt to style
them.

Renamed some symbols which could cause duplicate symbols when using all_load
and Firebase. (Issue 10631.)

Resolved a problem where changing any property of polygon, polyline or
ground overlay in between taps would cause tap cycling to break. This could
make it seem impossible to tap through to items underneath. (Issue 10436.)

Fixed cameraForBounds:insets: to respect the currently set min and max zoom
restrictions. (Issue 10817.)

Version 2.1 - September 22, 2016

Features

This release introduces custom styling of the base map (Issue 4968). You
can use a JSON style declaration to create a GMSMapStyle instance and
pass it to the mapStyle property, to change the visual display of
features like roads, parks, businesses, and other points of interest. You
can use styling to emphasize particular components of the map, or make the
map complement the style of your app. Styling works only on the
kGMSTypeNormal map type.

Business points of interest (POIs) now appear by default on the map,
provided that the map type is kGMSTypeNormal. Prior to this release,
local POIs appeared on the map, but not business POIs). Business POIs
represent businesses such as shops, restaurants, hotels, and more. See the
guide to points of interest.

With the addition of business points of interest, there is a new optional
method didTapPOIWithPlaceID
on GMSMapViewDelegate which provides notification when a POI has been
tapped. (Issue 8174.)

The iconView property of GMSMarker is now correctly marked as nullable.
(Issue 10391.)

Renderer in iOS has been updated to avoid a race condition which would
cause rendering to not stop in time when an app transitions to background.
(Issue 10224.)

GMSPathinitFromEncodedPath now returns nil for invalid input
(previously invalid input could result in a crash). (Issue 10162.)

An additional method was added to GMSMapView, which compares two camera
positions to determine whether they are close enough to render identically.
(Issue 9494.)

GMSCircle will now always draw at least a dot for small radius circles,
including radius 0. (Issue 9528.)

Version 2.0.1 - July 29, 2016

Resolved Issues

Array properties are now correctly typed when accessed from Swift.
(Issue 10183.)

Version 2.0.0 - July 26, 2016

Improvements

This release splits the Places API from the Maps SDK. Previously, if you
wanted to use the Places API you had to include all of GoogleMaps. As a
result of the split, the final size of the Places API binary is 70% smaller
than the previous combined binary. If you are using only the Maps SDK you
will not be affected unless you have pinned your dependency on GoogleMaps
to a version earlier than 2.0. In this case, you should update this
restriction in your Podfile. If you are using the Places API, see
Migrating to Places SDK for iOS 2.0.

Version 1.13.2 - May 12, 2016

Added a workaround to avoid the false positive for the non-public API
imageWithName: selector. (Issue 9704.)

Version 1.13.1 - May 02, 2016

Resolved Issues

Fixed an application hang when using a UIView with autolayout enabled as an info
window or as a marker iconView. (Issue 9525.)

Changed lookUpPlaceID to not call its callback twice in error scenarios.
(Issue 9310.)

Version 1.13.0 - March 29, 2016

Features

UIView based markers. Marker content can now show advanced animations by
providing a custom view hierarchy to be displayed through the iconView property.
See the documentation for details.
(Issue 5203.)

Info windows can now have their custom views animated. Set tracksInfoWindowChanges
on the associated marker to YES to enable real-time updates. (Issue 5559.)

Map rendering now defaults to 60fps on modern iOS devices. Set the new
preferredFrameRate property on GMSMapView to revert to the old behavior
(Conservative) or a new low frame rate option to save battery (PowerSave).
(Issue 5066.)

Added mapViewSnapshotReady: to GMSMapViewDelegate which fires when map content,
including markers and other overlays, has been fully rendered.

Autocomplete widgets in the Places API now provide options for custom styling.

Resolved Issues

GMSCoordinateBounds initWithVisibleRegion: now chooses correct bounds for large
viewports.

Added a workaround to avoid a graphical glitch in snapshots taken using pre iOS 7
methods when the My Location button is disabled. (Issue 9173.)

Version 1.10.1 - June 2015

Fixed an issue where instantiating GMSPlacesClient triggered a request to
the user to enable Bluetooth on the device.

Miscellaneous improvements to the GMSPlacePicker UI.

Version 1.10.0 - May 2015

Features:

The Places SDK for iOS is now included in the SDK framework,
so you can connect people to places in your iOS apps. If you want to use the
Places SDK for iOS in your project, please refer to the getting
started guide.

CocoaPods is now the fully-supported means of installing and
upgrading the Maps SDK for iOS.
CocoaPods is an open source dependency manager for Swift and Objective-C
Cocoa projects. Below is a short guide to migrating from earlier versions of
the Maps SDK for iOS. See the getting started guide for
full instructions.

A new allowScrollGesturesDuringRotateOrZoom property on GMSUISettings
allows you to control whether the user can scroll by panning during
multi-touch rotate or zoom gestures.
(Issue 7737.)

GMSPanoramaView now supports being used in storyboard.

GMSGeocoder now supports being used while the app is in the background.

GMSServices sharedServices can now be called while the app is in the
background. Note that if the first call to sharedServices occurs while the
app is in the background, some async initialization work will be deferred
until the first time a map is shown where it will be performed
synchronously.

GMSMapView and GMSPanoramaView init messages can now be handled while
the app is in the background. This should remove the last case where
GMSMapView or GMSPanoramaView could not be used in the background.
(Issues 7860, 8007, 8037,
7896, 7951.)

GMSMapView and GMSPanormaView delegate properties now support IBOutlet
for easier use in storyboard.
(Progress towards a fix for issue 6866.)

Resolved Issues:

mapView:didTapMyLocationButtonForMapView: is now correctly called even if
no location is available.
(Issue 7742.)

mapView:idleAtCameraPosition: is now called even if there is an
ongoing update of the My Location dot.
(Issue 7889.)

Notes:

Due to an ABI change in the Xcode compiler, Xcode 6.3 is now the only
supported version for compiling against Maps SDK for iOS.
(Issue 7900.)

The minimum target iOS version for Maps SDK for iOS is now 7.0.
Version 6.0 is no longer supported.

Migration from 1.9.2 or earlier:

Versions 1.9.2 and earlier of the Maps SDK for iOS were available
as a zip file containing a static framework. There was also the option to
install recent versions from a CocoaPods pod. From version 1.10.0 onwards, the
Maps SDK for iOS is available for installation only via CocoaPods.

If you previously installed the Maps SDK for iOS from a zip file
containing a static framework:

Remove all references to the previous framework from your Xcode project.

In order to improve compatibility with Swift, two geometry library
functions have been renamed to avoid function overloading.
The new names are GMSGeometryIsLocationOnPathTolerance and
GMSStyleSpansOffset.

Version 1.6.2 - January 2014

Resolved an issue where overlays were sometimes not initially tappable. (Issue 6143)

Version 1.6.1 - December 2013

Version 1.6.1 has been replaced by version 1.6.2 and is no
longer available for download.

Resolved issues:

Resolved a memory leak involving vector tiles.

Markers not immediately added to a GMSMapView no longer fail to appear
when configured at a later point. (Issue 6092)

GMSMapView/GMSPanoramaView will now continue to render while your
application is resigned. (Issue 5546)

Version 1.6 - November 2013

Version 1.6 has been replaced by version 1.6.2 and is no
longer available for download.

Features

The Maps SDK for iOS now supports 64-bit architectures. Both 32 and
64 bit binaries are built into the single GoogleMaps framework. The
correct binary will be selected by Xcode based on your build settings. For
instructions on building 64-bit applications, please refer to Apple’s
64-bit transition
guide.
(Issue 5806)

Changed some instances of CGFloat to either a float or double where
it was more appropriate.

Added the ability to restrict min and max zoom on GMSMapView.
(Issue 5882)

Markers can be made draggable using the draggable property, and new
drag delegate methods have been added to GMSMapViewDelegate.
(Issue 4975)

Added GMSMarkerLayer, a custom CALayer subclass for GMSMarker that
supports animation of marker position and rotation. (Issue 4951,
Issue 5743)

Changing a markers position will cause the marker to animate to the
new location.

Added support for markers that appear flat against the Earth's surface.

Added rotation property to rotate markers around their ground anchor.

The UIImage used by GMSMarker now supports the images and duration
properties, and will animate images with multiple frames.

The UIImage used by GMSMarker now supports alignmentRectInsets,
and will adjust groundAnchor, infoWindowAnchor, and the tappable
region. (Issue 5729)

Added padding on GMSMapView, allowing you to indicate parts of the map
that may be obscured by other views; setting padding re-positions the
standard map controls, and the camera and camera updates will use the
padded region. (Issue 5466, Issue 5728)

GMSPanoramaView and GMSPanoramaService now support searching for
panoramas with custom radius.

Added cameraForBounds:insets: to GMSMapView, allowing construction of
a GMSCameraPosition for the map from a specified GMSCoordinateBounds.

Reduced the time taken to obtain GMSServices by moving some startup
tasks to a background thread; obtaining this object early in your
application (before creating a GMSMapView or other objects) may improve
performance. (Issue 5640)

Polylines may now be drawn twice, as required, if they have very large
longitudinal span.

fitBounds:withPadding: on GMSCameraUpdate now correctly applies padding
to all edges of the bounds; previously it used 1/2 padding on each edge.

Version 1.4.0 - July 2013

Features

Support for Google Street View imagery, with coverage in 50+ countries.

Added GMSPanoramaView, a viewer for Street View imagery, that enables
both programmatic and user control.

GMSMarkers can be shared between GMSMapView and GMSPanoramaView.

GMSPanoramaService may be used to load panorama data ahead of display.

Indoor floor plans and a floor selector control will now be displayed when
available.

Updated map design inspired by the new Google Maps.

Info windows now show at 1:1 resolution on the screen regardless of tilt.

Additional delegate methods on GMSMapView — mapView:willMove: and
mapView:idleAtCameraPosition: — allow you to detect the start and
end of camera movement, respectively.

An improved look and feel for polylines and polygon stroke.

Added a zIndex property on all overlays. Z-Indexes are calculated in two
groups: GMSMarkers and all other overlays.

Added GMSGeometryUtils methods for heading, distance, offset etc. with
respect to points on the Earth.

To align with other Google Maps APIs, GMSGroundOverlay no longer supports
the zoomLevel property. You can use the helper method
groundOverlayWithPosition:icon:zoomLevel: to migrate existing code.

Resolved issues:

Improved the tappability of GMSPolygon.

The compass now disappears when the map returns to zero bearing for any
reason, including animation.

Resolved crash issue when creating a zero-sized GMSPolygon.

Resolved an issue where active gestures could cause a GMSMapView to not
be released until deceleration completed.

Info windows no longer allow taps to pass through them.

Accessibility elements on GMSMapView are now hidden by default. See the
migration steps below if you wish to enable these elements.

Migration from 1.3.x:

Version 1.4 introduces changes to accessibility and ground overlays. If you
make use of either of these in your application, you will have to modify any
existing code as follows:

If your application relies on the accessibility elements of GMSMapView,
set the accessibilityElementsHidden property to NO.

mapView_.accessibilityElementsHidden = NO;

Replace direct references to the GMSGroundOverlayzoomLevel property
with the new groundOverlayWithPosition:icon:zoomLevel: convenience
method. Alternatively, you can position the image with a geographic bounds.
The below code samples are equivalent.

Calling renderInContext: on the GMSMapView layer now renders
correctly; this allows for snapshots and UI effects.

The default behavior when a marker is tapped has been updated to also pan
the camera to the marker's position.

Migration from 1.1.x:

When upgrading to the most recent version, you will have to modify any
existing code as follows:

Replace references to the width and stroke properties of
GMSPolyline with strokeWidth and strokeColor. The behavior is
otherwise the same.

Replace calls to the including method of GMSCoordinateBounds with a
call to includingCoordinate.

Version 1.2 simplifies overlays (items added to the map) by allowing you
to set overlay options directly on the object, instead of first creating
an overlay options object. This change impacts existing code as follows:

Remove all references to GMSGroundOverlayOptions, GMSMarkerOptions
or GMSPolylineOptions.

GMSGroundOverlay, GMSMarker and GMSPolyline are now concrete
classes, not protocols. Specify them as GMSMarker *, instead of
id<GMSMarker>.

Add an overlay to the map by setting its map property instead of
calling the add...Overlay method.

Remove an overlay from the map by setting its map property to nil
(rather than calling remove).

Values previously set on properties of an options object should now
be set on the object itself.

Below is an example of how to add a polyline to the map in version 1.1: