[ios] App startup optimization.

This commit is contained in:
Ilya Grechuhin 2016-08-16 17:16:43 +03:00
parent c21d5eb0ee
commit 5411f68eaa
13 changed files with 102 additions and 125 deletions

View file

@ -73,11 +73,13 @@ extern NSString * const kAlohalyticsTapEventKey;
- (UIStatusBarStyle)preferredStatusBarStyle
{
MWMSearchManagerState const searchManagerState =
_searchManager ? _searchManager.state : MWMSearchManagerStateHidden;
BOOL const isNightMode = [UIColor isNightMode];
BOOL const isLight = (self.searchManager.state == MWMSearchManagerStateMapSearch &&
BOOL const isLight = (searchManagerState == MWMSearchManagerStateMapSearch &&
self.navigationState != MWMNavigationDashboardStateNavigation) ||
(self.searchManager.state != MWMSearchManagerStateMapSearch &&
self.searchManager.state != MWMSearchManagerStateHidden) ||
(searchManagerState != MWMSearchManagerStateMapSearch &&
searchManagerState != MWMSearchManagerStateHidden) ||
self.navigationState == MWMNavigationDashboardStatePlanning ||
self.menuState == MWMBottomMenuStateActive || self.isDirectionViewShown ||
(isNightMode && self.navigationState != MWMNavigationDashboardStateHidden) ||
@ -512,7 +514,11 @@ extern NSString * const kAlohalyticsTapEventKey;
- (MWMNavigationDashboardState)navigationState { return self.navigationManager.state; }
- (MWMPlacePageEntity *)placePageEntity { return self.placePageManager.entity; }
- (BOOL)isDirectionViewShown { return self.placePageManager.isDirectionViewShown; }
- (BOOL)isDirectionViewShown
{
return _placePageManager ? _placePageManager.isDirectionViewShown : NO;
}
- (void)setTopBound:(CGFloat)topBound
{
if (IPAD)

View file

@ -13,11 +13,10 @@ CGFloat labelWidth()
return label.width;
}
static CGFloat const kLabelWidth = labelWidth();
BOOL isCompactForCellWidth(CGFloat width)
{
CGFloat const widthOfAllElementsWithoutLabel = 234.0;
static CGFloat const kLabelWidth = labelWidth();
CGFloat constexpr widthOfAllElementsWithoutLabel = 234.0;
CGFloat const maxLabelWidthForCompactCell = width - widthOfAllElementsWithoutLabel;
return kLabelWidth < maxLabelWidthForCompactCell;
}

View file

@ -4,12 +4,6 @@
#include "Framework.h"
namespace
{
NSDictionary * const kSelectedAreaAttrs = @{ NSFontAttributeName : [UIFont bold12] };
NSDictionary * const kUnselectedAreaAttrs = @{ NSFontAttributeName : [UIFont regular12] };
} // namespace
@interface MWMMapDownloaderTableViewCell ()
- (NSAttributedString *)matchedString:(NSString *)str selectedAttrs:(NSDictionary *)selectedAttrs unselectedAttrs:(NSDictionary *)unselectedAttrs;
@ -46,21 +40,23 @@ namespace
{
[super config:nodeAttrs];
BOOL isDescriptionVisible = NO;
NSDictionary * const selectedAreaAttrs = @{ NSFontAttributeName : [UIFont bold12] };
NSDictionary * const unselectedAreaAttrs = @{ NSFontAttributeName : [UIFont regular12] };
if (self.needDisplayArea && nodeAttrs.m_topmostParentInfo.size() == 1)
{
string const & areaName = nodeAttrs.m_topmostParentInfo[0].m_localName;
isDescriptionVisible = (areaName != GetFramework().Storage().GetRootId());
if (isDescriptionVisible)
self.descriptionLabel.attributedText = [self matchedString:@(areaName.c_str())
selectedAttrs:kSelectedAreaAttrs
unselectedAttrs:kUnselectedAreaAttrs];
selectedAttrs:selectedAreaAttrs
unselectedAttrs:unselectedAreaAttrs];
}
else if (!nodeAttrs.m_nodeLocalDescription.empty())
{
isDescriptionVisible = YES;
self.descriptionLabel.attributedText = [self matchedString:@(nodeAttrs.m_nodeLocalDescription.c_str())
selectedAttrs:kSelectedAreaAttrs
unselectedAttrs:kUnselectedAreaAttrs];
selectedAttrs:selectedAreaAttrs
unselectedAttrs:unselectedAreaAttrs];
}
self.descriptionLabel.hidden = !isDescriptionVisible;
self.titleBottomOffset.priority = isDescriptionVisible ? UILayoutPriorityDefaultLow : UILayoutPriorityDefaultHigh;

View file

@ -2,12 +2,6 @@
#import "MWMMapDownloaderSubplaceTableViewCell.h"
#import "UIFont+MapsMeFonts.h"
namespace
{
NSDictionary * const kSelectedSubPlaceAttrs = @{ NSFontAttributeName : [UIFont bold14] };
NSDictionary * const kUnselectedSubPlaceAttrs = @{ NSFontAttributeName : [UIFont regular14] };
} // namespace
@interface MWMMapDownloaderTableViewCell ()
- (NSAttributedString *)matchedString:(NSString *)str selectedAttrs:(NSDictionary *)selectedAttrs unselectedAttrs:(NSDictionary *)unselectedAttrs;
@ -39,9 +33,11 @@ namespace
- (void)setSubplaceText:(NSString *)text
{
NSDictionary * const selectedSubPlaceAttrs = @{ NSFontAttributeName : [UIFont bold14] };
NSDictionary * const unselectedSubPlaceAttrs = @{ NSFontAttributeName : [UIFont regular14] };
self.subPlace.attributedText = [self matchedString:text
selectedAttrs:kSelectedSubPlaceAttrs
unselectedAttrs:kUnselectedSubPlaceAttrs];
selectedAttrs:selectedSubPlaceAttrs
unselectedAttrs:unselectedSubPlaceAttrs];
}
@end

