Pārlūkot izejas kodu

Fix status bar visibility on iOS 13 (#6084)

This commit fixes statusBar.visible option which stopped working on iOS 13.
Yogev Ben David 4 gadus atpakaļ
vecāks
revīzija
f487134d8e
No account linked to committer's email address

+ 2
- 1
lib/ios/RNNBasePresenter.h Parādīt failu

43
 
43
 
44
 - (UIInterfaceOrientationMask)getOrientation:(RNNNavigationOptions *)options;
44
 - (UIInterfaceOrientationMask)getOrientation:(RNNNavigationOptions *)options;
45
 
45
 
46
-- (BOOL)isStatusBarVisibility:(UINavigationController *)stack resolvedOptions:(RNNNavigationOptions *)resolvedOptions;
46
+- (BOOL)statusBarVisibile:(UINavigationController *)stack resolvedOptions:(RNNNavigationOptions *)resolvedOptions;
47
+
47
 @end
48
 @end

+ 2
- 2
lib/ios/RNNBasePresenter.m Parādīt failu

102
     return [options withDefault:[self defaultOptions]].layout.supportedOrientations;
102
     return [options withDefault:[self defaultOptions]].layout.supportedOrientations;
103
 }
103
 }
104
 
104
 
105
-- (BOOL)isStatusBarVisibility:(UINavigationController *)stack resolvedOptions:(RNNNavigationOptions *)resolvedOptions {
106
-    RNNNavigationOptions *withDefault = [resolvedOptions withDefault:[self defaultOptions]];
105
+- (BOOL)statusBarVisibile:(UINavigationController *)stack resolvedOptions:(RNNNavigationOptions *)resolvedOptions {
106
+    RNNNavigationOptions *withDefault = [resolvedOptions withDefault:self.defaultOptions];
107
     if (withDefault.statusBar.visible.hasValue) {
107
     if (withDefault.statusBar.visible.hasValue) {
108
         return ![withDefault.statusBar.visible get];
108
         return ![withDefault.statusBar.visible get];
109
     } else if ([withDefault.statusBar.hideWithTopBar getWithDefaultValue:NO]) {
109
     } else if ([withDefault.statusBar.hideWithTopBar getWithDefaultValue:NO]) {

+ 4
- 0
lib/ios/RNNBottomTabsController.m Parādīt failu

91
 	return [[self presenter] getStatusBarStyle:self.resolveOptions];
91
 	return [[self presenter] getStatusBarStyle:self.resolveOptions];
92
 }
92
 }
93
 
93
 
94
+- (BOOL)prefersStatusBarHidden {
95
+    return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions];
96
+}
97
+
94
 #pragma mark UITabBarControllerDelegate
98
 #pragma mark UITabBarControllerDelegate
95
 
99
 
96
 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
100
 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

+ 4
- 0
lib/ios/RNNComponentViewController.m Parādīt failu

83
 	return [_presenter getStatusBarStyle:[self resolveOptions]];
83
 	return [_presenter getStatusBarStyle:[self resolveOptions]];
84
 }
84
 }
85
 
85
 
86
+- (BOOL)prefersStatusBarHidden {
87
+    return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions];
88
+}
89
+
86
 - (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
90
 - (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
87
 	return self.previewController;
91
 	return self.previewController;
88
 }
92
 }

+ 4
- 0
lib/ios/RNNSideMenuController.m Parādīt failu

134
 	return self.openedViewController.preferredStatusBarStyle;
134
 	return self.openedViewController.preferredStatusBarStyle;
135
 }
135
 }
136
 
136
 
137
+- (BOOL)prefersStatusBarHidden {
138
+    return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions];
139
+}
140
+
137
 - (UIViewController<RNNLayoutProtocol> *)getCurrentChild {
141
 - (UIViewController<RNNLayoutProtocol> *)getCurrentChild {
138
 	return self.openedViewController;
142
 	return self.openedViewController;
139
 }
143
 }

+ 4
- 0
lib/ios/RNNStackController.m Parādīt failu

39
 	return [_presenter getStatusBarStyle:self.resolveOptions];
39
 	return [_presenter getStatusBarStyle:self.resolveOptions];
40
 }
40
 }
41
 
41
 
