Перейти к основному содержимому

Миграция с предыдущих мажорных версий SDK

С версий 12.x на 13.x

Для версий Full и Map

  • Повторно выгрузите стили: исправлены ошибки отображения пользовательских и иммерсивных объектов.

  • Обновлены все слои групп Roads для отображения иммерсивных дорог в основном режиме карты.

  • Добавлена группа Traffic v13.0.0 для отображения новых цветов тайлов с пробками.

  • Добавлена группа Car route line v13.0.0 для отображения автомобильных маршрутов на иммерсивных дорогах.

  • Для изоляции потоков и совместимости с Swift 6 в проект добавлен атрибут @MainActor и отмечены протоколы, структуры и функции как Sendable.

  • Минимальная поддерживаемая версия iOS обновлена до 16.0.

  • Основные изменения в SwiftUI-элементах:

    • Переименован основной слой карты MapViewOverlay в MapView и переименованы все методы для настройки слоя.
    • Переименовано свойство IMapFactory.mapViewOverlay в IMapFactory.mapView.
    • Переименована фабрика SwiftUI-элементов управления картой IMapControlViewFactory в IMapViewsFactory.
    • Переименованы методы SwiftUI-элементов для создания дорожных событий RoadEventCreatorView.
    • Переименованы методы SwiftUI-элементов для настройки отображения информации о дорожном событии RoadEventInfoView.
    • Переименованы пользовательские SwiftUI-маркеры и контейнеры на карте MapMarkerView, MapMarkerViewModel и MapMarkerViewOverlay в MarkerView, MarkerViewModel и MarkerOverlayView соответственно.
    • Переименовано свойство IMapFactory.mapMarkerViewOverlay в IMapFactory.markerOverlayView.
    • Переименован основной слой навигатора NavigatorView в NavigationView.
    • Переименован метод NavigatorView.navigatorViewFinishButtonCallback() в NavigationView.finishButtonCallback().
    • Переименована фабрика SwiftUI-элементов управления навигатором INavigatorViewFactory в INavigationViewFactory.
  • Основные изменения в UIKit-элементах:

    • Переименован основной слой карты IMapView в IMapUIView.
    • Переименовано свойство IMapFactory.mapView в IMapFactory.mapUIView.
    • Переименованы интерфейсы слоя обработки жестов IMapGestureView и IMapGestureViewFactory в IMapGestureUIView и IMapGestureUIViewFactory соответственно.
    • Переименовано свойство IMapFactory.gestureView в IMapFactory.gestureUIView.
    • Переименованы пользовательские UIKit-маркеры и контейнеры на карте IMarkerView, IMarkerViewFactory и IMarkerViewOverlay в IMarkerUIView, IMarkerUIViewFactory и IMarkerOverlayUIView соответственно.
    • Переименован объект IMapFactory.markerViewOverlay в IMapFactory.markerOverlayUIView.
    • Переименована фабрика UIKit-элементов управления картой IMapControlFactory в IMapUIControlsFactory.
    • Переименованы все публичные классы UIKit-элементов управления, моделей и их фабрик. Например, ZoomControl переименован в ZoomUIControl, TrafficControl переименован в TrafficUIControl, IndoorControl переименован в IndoorUIControl и т. д.
    • Переименована фабрика UIKit-элементов управления карточками дорожных событий RoadEventCardViewOptions в IRoadEventUIViewFactory.
    • Переименован объект IRoadEventCardView в IRoadEventInfoUIView.
    • Переименован объект ICreateRoadEventView в IRoadEventCreatorUIView.
    • Переименован объект RoadEventCardViewOptions в RoadEventInfoViewOptions.
    • Переименован основной слой навигатора INavigationView в INavigationUIView.
    • Переименована фабрика UIKit-элементов управления навигатором INavigationViewControlsFactory в INavigationUIControlsFactory.
    • Переименована фабрика UIKit-элементов управления картой INavigationMapControlsFactory в INavigationMapUIControlsFactory.
  • Теперь для отслеживания изменений состояний камеры используется единый канал BaseCamera.changed вместо отдельных каналов для каждого свойства. Заменены подписки и добавлена дополнительная фильтрация причин изменений.

  • Изменён способ создания некоторых классов:

    • Удалена функция getSystemMemoryManager. Чтобы получить объект для управления системной памятью, используйте метод SystemMemoryManager.instance().
    • Удалён конструктор SearchHistory. Чтобы получить объект истории поиска, используйте метод SearchHistory.instance().
    • Удалён конструктор RoadEventManager. Чтобы получить объект для работы с дорожными событиями, используйте метод RoadEventManager.instance().
    • Удалена функция getHttpCacheManager. Чтобы получить объект для управления HTTP-кешем, используйте метод HttpCacheManager.get().
    • Удалена функция getLocaleManager. Чтобы получить объект для управления локалями приложения, используйте метод LocaleManager.instance().
    • Удалён конструктор TrafficCollector. Чтобы получить объект для управления сервисом сбора информации о дорожном движении, используйте метод TrafficCollector.instance().
    • Удалена функция getAudioSettings. Чтобы получить объект для управления звуком приложения, используйте метод AudioSettings.get().
    • Удалена функция getPackageManager. Чтобы получить объект для работы с пакетами, используйте метод PackageManager.instance().
    • Удалена функция getTerritoryManager. Чтобы получить объект для работы с территориями, используйте метод TerritoryManager.instance().
    • Удалена функция getTerritoriesAlongRouteProvider. Чтобы получить объект для извлечения списка территорий вдоль маршрута, используйте конструктор TerritoriesAlongRouteProvider.
    • Удалена функция getVoiceManager. Чтобы получить объект для управления голосовыми пакетами, используйте метод VoiceManager.instance().
  • Свойство buildingLevels для получения этажных планов удалено из DirectoryObject.

  • Свойство DirectoryObject.buildingInfo теперь опциональное.

  • Свойство BuildingInfo.buildingId теперь обязательное и не может быть пустым.

  • Свойство LevelInfo.id теперь опциональное.

  • Изменён тип свойства PublicTransportDirectoryRouteInfo.color с Int? на Color?.

  • Метод SearchQueryBuilder.setGeoPoint() теперь принимает опциональный тип значения.

  • Метод SearchQueryBuilder.setRadius() теперь принимает опциональный тип значения.

