The `MGLNetworkConfiguration` class was make public, and added `sessionConfiguration` property to let developers customize the `NSURLSessionConfiguration` object that is used to make HTTP requests in the SDK.
`LayerManager` is now responsible for `RenderLayer` instances creation,
so that there is a single entry point for creating of objects, which
correspond to a certain layer type.
The `LayerType type` field is dropped from `Layer::Impl`.
For consistency with each other and with their product name and module name, the iOS and macOS map SDKs now have a bundle identifier of com.mapbox.Mapbox, whether in the form of a static or dynamic framework. The logging subsystem identifier has also been changed to match.
+[MGLMapCamera cameraLookingAtCenterCoordinate:fromDistance:pitch:heading:] incorrectly treated the distance as an altitude. Due to backwards compatibility concerns, this method can’t be fixed in place. Instead, separate +[MGLMapCamera cameraLookingAtCenterCoordinate:correctlyFromDistance:pitch:heading:] and +[MGLMapCamera cameraLookingAtCenterCoordinate:altitude:pitch:heading:] methods have been added.
* [ios] Removed changelog entry for Terrarium
The broader feature is new to v4.0.0 as well.
* [ios, macos] Localize expressions more thoroughly
Replaced the MGLStyle.localizesLabels property with a -localizeLabelsIntoLocale: method that allows the caller to specify the locale to localize into. Also exposed a per-expression localization method for developers who want to vary behavior from layer to layer.
* [macos] Offer English labels if preferred language is unsupported
* [ios, macos] Removed dead code
* [ios] Use new localization method in iosapp
* [ios, macos] Fixed local name labels
* [ios, macos] Convert tokens to key path expressions in stop dictionaries
* [ios, macos] Streamlined token upgrading
Separated token upgrading into a separate process that only happens as part of the MGLSymbolStyleLayer.text and MGLSymbolStyleLayer.iconImageName properties’ getters, so that it’s easy to remove later when mbgl changes obviate this workaround. Removed the replacesTokens parameter to the expression localization methods.
* [ios, macos] Preserve whitespace between tokens
* [ios, macos] Moved token replacement to a consistent category
Fixed a build warning.
* [ios, macos] Replace tokens in all string-typed getters
For consistency, replace tokens with key paths in all string-typed style paint and layout properties.
* [ios, macos] Test token replacement
Added tests for replacement of tokens with key paths in expressions. Fixed token replacement for raw strings in stop dictionaries. Avoid sticking a single string inside an mgl_join: call.
* [ios, macos] Test token replacement, localization
Added unit tests of token replacement and localization of expressions. Only NSExpression is responsible for resolving the preferred language now, since NSLocale tends to tack a region code onto the locale identifier and the NSExpression method can be called independently anyways. Added a private variation of +[MGLVectorTileSource preferredMapboxStreetsLanguage] that takes an array of preferred languages. Fixed localization of non-expressions in stop dictionaries.
* [ios, macos] Dictionary keys aren’t necessarily zoom levels
* [ios, macos] Import headers, not implementation files
* [core] Added accessors for various expression parameters
Added missing parameter accessors to various expression operator classes, as well as a method on InterpolatorBase and Step that enumerates the stops and their values.
* [ios, macos] Silenced warning in test of error condition
* [ios, macos] Made MGLSphericalPosition boxable
* [ios, macos] Implemented array enumeration during conversion
* [ios, macos] Temporarily ignore heatmap layer type
* [ios, macos] Migrated MGLSymbolStyleLayer.text to NSExpression
MGLSymbolStyleLayer.text is now of type NSExpression instead of MGLStyleValue, as a first step toward migrating the entire layer API from style values to expressions.
Implemented conversions from NSExpression to JSON arrays and vice versa. The most common NSExpression functions are now converted into style expressions, but not all of the most common style expression operators are supported yet.
* [ios, macos] Implemented string coercion
* [ios, macos] Color literals
* [ios, macos] Null constant expressions
* [ios, macos] Convert dictionary literals
* [ios, macos] Interpolation expressions
* [ios, macos] to-boolean, to-number, get from object
* [ios, macos] Variable expressions
Implemented custom expression functions for assigning and referring to variables within the context of an expression. Variables are assigned via a “context dictionary” and applied to an subexpression that is given as another argument to the same expression. Also implemented built-in variable expressions for zoom level and heatmap density.
* [ios, macos] Convert colors, offsets, padding in expressions to JSON objects
* [ios, macos] Expression-based style property getters
Implemented a conversion from mbgl::style::PropertyValues to Objective-C JSON objects, which are then converted to NSExpressions.
* [ios, macos] Consolidated property value–expression conversion in MGLStyleValueTransformer
* [ios, macos] Predicate and expression guide
Extracted documentation about predicates from a documentation comment in MGLVectorStyleLayer.h to a new jazzy guide. Added details about NSExpression support as well. Began updating the “For Style Authors” guide to reflect the transition from style values to expressions.
* [ios, macos] Updated style authoring guide
Updated the Information for Style Authors guide to discuss expressions instead of style functions. Included a table mapping style specification expression operators to NSExpression syntaxes.
* [ios, macos] Migrated codegen templates to expressions
* [ios, macos] Applied expression changes via codegen
Ran make darwin-style-code.
* [macos] Migrated macosapp to expressions
* [ios, macos] Updated style function guide
This guide needs to be thoroughly rewritten, but for now the example code has been migrated to expressions.
* [ios, macos] Eviscerated style function tests
* [ios, macos] Updated changelogs
* [ios] Migrated iosapp to expressions
* [ios, macos] Exposed JSON conversion methods publicly
* [ios, macos] Removed MGLStyleValue, MGLStyleFunction
Instructions for enabling client-side rendering of CJK glyphs live in
this header, and this class provides the rest of the values needed for
instantiating the renderer on iOS and macOS.
Instead of creating `MGLAdditions` categories/files for our own classes, this standardizes on the `Private` convention that we had been using elsewhere.
This also fixes build errors where the `MGLAdditions` categories weren't importing their parents.
Instructions for enabling client-side rendering of CJK glyphs live in
this header, and this class provides the rest of the values needed for
instantiating the renderer on iOS and macOS.
* [ios] Summarize places, roads after zooming with VoiceOver
After zooming, MGLMapView’s accessibility value now indicates the number of visible roads and lists out a few places visible in the current viewport, starting with the features at the highest z-index (not necessarily the largest or the closest to the center of the view). Avoid saying that no annotations are visible.
* [ios] Allow VoiceOver to navigate among place features
Split out a separate header for the various accessibility elements tied to MGLMapView. Wrap place features in accessibility elements and insert them into the narration order after the visible annotations but before the attribution button. Refactored MGLMapView’s accessibility code to rely on ranges to avoid off-by-one errors.
* [ios] Post layout change notification when fully rendered
Post a layout change notification when fully finishing a map render.
* [ios, macos] Moved MGLVectorSource+MGLAdditions to more specific group
* [ios] Localize accessibility feature names
* [ios] Find place feature accessibility elements by identifier
* [ios] Refactored accessibility traits
Also created a new MGLPlaceFeatureAccessibilityElement class.
* [ios] Sort accessibility elements by screen distance from center
Sort annotation accessibility elements by screen distance, not the hypotenuse of coordinates, which can yield incorrect results when the map is rotated or tilted or when the user is located at high latitudes. Sort place feature accessibility elements by screen distance as well.
* [ios] Create a place feature accessibility element, not an abstract feature accessibility element
* [ios] Only query for visible place features once per camera
Improved accessibility performance after changing the map camera. MGLMapView no longer queries the map for place features once per place feature.
* [ios] Made roads accessible
Wrap visible road features in accessibility elements described by the road name, route number, and general direction of travel.
* [ios] Cleaned up radian conversions
* [ios] Thickened road accessibility elements
* [ios] Made unioned roads accessible
* [ios] Consistently sort accessibility elements
Also fixed an issue causing road feature accessibility elements to get treated like place feature accessibility elements.
* [ios] Announce direction of divided roads
Announce the direction of a divided road based on the direction of its first polyline.
* [ios] Refined announced elevation units
* [ios] Romanize feature names
* [ios] Updated changelog
* [ios] Delay zoom announcement
A 100-millisecond delay is enough for the post-zooming announcement to reflect the new zoom level rather than the previous zoom level.
* [ios] Consolidated geometry functions
Adopted MGLGeometry_Private.h in the accessibility code, forcing a conversion to Objective-C++. Avoid inlining some of the more complex geometric functions.
* [ios] Fixed feature name romanization in accessibility labels
NSLocale.scriptCode is only set when the locale identifier explicitly specifies a script. Use NSOrthography to identify the dominant orthography regardless of locale.
Also added a unit test of feature accessibility element labels.
* [ios] Added tests for place, road accessibility values
* [ios] Announce one-way roads
A road feature’s accessibility value now indicates whether the road is a one-way road.