42
+- (BOOL)prefersStatusBarHidden {
43
+    return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions];
44
+}
45
+
42
 - (UIViewController *)popViewControllerAnimated:(BOOL)animated {
46
 - (UIViewController *)popViewControllerAnimated:(BOOL)animated {
43
     [self prepareForPop];
47
     [self prepareForPop];
44
 	return [super popViewControllerAnimated:animated];
48
 	return [super popViewControllerAnimated:animated];

+ 0
- 4
lib/ios/UIViewController+LayoutProtocol.m Parādīt failu

60
 	return interfaceOrientationMask;
60
 	return interfaceOrientationMask;
61
 }
61
 }
62
 
62
 
63
-- (BOOL)prefersStatusBarHidden {
64
-    return [self.presenter isStatusBarVisibility:self.navigationController resolvedOptions:self.resolveOptions];
65
-}
66
-
67
 - (UINavigationController *)stack {
63
 - (UINavigationController *)stack {
68
     if ([self isKindOfClass:UINavigationController.class]) {
64
     if ([self isKindOfClass:UINavigationController.class]) {
69
         return (UINavigationController *)self;
65
         return (UINavigationController *)self;

playground/ios/NavigationTests/RNNTabBarControllerTest.m → playground/ios/NavigationTests/BottomTabsControllerTest.m Parādīt failu

5
 #import <OCMock/OCMock.h>
5
 #import <OCMock/OCMock.h>
6
 #import <ReactNativeNavigation/BottomTabPresenterCreator.h>
6
 #import <ReactNativeNavigation/BottomTabPresenterCreator.h>
7
 #import "RNNBottomTabsController+Helpers.h"
7
 #import "RNNBottomTabsController+Helpers.h"
8
+#import "RNNComponentViewController+Utils.h"
8
 
9
 
9
-@interface RNNTabBarControllerTest : XCTestCase
10
+@interface BottomTabsControllerTest : XCTestCase
10
 
11
 
11
 @property(nonatomic, strong) RNNBottomTabsController * originalUut;
12
 @property(nonatomic, strong) RNNBottomTabsController * originalUut;
12
 @property(nonatomic, strong) RNNBottomTabsController * uut;
13
 @property(nonatomic, strong) RNNBottomTabsController * uut;
16
 
17
 
17
 @end
18
 @end
18
 
19
 
19
-@implementation RNNTabBarControllerTest
20
+@implementation BottomTabsControllerTest
20
 
21
 
21
 - (void)setUp {
22
 - (void)setUp {
22
     [super setUp];
23
     [super setUp];
23
 
24
 
24
     id tabBarClassMock = OCMClassMock([RNNBottomTabsController class]);
25
     id tabBarClassMock = OCMClassMock([RNNBottomTabsController class]);
25
     OCMStub([tabBarClassMock parentViewController]).andReturn([OCMockObject partialMockForObject:[RNNBottomTabsController new]]);
26
     OCMStub([tabBarClassMock parentViewController]).andReturn([OCMockObject partialMockForObject:[RNNBottomTabsController new]]);
26
-	NSArray* children = @[[[UIViewController alloc] init]];
27
+	UIViewController* childViewController = [RNNComponentViewController createWithComponentId:@"componentId" initialOptions:[RNNNavigationOptions emptyOptions]];
28
+	NSArray* children = @[childViewController];
27
     self.mockTabBarPresenter = [OCMockObject partialMockForObject:[[RNNBottomTabsPresenter alloc] init]];
29
     self.mockTabBarPresenter = [OCMockObject partialMockForObject:[[RNNBottomTabsPresenter alloc] init]];
28
-    self.mockChildViewController = [OCMockObject partialMockForObject:[RNNComponentViewController new]];
30
+    self.mockChildViewController = [OCMockObject partialMockForObject:childViewController];
29
     self.mockEventEmitter = [OCMockObject partialMockForObject:[RNNEventEmitter new]];
31
     self.mockEventEmitter = [OCMockObject partialMockForObject:[RNNEventEmitter new]];
30
 	self.originalUut = [[RNNBottomTabsController alloc] initWithLayoutInfo:nil creator:nil options:[[RNNNavigationOptions alloc] initWithDict:@{}] defaultOptions:nil presenter:self.mockTabBarPresenter bottomTabPresenter:[BottomTabPresenterCreator createWithDefaultOptions:nil] dotIndicatorPresenter:[[RNNDotIndicatorPresenter alloc] initWithDefaultOptions:nil] eventEmitter:self.mockEventEmitter childViewControllers:children bottomTabsAttacher:nil];
32
 	self.originalUut = [[RNNBottomTabsController alloc] initWithLayoutInfo:nil creator:nil options:[[RNNNavigationOptions alloc] initWithDict:@{}] defaultOptions:nil presenter:self.mockTabBarPresenter bottomTabPresenter:[BottomTabPresenterCreator createWithDefaultOptions:nil] dotIndicatorPresenter:[[RNNDotIndicatorPresenter alloc] initWithDefaultOptions:nil] eventEmitter:self.mockEventEmitter childViewControllers:children bottomTabsAttacher:nil];
31
     self.uut = [OCMockObject partialMockForObject:self.originalUut];
33
     self.uut = [OCMockObject partialMockForObject:self.originalUut];
101
 - (void)testMergeOptions_shouldInvokePresenterMergeOptions {
103
 - (void)testMergeOptions_shouldInvokePresenterMergeOptions {
102
     RNNNavigationOptions *options = [[RNNNavigationOptions alloc] initWithDict:@{}];
104
     RNNNavigationOptions *options = [[RNNNavigationOptions alloc] initWithDict:@{}];
103
 
105
 
104
-    [(RNNBottomTabsPresenter *) [self.mockTabBarPresenter expect] mergeOptions:options resolvedOptions:[self.uut options]];
106
+    [(RNNBottomTabsPresenter *) [self.mockTabBarPresenter expect] mergeOptions:options resolvedOptions:[OCMArg any]];
105
     [self.uut mergeOptions:options];
107
     [self.uut mergeOptions:options];
106
     [self.mockTabBarPresenter verify];
108
     [self.mockTabBarPresenter verify];
107
 }
109
 }
142
     [self.mockTabBarPresenter verify];
144
     [self.mockTabBarPresenter verify];
143
 }
145
 }
144
 
146
 
147
+- (void)testPreferredStatusHidden_shouldResolveChildStatusBarVisibleTrue {
148
+	self.uut.getCurrentChild.options.statusBar.visible = [Bool withValue:@(1)];
149
+	XCTAssertFalse(self.uut.prefersStatusBarHidden);
150
+}
151
+
152
+- (void)testPreferredStatusHidden_shouldResolveChildStatusBarVisibleFalse {
153
+	self.uut.getCurrentChild.options.statusBar.visible = [Bool withValue:@(0)];
154
+	XCTAssertTrue(self.uut.prefersStatusBarHidden);
155
+}
156
+
157
+- (void)testPreferredStatusHidden_shouldHideStatusBar {
158
+	self.uut.options.statusBar.visible = [Bool withValue:@(1)];
159
+	XCTAssertFalse(self.uut.prefersStatusBarHidden);
160
+}
161
+
162
+- (void)testPreferredStatusHidden_shouldShowStatusBar {
163
+	self.uut.options.statusBar.visible = [Bool withValue:@(0)];
164
+	XCTAssertTrue(self.uut.prefersStatusBarHidden);
165
+}
166
+
145
 - (void)testTabBarControllerDidSelectViewControllerDelegate_shouldInvokeSendBottomTabSelectedEvent {
167
 - (void)testTabBarControllerDidSelectViewControllerDelegate_shouldInvokeSendBottomTabSelectedEvent {
146
     NSUInteger selectedIndex = 2;
168
     NSUInteger selectedIndex = 2;
147
     OCMStub([self.uut selectedIndex]).andReturn(selectedIndex);
169
     OCMStub([self.uut selectedIndex]).andReturn(selectedIndex);

+ 24
- 4
playground/ios/NavigationTests/RNNSideMenuControllerTest.m Parādīt failu

16
 - (void)setUp {
16
 - (void)setUp {
17
     [super setUp];
17
     [super setUp];
18
 	_creator = [[RNNTestRootViewCreator alloc] init];
18
 	_creator = [[RNNTestRootViewCreator alloc] init];
19
-	_leftVC = [[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:nil defaultOptions:nil presenter:nil eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeLeft];
20
-	_rightVC = [[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:nil defaultOptions:nil presenter:nil eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeRight];
21
-	_centerVC =[[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:nil defaultOptions:nil presenter:nil eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeCenter];
22
-	self.uut = [[RNNSideMenuController alloc] initWithLayoutInfo:nil creator:nil childViewControllers:@[_leftVC, _centerVC, _rightVC] options:[[RNNNavigationOptions alloc] initEmptyOptions] defaultOptions:nil presenter:nil eventEmitter:nil];
19
+	_leftVC = [[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:[RNNNavigationOptions emptyOptions] defaultOptions:nil presenter:nil eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeLeft];
20
+	_rightVC = [[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:[RNNNavigationOptions emptyOptions] defaultOptions:nil presenter:nil eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeRight];
21
+	_centerVC =[[RNNSideMenuChildVC alloc] initWithLayoutInfo:nil creator:nil options:[RNNNavigationOptions emptyOptions] defaultOptions:nil presenter:nil eventEmitter:nil childViewController:self.generateComponent type:RNNSideMenuChildTypeCenter];
22
+	self.uut = [[RNNSideMenuController alloc] initWithLayoutInfo:nil creator:nil childViewControllers:@[_leftVC, _centerVC, _rightVC] options:[RNNNavigationOptions emptyOptions] defaultOptions:nil presenter:[[RNNSideMenuPresenter alloc] initWithDefaultOptions:nil] eventEmitter:nil];
23
 }
23
 }
24
 
24
 
25
 - (RNNComponentViewController *)generateComponent {
25
 - (RNNComponentViewController *)generateComponent {
70
     [self waitForExpectationsWithTimeout:1 handler:nil];
70
     [self waitForExpectationsWithTimeout:1 handler:nil];
71
 }
71
 }
72
 
72
 
73
+- (void)testPreferredStatusHidden_shouldResolveChildStatusBarVisibleTrue {
74
+	self.uut.getCurrentChild.options.statusBar.visible = [Bool withValue:@(1)];
75
+	XCTAssertFalse(self.uut.prefersStatusBarHidden);
76
+}
77
+
78
+- (void)testPreferredStatusHidden_shouldResolveChildStatusBarVisibleFalse {
79
+	self.uut.getCurrentChild.options.statusBar.visible = [Bool withValue:@(0)];
80
+	XCTAssertTrue(self.uut.prefersStatusBarHidden);
81
+}
82
+
83
+- (void)testPreferredStatusHidden_shouldHideStatusBar {
84
+	self.uut.options.statusBar.visible = [Bool withValue:@(1)];
85
+	XCTAssertFalse(self.uut.prefersStatusBarHidden);
86
+}
87
+
88
+- (void)testPreferredStatusHidden_shouldShowStatusBar {
89
+	self.uut.options.statusBar.visible = [Bool withValue:@(0)];
90
+	XCTAssertTrue(self.uut.prefersStatusBarHidden);
91
+}
92
+
73
 @end
93
 @end

+ 20
- 0
playground/ios/NavigationTests/RNNStackControllerTest.m Parādīt failu

70
 	XCTAssertTrue(self.uut.preferredStatusBarStyle == self.uut.getCurrentChild.preferredStatusBarStyle);
70
 	XCTAssertTrue(self.uut.preferredStatusBarStyle == self.uut.getCurrentChild.preferredStatusBarStyle);
71
 }
71
 }
72
 
72
 
73
+- (void)testPreferredStatusHidden_shouldResolveChildStatusBarVisibleTrue {
74
+	self.uut.getCurrentChild.options.statusBar.visible = [Bool withValue:@(1)];
75
+	XCTAssertFalse(self.uut.prefersStatusBarHidden);
76
+}
77
+
78
+- (void)testPreferredStatusHidden_shouldResolveChildStatusBarVisibleFalse {
79
+	self.uut.getCurrentChild.options.statusBar.visible = [Bool withValue:@(0)];
80
+	XCTAssertTrue(self.uut.prefersStatusBarHidden);
81
+}
82
+
83
+- (void)testPreferredStatusHidden_shouldHideStatusBar {
84
+	self.uut.options.statusBar.visible = [Bool withValue:@(1)];
85
+	XCTAssertFalse(self.uut.prefersStatusBarHidden);
86
+}
87
+
88
+- (void)testPreferredStatusHidden_shouldShowStatusBar {
89
+	self.uut.options.statusBar.visible = [Bool withValue:@(0)];
90
+	XCTAssertTrue(self.uut.prefersStatusBarHidden);
91
+}
92
+
73
 - (void)testPopGestureEnabled_false {
93
 - (void)testPopGestureEnabled_false {
74
 	NSNumber* popGestureEnabled = @(0);
94
 	NSNumber* popGestureEnabled = @(0);
75
 	RNNNavigationOptions* options = [[RNNNavigationOptions alloc] initEmptyOptions];
95
 	RNNNavigationOptions* options = [[RNNNavigationOptions alloc] initEmptyOptions];

+ 5
- 5
playground/ios/playground.xcodeproj/project.pbxproj Parādīt failu

30
 		E58D26472385888C003F36BA /* RNNRootViewControllerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D26262385888B003F36BA /* RNNRootViewControllerTest.m */; };
30
 		E58D26472385888C003F36BA /* RNNRootViewControllerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D26262385888B003F36BA /* RNNRootViewControllerTest.m */; };
31
 		E58D26482385888C003F36BA /* RNNDotIndicatorPresenterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D26272385888B003F36BA /* RNNDotIndicatorPresenterTest.m */; };
31
 		E58D26482385888C003F36BA /* RNNDotIndicatorPresenterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D26272385888B003F36BA /* RNNDotIndicatorPresenterTest.m */; };
32
 		E58D26492385888C003F36BA /* RNNFontAttributesCreatorTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D26282385888B003F36BA /* RNNFontAttributesCreatorTest.m */; };
32
 		E58D26492385888C003F36BA /* RNNFontAttributesCreatorTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D26282385888B003F36BA /* RNNFontAttributesCreatorTest.m */; };
33
-		E58D264A2385888C003F36BA /* RNNTabBarControllerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D26292385888B003F36BA /* RNNTabBarControllerTest.m */; };
33
+		E58D264A2385888C003F36BA /* BottomTabsControllerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D26292385888B003F36BA /* BottomTabsControllerTest.m */; };
34
 		E58D264B2385888C003F36BA /* RNNLayoutManagerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D262A2385888B003F36BA /* RNNLayoutManagerTest.m */; };
34
 		E58D264B2385888C003F36BA /* RNNLayoutManagerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D262A2385888B003F36BA /* RNNLayoutManagerTest.m */; };
35
 		E58D264C2385888C003F36BA /* RNNSideMenuParserTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D262B2385888B003F36BA /* RNNSideMenuParserTest.m */; };