View file

@ -7,12 +7,6 @@
#include "Framework.h"
namespace
{
NSDictionary * const kSelectedTitleAttrs = @{ NSFontAttributeName : [UIFont bold17] };
NSDictionary * const kUnselectedTitleAttrs = @{ NSFontAttributeName : [UIFont regular17] };
} // namespace
@interface MWMMapDownloaderTableViewCell () <MWMCircularProgressProtocol>
@property (nonatomic) MWMCircularProgress * progress;
@ -75,9 +69,12 @@ namespace
- (void)config:(storage::NodeAttrs const &)nodeAttrs
{
[self configProgress:nodeAttrs];
NSDictionary * const selectedTitleAttrs = @{ NSFontAttributeName : [UIFont bold17] };
NSDictionary * const unselectedTitleAttrs = @{ NSFontAttributeName : [UIFont regular17] };
self.title.attributedText = [self matchedString:@(nodeAttrs.m_nodeLocalName.c_str())
selectedAttrs:kSelectedTitleAttrs
unselectedAttrs:kUnselectedTitleAttrs];
selectedAttrs:selectedTitleAttrs
unselectedAttrs:unselectedTitleAttrs];
TMwmSize const size = self.mode == mwm::DownloaderMode::Downloaded
? nodeAttrs.m_downloadingMwmSize
: nodeAttrs.m_mwmSize - nodeAttrs.m_localMwmSize;

View file

@ -26,7 +26,7 @@
#import "MWMTableViewController.h"
#import "MWMWhatsNewNavigationController.h"
#import "MapsAppDelegate.h"
#import "RouteState.h"
#import "MWMRouterSavedState.h"
#import "Statistics.h"
#import "UIColor+MapsMeColor.h"
#import "UIFont+MapsMeFonts.h"

View file

@ -17,7 +17,7 @@
#import "MWMTextToSpeech.h"
#import "MapViewController.h"
#import "Preferences.h"
#import "RouteState.h"
#import "MWMRouterSavedState.h"
#import "Statistics.h"
#import "UIColor+MapsMeColor.h"
#import "UIFont+MapsMeFonts.h"
@ -627,7 +627,7 @@ using namespace osm_auth_ios;
LOG(LINFO, ("applicationWillResignActive"));
[self.mapViewController onGetFocus:NO];
[self.mapViewController.appWallAd close];
[RouteState save];
[MWMRouterSavedState store];
GetFramework().SetRenderingEnabled(false);
[MWMLocationManager applicationWillResignActive];
}
@ -664,7 +664,7 @@ using namespace osm_auth_ios;
[[Statistics instance] applicationDidBecomeActive];
GetFramework().SetRenderingEnabled(true);
[MWMLocationManager applicationDidBecomeActive];
[[MWMRouter router] restore];
[MWMRouterSavedState restore];
}
- (void)dealloc

View file

