Date: Tue, 4 Apr 2017 21:14:32 +0200
Subject: [PATCH 22/33] Release android v5.0.2 (#8629)
* [android] - update CHANGELOG.md for v5.0.2 release
* [android] - bump version name to 5.0.2
* [android] - fixup javadoc errors
* bump SNAPSHOT version
---
platform/android/CHANGELOG.md | 1 +
.../com/mapbox/mapboxsdk/camera/CameraPosition.java | 2 +-
.../mapbox/mapboxsdk/location/LocationSource.java | 9 ++++-----
.../mapboxsdk/style/sources/GeoJsonSource.java | 12 ++++++------
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/platform/android/CHANGELOG.md b/platform/android/CHANGELOG.md
index 01d7b1ab5..2b0e40f21 100644
--- a/platform/android/CHANGELOG.md
+++ b/platform/android/CHANGELOG.md
@@ -6,6 +6,7 @@ Mapbox welcomes participation and contributions from everyone. If you'd like to
5.0.2 is a patch release that contains the following changes:
+* Binary shader caching [#8604](https://github.com/mapbox/mapbox-gl-native/pull/8604)
* Fix resource transform callback [#8582](https://github.com/mapbox/mapbox-gl-native/pull/8582)
* Restore onTouch behaviour to 4.x version [#8585](https://github.com/mapbox/mapbox-gl-native/pull/8585)
* Restore anchoring after updating MarkerView Icon [#8519](https://github.com/mapbox/mapbox-gl-native/pull/8519)
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java
index 74170bb72..a8fc58d51 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java
@@ -293,7 +293,7 @@ public final class CameraPosition implements Parcelable {
* Set the tilt in degrees
*
* value is clamped to 0 and 60.
- *
+ *
*
* @param tilt Tilt value
* @return Builder
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java
index f41a022fa..dd6e43d06 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java
@@ -18,11 +18,10 @@ import java.lang.ref.WeakReference;
/**
* Manages locational updates. Contains methods to register and unregister location listeners.
*
- * - You can register a {@link LocationEngineListener} with
- * {@link #addLocationEngineListener(LocationEngineListener)} to receive
- * location updates.
- * - You can unregister a {@link LocationEngineListener} with
- * {@link #removeLocationEngineListener(LocationEngineListener)} to stop receiving location updates.
+ * - You can register a LocationEngineListener with LocationSource#addLocationEngineListener(LocationEngineListener)
+ * to receive location updates.
+ * - You can unregister a LocationEngineListener with
+ * LocationEngine#removeLocationEngineListener(LocationEngineListener)} to stop receiving location updates.
*
*
* Note: If registering a listener in your Activity.onStart() implementation, you should unregister it in
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java
index b25359571..5e9ca7d0a 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java
@@ -42,7 +42,7 @@ public class GeoJsonSource extends Source {
}
/**
- * Create an empty GeoJsonSource with non-default {@link GeoJsonOptions}
+ * Create an empty GeoJsonSource with non-default GeoJsonOptions.
*
* @param id the source id
* @param options options
@@ -67,7 +67,7 @@ public class GeoJsonSource extends Source {
}
/**
- * Create a GeoJsonSource from a raw json string and non-default {@link GeoJsonOptions}
+ * Create a GeoJsonSource from a raw json string and non-default GeoJsonOptions
*
* @param id the source id
* @param geoJson raw Json body
@@ -93,7 +93,7 @@ public class GeoJsonSource extends Source {
}
/**
- * Create a GeoJsonSource from a remote geo json file and non-default {@link GeoJsonOptions}
+ * Create a GeoJsonSource from a remote geo json file and non-default GeoJsonOptions
*
* @param id the source id
* @param url remote json file
@@ -105,7 +105,7 @@ public class GeoJsonSource extends Source {
}
/**
- * Create a GeoJsonSource from a {@link FeatureCollection}
+ * Create a GeoJsonSource from a FeatureCollection.
*
* @param id the source id
* @param features the features
@@ -116,7 +116,7 @@ public class GeoJsonSource extends Source {
}
/**
- * Create a GeoJsonSource from a {@link FeatureCollection} and non-default {@link GeoJsonOptions}
+ * Create a GeoJsonSource from a FeatureCollection and non-default GeoJsonOptions.
*
* @param id the source id
* @param features the features
@@ -130,7 +130,7 @@ public class GeoJsonSource extends Source {
/**
* Updates the GeoJson
*
- * @param features the GeoJSON {@link FeatureCollection}
+ * @param features the GeoJSON FeatureCollection
*/
public void setGeoJson(FeatureCollection features) {
checkValidity();
From ff7337121685b1ff091468dc96cfc23e567ab029 Mon Sep 17 00:00:00 2001
From: Jesse Bounds
Date: Tue, 4 Apr 2017 15:25:59 -0700
Subject: [PATCH 23/33] [ios] Silence incompatible type warning for callout
view (#8608)
This silences a compatibility warning that was introduced in a previous
refactor that changed the return type of the callout view for
annotation delegate method. This also adds checks to ensure that the
callout view provided by the delegate to the map view is of the correct
type and conforms to the correct protocol.
---
platform/ios/app/MBXViewController.m | 2 +-
platform/ios/src/MGLMapView.mm | 9 ++++++++-
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/platform/ios/app/MBXViewController.m b/platform/ios/app/MBXViewController.m
index 39458c4f3..25eb59823 100644
--- a/platform/ios/app/MBXViewController.m
+++ b/platform/ios/app/MBXViewController.m
@@ -1739,7 +1739,7 @@ typedef NS_ENUM(NSInteger, MBXSettingsMiscellaneousRows) {
}];
}
-- (UIView *)mapView:(__unused MGLMapView *)mapView calloutViewForAnnotation:(id)annotation
+- (nullable id )mapView:(__unused MGLMapView *)mapView calloutViewForAnnotation:(id)annotation
{
if ([annotation respondsToSelector:@selector(title)]
&& [annotation isKindOfClass:[MBXCustomCalloutAnnotation class]])
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index 79467a065..6f51d4b52 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -3777,7 +3777,14 @@ public:
UIView *calloutView;
if ([self.delegate respondsToSelector:@selector(mapView:calloutViewForAnnotation:)])
{
- calloutView = [self.delegate mapView:self calloutViewForAnnotation:annotation];
+ id providedCalloutView = [self.delegate mapView:self calloutViewForAnnotation:annotation];
+ if (providedCalloutView) {
+ if (![providedCalloutView isKindOfClass:[UIView class]]) {
+ [NSException raise:NSInvalidArgumentException format:@"Callout view must be a kind of UIView"];
+ }
+ NSAssert([providedCalloutView conformsToProtocol:@protocol(MGLCalloutView)], @"callout view must conform to MGLCalloutView");
+ calloutView = providedCalloutView;
+ }
}
if (!calloutView)
{
From 8539d7092ee0dc584f6dd7f664d49ee96d4ddf0e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?=
Date: Wed, 5 Apr 2017 01:25:37 -0700
Subject: [PATCH 24/33] [ios, macos] Preserve symlinks when zipping framework
---
platform/ios/scripts/publish.sh | 2 +-
platform/macos/CHANGELOG.md | 4 ++++
platform/macos/scripts/deploy-packages.sh | 2 +-
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/platform/ios/scripts/publish.sh b/platform/ios/scripts/publish.sh
index e080ee825..117a4ec0d 100755
--- a/platform/ios/scripts/publish.sh
+++ b/platform/ios/scripts/publish.sh
@@ -27,7 +27,7 @@ cd build/ios/pkg
ZIP=mapbox-ios-sdk-${PUBLISH_VERSION}${PUBLISH_STYLE}.zip
step "Compressing ${ZIP}…"
rm -f ../${ZIP}
-zip -r ../${ZIP} *
+zip -yr ../${ZIP} *
#
# upload
diff --git a/platform/macos/CHANGELOG.md b/platform/macos/CHANGELOG.md
index fa5822863..cf2c1d488 100644
--- a/platform/macos/CHANGELOG.md
+++ b/platform/macos/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog for Mapbox macOS SDK
+## 0.4.1
+
+* Fixed an issue causing code signing failures and bloating the framework. ([#8640](https://github.com/mapbox/mapbox-gl-native/pull/8640))
+
## 0.4.0
This version of the Mapbox macOS SDK corresponds to version 3.5.1 of the Mapbox iOS SDK.
diff --git a/platform/macos/scripts/deploy-packages.sh b/platform/macos/scripts/deploy-packages.sh
index 8f6151924..d9d74b286 100755
--- a/platform/macos/scripts/deploy-packages.sh
+++ b/platform/macos/scripts/deploy-packages.sh
@@ -37,7 +37,7 @@ buildPackageStyle() {
step "Compressing ${file_name}…"
cd build/macos/pkg
rm -f ../deploy/${file_name}
- zip -r ../deploy/${file_name} *
+ zip -yr ../deploy/${file_name} *
cd -
if [[ "${GITHUB_RELEASE}" == true ]]; then
echo "Uploading ${file_name} to GitHub"
From ec34813c905566bfb7a388a9d905d1e20711dc17 Mon Sep 17 00:00:00 2001
From: Fabian Guerra Soto
Date: Wed, 5 Apr 2017 14:16:58 -0400
Subject: [PATCH 25/33] [ios] assertion to check if an annotationTag > 0
(#8588)
* [ios] assertion to check if an annotationTag > 0
* [ios,macos] assertion and guard added to check annotations in visibleAnnotationsInRect
---
platform/ios/src/MGLMapView.mm | 2 ++
platform/macos/src/MGLMapView.mm | 6 +++++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index 6f51d4b52..ef4326556 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -3060,10 +3060,12 @@ public:
continue;
}
MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag.at(annotationTag);
+ NSAssert(annotationContext.annotation, @"Missing annotation for tag %u.", annotationTag);
if (annotationContext.annotation)
{
[annotations addObject:annotationContext.annotation];
}
+
}
return [annotations copy];
diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm
index 871195055..fc9834e01 100644
--- a/platform/macos/src/MGLMapView.mm
+++ b/platform/macos/src/MGLMapView.mm
@@ -1801,7 +1801,11 @@ public:
continue;
}
MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag.at(annotationTag);
- [annotations addObject:annotationContext.annotation];
+ NSAssert(annotationContext.annotation, @"Missing annotation for tag %u.", annotationTag);
+ if (annotationContext.annotation)
+ {
+ [annotations addObject:annotationContext.annotation];
+ }
}
return [annotations copy];
From 5d4d5dcf1b2f56f1dff3ef9dbca57fd076932c50 Mon Sep 17 00:00:00 2001
From: Jesse Bounds
Date: Wed, 5 Apr 2017 12:05:29 -0700
Subject: [PATCH 26/33] [ios, macos] Rename Data-driven styling guide (#8627)
* [ios, macos] Rename Data-driven styling guide
This turns the Data-driven styling guide into a guide for working with
style functions. This helps clarify that not all style functions are
DDS specific but keeps the discussion of this related functionality in
the same guide.
---
.../docs/guides/For Style Authors.md.ejs | 3 +--
...=> Using Style Functions at Runtime.md.ejs} | 18 ++++++++++--------
platform/darwin/scripts/generate-style-code.js | 6 +++---
platform/ios/CHANGELOG.md | 1 +
platform/ios/docs/guides/For Style Authors.md | 3 +--
....md => Using Style Functions at Runtime.md} | 18 ++++++++++--------
platform/ios/jazzy.yml | 2 +-
platform/macos/CHANGELOG.md | 1 +
.../macos/docs/guides/For Style Authors.md | 3 +--
....md => Using Style Functions at Runtime.md} | 18 ++++++++++--------
platform/macos/jazzy.yml | 2 +-
11 files changed, 40 insertions(+), 35 deletions(-)
rename platform/darwin/docs/guides/{Data-Driven Styling.md.ejs => Using Style Functions at Runtime.md.ejs} (81%)
rename platform/ios/docs/guides/{Data-Driven Styling.md => Using Style Functions at Runtime.md} (81%)
rename platform/macos/docs/guides/{Data-Driven Styling.md => Using Style Functions at Runtime.md} (81%)
diff --git a/platform/darwin/docs/guides/For Style Authors.md.ejs b/platform/darwin/docs/guides/For Style Authors.md.ejs
index 93ca7014a..86f8c46f5 100644
--- a/platform/darwin/docs/guides/For Style Authors.md.ejs
+++ b/platform/darwin/docs/guides/For Style Authors.md.ejs
@@ -308,8 +308,7 @@ iOS.
A _style function_ allows you to vary the value of a layout or paint attribute
based on the zoom level, data provided by content sources, or both. For more
-information about style functions that incorporate data from sources, see
-“[Data-Driven Styling](data-driven-styling.html)”.
+information about style functions, see “[Using Style Functions at Runtime](using-style-functions-at-runtime.html)”.
Each kind of style function is represented by a distinct class, but you
typically create style functions as you create any other style value, using
diff --git a/platform/darwin/docs/guides/Data-Driven Styling.md.ejs b/platform/darwin/docs/guides/Using Style Functions at Runtime.md.ejs
similarity index 81%
rename from platform/darwin/docs/guides/Data-Driven Styling.md.ejs
rename to platform/darwin/docs/guides/Using Style Functions at Runtime.md.ejs
index 7b597c673..bd477042c 100644
--- a/platform/darwin/docs/guides/Data-Driven Styling.md.ejs
+++ b/platform/darwin/docs/guides/Using Style Functions at Runtime.md.ejs
@@ -10,19 +10,21 @@
Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`.
-->
-# Data-Driven Styling
+# Using Style Functions at Runtime
-Mapbox’s data-driven styling features allow you to use attributes in the data to style your maps. You can style map features automatically based on their individual attributes.
+[Runtime Styling](runtime-styling.html) enables you to modify every aspect of the map’s appearance dynamically as a user interacts with your application. Much of the runtime styling API allows you to specify _style functions_ instead of constant values. A style function allows you to specify in advance how a layout or paint attribute will vary as the zoom level changes or how the appearance of individual features vary based on metadata provided by a content source.
-Vary POI icons, transit route line colors, city polygon opacity, and more based on any attribute in your data. Need to visualize hotel data by price? You can have your map’s point radii and colors change automatically with your data.
+Style functions spare you the inconvenience of manually calculating intermediate values between different zoom levels or creating a multitude of style layers to handle homogeneous features in the map content. For example, if your content source indicates the prices of hotels in an area, you can color-code the hotels by price, relying on a style function to smoothly interpolate among desired colors without having to specify the color for each exact price.
+
+_Data-driven styling_ specifically refers to the use of style functions to vary the map’s appearance based on data in a content source.
+
+You can also specify style functions in a style JSON file, to be applied automatically when the map loads. See the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#types-function) for details.
 
-This guide uses earthquake data from the [U.S. Geological Survey](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php) to style a map based on attributes. For more information about how to work with GeoJSON data in our iOS SDK, please see our [working with GeoJSON data](working-with-geojson-data.html) guide.
+This guide uses earthquake data from the [U.S. Geological Survey](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php) and data-driven styling to style a map based on attributes. For more information about how to work with GeoJSON data in our iOS SDK, please see our [working with GeoJSON data](working-with-geojson-data.html) guide.
-## Style functions
-
-There are three subclasses of `MGLStyleFunction`:
+A style function is represented at runtime by the `MGLStyleFunction` class. There are three subclasses of `MGLStyleFunction`:
* `MGLCameraStyleFunction` is a style value that changes with zoom level. For example, you can make the radius of a circle increase according to zoom level.
* `MGLSourceStyleFunction` is a style value that changes with the attributes of a feature. For example, you can adjust the radius of a circle based on the magnitude of an earthquake.
@@ -123,7 +125,7 @@ layer.circleColor = MGLStyleValue(interpolationMode: .interval,
At each stop, `MGLInterpolationModeCategorical` produces an output value equal to the function input. We’re going to use a different stops dictionary than we did for the previous two modes.
-There are three main types of events in the dataset: earthquakes, explosions, and quarry blasts. In this case, the color of the circle layer will be determined by the type of event, with a default value of green to catch any events that do not fall into any of those categories.
+There are three main types of events in the dataset: earthquakes, explosions, and quarry blasts. In this case, the color of the circle layer will be determined by the type of event, with a default value of blue to catch any events that do not fall into any of those categories.
``` swift
let categoricalStops = ["earthquake": MGLStyleValue<<%- cocoaPrefix %>Color>(rawValue: .orange),
diff --git a/platform/darwin/scripts/generate-style-code.js b/platform/darwin/scripts/generate-style-code.js
index 9c4569709..7e798154e 100644
--- a/platform/darwin/scripts/generate-style-code.js
+++ b/platform/darwin/scripts/generate-style-code.js
@@ -528,7 +528,7 @@ const layerH = ejs.compile(fs.readFileSync('platform/darwin/src/MGLStyleLayer.h.
const layerM = ejs.compile(fs.readFileSync('platform/darwin/src/MGLStyleLayer.mm.ejs', 'utf8'), { strict: true});
const testLayers = ejs.compile(fs.readFileSync('platform/darwin/test/MGLStyleLayerTests.mm.ejs', 'utf8'), { strict: true});
const guideMD = ejs.compile(fs.readFileSync('platform/darwin/docs/guides/For Style Authors.md.ejs', 'utf8'), { strict: true });
-const ddsGuideMD = ejs.compile(fs.readFileSync('platform/darwin/docs/guides/Data-Driven Styling.md.ejs', 'utf8'), { strict: true });
+const ddsGuideMD = ejs.compile(fs.readFileSync('platform/darwin/docs/guides/Using Style Functions at Runtime.md.ejs', 'utf8'), { strict: true });
const layers = _(spec.layer.type.values).map((value, layerType) => {
const layoutProperties = Object.keys(spec[`layout_${layerType}`]).reduce((memo, name) => {
@@ -615,9 +615,9 @@ fs.writeFileSync(`platform/macos/docs/guides/For Style Authors.md`, guideMD({
renamedProperties: renamedPropertiesByLayerType,
layers: layers,
}));
-fs.writeFileSync(`platform/ios/docs/guides/Data-Driven Styling.md`, ddsGuideMD({
+fs.writeFileSync(`platform/ios/docs/guides/Using Style Functions at Runtime.md`, ddsGuideMD({
os: 'iOS',
}));
-fs.writeFileSync(`platform/macos/docs/guides/Data-Driven Styling.md`, ddsGuideMD({
+fs.writeFileSync(`platform/macos/docs/guides/Using Style Functions at Runtime.md`, ddsGuideMD({
os: 'macOS',
}));
diff --git a/platform/ios/CHANGELOG.md b/platform/ios/CHANGELOG.md
index 8b1d6219a..c79347e57 100644
--- a/platform/ios/CHANGELOG.md
+++ b/platform/ios/CHANGELOG.md
@@ -7,6 +7,7 @@ Mapbox welcomes participation and contributions from everyone. Please read [CONT
* Fixed an issue that caused the return type of a map view delegate method to bridge incorrectly to applications written in Swift. ([#8541](https://github.com/mapbox/mapbox-gl-native/pull/8541))
* Fixed a crash that could occur when calling `-[MGLShapeSource featuresMatchingPredicate:]` or `-[MGLVectorSource featuresInSourceLayersWithIdentifiers:predicate:]`. ([#8553](https://github.com/mapbox/mapbox-gl-native/pull/8553))
* Fixed a crash that could occur after adding view-backed annotations to the map. ([#8513](https://github.com/mapbox/mapbox-gl-native/pull/8513))
+* Renamed the "Data-Driven Styling" guide to "Using Style Functions at Runtime" and clarified the meaning of data-driven styling in the guide's discussion of runtime style functions. ([#8627](https://github.com/mapbox/mapbox-gl-native/pull/8627))
## 3.5.0
diff --git a/platform/ios/docs/guides/For Style Authors.md b/platform/ios/docs/guides/For Style Authors.md
index d3ba331e0..ed9018b12 100644
--- a/platform/ios/docs/guides/For Style Authors.md
+++ b/platform/ios/docs/guides/For Style Authors.md
@@ -288,8 +288,7 @@ defined by the style specification.
A _style function_ allows you to vary the value of a layout or paint attribute
based on the zoom level, data provided by content sources, or both. For more
-information about style functions that incorporate data from sources, see
-“[Data-Driven Styling](data-driven-styling.html)”.
+information about style functions, see “[Using Style Functions at Runtime](using-style-functions-at-runtime.html)”.
Each kind of style function is represented by a distinct class, but you
typically create style functions as you create any other style value, using
diff --git a/platform/ios/docs/guides/Data-Driven Styling.md b/platform/ios/docs/guides/Using Style Functions at Runtime.md
similarity index 81%
rename from platform/ios/docs/guides/Data-Driven Styling.md
rename to platform/ios/docs/guides/Using Style Functions at Runtime.md
index a5ed874b5..13c4cc0bb 100644
--- a/platform/ios/docs/guides/Data-Driven Styling.md
+++ b/platform/ios/docs/guides/Using Style Functions at Runtime.md
@@ -4,19 +4,21 @@
Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`.
-->
-# Data-Driven Styling
+# Using Style Functions at Runtime
-Mapbox’s data-driven styling features allow you to use attributes in the data to style your maps. You can style map features automatically based on their individual attributes.
+[Runtime Styling](runtime-styling.html) enables you to modify every aspect of the map’s appearance dynamically as a user interacts with your application. Much of the runtime styling API allows you to specify _style functions_ instead of constant values. A style function allows you to specify in advance how a layout or paint attribute will vary as the zoom level changes or how the appearance of individual features vary based on metadata provided by a content source.
-Vary POI icons, transit route line colors, city polygon opacity, and more based on any attribute in your data. Need to visualize hotel data by price? You can have your map’s point radii and colors change automatically with your data.
+Style functions spare you the inconvenience of manually calculating intermediate values between different zoom levels or creating a multitude of style layers to handle homogeneous features in the map content. For example, if your content source indicates the prices of hotels in an area, you can color-code the hotels by price, relying on a style function to smoothly interpolate among desired colors without having to specify the color for each exact price.
+
+_Data-driven styling_ specifically refers to the use of style functions to vary the map’s appearance based on data in a content source.
+
+You can also specify style functions in a style JSON file, to be applied automatically when the map loads. See the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#types-function) for details.
 
-This guide uses earthquake data from the [U.S. Geological Survey](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php) to style a map based on attributes. For more information about how to work with GeoJSON data in our iOS SDK, please see our [working with GeoJSON data](working-with-geojson-data.html) guide.
+This guide uses earthquake data from the [U.S. Geological Survey](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php) and data-driven styling to style a map based on attributes. For more information about how to work with GeoJSON data in our iOS SDK, please see our [working with GeoJSON data](working-with-geojson-data.html) guide.
-## Style functions
-
-There are three subclasses of `MGLStyleFunction`:
+A style function is represented at runtime by the `MGLStyleFunction` class. There are three subclasses of `MGLStyleFunction`:
* `MGLCameraStyleFunction` is a style value that changes with zoom level. For example, you can make the radius of a circle increase according to zoom level.
* `MGLSourceStyleFunction` is a style value that changes with the attributes of a feature. For example, you can adjust the radius of a circle based on the magnitude of an earthquake.
@@ -117,7 +119,7 @@ layer.circleColor = MGLStyleValue(interpolationMode: .interval,
At each stop, `MGLInterpolationModeCategorical` produces an output value equal to the function input. We’re going to use a different stops dictionary than we did for the previous two modes.
-There are three main types of events in the dataset: earthquakes, explosions, and quarry blasts. In this case, the color of the circle layer will be determined by the type of event, with a default value of green to catch any events that do not fall into any of those categories.
+There are three main types of events in the dataset: earthquakes, explosions, and quarry blasts. In this case, the color of the circle layer will be determined by the type of event, with a default value of blue to catch any events that do not fall into any of those categories.
``` swift
let categoricalStops = ["earthquake": MGLStyleValue(rawValue: .orange),
diff --git a/platform/ios/jazzy.yml b/platform/ios/jazzy.yml
index 5d39e276b..87af09a9b 100644
--- a/platform/ios/jazzy.yml
+++ b/platform/ios/jazzy.yml
@@ -19,7 +19,7 @@ custom_categories:
children:
- Adding Points to a Map
- Runtime Styling
- - Data-Driven Styling
+ - Using Style Functions at Runtime
- Working with Mapbox Studio
- Working with GeoJSON Data
- For Style Authors
diff --git a/platform/macos/CHANGELOG.md b/platform/macos/CHANGELOG.md
index cf2c1d488..326a70ebb 100644
--- a/platform/macos/CHANGELOG.md
+++ b/platform/macos/CHANGELOG.md
@@ -3,6 +3,7 @@
## 0.4.1
* Fixed an issue causing code signing failures and bloating the framework. ([#8640](https://github.com/mapbox/mapbox-gl-native/pull/8640))
+* Renamed the "Data-Driven Styling" guide to "Using Style Functions at Runtime" and clarified the meaning of data-driven styling in the guide's discussion of runtime style functions. ([#8627](https://github.com/mapbox/mapbox-gl-native/pull/8627))
## 0.4.0
diff --git a/platform/macos/docs/guides/For Style Authors.md b/platform/macos/docs/guides/For Style Authors.md
index f57692185..9ed69ac9e 100644
--- a/platform/macos/docs/guides/For Style Authors.md
+++ b/platform/macos/docs/guides/For Style Authors.md
@@ -283,8 +283,7 @@ iOS.
A _style function_ allows you to vary the value of a layout or paint attribute
based on the zoom level, data provided by content sources, or both. For more
-information about style functions that incorporate data from sources, see
-“[Data-Driven Styling](data-driven-styling.html)”.
+information about style functions, see “[Using Style Functions at Runtime](using-style-functions-at-runtime.html)”.
Each kind of style function is represented by a distinct class, but you
typically create style functions as you create any other style value, using
diff --git a/platform/macos/docs/guides/Data-Driven Styling.md b/platform/macos/docs/guides/Using Style Functions at Runtime.md
similarity index 81%
rename from platform/macos/docs/guides/Data-Driven Styling.md
rename to platform/macos/docs/guides/Using Style Functions at Runtime.md
index 2adb0197d..b3098dfe0 100644
--- a/platform/macos/docs/guides/Data-Driven Styling.md
+++ b/platform/macos/docs/guides/Using Style Functions at Runtime.md
@@ -4,19 +4,21 @@
Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`.
-->
-# Data-Driven Styling
+# Using Style Functions at Runtime
-Mapbox’s data-driven styling features allow you to use attributes in the data to style your maps. You can style map features automatically based on their individual attributes.
+[Runtime Styling](runtime-styling.html) enables you to modify every aspect of the map’s appearance dynamically as a user interacts with your application. Much of the runtime styling API allows you to specify _style functions_ instead of constant values. A style function allows you to specify in advance how a layout or paint attribute will vary as the zoom level changes or how the appearance of individual features vary based on metadata provided by a content source.
-Vary POI icons, transit route line colors, city polygon opacity, and more based on any attribute in your data. Need to visualize hotel data by price? You can have your map’s point radii and colors change automatically with your data.
+Style functions spare you the inconvenience of manually calculating intermediate values between different zoom levels or creating a multitude of style layers to handle homogeneous features in the map content. For example, if your content source indicates the prices of hotels in an area, you can color-code the hotels by price, relying on a style function to smoothly interpolate among desired colors without having to specify the color for each exact price.
+
+_Data-driven styling_ specifically refers to the use of style functions to vary the map’s appearance based on data in a content source.
+
+You can also specify style functions in a style JSON file, to be applied automatically when the map loads. See the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#types-function) for details.
 
-This guide uses earthquake data from the [U.S. Geological Survey](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php) to style a map based on attributes. For more information about how to work with GeoJSON data in our iOS SDK, please see our [working with GeoJSON data](working-with-geojson-data.html) guide.
+This guide uses earthquake data from the [U.S. Geological Survey](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php) and data-driven styling to style a map based on attributes. For more information about how to work with GeoJSON data in our iOS SDK, please see our [working with GeoJSON data](working-with-geojson-data.html) guide.
-## Style functions
-
-There are three subclasses of `MGLStyleFunction`:
+A style function is represented at runtime by the `MGLStyleFunction` class. There are three subclasses of `MGLStyleFunction`:
* `MGLCameraStyleFunction` is a style value that changes with zoom level. For example, you can make the radius of a circle increase according to zoom level.
* `MGLSourceStyleFunction` is a style value that changes with the attributes of a feature. For example, you can adjust the radius of a circle based on the magnitude of an earthquake.
@@ -117,7 +119,7 @@ layer.circleColor = MGLStyleValue(interpolationMode: .interval,
At each stop, `MGLInterpolationModeCategorical` produces an output value equal to the function input. We’re going to use a different stops dictionary than we did for the previous two modes.
-There are three main types of events in the dataset: earthquakes, explosions, and quarry blasts. In this case, the color of the circle layer will be determined by the type of event, with a default value of green to catch any events that do not fall into any of those categories.
+There are three main types of events in the dataset: earthquakes, explosions, and quarry blasts. In this case, the color of the circle layer will be determined by the type of event, with a default value of blue to catch any events that do not fall into any of those categories.
``` swift
let categoricalStops = ["earthquake": MGLStyleValue(rawValue: .orange),
diff --git a/platform/macos/jazzy.yml b/platform/macos/jazzy.yml
index fd6052c9f..1f0e2fbc7 100644
--- a/platform/macos/jazzy.yml
+++ b/platform/macos/jazzy.yml
@@ -19,7 +19,7 @@ custom_categories:
children:
- Working with GeoJSON Data
- For Style Authors
- - Data-Driven Styling
+ - Using Style Functions at Runtime
- Info.plist Keys
- name: Maps
children:
From 5bfbe9603b8f306e8725ef54a642e3fa57fe9141 Mon Sep 17 00:00:00 2001
From: Jordan Kiley
Date: Wed, 5 Apr 2017 13:09:07 -0700
Subject: [PATCH 27/33] [ios] replaced link to select a feature example (#8651)
---
platform/ios/docs/guides/Adding Points to a Map.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/platform/ios/docs/guides/Adding Points to a Map.md b/platform/ios/docs/guides/Adding Points to a Map.md
index 17e8ad359..ab1702a07 100644
--- a/platform/ios/docs/guides/Adding Points to a Map.md
+++ b/platform/ios/docs/guides/Adding Points to a Map.md
@@ -79,5 +79,5 @@ From there, you can create one or many `MGLSymbolStyleLayer` or `MGLCircleStyleL
**Cons**
-* Currently you must implement your own tap gesture recognizer together with `MGLMapView.visibleFeaturesAtPoint` to recognize taps and manually show callouts ([example](https://www.mapbox.com/ios-sdk/examples/select-feature)).
+* Currently you must implement your own tap gesture recognizer together with `MGLMapView.visibleFeaturesAtPoint` to recognize taps and manually show callouts ([example](https://www.mapbox.com/ios-sdk/examples/select-layer/)).
* Currently no SDK support for animations. If you need animations, consider using an NSTimer and updating the layer properties accordingly.
From d39ea23b0975bf39f54bb181b14f3caed69a4767 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Minh=20Nguye=CC=82=CC=83n?=
Date: Tue, 4 Apr 2017 21:08:50 -0700
Subject: [PATCH 28/33] [ios, macos] Hardened std::map usage in MGLMapVIew
Replaced std::map::operator[] usage with std::map::at(). Backed up an assertion on iOS with a guard when -annotationTagsInRect: returns the tag of a nonexistent annotation, for consistency with macOS. Removed an unnecessary and risky subscript into _annotationContextsByAnnotationTag in -positioningRectForCalloutForAnnotationWithTag: on iOS.
---
platform/ios/src/MGLMapView.mm | 12 +++++++-----
platform/macos/src/MGLMapView.mm | 4 ++--
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index ef4326556..7458c3929 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -1452,7 +1452,7 @@ public:
}
else
{
- nextElement = _annotationContextsByAnnotationTag[_selectedAnnotationTag].accessibilityElement;
+ nextElement = _annotationContextsByAnnotationTag.at(_selectedAnnotationTag).accessibilityElement;
}
[self deselectAnnotation:self.selectedAnnotation animated:YES];
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nextElement);
@@ -3082,7 +3082,7 @@ public:
return nil;
}
- MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag[tag];
+ MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(tag);
return annotationContext.annotation;
}
@@ -3552,8 +3552,12 @@ public:
{
id annotation = [self annotationWithTag:annotationTag];
NSAssert(annotation, @"Unknown annotation found nearby tap");
+ if ( ! annotation)
+ {
+ return true;
+ }
- MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag[annotationTag];
+ MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag.at(annotationTag);
CGRect annotationRect;
MGLAnnotationView *annotationView = annotationContext.annotationView;
@@ -3867,8 +3871,6 @@ public:
/// and is appropriate for positioning a popover.
- (CGRect)positioningRectForCalloutForAnnotationWithTag:(MGLAnnotationTag)annotationTag
{
- MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag[annotationTag];
-
id annotation = [self annotationWithTag:annotationTag];
if ( ! annotation)
{
diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm
index fc9834e01..a5a5c53df 100644
--- a/platform/macos/src/MGLMapView.mm
+++ b/platform/macos/src/MGLMapView.mm
@@ -1820,7 +1820,7 @@ public:
return nil;
}
- MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag[tag];
+ MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(tag);
return annotationContext.annotation;
}
@@ -2057,8 +2057,8 @@ public:
// Filter out any annotation whose image is unselectable or for which
// hit testing fails.
auto end = std::remove_if(nearbyAnnotations.begin(), nearbyAnnotations.end(), [&](const MGLAnnotationTag annotationTag) {
- NSAssert(_annotationContextsByAnnotationTag.count(annotationTag) != 0, @"Unknown annotation found nearby click");
id annotation = [self annotationWithTag:annotationTag];
+ NSAssert(annotation, @"Unknown annotation found nearby click");
if (!annotation) {
return true;
}
From 371919555f82c4f7aeaf8eb9addad15b6851cc5b Mon Sep 17 00:00:00 2001
From: Jason Wray
Date: Wed, 5 Apr 2017 20:11:53 -0400
Subject: [PATCH 29/33] [ios] Update podspecs and changelog for v3.5.1
---
platform/ios/CHANGELOG.md | 6 +++---
platform/ios/Mapbox-iOS-SDK-symbols.podspec | 2 +-
platform/ios/Mapbox-iOS-SDK.podspec | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/platform/ios/CHANGELOG.md b/platform/ios/CHANGELOG.md
index c79347e57..bd542eeeb 100644
--- a/platform/ios/CHANGELOG.md
+++ b/platform/ios/CHANGELOG.md
@@ -2,14 +2,14 @@
Mapbox welcomes participation and contributions from everyone. Please read [CONTRIBUTING.md](../../CONTRIBUTING.md) to get started.
-## 3.5.1
+## 3.5.1 - April 5, 2017
* Fixed an issue that caused the return type of a map view delegate method to bridge incorrectly to applications written in Swift. ([#8541](https://github.com/mapbox/mapbox-gl-native/pull/8541))
* Fixed a crash that could occur when calling `-[MGLShapeSource featuresMatchingPredicate:]` or `-[MGLVectorSource featuresInSourceLayersWithIdentifiers:predicate:]`. ([#8553](https://github.com/mapbox/mapbox-gl-native/pull/8553))
* Fixed a crash that could occur after adding view-backed annotations to the map. ([#8513](https://github.com/mapbox/mapbox-gl-native/pull/8513))
-* Renamed the "Data-Driven Styling" guide to "Using Style Functions at Runtime" and clarified the meaning of data-driven styling in the guide's discussion of runtime style functions. ([#8627](https://github.com/mapbox/mapbox-gl-native/pull/8627))
+* Renamed the “Data-Driven Styling” guide to “Using Style Functions at Runtime” and clarified the meaning of data-driven styling in the guide’s discussion of runtime style functions. ([#8627](https://github.com/mapbox/mapbox-gl-native/pull/8627))
-## 3.5.0
+## 3.5.0 - March 21, 2017
### Packaging
diff --git a/platform/ios/Mapbox-iOS-SDK-symbols.podspec b/platform/ios/Mapbox-iOS-SDK-symbols.podspec
index cc0fb07e2..64e344280 100644
--- a/platform/ios/Mapbox-iOS-SDK-symbols.podspec
+++ b/platform/ios/Mapbox-iOS-SDK-symbols.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |m|
- version = '3.5.0'
+ version = '3.5.1'
m.name = 'Mapbox-iOS-SDK-symbols'
m.version = "#{version}-symbols"
diff --git a/platform/ios/Mapbox-iOS-SDK.podspec b/platform/ios/Mapbox-iOS-SDK.podspec
index 987e9fed1..5f35de84a 100644
--- a/platform/ios/Mapbox-iOS-SDK.podspec
+++ b/platform/ios/Mapbox-iOS-SDK.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |m|
- version = '3.5.0'
+ version = '3.5.1'
m.name = 'Mapbox-iOS-SDK'
m.version = version
From 03d10bb67a72153e1aca0e7c67eaf022769d75b9 Mon Sep 17 00:00:00 2001
From: Jesse Bounds
Date: Fri, 7 Apr 2017 15:23:39 -0700
Subject: [PATCH 30/33] [ios, macos] Guard against looking up annotation
contexts MGLAnnotationTagNotFound (#8686)
---
platform/ios/CHANGELOG.md | 4 ++
platform/ios/src/MGLMapView.mm | 76 ++++++++++++++++++--------------
platform/macos/CHANGELOG.md | 1 +
platform/macos/src/MGLMapView.mm | 11 +++--
4 files changed, 55 insertions(+), 37 deletions(-)
diff --git a/platform/ios/CHANGELOG.md b/platform/ios/CHANGELOG.md
index bd542eeeb..fcbb3a26a 100644
--- a/platform/ios/CHANGELOG.md
+++ b/platform/ios/CHANGELOG.md
@@ -2,6 +2,10 @@
Mapbox welcomes participation and contributions from everyone. Please read [CONTRIBUTING.md](../../CONTRIBUTING.md) to get started.
+## 3.5.2
+
+* Fixed an issue that caused a crash when the user location annotation was presenting a callout view and the map was moved. ([#8686](https://github.com/mapbox/mapbox-gl-native/pull/8686))
+
## 3.5.1 - April 5, 2017
* Fixed an issue that caused the return type of a map view delegate method to bridge incorrectly to applications written in Swift. ([#8541](https://github.com/mapbox/mapbox-gl-native/pull/8541))
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index 7458c3929..540f6de86 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -1452,7 +1452,9 @@ public:
}
else
{
- nextElement = _annotationContextsByAnnotationTag.at(_selectedAnnotationTag).accessibilityElement;
+ if (_selectedAnnotationTag != MGLAnnotationTagNotFound) {
+ nextElement = _annotationContextsByAnnotationTag.at(_selectedAnnotationTag).accessibilityElement;
+ }
}
[self deselectAnnotation:self.selectedAnnotation animated:YES];
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nextElement);
@@ -2002,19 +2004,21 @@ public:
{
const mbgl::Point point = MGLPointFromLocationCoordinate2D(annotation.coordinate);
- MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag);
- if (annotationContext.annotationView)
- {
- // Redundantly move the associated annotation view outside the scope of the animation-less transaction block in -updateAnnotationViews.
- annotationContext.annotationView.center = [self convertCoordinate:annotationContext.annotation.coordinate toPointToView:self];
+ if (annotationTag != MGLAnnotationTagNotFound) {
+ MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag);
+ if (annotationContext.annotationView)
+ {
+ // Redundantly move the associated annotation view outside the scope of the animation-less transaction block in -updateAnnotationViews.
+ annotationContext.annotationView.center = [self convertCoordinate:annotationContext.annotation.coordinate toPointToView:self];
+ }
+
+ MGLAnnotationImage *annotationImage = [self imageOfAnnotationWithTag:annotationTag];
+ NSString *symbolName = annotationImage.styleIconIdentifier;
+
+ // Update the annotation’s backing geometry to match the annotation model object. Any associated annotation view is also moved by side effect. However, -updateAnnotationViews disables the view’s animation actions, because it can’t distinguish between moves due to the viewport changing and moves due to the annotation’s coordinate changing.
+ _mbglMap->updateAnnotation(annotationTag, mbgl::SymbolAnnotation { point, symbolName.UTF8String });
+ [self updateCalloutView];
}
-
- MGLAnnotationImage *annotationImage = [self imageOfAnnotationWithTag:annotationTag];
- NSString *symbolName = annotationImage.styleIconIdentifier;
-
- // Update the annotation’s backing geometry to match the annotation model object. Any associated annotation view is also moved by side effect. However, -updateAnnotationViews disables the view’s animation actions, because it can’t distinguish between moves due to the viewport changing and moves due to the annotation’s coordinate changing.
- _mbglMap->updateAnnotation(annotationTag, mbgl::SymbolAnnotation { point, symbolName.UTF8String });
- [self updateCalloutView];
}
}
else if ([keyPath isEqualToString:@"coordinates"] && [object isKindOfClass:[MGLMultiPoint class]])
@@ -3055,17 +3059,18 @@ public:
for (auto const& annotationTag: annotationTags)
{
- if (!_annotationContextsByAnnotationTag.count(annotationTag))
+ if (!_annotationContextsByAnnotationTag.count(annotationTag) ||
+ annotationTag == MGLAnnotationTagNotFound)
{
continue;
}
+
MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag.at(annotationTag);
NSAssert(annotationContext.annotation, @"Missing annotation for tag %u.", annotationTag);
if (annotationContext.annotation)
{
[annotations addObject:annotationContext.annotation];
}
-
}
return [annotations copy];
@@ -3077,8 +3082,8 @@ public:
/// Returns the annotation assigned the given tag. Cheap.
- (id )annotationWithTag:(MGLAnnotationTag)tag
{
- if ( ! _annotationContextsByAnnotationTag.count(tag))
- {
+ if ( ! _annotationContextsByAnnotationTag.count(tag) ||
+ tag == MGLAnnotationTagNotFound) {
return nil;
}
@@ -3680,10 +3685,12 @@ public:
{
return self.userLocation;
}
- if ( ! _annotationContextsByAnnotationTag.count(_selectedAnnotationTag))
- {
+
+ if ( ! _annotationContextsByAnnotationTag.count(_selectedAnnotationTag) ||
+ _selectedAnnotationTag == MGLAnnotationTagNotFound) {
return nil;
}
+
MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(_selectedAnnotationTag);
return annotationContext.annotation;
}
@@ -3749,19 +3756,16 @@ public:
MGLAnnotationView *annotationView = nil;
if (annotation != self.userLocation)
- {
- MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag);
-
- annotationView = annotationContext.annotationView;
-
- if (annotationView && annotationView.enabled)
- {
- // Annotations represented by views use the view frame as the positioning rect.
- positioningRect = annotationView.frame;
-
- [annotationView.superview bringSubviewToFront:annotationView];
-
- [annotationView setSelected:YES animated:animated];
+ if (annotationTag != MGLAnnotationTagNotFound) {
+ MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag);
+ annotationView = annotationContext.annotationView;
+ if (annotationView && annotationView.enabled) {
+ {
+ // Annotations represented by views use the view frame as the positioning rect.
+ positioningRect = annotationView.frame;
+ [annotationView.superview bringSubviewToFront:annotationView];
+ [annotationView setSelected:YES animated:animated];
+ }
}
}
@@ -5039,8 +5043,12 @@ public:
if (isAnchoredToAnnotation)
{
MGLAnnotationTag tag = [self annotationTagForAnnotation:annotation];
- MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(tag);
- MGLAnnotationView *annotationView = annotationContext.annotationView;
+ MGLAnnotationView *annotationView = nil;
+
+ if (tag != MGLAnnotationTagNotFound) {
+ MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(tag);
+ annotationView = annotationContext.annotationView;
+ }
CGRect rect = [self positioningRectForCalloutForAnnotationWithTag:tag];
diff --git a/platform/macos/CHANGELOG.md b/platform/macos/CHANGELOG.md
index 326a70ebb..1d24f2a6e 100644
--- a/platform/macos/CHANGELOG.md
+++ b/platform/macos/CHANGELOG.md
@@ -3,6 +3,7 @@
## 0.4.1
* Fixed an issue causing code signing failures and bloating the framework. ([#8640](https://github.com/mapbox/mapbox-gl-native/pull/8640))
+* Fixed an issue that could cause a crash if annotations unknown to the map view were interacted with. ([#8686](https://github.com/mapbox/mapbox-gl-native/pull/8686))
* Renamed the "Data-Driven Styling" guide to "Using Style Functions at Runtime" and clarified the meaning of data-driven styling in the guide's discussion of runtime style functions. ([#8627](https://github.com/mapbox/mapbox-gl-native/pull/8627))
## 0.4.0
diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm
index a5a5c53df..a873d9ef8 100644
--- a/platform/macos/src/MGLMapView.mm
+++ b/platform/macos/src/MGLMapView.mm
@@ -1796,10 +1796,12 @@ public:
for (auto const& annotationTag: annotationTags)
{
- if (!_annotationContextsByAnnotationTag.count(annotationTag))
+ if (!_annotationContextsByAnnotationTag.count(annotationTag) ||
+ annotationTag == MGLAnnotationTagNotFound)
{
continue;
}
+
MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag.at(annotationTag);
NSAssert(annotationContext.annotation, @"Missing annotation for tag %u.", annotationTag);
if (annotationContext.annotation)
@@ -1816,7 +1818,8 @@ public:
/// Returns the annotation assigned the given tag. Cheap.
- (id )annotationWithTag:(MGLAnnotationTag)tag {
- if (!_annotationContextsByAnnotationTag.count(tag)) {
+ if ( ! _annotationContextsByAnnotationTag.count(tag) ||
+ tag == MGLAnnotationTagNotFound) {
return nil;
}
@@ -2147,9 +2150,11 @@ public:
}
- (id )selectedAnnotation {
- if (!_annotationContextsByAnnotationTag.count(_selectedAnnotationTag)) {
+ if ( ! _annotationContextsByAnnotationTag.count(_selectedAnnotationTag) ||
+ _selectedAnnotationTag == MGLAnnotationTagNotFound) {
return nil;
}
+
MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(_selectedAnnotationTag);
return annotationContext.annotation;
}
From acfa49dd9f71b9c630be455702a288a501ac8a64 Mon Sep 17 00:00:00 2001
From: Jason Wray
Date: Fri, 7 Apr 2017 19:23:04 -0400
Subject: [PATCH 31/33] [ios] Update podspecs and changelog for v3.5.2
---
platform/ios/CHANGELOG.md | 3 ++-
platform/ios/Mapbox-iOS-SDK-symbols.podspec | 2 +-
platform/ios/Mapbox-iOS-SDK.podspec | 2 +-
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/platform/ios/CHANGELOG.md b/platform/ios/CHANGELOG.md
index fcbb3a26a..deb108a1d 100644
--- a/platform/ios/CHANGELOG.md
+++ b/platform/ios/CHANGELOG.md
@@ -2,9 +2,10 @@
Mapbox welcomes participation and contributions from everyone. Please read [CONTRIBUTING.md](../../CONTRIBUTING.md) to get started.
-## 3.5.2
+## 3.5.2 - April 7, 2017
* Fixed an issue that caused a crash when the user location annotation was presenting a callout view and the map was moved. ([#8686](https://github.com/mapbox/mapbox-gl-native/pull/8686))
+* This release was built with Xcode 8.3.1, which fixed [a significant bitcode issue](http://www.openradar.me/31302382) introduced in Xcode 8.3 that caused Mapbox iOS SDK 3.5.1 to be 2× larger than 3.5.0.
## 3.5.1 - April 5, 2017
diff --git a/platform/ios/Mapbox-iOS-SDK-symbols.podspec b/platform/ios/Mapbox-iOS-SDK-symbols.podspec
index 64e344280..190087afa 100644
--- a/platform/ios/Mapbox-iOS-SDK-symbols.podspec
+++ b/platform/ios/Mapbox-iOS-SDK-symbols.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |m|
- version = '3.5.1'
+ version = '3.5.2'
m.name = 'Mapbox-iOS-SDK-symbols'
m.version = "#{version}-symbols"
diff --git a/platform/ios/Mapbox-iOS-SDK.podspec b/platform/ios/Mapbox-iOS-SDK.podspec
index 5f35de84a..ae9e470e8 100644
--- a/platform/ios/Mapbox-iOS-SDK.podspec
+++ b/platform/ios/Mapbox-iOS-SDK.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |m|
- version = '3.5.1'
+ version = '3.5.2'
m.name = 'Mapbox-iOS-SDK'
m.version = version
From b16d6bfcf6609e2061080d007142c5ee303bc7c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?=
Date: Fri, 7 Apr 2017 07:32:49 -0700
Subject: [PATCH 32/33] macos-v0.4.1
---
platform/macos/CHANGELOG.md | 6 ++++--
platform/macos/Mapbox-macOS-SDK-symbols.podspec | 2 +-
platform/macos/Mapbox-macOS-SDK.podspec | 2 +-
3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/platform/macos/CHANGELOG.md b/platform/macos/CHANGELOG.md
index 1d24f2a6e..85047bf02 100644
--- a/platform/macos/CHANGELOG.md
+++ b/platform/macos/CHANGELOG.md
@@ -2,11 +2,13 @@
## 0.4.1
+This version of the Mapbox macOS SDK corresponds to version 3.5.2 of the Mapbox iOS SDK.
+
* Fixed an issue causing code signing failures and bloating the framework. ([#8640](https://github.com/mapbox/mapbox-gl-native/pull/8640))
* Fixed an issue that could cause a crash if annotations unknown to the map view were interacted with. ([#8686](https://github.com/mapbox/mapbox-gl-native/pull/8686))
-* Renamed the "Data-Driven Styling" guide to "Using Style Functions at Runtime" and clarified the meaning of data-driven styling in the guide's discussion of runtime style functions. ([#8627](https://github.com/mapbox/mapbox-gl-native/pull/8627))
+* Renamed the “Data-Driven Styling” guide to “Using Style Functions at Runtime” and clarified the meaning of data-driven styling in the guide’s discussion of runtime style functions. ([#8627](https://github.com/mapbox/mapbox-gl-native/pull/8627))
-## 0.4.0
+## 0.4.0 - April 2, 2017
This version of the Mapbox macOS SDK corresponds to version 3.5.1 of the Mapbox iOS SDK.
diff --git a/platform/macos/Mapbox-macOS-SDK-symbols.podspec b/platform/macos/Mapbox-macOS-SDK-symbols.podspec
index 4bac6dff2..c621a7312 100644
--- a/platform/macos/Mapbox-macOS-SDK-symbols.podspec
+++ b/platform/macos/Mapbox-macOS-SDK-symbols.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |m|
- version = '0.4.0'
+ version = '0.4.1'
m.name = 'Mapbox-macOS-SDK-symbols'
m.version = "#{version}-symbols"
diff --git a/platform/macos/Mapbox-macOS-SDK.podspec b/platform/macos/Mapbox-macOS-SDK.podspec
index a7ecb7423..2417fb11e 100644
--- a/platform/macos/Mapbox-macOS-SDK.podspec
+++ b/platform/macos/Mapbox-macOS-SDK.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |m|
- version = '0.4.0'
+ version = '0.4.1'
m.name = 'Mapbox-macOS-SDK'
m.version = version
From 4d0605a004844726fc5f5e015c6d4320a880bfa0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?=
Date: Sat, 8 Apr 2017 15:45:37 -0700
Subject: [PATCH 33/33] [qt] Renamed qt5 formula to qt
Cherry-picked from 3172a9744f2e296d9e8a68558e11c884c9c30aca.
---
platform/qt/bitrise-qt5.yml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/platform/qt/bitrise-qt5.yml b/platform/qt/bitrise-qt5.yml
index 036ec044c..d9b7d4bc6 100644
--- a/platform/qt/bitrise-qt5.yml
+++ b/platform/qt/bitrise-qt5.yml
@@ -31,12 +31,12 @@ workflows:
set -eu -o pipefail
sudo chown -R $USER /usr/local
brew install cmake
- brew install qt5
- brew link qt5 --force
- brew linkapps qt5
- export HOMEBREW_QT5_VERSION=$(brew list --versions qt5 | rev | cut -d' ' -f1 | rev)
- ln -s /usr/local/Cellar/qt5/$HOMEBREW_QT5_VERSION/mkspecs /usr/local/mkspecs
- ln -s /usr/local/Cellar/qt5/$HOMEBREW_QT5_VERSION/plugins /usr/local/plugins
+ brew install qt
+ brew link qt --force
+ brew linkapps qt
+ export HOMEBREW_QT5_VERSION=$(brew list --versions qt | rev | cut -d' ' -f1 | rev)
+ ln -s /usr/local/Cellar/qt/$HOMEBREW_QT5_VERSION/mkspecs /usr/local/mkspecs
+ ln -s /usr/local/Cellar/qt/$HOMEBREW_QT5_VERSION/plugins /usr/local/plugins
export BUILDTYPE=Debug
make qt-app
make run-qt-test