35
 		E58D264C2385888C003F36BA /* RNNSideMenuParserTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D262B2385888B003F36BA /* RNNSideMenuParserTest.m */; };
36
 		E58D264D2385888C003F36BA /* RNNOverlayManagerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D262D2385888B003F36BA /* RNNOverlayManagerTest.m */; };
36
 		E58D264D2385888C003F36BA /* RNNOverlayManagerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E58D262D2385888B003F36BA /* RNNOverlayManagerTest.m */; };
114
 		E58D26262385888B003F36BA /* RNNRootViewControllerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNNRootViewControllerTest.m; sourceTree = "<group>"; };
114
 		E58D26262385888B003F36BA /* RNNRootViewControllerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNNRootViewControllerTest.m; sourceTree = "<group>"; };
115
 		E58D26272385888B003F36BA /* RNNDotIndicatorPresenterTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNNDotIndicatorPresenterTest.m; sourceTree = "<group>"; };
115
 		E58D26272385888B003F36BA /* RNNDotIndicatorPresenterTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNNDotIndicatorPresenterTest.m; sourceTree = "<group>"; };
116
 		E58D26282385888B003F36BA /* RNNFontAttributesCreatorTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNNFontAttributesCreatorTest.m; sourceTree = "<group>"; };
116
 		E58D26282385888B003F36BA /* RNNFontAttributesCreatorTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNNFontAttributesCreatorTest.m; sourceTree = "<group>"; };
117
-		E58D26292385888B003F36BA /* RNNTabBarControllerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNNTabBarControllerTest.m; sourceTree = "<group>"; };
117
+		E58D26292385888B003F36BA /* BottomTabsControllerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BottomTabsControllerTest.m; sourceTree = "<group>"; };
118
 		E58D262A2385888B003F36BA /* RNNLayoutManagerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNNLayoutManagerTest.m; sourceTree = "<group>"; };
118
 		E58D262A2385888B003F36BA /* RNNLayoutManagerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNNLayoutManagerTest.m; sourceTree = "<group>"; };
119
 		E58D262B2385888B003F36BA /* RNNSideMenuParserTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNNSideMenuParserTest.m; sourceTree = "<group>"; };
119
 		E58D262B2385888B003F36BA /* RNNSideMenuParserTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNNSideMenuParserTest.m; sourceTree = "<group>"; };
120
 		E58D262C2385888B003F36BA /* RNNOptionsTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RNNOptionsTest.h; sourceTree = "<group>"; };
120
 		E58D262C2385888B003F36BA /* RNNOptionsTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RNNOptionsTest.h; sourceTree = "<group>"; };
260
 			isa = PBXGroup;
260
 			isa = PBXGroup;
261
 			children = (
261
 			children = (
262
 				E58D26442385888C003F36BA /* Options */,