@ -1,15 +0,0 @@
#import <Foundation/Foundation.h>
#include <geometry/point2d.hpp>
@interface RouteState : NSObject
@property (nonatomic, readonly) BOOL hasActualRoute;
@property (nonatomic) m2::PointD endPoint;
+ (instancetype)savedState;
+ (void)save;
+ (void)remove;
@end

View file

@ -19,7 +19,6 @@
- (void)rebuildWithBestRouter:(BOOL)bestRouter;
- (void)start;
- (void)stop;
- (void)restore;
- (instancetype)init __attribute__((unavailable("call +router instead")));
- (instancetype)copy __attribute__((unavailable("call +router instead")));

View file

@ -11,7 +11,7 @@
#import "MWMTextToSpeech.h"
#import "MapViewController.h"
#import "MapsAppDelegate.h"
#import "RouteState.h"
#import "MWMRouterSavedState.h"
#import "Statistics.h"
#include "Framework.h"
@ -22,13 +22,6 @@ using namespace routing;
namespace
{
enum class ForceStateChange
{
None,
Rebuild,
Start
};
MWMRoutePoint lastLocationPoint()
{
CLLocation * lastLocation = [MWMLocationManager lastLocation];
@ -42,8 +35,6 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
@property(nonatomic, readwrite) MWMRoutePoint startPoint;
@property(nonatomic, readwrite) MWMRoutePoint finishPoint;
@property(nonatomic, readwrite) MWMRoutePoint restorePoint;
@property(nonatomic) ForceStateChange forceStateChange;
@end
@ -65,7 +56,6 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
if (self)
{
[self resetPoints];
self.forceStateChange = ForceStateChange::None;
[MWMLocationManager addObserver:self];
[MWMFrameworkListener addObserver:self];
}
@ -203,7 +193,7 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
[[MWMMapViewControlsManager manager] onRouteStart];
MapsAppDelegate * app = [MapsAppDelegate theApp];
app.routingPlaneMode = MWMRoutingPlaneModeNone;
[RouteState save];
[MWMRouterSavedState store];
[MapsAppDelegate changeMapStyleIfNedeed];
[app startMapStyleChecker];
}
@ -235,7 +225,7 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
GetFramework().CloseRouting();
MapsAppDelegate * app = [MapsAppDelegate theApp];
app.routingPlaneMode = MWMRoutingPlaneModeNone;
[RouteState remove];
[MWMRouterSavedState remove];
if ([MapsAppDelegate isAutoNightMode])
[MapsAppDelegate resetToDefaultMapStyle];
[app showAlertIfRequired];
@ -252,22 +242,6 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
[[MWMNavigationDashboardManager manager] updateFollowingInfo:info];
}
- (void)restore
{
if (GetFramework().IsRoutingActive())
return;
RouteState * state = [RouteState savedState];
if (state.hasActualRoute)
{
self.restorePoint = MWMRoutePoint(state.endPoint, @"Destination");
self.forceStateChange = ForceStateChange::Rebuild;
}
else
{
[RouteState remove];
}
}
#pragma mark - MWMLocationObserver
- (void)onLocationUpdate:(location::GpsInfo const &)info
@ -283,11 +257,12 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
}
else
{
if (self.forceStateChange == ForceStateChange::Rebuild)
MWMRouterSavedState * state = [MWMRouterSavedState state];
if (state.forceStateChange == MWMRouterForceStateChange::Rebuild)
{
self.forceStateChange = ForceStateChange::Start;
state.forceStateChange = MWMRouterForceStateChange::Start;
self.type = GetFramework().GetLastUsedRouter();
[self buildToPoint:self.restorePoint bestRouter:NO];
[self buildToPoint:state.restorePoint bestRouter:NO];
}
}
}
@ -297,13 +272,14 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
- (void)processRouteBuilderEvent:(routing::IRouter::ResultCode)code
countries:(storage::TCountriesVec const &)absentCountries
{
MWMRouterSavedState * state = [MWMRouterSavedState state];
switch (code)
{
case routing::IRouter::ResultCode::NoError:
{
auto & f = GetFramework();
f.DeactivateMapSelection(true);
if (self.forceStateChange == ForceStateChange::Start)
if (state.forceStateChange == MWMRouterForceStateChange::Start)
[self start];
else
[[MWMMapViewControlsManager manager] onRouteReady];
@ -357,7 +333,7 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
[[MWMMapViewControlsManager manager] onRouteError];
break;
}
self.forceStateChange = ForceStateChange::None;
state.forceStateChange = MWMRouterForceStateChange::None;
}
- (void)processRouteBuilderProgress:(CGFloat)progress

View file

@ -0,0 +1,23 @@
#include "MWMRoutePoint.h"
#include "geometry/point2d.hpp"
enum class MWMRouterForceStateChange
{
None,
Rebuild,
Start
};
@interface MWMRouterSavedState : NSObject
@property(nonatomic, readonly) MWMRoutePoint restorePoint;
@property(nonatomic) MWMRouterForceStateChange forceStateChange;
+ (instancetype)state;
+ (void)store;
+ (void)remove;
+ (void)restore;
@end

View file

@ -1,24 +1,30 @@
#import "RouteState.h"
#import "MWMRouterSavedState.h"
#import "MWMRouter.h"
#include "Framework.h"
static NSString * const kEndPointKey = @"endPoint";
static NSString * const kETAKey = @"eta";
@interface RouteState()
@implementation MWMRouterSavedState
@property (nonatomic) NSDate * eta;
@end
@implementation RouteState
+ (instancetype)savedState
+ (instancetype)state
{
RouteState * const state = [[super alloc] init];
if (state)
static MWMRouterSavedState * state;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
state = [[super alloc] initState];
});
return state;
}
- (instancetype)initState
{
self = [super init];
if (self)
{
NSDictionary * const stateDict = [NSDictionary dictionaryWithContentsOfURL:[RouteState stateFileURL]];
_forceStateChange = MWMRouterForceStateChange::None;
NSDictionary * const stateDict = [NSDictionary dictionaryWithContentsOfURL:[MWMRouterSavedState stateFileURL]];
if (stateDict)
{
m2::PointD point;
@ -29,15 +35,16 @@ static NSString * const kETAKey = @"eta";
if (endPointData && eta)
{
[endPointData getBytes:&point length:size];
state.endPoint = point;
state.eta = eta;
_restorePoint = MWMRoutePoint(point, @"Destination");
if ([eta compare:[NSDate date]] == NSOrderedDescending)
_forceStateChange = MWMRouterForceStateChange::Rebuild;
}
}
}
return state;
return self;
}
+ (void)save
+ (void)store
{
Framework & f = GetFramework();
if (!f.IsOnRoute())
@ -50,12 +57,12 @@ static NSString * const kETAKey = @"eta";
NSGetSizeAndAlignment(@encode(m2::PointD), &size, nullptr);
stateDict[kEndPointKey] = [NSData dataWithBytes:&endPoint length:size];
stateDict[kETAKey] = [NSDate dateWithTimeIntervalSinceNow:routeInfo.m_time];
[stateDict writeToURL:[RouteState stateFileURL] atomically:YES];
[stateDict writeToURL:[MWMRouterSavedState stateFileURL] atomically:YES];
}
+ (void)remove
{
[[NSFileManager defaultManager] removeItemAtURL:[RouteState stateFileURL] error:nil];
[[NSFileManager defaultManager] removeItemAtURL:[MWMRouterSavedState stateFileURL] error:nil];
}
+ (NSURL *)stateFileURL
@ -63,11 +70,12 @@ static NSString * const kETAKey = @"eta";
return [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"route_info.ini"]];
}
#pragma mark - Properties
- (BOOL)hasActualRoute
+ (void)restore
{
return [self.eta compare:[NSDate date]] == NSOrderedDescending;
if (GetFramework().IsRoutingActive())
return;
if ([MWMRouterSavedState state].forceStateChange == MWMRouterForceStateChange::None)
[MWMRouterSavedState remove];
}
@end