Дополнительно для версии Full

  • Удалены функция getRoadMacroGraph и класс RoadMacroGraph. Теперь для построения офлайн-маршрутов между соседними регионами достаточно скачать пакеты нужных регионов.
  • Удалены класс для настройки позиции бабла с полосами на маршруте (LanesCalloutMapPosition и RouteMapObject.lanesCalloutPositions) и свойство в RouteMapObject.
  • Переименован класс UIntRouteLongAttribute в DoubleRouteLongAttribute.
  • Изменён тип свойства Route.trafficLights с VoidRouteAttribute на StringRouteAttribute.
  • Добавлен новый вид транспорта motorcycle (мотоцикл) в TransportType.
  • Добавлены параметры для настройки уровня масштабирования для стиля в конструктор SpeedRangeToStyleZoom.
  • Добавлены значения для пандусов rampDown, rampUp, smoothRampDown и smoothRampUp в RoadSubtype.
  • Добавлены новые значения позиций и ориентиров в CarInstructionCrossroadLandmark.
  • Добавлены значения цветов deepGreen и orange в TrafficSpeedColor.
  • Добавлен флаг crossing для отображения начала и конца переправы на маршруте в RouteMapObjectDisplayFlag.
  • Добавлен новый тип точки маршрута crossing (начало и конец переправы) в RoutePointKind.
  • Добавлены значения для оповещений о событиях betterRoute («маршрут лучше») и humps (искусственные дорожные неровности) в SoundCategory.

С версий 10.x на 12.x