262
 				E58D26442385888C003F36BA /* Options */,
263
+				E58D262E2385888B003F36BA /* utils */,
263
 				E58D26422385888C003F36BA /* RNNBasePresenterTest.m */,
264
 				E58D26422385888C003F36BA /* RNNBasePresenterTest.m */,
264
 				500E9FE62406A4E200C61231 /* BottomTabPresenterTest.m */,
265
 				500E9FE62406A4E200C61231 /* BottomTabPresenterTest.m */,
265
 				50BCB27523F1A26600D6C8E5 /* TopBarAppearancePresenterTest.m */,
266
 				50BCB27523F1A26600D6C8E5 /* TopBarAppearancePresenterTest.m */,
281
 				E58D262B2385888B003F36BA /* RNNSideMenuParserTest.m */,
282
 				E58D262B2385888B003F36BA /* RNNSideMenuParserTest.m */,
282
 				E58D26362385888B003F36BA /* RNNSideMenuPresenterTest.m */,
283
 				E58D26362385888B003F36BA /* RNNSideMenuPresenterTest.m */,
283
 				E58D26312385888B003F36BA /* RNNStackPresenterTest.m */,
284
 				E58D26312385888B003F36BA /* RNNStackPresenterTest.m */,
284
-				E58D26292385888B003F36BA /* RNNTabBarControllerTest.m */,
285
+				E58D26292385888B003F36BA /* BottomTabsControllerTest.m */,
285
 				5022EDCB240551EE00852BA6 /* RNNBottomTabsAppearancePresenterTest.m */,