View file

@ -38,7 +38,6 @@
340C20E41C3E565600111D22 /* MWMCuisineEditorViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340C20E21C3E565600111D22 /* MWMCuisineEditorViewController.mm */; };
340E10601B944DAB00D975D5 /* MWMSearchHistoryManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340E105F1B944DAB00D975D5 /* MWMSearchHistoryManager.mm */; };
340E10631B949D1900D975D5 /* MWMSearchBookmarksManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340E10621B949D1900D975D5 /* MWMSearchBookmarksManager.mm */; };
340F24631B14910500F874CD /* RouteState.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340F24621B14910500F874CD /* RouteState.mm */; };
3411387D1C15AE73002E3B3E /* libeditor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3411387C1C15AE73002E3B3E /* libeditor.a */; };
341138801C15B50B002E3B3E /* MWMOpeningHoursModel.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3411387F1C15B50B002E3B3E /* MWMOpeningHoursModel.mm */; };
341138811C15B50B002E3B3E /* MWMOpeningHoursModel.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3411387F1C15B50B002E3B3E /* MWMOpeningHoursModel.mm */; };
@ -204,6 +203,8 @@
34A62D4F1C903533007FDCB7 /* Fabric.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34A62D4C1C903533007FDCB7 /* Fabric.framework */; };
34A62D501C903533007FDCB7 /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34A62D4D1C903533007FDCB7 /* Crashlytics.framework */; };
34A62D511C903533007FDCB7 /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34A62D4D1C903533007FDCB7 /* Crashlytics.framework */; };
34AA7D9F1D63543E00254037 /* MWMRouterSavedState.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AA7D9E1D63543E00254037 /* MWMRouterSavedState.mm */; };
34AA7DA01D63543E00254037 /* MWMRouterSavedState.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AA7D9E1D63543E00254037 /* MWMRouterSavedState.mm */; };
34AB04B71CEC95B500CE8B36 /* MWMEditorAdditionalNamePlaceholderTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34AB04B61CEC95B500CE8B36 /* MWMEditorAdditionalNamePlaceholderTableViewCell.xib */; };
34AB04B81CEC95B500CE8B36 /* MWMEditorAdditionalNamePlaceholderTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34AB04B61CEC95B500CE8B36 /* MWMEditorAdditionalNamePlaceholderTableViewCell.xib */; };
34AB39C11D2BD8310021857D /* MWMStopButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AB39C01D2BD8310021857D /* MWMStopButton.mm */; };
@ -470,7 +471,6 @@
6741A9D41BF340DE002C974C /* MWMAlertViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F64F19821AB81A00006EAF7E /* MWMAlertViewController.mm */; };
6741A9D51BF340DE002C974C /* WebViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = FAFCB63513366E78001A5C59 /* WebViewController.mm */; };
6741A9D61BF340DE002C974C /* MWMPlacePageNavigationBar.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6FE2C0E1B03A006009814AA /* MWMPlacePageNavigationBar.mm */; };
6741A9D81BF340DE002C974C /* RouteState.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340F24621B14910500F874CD /* RouteState.mm */; };
6741A9DA1BF340DE002C974C /* UIKitCategories.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9747264118323080006B7CB7 /* UIKitCategories.mm */; };
6741A9DB1BF340DE002C974C /* MWMRoutePreview.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6BD337E1B62403B00F2CE18 /* MWMRoutePreview.mm */; };
6741A9DC1BF340DE002C974C /* MWMRoutePointLayout.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6BB6CC21BB1860D00DF1DF2 /* MWMRoutePointLayout.mm */; };
@ -892,8 +892,6 @@
340E105F1B944DAB00D975D5 /* MWMSearchHistoryManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSearchHistoryManager.mm; sourceTree = "<group>"; };
340E10611B949D1900D975D5 /* MWMSearchBookmarksManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSearchBookmarksManager.h; sourceTree = "<group>"; };
340E10621B949D1900D975D5 /* MWMSearchBookmarksManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSearchBookmarksManager.mm; sourceTree = "<group>"; };
340F24611B14910500F874CD /* RouteState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RouteState.h; sourceTree = "<group>"; };
340F24621B14910500F874CD /* RouteState.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RouteState.mm; sourceTree = "<group>"; };
3411387C1C15AE73002E3B3E /* libeditor.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libeditor.a; path = "../../../omim-xcode-build/Debug/libeditor.a"; sourceTree = "<group>"; };
3411387E1C15B50B002E3B3E /* MWMOpeningHoursModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursModel.h; sourceTree = "<group>"; };
3411387F1C15B50B002E3B3E /* MWMOpeningHoursModel.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursModel.mm; sourceTree = "<group>"; };
@ -1078,6 +1076,8 @@
349C3AF11D33C6EE002AC7A9 /* MWMNavigationDashboardInfoProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMNavigationDashboardInfoProtocol.h; sourceTree = "<group>"; };
34A62D4C1C903533007FDCB7 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Fabric.framework; sourceTree = "<group>"; };
34A62D4D1C903533007FDCB7 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crashlytics.framework; sourceTree = "<group>"; };
34AA7D9D1D63543E00254037 /* MWMRouterSavedState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMRouterSavedState.h; sourceTree = "<group>"; };
34AA7D9E1D63543E00254037 /* MWMRouterSavedState.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMRouterSavedState.mm; sourceTree = "<group>"; };
34AB04B61CEC95B500CE8B36 /* MWMEditorAdditionalNamePlaceholderTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMEditorAdditionalNamePlaceholderTableViewCell.xib; sourceTree = "<group>"; };
34AB39BF1D2BD8310021857D /* MWMStopButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMStopButton.h; sourceTree = "<group>"; };
34AB39C01D2BD8310021857D /* MWMStopButton.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMStopButton.mm; sourceTree = "<group>"; };
@ -1724,7 +1724,6 @@
34E2731E1C7379EA00463965 /* Migration */,
346EDAD81B9F0E15004F8DB5 /* Components */,
340837101B7243B500B5C185 /* Share */,
340F24601B1490ED00F874CD /* RouteState */,
F6588E291B15C25C00EE1E58 /* TextView */,
F64F195F1AB8125C006EAF7E /* CustomAlert */,
97B4E9271851DAB300BEC5D7 /* Custom Views */,
@ -1892,6 +1891,8 @@
34002A661D2F9C8100AC201E /* MWMRoutePoint.h */,
34002A6B1D2F9D0700AC201E /* MWMRouter.h */,
34002A6C1D2F9D0700AC201E /* MWMRouter.mm */,
34AA7D9D1D63543E00254037 /* MWMRouterSavedState.h */,
34AA7D9E1D63543E00254037 /* MWMRouterSavedState.mm */,
);
path = Routing;
sourceTree = "<group>";
@ -1918,15 +1919,6 @@
path = Cuisine;
sourceTree = "<group>";
};
340F24601B1490ED00F874CD /* RouteState */ = {
isa = PBXGroup;
children = (
340F24611B14910500F874CD /* RouteState.h */,
340F24621B14910500F874CD /* RouteState.mm */,
);
path = RouteState;
sourceTree = "<group>";
};
3418CEAB1CBF9D7700641B25 /* NoMaps */ = {
isa = PBXGroup;
children = (
@ -3662,6 +3654,7 @@
FAFCB63613366E78001A5C59 /* WebViewController.mm in Sources */,
34C9BD091C6DBCDA000DC38D /* MWMNavigationController.mm in Sources */,
3406FA151C6E0C3300E9FAD2 /* MWMMapDownloadDialog.mm in Sources */,
34AA7D9F1D63543E00254037 /* MWMRouterSavedState.mm in Sources */,
34C9BD021C6DB693000DC38D /* MWMTableViewController.mm in Sources */,
34CD81D71C92D96F007D2A60 /* MWMFirstLaunchController.mm in Sources */,
F63BA3711BCD5B520044C504 /* MWMTTSLanguageViewController.mm in Sources */,
@ -3670,7 +3663,6 @@
34DCDE3A1C75CD8100652CAC /* Framework.cpp in Sources */,
F6FE2C0F1B03A006009814AA /* MWMPlacePageNavigationBar.mm in Sources */,
341138801C15B50B002E3B3E /* MWMOpeningHoursModel.mm in Sources */,
340F24631B14910500F874CD /* RouteState.mm in Sources */,
9747264318323080006B7CB7 /* UIKitCategories.mm in Sources */,
F6BD33811B62403B00F2CE18 /* MWMRoutePreview.mm in Sources */,
F6BB6CC31BB1860D00DF1DF2 /* MWMRoutePointLayout.mm in Sources */,
@ -3887,10 +3879,10 @@
3406FA161C6E0C3300E9FAD2 /* MWMMapDownloadDialog.mm in Sources */,
6741A9D51BF340DE002C974C /* WebViewController.mm in Sources */,
34C9BD031C6DB693000DC38D /* MWMTableViewController.mm in Sources */,
34AA7DA01D63543E00254037 /* MWMRouterSavedState.mm in Sources */,
6741A9D61BF340DE002C974C /* MWMPlacePageNavigationBar.mm in Sources */,
34CD81D81C92D96F007D2A60 /* MWMFirstLaunchController.mm in Sources */,
F64DA8031C52520000330E9E /* UISwitch+RuntimeAttributes.m in Sources */,
6741A9D81BF340DE002C974C /* RouteState.mm in Sources */,
676507631C1055BB00830BB3 /* MWMTTSLanguageViewController.mm in Sources */,
341138811C15B50B002E3B3E /* MWMOpeningHoursModel.mm in Sources */,
6741A9DA1BF340DE002C974C /* UIKitCategories.mm in Sources */,