Для версий Full и Map

  • Повторно выгрузите стили.
  • Для корректного отображения маркера геопозиции скопируйте соответствующие слои.
  • Удалён параметр Container.apiKeyOptions. Теперь вы можете передавать явно источник файл ключа с помощью KeySource, KeyFromAsset, KeyFromFile и KeyFromString.
  • Удалён параметр Container.vendorConfigFile. Теперь вы можете передавать явно источник файл конфигурационных настроек с помощью VendorConfig, VendorConfigFromAsset, VendorConfigFromFile и VendorConfigFromString.
  • Удалены методы Container.makeStyleFactory(), Container.makeSearchManagerFactory(), Container.makeSourceFactory(), Container.makeImageFactory() и Container.makeLocaleManager(). Вместо них используйте поля Container.styleFactory, Container.searchManagerFactory, Container.sourceFactory, Container.imageFactory и Container.localeManager.
  • Удалены IPositioningServicesFactory и параметр Container.positioningServices. Теперь при создании Container нужно передавать отдельно Container.locationProvider и Container.magneticHeadingProvider.
  • Удалён ILocationService. Вместо него используйте LocationService с аналогичным функционалом.
  • Удалены MyLocationController и MapLocationController.myLocationIndicatorController. Для настройки источника маркера геопозиции используйте MyLocationControllerSettings. В INavigationView теперь не происходит подмена источника геопозиции.
  • Структура HttpOptions изменена с сохранением функциональности.
  • В LogOptions переименованы поля: вместо osLogLevel и customLogLevel теперь systemLevel и customLevel.
  • В LogLevel переименованы значения: вместо disabled и fault теперь off и fatal.
  • Удалено значение CameraState.followPosition. Вместо него ориентируйтесь на значение Camera.behaviour.
  • Добавлены значения для SuggestedType, SuggestorType и ObjectType и теперь соответствуют результатам Places API.
  • Приведены к стандарту именования значения MyLocationMapObjectMarkerType.
  • Удалён метод createRasterTileDataSource() и добавлен новый источник RasterTileSource с возможностью задания прозрачности растровых тайлов.

Дополнительно для версии Full

  • Для отображения иммерсивных дорог реальной ширины и для корректного взаимодействия остальных объектов с иммерсивными дорогами в режиме навигации выгрузите последние стили Mobile SDK и примените свои настройки.
  • Удалён AudioVolume. Теперь вы можете задавать громкость инструкций от 0 до 100 через AudioSettings.volume.
  • Удалены AudioOptions и IAudioSettings. Используйте AudioSettings для настройки звука.
  • Добавлен флаг RouteMapObjectDisplayFlag.immersiveRouteParts для использования иммерсивной геометрии для отрезков маршрута.

С версий 7.x на 10.x

Для версий Full и Map

  • Повторно выгрузите стили.

  • Изменена работа с FollowController:

    • Удалены методы createRawMyLocationController() и createSmoothMyLocationController(). Добавлен конструктор MyLocationController для создания контроллера перемещения маркера геопозиции.
    • Удалены значения FollowBearing.satellite и FollowBearing.magnetic, т. к. теперь не нужно указывать источник направления. Добавлено значение FollowBearing.on для включения слежения — источник выбирается автоматически.
    • Удалено поле FollowPosition.tilt. Добавлен новый конструктор CameraBehaviour с параметром tilt для слежения только за наклоном.
    • Удалены значения FollowValue.satelliteBearing, FollowValue.magneticBearing и FollowValue.accuracy. Вместо них добавлено значение FollowValue.bearing с автоматическим выбором источника.
    • Удалены методы satelliteBearing(), magneticBearing() и accuracy() из интерфейса CustomFollowController. Вместо них добавлен метод CustomFollowController.bearing().
    • Удалены методы setClock(), satelliteBearing(), magneticBearing() и accuracy() из FollowController. Вместо них добавлены методы onAddedToMap(), onRemovedFromMap() и bearing().
    • Удалён канал FollowController.nextTimestampChannel. Вместо него добавлен FollowController.changedChannel.
    • Изменена сигнатура метода FollowController.updateValues().
    • Удалён контроллер PlatformLocationFollowController. Вместо него добавлены контроллеры BearingFollowController и CoordinatesFollowController для слежения за направлением карты и за координатами позиции карты, соответственно.
    • Изменён конструктор контроллера StyleZoomFollowController. Удалён метод StyleZoomFollowController.setAnimationDuration().
    • Изменён конструктор контроллера TiltFollowController. Удалены методы TiltFollowController.setTilt() и TiltFollowController.setAnimationDuration().
    • Изменены параметры метода FollowController.setThresholds() на типизированные.
    • Удалён класс FollowControllerClock. Тип параметра в методе FollowController.setClock заменён на timestamp.
    • Удалён TransitionType. Конструктор MyLocationControlModel теперь не принимает transitionType. Удалён параметр transitionType из конструктора CameraBehaviour.
    • Удалён MyLocationDirectionBehaviour. Конструктор источника геопозиции MyLocationMapObjectSource теперь не принимает directionBehaviour. Удалён метод MyLocationMapObjectSource.setDirectionBehaviour().
  • Удалено поле BaseCamera.styleZoomToTiltRelation.

  • Переименован класс MagneticHeadingProvider в HeadingProvider.

  • Конструкторы динамических объектов Circle, Marker, Polygon и Polyline помечены как throws.

  • Удалена опция MapOptions.mapRendererType и enum MapRendererType. Теперь всегда включён Metal для рендеринга карты.

  • Удалены Circle.position и Circle.radius. Вместо них добавлены методы Circle.setPosition() и Circle.setRadius(), которые могут генерировать исключение.

  • Структура Locale теперь создаётся на основе отдельных значений языка language и региона region.

  • Из сборки версии Map удалены PackageManager и Package, что уменьшило размер продукта.