286
 				5022EDCB240551EE00852BA6 /* RNNBottomTabsAppearancePresenterTest.m */,
286
 				E58D26342385888B003F36BA /* RNNTestRootViewCreator.h */,
287
 				E58D26342385888B003F36BA /* RNNTestRootViewCreator.h */,
287
 				E58D263D2385888C003F36BA /* RNNTestRootViewCreator.m */,
288
 				E58D263D2385888C003F36BA /* RNNTestRootViewCreator.m */,
292
 				50CF233B240695B10098042D /* RNNBottomTabsController+Helpers.h */,
293
 				50CF233B240695B10098042D /* RNNBottomTabsController+Helpers.h */,
293
 				50CF233C240695B10098042D /* RNNBottomTabsController+Helpers.m */,
294
 				50CF233C240695B10098042D /* RNNBottomTabsController+Helpers.m */,
294
 				50647FE223E3196800B92025 /* RNNExternalViewControllerTests.m */,
295
 				50647FE223E3196800B92025 /* RNNExternalViewControllerTests.m */,
295
-				E58D262E2385888B003F36BA /* utils */,
296
 				E58D261F238587F4003F36BA /* Info.plist */,
296
 				E58D261F238587F4003F36BA /* Info.plist */,
297
 			);
297
 			);
298
 			path = NavigationTests;
