- Added alpha transparency support to AWFColorRamp.
- Fixed issues where AWFColorRamp wouldn't display negative numbers, or showed duplicate numbers.
- Added support for the new maritime endpoint via AWFMaritime and AWFMaritimeReport classes.
- Added isEqualToPlace: method to AWFPlace.
- Added support for the 9 new “air-quality-…” layers via AWFMapLayerAirQuality… constants.
- Added support for the 14 new “maritime-…” layers via AWFMapLayerMaritime… constants.
- Fixed an issue where AWFBarLegend wouldn't layout full-width on larger devices screens.
- Fix for missing AWFMapLayerLightningAll constant, an alias for AWFMapLayerLightningAll15Minute.
- Updated to use the latest version of GoogleMaps SDK, version 8.0.0, and raised AerisGoogleMapKit's minimum deployment target to iOS 14.0 (matching GoogleMaps' minimum).
- Dropped support for iOS 10— the minimum deployment target is now iOS 11.0.
- Fixed an issue where types in Objective-C headers sometimes wouldn't be interpreted correctly by Swift code in Xcode.
- Added support for the new lightning/threats endpoint via `AWFLightningThreats` and `AWFLightningThreat` classes.
- Added support for the new lightning/flash endpoint via `AWFLightningFlashes` and `AWFLightningFlash` classes.
- Added support for the new lightning/summary endpoint via `AWFLightningSummaries` and `AWFLightningSummary` classes.
- Added new `sensorCount` property to `AWFLightningStrike`.
- Added support for filtering `AWFLightningStrikes` by positive or negative polarity, and for sorting by pulse type, peak amperage, or sensor count.
- Added amperage unit to `AWFMeasurement`, and lightning data types to `AWFWeatherDataType`.
- Fixed `minTimestamp` and `maxTimestamp` property mapping for `AWFRangeSummary`.
- Added support for the new lightning-all layers via `AWFMapLayerLightningAll15Minute` and `AWFMapLayerLightningAll5Minute` constants.
- Added support for the new lightning-flash layers via `AWFMapLayerLightningFlash` and `AWFMapLayerLightningFlash5MinuteIcons` constants.
- Added `isExpanded` property to `AWFLegendView`.
- Removed now-unsupported vector point layer `AWFMapLayerLightningStrikes`.
- Fixed a UI deadlock in `AWFWeatherMapViewController` in some situations when using a legend.
- Added `precipRate` and `snowRate` properties to AWFConditionPeriod
- Added new polygon and fire perimeter support to `AWFFire`
- Added altimeter properties to `AWFObservationSummary`
- Added `dataSource` to AWFAdvisory
- Added support for alerts/summary via `AWFAdvisoriesSummary`
- Added `updatedAt` property to `AWFEarthquake`
- Added support for `trustFactor` and `QCCode` to `AWFObservations`.
- Fixed property mappings for `AWFSnowDepthPeriod`.
- Fixed `windDirectionDEG` value mapping for `AWFObservation`.'
- Added support for configuring the units for `AWFWeatherMap` via `AWFWeatherMapConfig`.
- Added support for displaying observation annotation callout data in Imperial or Metric units based on the configured unit type.
- Fixed an issue where map timeline start/end times were not set properly on map data refresh.
- Update to set tile size based on configuration value of `shouldUseRetinaImagery`.
- Updated to XCFrameworks to support Apple M1 Macs. Note that this update changes the installation process for the SDK. See https://www.aerisweather.com/support/docs/toolkits/aeris-ios-sdk/getting-started/installation/ for updated installation instructions.
- Dropped support for iOS 9.
- Added missing `countyIds` property to AWFPlace.
- Added missing `includes` properties on AWFAdvisory.
- Fixed property mapping for metric wind gust values on AWFForecastPeriod.
- Minor bug fixes, remove view debugging from AWFLegendView
- Fixed an issue where some future/outlook layers were not being added to the map due to forecast model checks and requirements.
- Fixed an issue where map timeline start/end offsets weren't updated when the timeline's start/end dates were updated.
- Improved AMP layer handling by auto-updating layers when their properties change (e.g. alpha, blendMode, etc)
- Improved AMP layer validation checks to handle all modifier combinations.
- Added support for the new conditions/summary endpoint via AWFConditionsSummaries and AWFConditionSummary classes.
- Added missing zone-related properties for AWFPlace.
- Added missing `stationPressure` and `trustFactor` properties to AWFObservationSummary.
- Fixed property mappings for `spressure` and `altimeter` on AWFObservation.
- Updated time range, precip and wind-related properties to their respective AWFRangeSummary instances on AWFObservationSummary.
- Fixed crash on iOS < 13.0 due to incorrect NSURLCache initializer being referenced.
- Added support for the `lang` API parameter to AWFWeatherRequestOptions.
- Added missing properties to AWFAdvisory: updated, color, category and isEmergency.
- Updated `uvIndex` on AWFForecastPeriod to a float value instead of integer.
- Fixed several issues with AMP tile merging and caching that was resulting in blank or incomplete tiles being rendered.
- Set the designated initializer for AWFLegendView to `initWithMapStyle:frame:` so that weather map style information is always provided to the legend.
- Fixed API property mappings for missing min/max/avg properties on AWFForecastPeriod.
- Minor bug fixes and stability improvements.
- Fixed forecast min/max/avg temperature property mappings in AWFForecastPeriod which resulted in `NAN` values since 3.2.4.
- Improved tile and animation loading speed and performance.
- Fixed a crash that would happen when trying to animate with non-animatable layers on the map.
- Added map view delegate proxy support, which removes the need to set `mapViewDelegate` on AWFWeatherMap instances. You can instead set the `delegate` property on the native map view and delegate events will be proxied accordingly.
- Added support for the API /conditions endpoint. See AWFConditions: https://www.aerisweather.com/docs/ios/AerisWeatherKit/Endpoints.html#/c:objc(cs)AWFConditions
- Added missing min/max/avg properties on AWFForecastPeriod.
- Added iceAccumulation, wind80m, visibility and solarRadiation properties on AWFForecastPeriod.
- Added support for getting the default annotation view and/or overlay renderer from an AWFWeatherMap's strategy to use when implementing related map view delegates. See https://www.aerisweather.com/support/docs/toolkits/aeris-ios-sdk/examples/adding-custom-annotations/ and https://www.aerisweather.com/support/docs/toolkits/aeris-ios-sdk/examples/adding-custom-overlays/.
- Updated supported AMP layer constants.
- Added improved support for adding AMP layers to a weather map using the AMP code string as an alternative to the built-in AWFMapLayer constants.
- Removed extraneous console log output.
- Improved AMP tile requests and caching, which should reduce the total map units consumed when adding and removing layers at runtime.
- Fixed issues where animation data request processes weren't being cancelled properly when stopping a loading animation.
- Added public read-only access to underlying `AWFGraphView` elements for customization: `calloutPositionLine`, `seriesContainerView`, and `loadingView`.
- Includes minor bug fixes and stability improvements.
- Added improved support for customizing the layer options displayed in `AWFMapOptionsViewController`.
- Added weather map configuration option to hide image loading progress while loading raster imagery for a tile/image animation.
- Added `weatherMap:didAddSource:` and `weatherMap:didRemoveSource:` delegate methods to `AWFWeatherMapDelegate`.
- Added `weatherMap:didFailToPerformAnimationRequestForData:` and `weatherMap:didFailLoadingAnimationData:` delegate methods on `AWFWeatherMapDelegate` to receive errors while requesting animation data for a specific layer.
- Updated the `weatherMap:didUpdateAnimationDataLoadingProgress:total:` method on `AWFWeatherMapDelegate` to `weatherMap:didUpdateAnimationDataLoadingProgress:total:error:` to receive load-related errors.
- Fixed issue with AMP image request timestrings improperly formatted for some device locale settings.
- Fixed `NSLayoutConstraintNumberExceedsLimit` error during point legend layout.
- Fixed issue with timeline position control not properly repositioned on device rotation.
- Added support for Mac Catalyst. Use the libraries under `iOSMac` for Mac Catalyst targets.
- Added support for custom date/time formatter with `AWFTimelineView`. See `setTextLabelFormatter:`.
- Fixed non-retina tile requests so that @1x tile imagery is scaled up to 512x512 when loaded as required by MKMapView.
- Fixed issue where content would occasionally be clipped within the tropical cyclone callout content view.
- Fixed issue where the active annotation callout would sometimes reappear on a different annotation after when new point data is loaded after changing the map bounds.
- Improved the `AWFMapLayerTropicalCyclones` and `AWFMapLayerTropicalBreakpoints` layers so data for all systems is rendered on the map regardless of the visible map bounds.
- Updated `AWFWeatherMap` to swap out animated layer content with static layer content when the animation is stopped.
- Fixed issue where stormcell forecast cone polygons would render as black after animating.
- Fixed issue where adding raster versions of point/shape AWFMapLayer types to AWFWeatherMap would result in a crash at times.
- Improved handling of adding nil layer codes to AWFWeatherMap to prevent crashes.
- Added `tileOverlayAlpha` property to AWFWeatherMapConfig to control the default alpha for tile layers on a map.
- Fixed memory-related issues that would result in a crash in some instances.
- Improved handling of passing string codes when adding layers to AWFWeatherMap to convert codes to the appropriate AWFMapLayer enum value.
- Added `uvIndex` property to `AWFForecastPeriod`
- Added `showLegendView:animated:` and `showOptions` public methods on AWFWeatherMapViewController to show legend and option views manually.
- Added support for always showing past/future layers regardless of timeline's current position. See `shouldAlwaysShowPastLayers` and `shouldAlwaysShowFutureLayers` on AWFWeatherMapConfig.
- Added `resumeAnimation` convenience method on AWFWeatherMap for resuming a paused animation from the current time position.
- Fixed map animation always restarting from the beginning when calling `start`.
- Updated AWFMapLayer types for AMP-related raster layers to include recently released layers. See https://www.aerisweather.com/support/docs/aeris-maps/reference/versions/#2019.06
- Post NSNotification when map tile requests fail (MapKit only). Observe using the `AWFTileDidFailLoading` name.
- Fixed nullability on the `config` property for AWFWeatherMapViewController
- Various minor bug fixes and improvements.
- Added support for tvOS-specific binaries
- Added `midnightSun` and `polarNight` properties to `SunMoonPeriod`
- Removed `AWFOutlookPhrases` and `AWFForecastPhrases` endpoint service classes, replaced with single `AWFPhrases` class
- Improved nullability for `AWFStormReportSummary` and `AWFStormThreat` classes
- Added `FA.W` advisory VTEC code to `AWFMapLayerWarnings` data set
- Added additional convenience methods for adding raster map layers via `AWFAmpTileSourceProvider`
- Fixed map layer order not being set properly when adding weather layers during instantiation of `AWFWeatherMap`
- Removed UIApplication references and all app-related API code to enable SDK usage within app extensions.
* Fixed a minor issue with parsing array-format key paths resulting in a crash.
- Fixed crash related to unbalanced KVO observers on AWFTileSource after animating map layers
- Fixed an issue where adjusting the alpha on a tile source instance once added to a map did not update the layer's opacity on the map without removing and re-adding the layer
- Fixed memory leaks preventing AWFWeatherMap instances from being deallocated
- Improved Swift interoperability with nullability and arrays
- Added support for specifying a Mapbox style identifier to use with weather maps, see `AWFWeatherMapConfig.mapboxStyleUrl`
- Added support for new tropical cyclones API endpoints (via `AWFTropicalCyclones`)
- Added `AWFMapLayerTropicalCyclones` point data layer for active and archive tropical cyclones; single layer will render: current position, past and forecast tracks, forecast error cone (active systems only)
- Added `AWFMapLayerTropicalBreakpoints` layer for displaying coastal advisory breakpoints associated with tropical cyclones
- Added support for animating polygon/polyline content (required for animating tropical cyclone tracks)
- Added support for new AMP tropical cyclone raster layers
- Added support for providing custom request options for point and shape map content sources via `AWFWeatherMapDataSource`
- Added support for customizing callout title/subtitle text for point map content source layers using `calloutFormatter` on `AWFAnnotationStyle` instances
- Added support for providing custom content views to be displayed in annotation callouts via `AWFWeatherMapDataSource`
- Renamed `AWFPointAnimation` to `AWFDataAnimation` to support both point and shape layer content during animations
- Improved style configuration for combined map sources using `AWFCombinedRepresentableStyle`
- Fixed minor issues with point data animations and determining which data points are included per animation interval
- Several minor bug fixes and improvements throughout framework
- Removed automatic NSCoding conformance for NSObject via class extension that was causing required initializer errors for NSObject subclasses in Swift
- Added support for new tropical and geocolor satellite layer support via corresponding `AWFMapLayer` enum values
- Fixed an issue where an unretained cached object reference would occasionally result in a crash on dealloc of AWFWeatherMap instances
- Removed `AWFMapLayerSatelliteGlobal` layer, now included with `AWFMapLayerSatellite`
- Fixed an issue with AMP tile layers not rendering via MGLRasterTileSource
- Added missing delegate methods for MGLMapViewDelegate proxy for the Mapbox mapping strategy
- Added support for the new AMP lightning strike icon and time period layers (AWFMapLayerLightningStrikes5Minute, AWFMapLayerLightningStrikes15Minute, AWFMapLayerLightningStrikes5MinuteIcons, AWFMapLayerLightningStrikes15MinuteIcons)
- Fixed an issue with future layers were not added to map while AMP metadata was still loading
- Fixed several issues related to image animation loading and when the animation layer is hidden/displayed during the loading process
- Fixed occasional crash when mapping place JSON to AWFPlace when `loc` is `[NSNull null]`
- Updated AWFWeatherApiResponse to only log warnings to the console for API response warnings (e.g. error codes prefixed with `warn_`) instead of returning an error
- Added support for using the alternative AMP raster layers that correspond to point/shape layers when supported by AMP (e.g. `AWFMapLayerAmpLightningStrikes` instead of `AWFMapLayerLightningStrikes`)
- Fixed issue where AWFWeatherMap was not removing itself from NSNotificationCenter observers on dealloc which would result in a crash at times
- Fixed issue where failed point source data requests for animation data wasn't properly calling the `animation:didFailLoadingWithError:` delegate method
- Fixed crashes as a result of adding nil objects to the animation data cache for tile sources
- Fixed lightning annotation view styling for Apple Maps (MapKit) strategy
- Removed API access keys from console output unless debugging is enabled
- Updated default float properties for all AWFWeatherObject models to be `NAN` to better handle when nil values are returned by the API instead of being set to `0`. Your code should now check if a value exists using `isnan(prop)`.
- Updated `AWFObservationSummary`, `AWFStormReportSummary` and `AWFStormThreat` to use instances of `AWFRangeSummary` when storing min/max/average values
- Added support for searching places using an ICAO code `AWFPlaces::searchUsingICAO:options:completion`)
- Improved the build-in places search, `searchUsingNameStartingWith:options:completion:` to better handle state and country abbreviations and full names when searching
- Added support for controlling image quality for raster tile and animation imagery for Retina devices using `shouldUseRetinaImagery` on `AWFWeatherMapConfig`. Using a lower imagery quality will improve the speed and performance of loading raster tiles and animation frames where applicable.
- Fix occasional crash in `AWFLegendView` when attempting to add a legend for a nil key
- Fix occasional crash when adding storm cells point data on a weather map
- Fix tile overlays not re-appearing on weather map on region change after stopping an animation
- Fixed an issue with AWFWeatherEndpoint request options instance not being used for requests if specific request options is nil
- Removed references to old NAM models in AWFForecastModelType (AWFForecastModelTypeNone, AWFForecastModelTypeNAM4K and AWFForecastModelTypeNAM12K)
- Added support for changing index placement of existing AWFRasterMapLayer instances on a map
- Added future pressure and future pressure isobars layer types (AWFMapLayerFutureSurfacePressure, AWFMapLayerFutureSurfacePressureIsobars)
- Added support for preventing duplicate map layer types being added to the map
- Fixed now/future marker positioning on AWFTimelineView
- Fixed animation starting playback when map region changes even when animation isn't active
- Fixed raster/tile overlays not using parent map source's alpha value when rendering overlay on map
- Fixed several issues with automatically managing inserting and removing future AMP layers
- Fixed issue with forecast model changes not resetting previously loaded animation data
- Fixed AMP layer code for future precipitation (was
- Fixed issues with bitcode support for all compiled frameworks
- Added support for abbreviating longer words in legend labels as needed based on available width
- Fixed issues related to updating weather map configuration properties after weather map instantiated not updating internal properties
- Fixed several future precipitation AWFMapLayer types to correlate with available Aeris Maps layers
- Fixed issues with weather map delegates and data sources not always being set to nil on weather map deallocation, causing crashes in some instances
- Updated to support Mapbox SDK 4.0 which is now the minimum required SDK version for use with Mapbox
Major version release with many new features and improvements. For more information on migrating from 2.0, refer to our Migration Guide at https://www.aerisweather.com/support/docs/toolkits/aeris-ios-sdk-3/getting-started/3.0-migration-guide/. You can find the complete documentation for the changes and new features in 3.0 at https://www.aerisweather.com/support/docs/toolkits/aeris-ios-sdk-3/.
- AerisMap - fixes compiler warnings/errors about missing headers in umbrella header for modules
- AerisMap - add public property for accessing timeline view's progress activity indicator
- AerisMap - add all missing Aeris Maps layer types
- Aeris - added missing properties to AWFSunMoon for the /sunmoon endpoint
- AerisMap - added support for custom date and time formatters on AWFTimelineView (timeFormatter, dateFormatter)
- AerisMap - added more properties to control the styling of AWFTimelineBarView (barHeight, barStrokeColor, barStrokeWidth, progressBarFillColor, futureBarFillColor, etc)
- AerisMap - fixed an issue where changing any fill or stroke properties on AWFTimelinePositionView were not updating the views
- Aeris - adds support for new /rivers API endpoint AerisMap - adds support for all AMP layers via AWFLayerType AerisMap - adds support for rivers point data layer
- AerisMap - fixes layout issues with map timeline for iPhone X
- AerisMap - fixes map overlay tile rendering issue on iOS 11
- AerisMap - minor stability improvements
- AerisMap - fixes an issue where storm cell cones/arrows overlay would not render properly for consecutive instances of AWFWeatherMap after one is instantiated
- AerisMap - adds support for reloading API account metadata as needed if data wasn't loaded during AerisEngine setup due to loss of network connectivity
- AerisMap - fixes an issue with path arrows/cones overlays for storm cells layer not always rendering
- AerisMap - fixes an issue where storm cells overlays not always removed when disabling the parent layer
- AerisMap - updates radar legend with latest AMP color ramp Demo - improves location search query
- AerisMap - fix bug with annotation style's `shouldAnimate` not being obeyed
- AerisMap - fix issue with map annotations not always being removed when refreshing map data
- AerisMap - improve data refreshing processes to prevent multiple requests for same data at same time
- AerisMap - fix issue with AMP layers not refreshing via refreshLayerType:
- AerisMap - fix issue with future-only overlays not being added to map AerisMap - improve file organization and Apple-specific class names AerisMap - update permissions to support AMP layers AerisUI - fix nil images being returned from framework due to incorrect bundle
- add failed url string to log message fix high temp label width on daily summary view fix timeline progress bar not resizing on device rotation
- FIX: duplicate text labels being added to styled views
- FIX: set weather map delegates to nil on dealloc to prevent crashes when deallocating AWFWeatherMapViewController FIX: improved @2x AMP overlay support for map tiles on retina devices
- FIX: Minor updates to Cocoapods podspec dependencies
- FIX: map gestures not enabled based on map config property changes FIX: properly stop/reset map animation when parent app goes into background FIX: tile overlays not updating on refreshAllLayerTypes
- ADD: date format constants for time parts with zero padding ADD: future snow legend style
- ADD: basic support for text data layers
- ADD: method to check if future layer type belongs to forecast model
- ADD: missing associated layers per model types
- ADD: show animation frames as they're progressively loading
- ADD: snow depth legend style
- ADD: support for cancelling all tile requests
- ADD: support for precip/estimate endpoint
- ADD: support for setting legend styles for weather data type groups
- ADD: support for snow depth global layer
- ADD: support for text annotations in GoogleMaps
- ADD: support for winter/snowdepth endpoint
- FIX: animation timestamps not being converted to proper time zones
- FIX: bug with deselecting and removing text data layers, updating after changing formatter
- FIX: delegate not being assigned when setting mapView property on map strategy after init
- FIX: earthquake annotation animation not repeating
- FIX: graph series not referencing proper model class per data type
- FIX: issue converting date to date string in request options
- FIX: legend views not redrawing on frame changes
- FIX: point indicator position wrong while dragging timeline
- FIX: still set API response data if there was a warning returned
- FIX: updated temp legend color scale
- FIX: various image animation fixes and improvements
- MOD: cancel tile requests when reloading/invalidating tile data
- MOD: support for new AMP tile layers, combined weather tile layers
- MOD: only show animation load progress based on timeline position
- MOD: output error/warning to console if exists for response
- MOD: re-add animation container annotation as needed
- MOD: updated to support AFNetworking 3.0
- MOD: updating supported layer types and codes per latest AMP changes
- REM: iOS < 7.0 tile layer/overlay view support
- DEMO: forecast model wind graph not rendering
- DEMO: precip summary not rendering
- FIX: proper ObjC and Swift module support for better compatibility with Xcode 7.1+ and CocoaPods
- Added CocoaPods support for integrating with projects
ADD: All - support for localization throughout framework
ADD: Aeris - AWFMeasurementType, convenience methods for getting unit values
ADD: Aeris - convective outlook data layer type for map
ADD: Aeris - convenience field constants for countries endpoint
ADD: Aeris - convenience filter and field constants for drought endpoint
ADD: Aeris - convenience method to generate geo polygons from geojson dictionary
ADD: Aeris - data type constants for indices requests
ADD: Aeris - drought index polygon map layer support
ADD: Aeris - fire outlook polygon map data layer support
ADD: Aeris - missing weather data types
ADD: Aeris - new outdoor index type
ADD: Aeris - NSString crypto category methods
ADD: Aeris - string constants for supported endpoint filters and fields
ADD: Aeris - support for cat property on storm reports
ADD: Aeris - support for fire filter on storm reports
ADD: Aeris - support for affects action, more unit tests for new loaders
ADD: Aeris - support for convective/outlook endpoint
ADD: Aeris - support for droughts/monitor endpoint
ADD: Aeris - support for fires/outlook endpoint
ADD: Aeris - support for geo polygons on storm cell summary data
ADD: Aeris - support for geo polygons on storm report summary data
ADD: Aeris - support for geojson output from api
ADD: Aeris - support for new contains endpoint action
ADD: Aeris - support for NSCoding on AWFGeoPolygon
ADD: Aeris - support for stormcells/summary endpoint
ADD: Aeris - support for stormreports/summary endpoint
ADD: AerisUI - support for callout accessory views and tap event handlers
ADD: AerisUI - support for recalculating/resizing an existing callout’s frame
ADD: AerisMap - notifications for weather map animation status changes
ADD: AerisMap - public access property for mapview strategy’s internal calloutView instance
ADD: AerisMap - support for crossfading between image animation intervals
ADD: AerisMap - support for footer text in table section instances
ADD: AerisMap - support for map polygons with interior holes
FIX: All - full bitcode support for Debug and Release builds
FIX: Aeris - location manager auth requests for iOS 8+
FIX: AerisUI - align left edge of horizontal graph axis view with left edge of series container view
FIX: AerisUI - cancel series network request when resetting graph, don’t render series if no points
FIX: AerisUI - custom callout handling improvements, support for accessory views
FIX: AerisUI - custom callout layout improvements to match native iOS callout
FIX: AerisUI - graph bar renderer not resetting when re-rendering, causing bar offset
FIX: AerisUI - graph rendering performance and no data issues
FIX: AerisUI - graph series renderer views not being removed when resetting graph
FIX: AerisUI - graph time axis date/timezone fixes
FIX: AerisUI - graph time axis ticks not laying out properly for intervals less than 1 day
FIX: AerisUI - timezone issues with graph time axis ticks, date formatter issues for callout and ticks
FIX: AerisMap - add catch in raster tile renderer for invalid image data
FIX: AerisMap - don’t defer weather map option updates on iPad
FIX: AerisMap - ensure overlay renderer isn’t deallocated before calling setNeedsDisplay
FIX: AerisMap - hires satellite overlay using wrong product code
FIX: AerisMap - issue with map layers not being added when selecting options
FIX: AerisMap - legend view and toggle button not resizing to parent view width
FIX: AerisMap - map animation doesn’t start playing if one layer doesn’t have data
FIX: AerisMap - map options controller setting start date equal to end date, improved logging
FIX: AerisMap - polygon callout improperly being dismissed after appearing
MOD: Aeris - renamed AWFCache to AWFURLCache to avoid conflict with AerisCore
MOD: Aeris - throw exception if access keys not configured before requesting data
MOD: AerisUI - custom callout improvements and layout fixes
MOD: AerisUI - don’t include callout accessory views in margin calculations when hidden
MOD: AerisMap - adjust to use https for tile urls as required for iOS 9
MOD: AerisMap - disable pixel shift check for map strategy region change notifications
MOD: AerisMap - remove cached objects on memory warnings
MOD: AerisMap - removing Current from surface map layer types
MOD: AerisMap - removing cached map objects on memory warnings
DEMO: added drought monitor controller
DEMO: added sample threats view
DEMO: added simple convective outlook data view
- ADD: additional forecast model types
- ADD: convenience method for getting advisory names by VTEC code
- ADD: method to return the API property key mapped to a specific AWFObject model property
- ADD: support for ignoring zero values on a graph series item
- ADD: support for moving a presented callout to new position
- ADD: support for graph series modifiers
- ADD: support for setting global options for graph series requests
- ADD: convenience unit converter functions
- ADD: Xcode 7/iOS 9 bitcode support
- FIX: graph bars extending below bottom of series bounds
- FIX: batch request url strings not being encoded
- FIX: catch to make sure decoded overlay animation image is not nil
- FIX: from/to date improvements for request options
- FIX: from/to date option comparison fixes
- FIX: graph axis tick improvements
- FIX: graph series and axis views not resizing with graph view properly
- FIX: graph series not adjusting based on configured interval
- FIX: prevent duplicate field names in graph series object loader requests
- FIX: graph series container view origin not obeying insets
- FIX: use lat/lon before name for search query string
- FIX: various graph rendering bug fixes
- MOD: changed request option from/to interval check to 1 hour
- MOD: map overlay renderer improvements
ADD: custom tile renderer to fix iOS 7/8 image warnings
ADD: support for defining the text and tick styles for axis views
FIX: crash caused by trying to map to invalid AWFPlace property
FIX: prevent a domain of 0 on x or y axis (causing crashes when rendering)
MOD: move Mapbox support to separate framework, support MBXMapKit via Cocoapods
NOTE If you are using Mapbox with the Aeris iOS SDK, this version contains a breaking change that will require updates to your project, specifically MBXMapKit must be installed separately and is no longer part of AerisMap.framework. Review the updated Mapbox support documentation for updating your project for using MBXMapKit in your project.
- ADD: convenience method [AWFDataLayer isLayerType:includedInCombinedLayerType:] for checking if combined layer type contains a specific layer type
- ADD: convenience methods for overriding map config styles on AWFWeatherMapConfig
- ADD: MKMapView method awf_coordinateByOffsettingCenterCoordinate:offset:zoomLevel: to calculate a coordinate offset without using current map state
- ADD: methods to set and get sections for specific map options
- ADD: set intrinsic content size for auto layout support on AWFWeatherMapLegendView
- ADD: support for newer iOS platforms in device checks
- ADD: support for secure API requests using [AerisEngine secureEngineWithKey:secret:]
- FIX: map annotations not always being removed when refreshing layer data
- FIX: storm cell cone overlays not re-rendering after last changes
- FIX: corrected class prefixes on AWFVenuesLoader and AWFVenue
- FIX: enums should be typedef for AWFUserTrackingMode, AWFLocationAccuracy and AFVenueType, causing duplicate symbol errors
- FIX: improvements to removal of annotations/overlays when reloading layer data
- FIX: invalid coord checking in AWFCoordinate2DIsValidNonZero()
- FIX: issue with checking if map contains a data layer
- FIX: map crashing if overlay.annotations is nil when reloading data
- FIX: map only contains layer type if index >= 0
- FIX: only validate delegate if not nil
- FIX: polygons not being removed when data reloaded
- FIX: tap gestures on annotations when on top of polygons, custom annotation view order fixes
- MOD: helper methods for creating option sections in AWFMapOptionsViewController
- MOD: improved checks against active map legend types
- MOD: reduce point data limit for older devices
- MOD: refactor of AWFMapOptionsViewController to allow for easier customization
- MOD: style adjustments to storm cell annotations
- ADD: method for searching within a circle on AWFGeographicObject
- ADD: support for changing the constrained view for graph callout on AWFGraphView
- FIX: crash when nil or empty polygon overlay instance on AWFGeographicObject
- FIX: date string length catch to prevent crashes during JSON date parsing
- FIX: verify image is not nil before adding to dictionary for data layer animations
- FIX: crash when initializing AWFMapOptionsViewController
Complete rewrite and modernization of the SDK.
For more information on migrating from 1.0, refer to our Migration Guide at http://www.hamweather.com/support/documentation/mobile/ios/getting-started/2.0-migration/.
You can find the complete documentation for the changes and new features in 2.0 at http://www.hamweather.com/support/documentation/mobile/ios/.
- FIX: longitude values were being passed in wrong order to api for map data requests
- FIX: AFObservation using deprecated API property for wind speed, resulting in nil values
- FIX: crash due to setting wrong property keys on AFTideStation
- MOD: Updated framework builds to include 64-bit architecture
- ADD: support for crossfading between intervals in overlay animation, can give smoother animation depending on delay/hold time interval (re: AerisMapConfig.plist for setting)
- ADD: support for resuming overlay animation when a call to refresh overlays is made
- FIX: optimized tile overlay and animations to reduce memory warnings, especially on iPad
- FIX: random memory-related crashes for tile overlays when panning/zooming parent map
- FIX: issue with previously cached overlay not being added back onto map after initial show/hide
- FIX: occasional crashes when stepping animation while animation data is loading after map pan/zoom
- FIX: precip records not appearing for climate records point data overlay due to wrong annotation image reference
- ADD: additional AFWeatherMapDelegate methods for better custom callout view handling
- FIX: memory improvements for image/tile overlays (fixes memory issues in 1.1.7 and 1.1.8)
- FIX: several improvements to overlay tile request performance and cache handling so tiles are loaded from cache instead of new requests
- FIX: issue where successful API responses with warnings were being delegated as failed responses
- FIX: disabled user interaction on animation control view’s page control to prevent proper button events from triggering
- ADD: AFAnimationControlView to map framework and on AFWeatherMap by default
- ADD: additional methods and delegate methods on AFWeatherMap for more easily accessing Aeris-specific overlays internally on the map
- ADD: support for accessing and controlling animation frames for overlays
- ADD: support for custom point data annotation image in map config file
- ADD: support for overriding the default cache storage policy for image/tile overlays
- FIX: bug with API responses with errors being delegated as successful instead of failed
- FIX: bug with animation being disabled when switching image overlay types
- FIX: bug with polygon overlays being duplicated in some instances when app returns from the background
- FIX: stopping an animation while loading breaks the map control
- MOD: added debug logging to overlay refreshing methods in overlay manager
- MOD: improvements to mapView and containerView setup in weather map
- MOD: updated AFObjectLoaderProtocol to make didFailWithError an optional delegate method
- ADD: convenience method for creating a AFPlace object for a coordinate
- ADD: convenience method for searching within bounding box
- ADD: integration of SMCalloutView code for better custom callout views
- ADD: new remote callout view for handling visual display of remote data for custom callouts
- ADD: snow depth properties in observation objects
- ADD: support for re-adding existing overlays back onto map after animation stops
- ADD: support for showing flash flood warning polygons on map overlay
- FIX: better handle redirected requests for tile images
- FIX: crashes with tile overlay view from clearing out reference dictionary when request queue completes but drawing tiles has not
- FIX: custom colors for storm cell polygon types
- FIX: drawing bug fixes on circular progress element
- FIX: improvements to map view resizing and container view hierarchy
- FIX: interactive map container and legend positioning bugs
- FIX: issue with overlay animations using wrong zoom level, giving fuzzy quality
- FIX: issue with weatherMapDidStopAnimating delegate method being called even when map overlay is not animating (causing recursion for users)
- FIX: overlay manager not being assigned proper map view and weather map instance when the managed map view changes
- FIX: positioning issue for loading indicator in callout view
- MOD: added version and user debug output when in debug mode
- MOD: adjusted requests in tile view overlay to prevent memory leaks
- MOD: converted observation callout on interactive map to new callout code
- MOD: support for hiding map controls (in favor of custom view)
- MOD: updated source url for overlay tile metadata json file
- MOD: additional code docs for added delegate methods
- MOD: moved overlay tile core classes to public headers so can be used outside of framework for custom overlays
- ADD: support for getting the wind speed range for a forecast period (rounded to the nearest min and max interval of 5)
- FIX: bug with wrong values being used for ForecastPeriod.windSpeedRange strings
- FIX: ForecastPeriod.windSpeedRange sometimes outputting negative wind speed values
- FIX: more fixes for animation rotation handling
- FIX: issue with animation snap-back when closing progress view
- FIX: interactive map legend not remaining anchored to bottom of map view on device rotation
- FIX: animated overlay not resetting properly on device rotation
- MOD: improved handling of account settings when AerisEngine is initialized with proper keys, app can register with NotificationCenter to wait for permissions to load if not available at app launch
- ADD: method for getting title of maps based on their map codes/enumerated values
- ADD: new AFWeatherMapDelegate methods for point/polygon overlay data request success and failure
- ADD: slider controls in map options menu for overlay opacity and animation speed
- ADD: support for additional static weather maps
- ADD: support for defining custom options for interactive map point data in AerisMapConfig.plist
- ADD: support for dynamically adjusting animation speed at runtime using AFWeatherMap.animationSpeed
- ADD: support for dynamically adjusting overlay opacity at runtime using AFWeatherMap.overlayAlpha
- ADD: support for using user’s AerisGraphics key when requesting static weather maps (uses custom branding if implemented)
- FIX: crash with point/polygon overlay data loader delegate not being cleared, causing occasional crashes if certain interactions were performed
- FIX: issue with blurry animations at certain zoom levels
- FIX: memory leak with nexrad overlays and static map options
- FIX: minor remaining bugs with the cropped image overlay views
- MOD: added missing OptionsString properties for all point/polygon data overlays
- MOD: changed “defaultAlpha” property on AFImageOverlay/AFTileOverlay to “alpha”
- MOD: improved caching of tile and image overlay data
- MOD: improved methods for requesting static weather maps
- MOD: updated AerisMapConfig.plist to use a single overlay alpha value for all overlays, removed support for defining a separate alpha for individual overlays
- DEMO: updated static map viewer to use new AFImage methods and properties
- ADD: missing MKMapViewDelegate methods through AFWeatherMapDelegate (mainly for overlay views)
- ADD: recent and nearby obs weather views in AerisUI framework
- ADD: support for defining custom path for wxicons used in map annotation callouts
- ADD: support for obs/recent and obs/archive endpoints
- FIX: MKMapViewDelegate mapView:annotationView:didChangeDragState:fromOldState: not being fired in AFWeatherMapDelegate instances
- FIX: cached files not being deleted from app bundle, switched download cache to use session instead of permanent caching
- FIX: loading animation not appearing when selecting a different location on map annotation
- FIX: map options selections not staying selected when scrolling the table view, fixed the issue and cleaned up this functionality
- FIX: object loader background process sometimes causing crashes if instance is deallocated before background process completes
- FIX: place search string not being created properly is only city and state/country are provided
- FIX: removes success:false responses from internal cache if invalid data
- FIX: special characters being encoded twice through AFURL causing the wrong url string to be passed with the api request
- FIX: weatherMapDidStopAnimating called even when not animating
- FIX: wrong urls for static maps in AFImageLoader
- MOD: increased cache time for internal permissions to reduce remote API requests
- DEMO: fixed issue with city,country searches not returning any results from api
- ADD: missing MKMapViewDelegate methods through to AFWeatherMapDelegate
- ADD: missing icon for rotating storm cell
- ADD: missing sst and chlorophyll legends
- ADD: new AFOverlayType enumeration, all overlay types merged into this single enum
- ADD: new general image overlay type to support upcoming overlays
- ADD: initial support for NIDs within framework
- FIX: added missing wind gust property mappings
- FIX: auto adjusts position of Google logo based on legend height on interactive map
- FIX: circular annotation for long-press gesture not always clearing previous circle path
- FIX: configurable setting for callout not working for record annotations
- FIX: crash if no timestamps are returned for an overlay; now will just output an error message to the console and not add overlay to the map
- FIX: crash when enumerating through point data overlays when adding to map
- FIX: crash when switching between NID locations
- FIX: issue with NIDs overlays not animating or setting title properly
- FIX: legend background not appearing all the time when legends are adjusted
- FIX: memory leak with animated tile overlays
- FIX: name and date issues with NIDs overlays
- FIX: not all point data annotations/overlays were being removed from the map; added new delegate method to handle removing old overlays
- FIX: polygon overlays not being removed when animations start
- FIX: some MKMapViewDelegate selectors not being sent through AFWeatherMapDelegate
- FIX: various minor bugs after overlay manager refactor
- FIX: wildfire names displaying “(null)” in annotation callout if name is not set
- MOD: adjusted tile animation url paths
- MOD: adjustments for new NIDs animation method
- MOD: fixed minor issues with annotation identifiers if no proper code found for an object
- MOD: improved performance of options menu by removing multiple calls to overlay manager for active overlay check
- MOD: improved performance of processing large data sets (specifically for interactive map point data) by implementing background threads and internal autorelease pools for better memory handling
- MOD: improved performance of storm cell cones by combining into a single polyline/polygon overlay
- MOD: made custom annotation view base classes public so external projects can subclass
- MOD: refactored code for core overlay manager
- MOD: updated tile urls to point to new tile server setup
- DEMO: updated to use new AFOverlayType enum values
- ADD: additional UIColor utilities for dealing with hex strings
- ADD: support for customizing warning polygons using core map config plist
- FIX: crash when returning to map if polygon warnings are active
- MOD: improved performance of storm cell annotations when accessing custom config options
- DEMO: auto-updating iPad weather data for main full weather view when app becomes active
- ADD: UIColor category for converting hex strings to UIColor instances
- ADD: additional map config options
- ADD: affect action support to earthquakes loader
- ADD: affects support to storm cells loader
- ADD: delegate methods for AFWeatherMap when overlays are added and removed by overlay manager
- ADD: polygon-based warning overlays
- ADD: initial support for polygon overlays
- ADD: missing records and earthquakes legend
- ADD: multi polyline/polygon classes to better handle merging multiple polyline/polygons into a single view to improve performance
- ADD: new polygon warnings legend
- ADD: support for controlling which storm cell types the forecast lines and cones are plotted and their respective colors
- ADD: support for displaying storm cell forecast cones only when cell annotation is selected (as defined in AerisMapConfig.plist)
- ADD: support for vertical line views
- FIX: defined bounds on forecast cone annotation to prevent re-drawing entire screen view
- FIX: issues with certain object loaders that would cause a crash if no endpoint defined for certain methods
- FIX: issues with interactive map options menu and new polygon overlay types
- FIX: minor memory leak in AFAdvisory
- FIX: specific model class not being stored through the request for parsing
- MOD: adjusted expiration times on AFPlacesLoader
- MOD: adjusted overlay manager to use AFMultiPolyline for the storm cell forecast lines
- MOD: moved loading and reset controls into AFFlexibleCalloutAnnotation to be inherited by subclasses
- MOD: updated existing legends to match style of new ones
- MOD: updated reset stuff with flexible annotations
- MOD: updated storm cell annotation to use modified config key for markers based on type
- DEMO: updated location search for zip code for better results
- ADD: ability to pass a different model class to object loader when requesting data (used for normals/tides stations currently)
- ADD: animations for various control elements
- ADD: configurable settings for map legend and long-press action
- ADD: delegate handlers for disabling animation controls for overlays that don’t support it
- ADD: displaying overlay name in control view
- ADD: earthquake marker assets
- ADD: earthquakes and records point data overlays
- ADD: icons for earthquake categories
- ADD: initial support for storm cell forecast annotation callout view
- ADD: map config settings for controlling what is displayed on map control view
- ADD: map controls view, moved all animation buttons and progress views into
- ADD: missing “type” property
- ADD: missing API parameter constants
- ADD: new icons for records reports
- ADD: new object loaders and model classes
- ADD: normals models and object loaders
- ADD: permissions loader objects
- ADD: pie progress view for animation loading
- ADD: property mapping for AFSunMoon relationships
- ADD: schema/property validation in unit testing
- ADD: singleton map settings class for user-defined options
- ADD: sst and chlorophyll tile overlays
- ADD: support for map customizations (marker images, legends, animation speed, map button graphics, overlay alpha)
- ADD: support for search action in object loader
- ADD: support for sunmoon/moonphases endpoint
- ADD: tides models and object loaders
- ADD: timezone property to AFTidePeriod
- ADD: unit testing for new models
- FIX: added autoresizing mask settings to weather map view instance
- FIX: added catch to return nil for setting value if no settings file found
- FIX: animated overlay timestamp not being reset to most recent when stopping animation and switching to static view
- FIX: animation flag not being set properly when switching tile overlays
- FIX: bug where map control background view would not be resized properly when leaving map view controller then returning back to it
- FIX: bug where overlays were not re-added to the map view when resuming to interactive map controller
- FIX: bug with animation thinking it’s been loaded after previous load was cancelled, thus starting the animation without having all images
- FIX: catch to lock lat/lon to real-world bounds to prevent api request errors
- FIX: cleaned up map control view resizing animation issues
- FIX: crash if circular/point annotations didn’t exist when trying to remove from map
- FIX: crash in overlay animation when trying to add `nil` image into dictionary store
- FIX: crash when calling advance on AFOverlayAnimation and no images were successfully loaded during last queue process
- FIX: crash when rotating ipad in StaticMapViewControllerHD
- FIX: crash when starting overlay animation due to trying to remove _pointAnnotation before it was created
- FIX: crash when totalIntervals is greater than available timestamps in AFOverlayAnimation
- FIX: custom observation callout not showing loading view while data is loading
- FIX: final working version of custom annotation callout view
- FIX: initial instance of circular annotation was not animating
- FIX: issue where overlay animation loading was not cancelled properly when stopAnimatingOverlays was called from manager
- FIX: issue with animation view not being removed when zooming map using double-tap gesture
- FIX: issue with current timestamp for overlay not always being displayed in control view
- FIX: issue with legends display not using map config settings
- FIX: issue with map auto-panning back to custom callout location when deselecting (caused by didMoveToSuperview being called when removed)
- FIX: limit was being overridden in object loader request
- FIX: major bug with timers getting whacked out when starting animation loading, then canceling, then starting again
- FIX: map animation container frame not updating properly on interface orientation changes
- FIX: map animations not stopping before map region changes
- FIX: map legend not centered based on map when interface orientation changed
- FIX: memory leak in AFOverlayAnimation where core UIImageView was not being released before creating a new instance
- FIX: memory leak with map control base path
- FIX: missing alert.png icon for ipad advisories view
- FIX: overlay name/timestamp labels were being removed when turning on a point data overlay, had to add check against type of overlay added
- FIX: overlay options not properly being selected in options menu
- FIX: permissions not properly being returned
- FIX: positioning and drawing issues in custom callout view class
- FIX: positioning issue with overlay timestamp
- FIX: wrong property mapping for AFTidePeriod
- FIX: wrong property mapping on AFRecord
- MOD: added better sorting to storm cell query to plot more severe cells on top
- MOD: added circular annotation view for long press gesture for currents
- MOD: adjusted circular annotation gesture settings for better handling of slight gesture changes
- MOD: adjusted map control view elements based on device, scaled down for iPhone
- MOD: adjusted map options menu to be populated based on what user has access to
- MOD: adjusted positioning of labels on AFStormCellsTableViewCell
- MOD: adjusted progress view in/out animation
- MOD: adjusted so storm cells only plot cones if not general cell
- MOD: adjusted storm cell forecast polyline to go from current position to last forecast position instead of each individual period
- MOD: adjusted to use timer-based animation instead of UIViewImage
- MOD: final adjustments and bug fixes for long press obs feature
- MOD: in/out animation for animation progress view depending on status of weather map animations
- MOD: moved AFSun and AFMoon properties into core AFSunMoon class, removed separate classes as not needed
- MOD: moved outside of core .bundle for easier editing
- MOD: remove point data and point annotation when an animation starts, stop animation when point data is added to map
- MOD: renamed custom callout annotation views to include “callout” for better differentiation
- MOD: replaced parameter strings with constants from AFGlobals
- MOD: set sort params for storm cell and reports point data
- MOD: updated AFOverlayManager to better singleton pattern
- MOD: updated to use UILongPressGestureRecognizer for tap and hold feature
- DEMO: added detail view for record report
- DEMO: added earthquakes and normals sample listings
- DEMO: added missing weather icons
- DEMO: added moon phases sample view, adjusted category menus for new sample views
- DEMO: added sample listing view for nearby tides
- DEMO: added sample sun/moon view
- DEMO: fixed compiler warnings
- DEMO: records listing and detail views
- DEMO: removed call to initializeMap from viewDidAppear which was always reverting to radar overlay regardless of which option was selected from menu (iPhone)
- DEMO: resolved compiler warnings
- DEMO: updated so detail and forecast views update their data when app resumes from background
- ADD: NSString category method to format cardinal strings to all uppercase
- ADD: pop-in animation for storm report annotations
- ADD: support for new hailIN/hailMM for storm reports, added to demo app views
- MOD: AFTileOverlayView now cancels all queued requests when map region changes (prevents unnecessary requests in background…slowing the rendering of visible tiles)
- MOD: cleaned up storm report annotation/view output
- MOD: removed detail value for storm wind damage reports
- FIX: “-0” issue for temps, caused by using floats instead of integers
- FIX: additional fuzzyString method on NSDate to adjust passed timezone to nearest hour for proper day string formatting based on API response
- FIX: bug where radar and satellite overlays were not always inserted on top of overlay stack
- FIX: bug where radar overlay was not always reappearing when returning to map view
- FIX: bug with map overlays not fetching latest timestamps when data expires (prevented radar tiles from updating)
- FIX: data formatting for storm report annotation view overlays
- FIX: issue with alert.png icon not appearing in AFObservationAdvisoriesView
- FIX: minor improvements to tile overlay views, added checks to prevent same tile from being added to queue more than once
- ADD: additional support for setting a default timezone for static NSDateFormatter and NSCalendar instances in NSDate category methods
- ADD: some additional logging when [AerisEngine enableDebug] is true
- MOD: added time zone property to AFObservation, AFStormReport and deprecated `validTime` properties on models
- MOD: changed NSString and NSArray property declarations from “retain” to “copy”
- MOD: updated properties on AFFire to reflect latest changes in api
- FIX: forecast date issue where the actual timezone for the location was not being used (just device’s timezone was)
- FIX: memory leak of overlay instances within AFOverlayAnimation not being released property, nor object itself
- FIX: additional fuzzyString method on NSDate to adjust passed timezone to nearest hour for proper day string formatting based on API response
- ADD: missing model properties on AFStormCell, AFObservation, AFPlace, AFAdvisory
- ADD: support for specifying an API version for all requests in AerisEngine
- ADD: missing snow/blizzard icons in AerisUI.bundle
- ADD: custom AFScrollView class that extends UIScrollView for custom implementation eventually
- MOD: updated AFForecastDetailView to allow switching “Precip” label to “Snow” if setting snow property
- FIX: issue with some AFPlace properties not being retained properly
- FIX: ForecastPeriod storing wrong value for minTempC, gives 0 for all instances
- ADD: new properties in models (AFObservation, AFForecast) to match those added in the API
- ADD: end-user debugging for API requests; to enable, call [AerisEngine enableDebug] after initializing AerisEngine with your consumer key and secret
- MOD: better handling when requesting objects with invalid AFPlace instances, will not fail before attempting to request from the API
- MOD: updated AFPlace so that if a state is not provided for all US locations, the framework will see it as invalid and force object requests with that place to fail
- FIX: resolved crash that was occurring for some users when interacting with an AFWeatherMap instance due to use of objective-c blocks
Last modified: February 10, 2020