Дополнительно для версии Full

  • Метод Voice.playWelcome() теперь возвращает Future, который становится готовым, когда проигрывание сэмпла завершается.
  • Удалено поле RoadSubtype.stairway. Вместо него добавлены поля RoadSubtype.stairwayUp и RoadSubtype.stairwayDown для использования лестниц с явным направлением.
  • Удалено поле NavigationFollowController.mapTiltController.
  • При запуске навигатора в режиме ведения или симуляции с маршрутом на общественном транспорте теперь генерируется исключение.
  • Отключено кеширование тайлов FreeRoam при навигации.
  • MyLocationMapObjectSource для навигатора теперь устанавливается внутри INavigationView.

С версий 5.x на 7.x

Для версий Full и Map

  • Повторно выгрузите стили.
  • Удалены методы DgisSource.createOnlineDgisSource() и DgisSource.createOfflineDgisSource(). Вместо них используйте метод DgisSource.createDgisSource() с дополнительным параметром DgisSourceWorkingMode для установки режима работы карты. Доступно четыре режима работы: online, offline, hybridOnlineFirst и hybridOfflineFirst.
  • FollowController теперь возвращает StyleZoom, а не Zoom.
  • FollowValue.zoom переименован в FollowValue.styleZoom.
  • ZoomFollowController переименован в StyleZoomFollowController.
  • ZoomToTiltRelation переименован в StyleZoomToTiltRelation.
  • SpeedRangeToZoom переименован в SpeedRangeToStyleZoom.
  • Метод Projection.screenToMap() теперь вместо исключения возвращает пустое значение, если точка находится за пределами карты.
  • Удалены методы BaseCamera.setPadding() и BaseCamera.setPositionPoint(). Удалён enum CameraPositionPointChangeBehaviour. Поле BaseCamera.padding теперь является свойством.
  • Удалены методы Camera.animatedMoveStarted() и Camera.animatedMoveFinished(). Вместо них используйте канал Camera.stateChannel.
  • Методы SearchManager.createOnlineManager(), SearchManager.createOfflineManager() и SearchManager.createSmartManager() помечены как throws.
  • Удалены свойства BaseCamera.position и BaseCamera.zoomRestrictions. Методы BaseCamera.setPosition(), BaseCamera.setZoomRestrictions() и BaseCamera.setPositionPoint() помечены как throws.
  • Удалено свойство Map.fontIconSizeMultiplier. Метод Map.setFontIconSizeMultiplier() помечен как throws.
  • Конструктор NavigationManager и методы NavigationManager.start() и NavigationManager.startSimulation() помечены как throws.
  • Container.context и остальные методы-фабрики Container помечены как throws.

Дополнительно для версии Full

  • Изменены названия в ZoomFollowSettings, чтобы лучше соответствовать назначению.
  • Удалён метод Model.applyBetterRoute(). Вместо него добавлен метод Model.betterRouteResponse() и enum BetterRouteResponse для работы с альтернативными маршрутами.
  • Удалено значение State.freeRoam. Чтобы определить, что навигатор находится в режиме свободной навигации, используйте значение RouteInfo.routeBuildOptions (оно должно быть пустым).

С версий 4.x на 5.x

Для версий Full и Map

  • Изменена сигнатура методов:

    • zoomOutToFit() теперь принимает только камеру и геометрию.
    • calcPosition() теперь принимает активную область, угол наклона и поворота карты, поэтому теперь необязательно предварительно настраивать камеру для расчёта позиции.
  • Конструктор ZoomFollowController теперь принимает параметр Map.

  • Удалены методы osmCopyrightAnimationDuration() и showOSMCopyright() из класса MapView.