298
 			path = NavigationTests;
770
 				501C86B9239FE9C400E0B631 /* UIImage+Utils.m in Sources */,
770
 				501C86B9239FE9C400E0B631 /* UIImage+Utils.m in Sources */,
771
 				E58D265F2385888C003F36BA /* RNNBasePresenterTest.m in Sources */,
771
 				E58D265F2385888C003F36BA /* RNNBasePresenterTest.m in Sources */,
772
 				E58D26542385888C003F36BA /* RNNSideMenuControllerTest.m in Sources */,
772
 				E58D26542385888C003F36BA /* RNNSideMenuControllerTest.m in Sources */,
773
-				E58D264A2385888C003F36BA /* RNNTabBarControllerTest.m in Sources */,
773
+				E58D264A2385888C003F36BA /* BottomTabsControllerTest.m in Sources */,
774
 				E58D26472385888C003F36BA /* RNNRootViewControllerTest.m in Sources */,
774
 				E58D26472385888C003F36BA /* RNNRootViewControllerTest.m in Sources */,
775
 				E58D26582385888C003F36BA /* UITabBarController+RNNOptionsTest.m in Sources */,
775
 				E58D26582385888C003F36BA /* UITabBarController+RNNOptionsTest.m in Sources */,
776
 				E58D265A2385888C003F36BA /* RNNTestRootViewCreator.m in Sources */,
776
 				E58D265A2385888C003F36BA /* RNNTestRootViewCreator.m in Sources */,