Дополнительно для версии Full

  • Удалён избыточный класс RoutePosition. Вместо него используйте RoutePoint.
  • Удалено свойство Model.cameraProgressChannel. Вместо него используйте класс CameraNotifier.
  • Изменён тип Traffic.durations с MillisecondsRouteAttribute на SecondsRouteLongAttribute и повышена точность значений.
  • Изменён тип Route.obstacles на ObstacleInfoRouteAttribute и добавлена дополнительная информация.

С версий v2.x на 4.x

Для версий Full и Map

  • Обратитесь в службу поддержки 2ГИС для получения нового ключа для использования Mobile SDK. Обязательно укажите appId приложения, для которого будет создан ключ. Полученный файл ключа dgissdk.key нужно либо добавить в корень приложения, либо при инициализации Mobile SDK передать объект структуры ApiKeyOptions с указанием пути до файла.
  • Удалена структура APIKeys. Вместо неё в Container.init первым параметром передайте объект структуры ApiKeyOptions, который содержит путь до файла dgissdk.key. Объект по умолчанию ApiKeyOptions.default пытается получить файл из корня приложения.
  • Обновите стили.
  • Переименован класс DirectoryObjectId в DgisObjectId.
  • Удалены функции serialize и deserialize для CameraPosition. Вместо них используйте новый механизм сериализации PackedMapState.
  • Удалены методы SearchQueryBuilder.setLocation() и SuggestQueryBuilder.setLocation(). Теперь значение автоматически берётся из источника геопозиции.
  • Удалён метод PackedSearchQuery.location().
  • Удалены SearchResultMarkerObject и SearchResultMarkerSource для генерализации маркеров поисковой выдачи, т. к. невозможно динамически добавлять или удалять объекты. В качестве альтернативы вы можете реализовать генерализацию маркеров или воспользоваться кластеризацией.
  • При создании MyLocationMapObjectSource по умолчанию используется SmoothMyLocationController вместо RawMyLocationController.

Дополнительно для версии Full

  • Удалены списки с информацией о маршруте в RouteInfo: cameras, instructions, laneSigns и т. д. Удалены индексы текущих элементов Model.cameraIndexChannel и Model.instructionIndexChannel. Вместо этого получайте информацию непосредственно из маршрута и текущей позиции. Например, для получения ближайшей камеры используйте Model.route.route.cameras.findNearForward(position).

  • Переименованы параметры поиска маршрута:

    • BicycleRouteSearchOptions.avoidUnderpassesв avoidUnderpassesAndOverpasses;
    • CarRouteSearchOptions.avoidFerry в avoidFerries;
    • TruckRouteSearchOptions actualWeight, maxPermissibleWeight в actualMass, maxPermittedMass.
  • Значение enum RoadType.road разделено на подтипы RoadType.highway, RoadType.federalRoad и другие.

  • Заменён метод VoiceSelector.setVoice() на свойство voice.

  • Удалены Model.durationChannel, Model.routeDurationChannel. Вместо них используйте Model.dynamicRouteInfo.traffic.durations.calculateDuration(routePoint).

  • Изменён набор значений в enum RoadSurface.

  • Удалены Model.navigationActiveChannel, NavigationManager.uiSettings. Вместо них для получения активности навигатора используйте новый класс ActivityTracker.

С версий 1.x на 2.x

  • Вместо Arcdegree используйте отдельные типы Bearing, Latitude и Longitude для задания поворота камеры, широты и долготы.

  • Изменён API для работы с пробками:

    • Переименован TrafficScore в TrafficScoreProvider.
    • Переименован TrafficScoreValue в TrafficScore.
    • Удалён TrafficManager.
    • TrafficScoreProvider теперь создаётся через конструктор.
  • Исправлено падение приложения, когда при создании карты не создавался GLContext. Теперь в случае ошибки возникает исключение GLContextError.

  • Переименован метод LocaleManager.setOverridedLocales() в overrideLocales().

  • Удалено получение очереди позиционирования через IPositioningServicesFactory.positioningQueue. Теперь внутри реализации протокола ILocationProvider не нужно вызывать callback через очередь.

  • Исправлены и изменены API пользовательских контроллеров камеры. Теперь контроллер может быть только один. Для добавления и удаления используйте методы Camera.setCustomFollowController() и Camera.removeCustomFollowController().