turbo-native-initializer 0.0.17 → 0.0.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/turbo_native_initializer/generator.rb +1 -1
- data/lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebBottomSheetFragment.kt.tt +8 -0
- data/lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/main/MainSessionNavHostFragment.kt.tt +8 -1
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebBottomSheetFragment.kt.tt +8 -0
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/main/BaseSessionNavHostFragment.kt.tt +8 -1
- data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Controllers/TurboNavigationController.swift +5 -3
- data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Delegates/AppDelegate.swift +20 -1
- data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Delegates/SceneDelegate.swift +7 -6
- data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/{Resources → Views}/Base.lproj/Main.storyboard +2 -2
- data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject.xcodeproj/project.pbxproj.tt +20 -20
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Controllers/TurboNavigationController.swift +5 -3
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Delegates/AppDelegate.swift +20 -1
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Delegates/SceneDelegate.swift +14 -8
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Views/Base.lproj/Main.storyboard +17 -0
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject.xcodeproj/project.pbxproj.tt +21 -21
- data/lib/turbo_native_initializer/version.rb +1 -1
- metadata +12 -10
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Resources/Base.lproj/Main.storyboard +0 -52
- /data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/{Configuration → Resources}/Info.plist +0 -0
- /data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/{Configuration → Resources}/path-configuration.json +0 -0
- /data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/{Resources → Views}/Base.lproj/LaunchScreen.storyboard +0 -0
- /data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/{Configuration → Resources}/Info.plist +0 -0
- /data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/{Configuration → Resources}/path-configuration.json +0 -0
- /data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/{Resources → Views}/Base.lproj/LaunchScreen.storyboard +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6833f8bad7eb840005b6b4112a54ba0fc0356eff5fef5549b20e80f207beabd1
|
4
|
+
data.tar.gz: 120c51e582c425132d8be00d420b3fb73127adff18ec73e428909d6ebc6e42f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12c27f3b351fb8785ed41661f4e69a1499d3a34e4d8b0acbc501319e317104f19adb359c15de56c680340698f9a4e83070e41699b3bb2cf308f365a534d8de10
|
7
|
+
data.tar.gz: ad5de54e453e5c61ff58ba4498017592ed18d1665c97aa972d2345db22d539d1233b026d9e4b6b2df79c25a569567f59cb0a159eeeb8515aea0b44fa0bbd338f
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@ A turbo native project generator for iOS and Android.
|
|
8
8
|
- Added SwiftUI numbers example screen. (iOS)
|
9
9
|
- Added Jetpack Compose numbers example screen. (Android)
|
10
10
|
- Added UIAlertController to handle `data-turbo-confirm`. (iOS)
|
11
|
-
- Added presentations `
|
11
|
+
- Added presentations `back`, `refresh`, `none`, `replace`, `clear-all`, and `replace-all`. (iOS)
|
12
12
|
- Added `visitable` property in order to avoid visits. (iOS)
|
13
13
|
- Added support for tab navigation. (iOS/Android)
|
14
14
|
- Added support for flash messages. (iOS/Android)
|
@@ -19,12 +19,12 @@ module TurboNativeInitializer
|
|
19
19
|
def copy_template_files
|
20
20
|
case options.platform
|
21
21
|
when "ios"
|
22
|
-
directory "#{project}/TurboNativeProject/Configuration", "#{name}/#{name}/Configuration"
|
23
22
|
directory "#{project}/TurboNativeProject/Controllers", "#{name}/#{name}/Controllers"
|
24
23
|
directory "#{project}/TurboNativeProject/Delegates", "#{name}/#{name}/Delegates"
|
25
24
|
directory "#{project}/TurboNativeProject/Extensions", "#{name}/#{name}/Extensions"
|
26
25
|
directory "#{project}/TurboNativeProject/Resources", "#{name}/#{name}/Resources"
|
27
26
|
directory "#{project}/TurboNativeProject/Strada", "#{name}/#{name}/Strada"
|
27
|
+
directory "#{project}/TurboNativeProject/Views", "#{name}/#{name}/Views"
|
28
28
|
directory "#{project}/TurboNativeProject.xcodeproj", "#{name}/#{name}.xcodeproj"
|
29
29
|
template "#{project}/TurboNativeProject/TurboNativeProject.swift", "#{name}/#{name}/#{name}.swift"
|
30
30
|
when "android"
|
@@ -0,0 +1,8 @@
|
|
1
|
+
package <%= package_name %>.features.web
|
2
|
+
|
3
|
+
import <%= package_name %>.base.NavDestination
|
4
|
+
import dev.hotwire.turbo.fragments.TurboWebBottomSheetDialogFragment
|
5
|
+
import dev.hotwire.turbo.nav.TurboNavGraphDestination
|
6
|
+
|
7
|
+
@TurboNavGraphDestination(uri = "turbo://fragment/web/modal/sheet")
|
8
|
+
class WebBottomSheetFragment : TurboWebBottomSheetDialogFragment(), NavDestination
|
@@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment
|
|
5
5
|
import dev.hotwire.strada.Bridge
|
6
6
|
import dev.hotwire.turbo.config.TurboPathConfiguration
|
7
7
|
import <%= package_name %>.features.native.NumbersFragment
|
8
|
+
import <%= package_name %>.features.web.WebBottomSheetFragment
|
8
9
|
import <%= package_name %>.features.web.WebFragment
|
9
10
|
import <%= package_name %>.features.web.WebHomeFragment
|
10
11
|
import <%= package_name %>.features.web.WebModalFragment
|
@@ -23,7 +24,13 @@ class MainSessionNavHostFragment : TurboSessionNavHostFragment() {
|
|
23
24
|
get() = listOf()
|
24
25
|
|
25
26
|
override val registeredFragments: List<KClass<out Fragment>>
|
26
|
-
get() = listOf(
|
27
|
+
get() = listOf(
|
28
|
+
WebFragment::class,
|
29
|
+
WebHomeFragment::class,
|
30
|
+
WebModalFragment::class,
|
31
|
+
WebBottomSheetFragment::class,
|
32
|
+
NumbersFragment::class
|
33
|
+
)
|
27
34
|
|
28
35
|
override val pathConfigurationLocation: TurboPathConfiguration.Location
|
29
36
|
get() = TurboPathConfiguration.Location(assetFilePath = "json/configuration.json")
|
@@ -0,0 +1,8 @@
|
|
1
|
+
package <%= package_name %>.features.web
|
2
|
+
|
3
|
+
import <%= package_name %>.base.NavDestination
|
4
|
+
import dev.hotwire.turbo.fragments.TurboWebBottomSheetDialogFragment
|
5
|
+
import dev.hotwire.turbo.nav.TurboNavGraphDestination
|
6
|
+
|
7
|
+
@TurboNavGraphDestination(uri = "turbo://fragment/web/modal/sheet")
|
8
|
+
class WebBottomSheetFragment : TurboWebBottomSheetDialogFragment(), NavDestination
|
@@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment
|
|
5
5
|
import dev.hotwire.strada.Bridge
|
6
6
|
import dev.hotwire.turbo.config.TurboPathConfiguration
|
7
7
|
import <%= package_name %>.features.native.NumbersFragment
|
8
|
+
import <%= package_name %>.features.web.WebBottomSheetFragment
|
8
9
|
import <%= package_name %>.features.web.WebFragment
|
9
10
|
import <%= package_name %>.features.web.WebHomeFragment
|
10
11
|
import <%= package_name %>.features.web.WebModalFragment
|
@@ -17,7 +18,13 @@ abstract class BaseSessionNavHostFragment : TurboSessionNavHostFragment() {
|
|
17
18
|
get() = listOf()
|
18
19
|
|
19
20
|
override val registeredFragments: List<KClass<out Fragment>>
|
20
|
-
get() = listOf(
|
21
|
+
get() = listOf(
|
22
|
+
WebFragment::class,
|
23
|
+
WebHomeFragment::class,
|
24
|
+
WebModalFragment::class,
|
25
|
+
WebBottomSheetFragment::class,
|
26
|
+
NumbersFragment::class
|
27
|
+
)
|
21
28
|
|
22
29
|
override val pathConfigurationLocation: TurboPathConfiguration.Location
|
23
30
|
get() = TurboPathConfiguration.Location(assetFilePath = "json/configuration.json")
|
@@ -9,7 +9,7 @@ class TurboNavigationController : UINavigationController {
|
|
9
9
|
|
10
10
|
func push(url: URL) {
|
11
11
|
let properties = session.pathConfiguration?.properties(for: url) ?? [:]
|
12
|
-
route(url: url, options:
|
12
|
+
route(url: url, options: .init(action: .advance), properties: properties)
|
13
13
|
}
|
14
14
|
|
15
15
|
func route(url: URL, options: VisitOptions, properties: PathProperties) {
|
@@ -122,8 +122,10 @@ extension TurboNavigationController {
|
|
122
122
|
popToRootViewController(animated: true)
|
123
123
|
} else if isReplaceAll(properties) {
|
124
124
|
setViewControllers([viewController], animated: false)
|
125
|
-
} else if isReplace(properties)
|
126
|
-
setViewControllers(
|
125
|
+
} else if isReplace(properties) {
|
126
|
+
setViewControllers(viewControllers.dropLast() + [viewController], animated: false)
|
127
|
+
} else if action == .replace {
|
128
|
+
setViewControllers(viewControllers.dropLast() + [viewController], animated: false)
|
127
129
|
} else {
|
128
130
|
pushViewController(viewController, animated: true)
|
129
131
|
}
|
data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Delegates/AppDelegate.swift
CHANGED
@@ -1,4 +1,23 @@
|
|
1
1
|
import UIKit
|
2
2
|
|
3
3
|
@main
|
4
|
-
class AppDelegate: UIResponder, UIApplicationDelegate {
|
4
|
+
class AppDelegate: UIResponder, UIApplicationDelegate {
|
5
|
+
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
6
|
+
// Override point for customization after application launch.
|
7
|
+
return true
|
8
|
+
}
|
9
|
+
|
10
|
+
// MARK: UISceneSession Lifecycle
|
11
|
+
|
12
|
+
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
13
|
+
// Called when a new scene session is being created.
|
14
|
+
// Use this method to select a configuration to create the new scene with.
|
15
|
+
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
|
16
|
+
}
|
17
|
+
|
18
|
+
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
|
19
|
+
// Called when the user discards a scene session.
|
20
|
+
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
|
21
|
+
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
22
|
+
}
|
23
|
+
}
|
@@ -13,10 +13,12 @@ final class SceneDelegate: UIResponder {
|
|
13
13
|
// MARK: - Setup
|
14
14
|
|
15
15
|
private func configureRootViewController() {
|
16
|
-
|
17
|
-
|
16
|
+
UINavigationBar.appearance().scrollEdgeAppearance = .init()
|
17
|
+
|
18
|
+
navigationController = TurboNavigationController()
|
18
19
|
navigationController.session = session
|
19
20
|
navigationController.modalSession = modalSession
|
21
|
+
window!.rootViewController = navigationController
|
20
22
|
}
|
21
23
|
|
22
24
|
// MARK: - Authentication
|
@@ -55,8 +57,7 @@ final class SceneDelegate: UIResponder {
|
|
55
57
|
|
56
58
|
extension SceneDelegate: UIWindowSceneDelegate {
|
57
59
|
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
|
58
|
-
guard let _ = scene as? UIWindowScene else { return }
|
59
|
-
|
60
|
+
guard let _ = (scene as? UIWindowScene) else { return }
|
60
61
|
configureRootViewController()
|
61
62
|
navigationController.route(url: rootURL, options: VisitOptions(action: .replace), properties: [:])
|
62
63
|
}
|
@@ -99,8 +100,8 @@ extension SceneDelegate: SessionDelegate {
|
|
99
100
|
extension SceneDelegate: WKUIDelegate {
|
100
101
|
func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
|
101
102
|
let confirm = UIAlertController(title: nil, message: message, preferredStyle: .alert)
|
102
|
-
confirm.addAction(
|
103
|
-
confirm.addAction(
|
103
|
+
confirm.addAction(.init(title: "Cancel", style: .cancel) { _ in completionHandler(false) })
|
104
|
+
confirm.addAction(.init(title: "OK", style: .default) { _ in completionHandler(true) })
|
104
105
|
navigationController.present(confirm, animated: true)
|
105
106
|
}
|
106
107
|
}
|
@@ -5,10 +5,10 @@
|
|
5
5
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
|
6
6
|
</dependencies>
|
7
7
|
<scenes>
|
8
|
-
<!--
|
8
|
+
<!--View Controller-->
|
9
9
|
<scene sceneID="s0d-6b-0kx">
|
10
10
|
<objects>
|
11
|
-
<viewController id="Y6W-OH-hqX" customClass="
|
11
|
+
<viewController id="Y6W-OH-hqX" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController"/>
|
12
12
|
<placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
13
13
|
</objects>
|
14
14
|
<point key="canvasLocation" x="130" y="-2"/>
|
@@ -69,23 +69,14 @@
|
|
69
69
|
isa = PBXGroup;
|
70
70
|
children = (
|
71
71
|
5D281BB32ABC0CB0001CE599 /* BridgeComponent+App.swift */,
|
72
|
-
5D281BB52ABC0CB9001CE599 /* FormComponent.swift */,
|
73
|
-
5D1F2EC02ABEB12300B2819A /* NavButtonComponent.swift */,
|
74
72
|
5D91C53F2AC538960046D872 /* FlashMessageComponent.swift */,
|
73
|
+
5D281BB52ABC0CB9001CE599 /* FormComponent.swift */,
|
75
74
|
5DA9C92E2AC7E38100FEA7E6 /* MenuComponent.swift */,
|
75
|
+
5D1F2EC02ABEB12300B2819A /* NavButtonComponent.swift */,
|
76
76
|
);
|
77
77
|
path = Strada;
|
78
78
|
sourceTree = "<group>";
|
79
79
|
};
|
80
|
-
5D2FA5CD2A9DB1AB001AF2F1 /* Configuration */ = {
|
81
|
-
isa = PBXGroup;
|
82
|
-
children = (
|
83
|
-
5DCC50E12A959DFA00B529A0 /* Info.plist */,
|
84
|
-
5DCC50E92A95A19600B529A0 /* path-configuration.json */,
|
85
|
-
);
|
86
|
-
path = Configuration;
|
87
|
-
sourceTree = "<group>";
|
88
|
-
};
|
89
80
|
5DAD248F2AD6533E0082D23D /* Extensions */ = {
|
90
81
|
isa = PBXGroup;
|
91
82
|
children = (
|
@@ -114,12 +105,12 @@
|
|
114
105
|
5DCC50D22A959DF900B529A0 /* <%= name %> */ = {
|
115
106
|
isa = PBXGroup;
|
116
107
|
children = (
|
117
|
-
5DAD248F2AD6533E0082D23D /* Extensions */,
|
118
|
-
5D281BB22ABC0C8F001CE599 /* Strada */,
|
119
108
|
5DCC50F42A95AC4E00B529A0 /* Controllers */,
|
120
109
|
5DCC50FB2A95B55200B529A0 /* Delegates */,
|
110
|
+
5DAD248F2AD6533E0082D23D /* Extensions */,
|
121
111
|
5DCC51072A95CCEE00B529A0 /* Resources */,
|
122
|
-
|
112
|
+
5D281BB22ABC0C8F001CE599 /* Strada */,
|
113
|
+
5DF25B382ADA0DF40046C704 /* Views */,
|
123
114
|
5DCC50F22A95A7E600B529A0 /* <%= name %>.swift */,
|
124
115
|
);
|
125
116
|
path = <%= name %>;
|
@@ -128,10 +119,10 @@
|
|
128
119
|
5DCC50F42A95AC4E00B529A0 /* Controllers */ = {
|
129
120
|
isa = PBXGroup;
|
130
121
|
children = (
|
131
|
-
5DCC50E72A95A0D900B529A0 /* TurboNavigationController.swift */,
|
132
122
|
5DCC50ED2A95A27600B529A0 /* ErrorPresenter.swift */,
|
133
|
-
5DCC50D72A959DF900B529A0 /* TurboWebViewController.swift */,
|
134
123
|
5DDD58802AA9A8BE00FAC961 /* NumbersViewController.swift */,
|
124
|
+
5DCC50E72A95A0D900B529A0 /* TurboNavigationController.swift */,
|
125
|
+
5DCC50D72A959DF900B529A0 /* TurboWebViewController.swift */,
|
135
126
|
);
|
136
127
|
path = Controllers;
|
137
128
|
sourceTree = "<group>";
|
@@ -149,10 +140,19 @@
|
|
149
140
|
isa = PBXGroup;
|
150
141
|
children = (
|
151
142
|
5DCC50DC2A959DFA00B529A0 /* Assets.xcassets */,
|
143
|
+
5DCC50E12A959DFA00B529A0 /* Info.plist */,
|
144
|
+
5DCC50E92A95A19600B529A0 /* path-configuration.json */,
|
145
|
+
);
|
146
|
+
path = Resources;
|
147
|
+
sourceTree = "<group>";
|
148
|
+
};
|
149
|
+
5DF25B382ADA0DF40046C704 /* Views */ = {
|
150
|
+
isa = PBXGroup;
|
151
|
+
children = (
|
152
152
|
5DCC50DE2A959DFA00B529A0 /* LaunchScreen.storyboard */,
|
153
153
|
5D0D86212A9AA70500A525E9 /* Main.storyboard */,
|
154
154
|
);
|
155
|
-
path =
|
155
|
+
path = Views;
|
156
156
|
sourceTree = "<group>";
|
157
157
|
};
|
158
158
|
/* End PBXGroup section */
|
@@ -398,7 +398,7 @@
|
|
398
398
|
CODE_SIGN_STYLE = Automatic;
|
399
399
|
CURRENT_PROJECT_VERSION = 1;
|
400
400
|
GENERATE_INFOPLIST_FILE = YES;
|
401
|
-
INFOPLIST_FILE = <%= name %>/
|
401
|
+
INFOPLIST_FILE = <%= name %>/Resources/Info.plist;
|
402
402
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
403
403
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
404
404
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
@@ -425,7 +425,7 @@
|
|
425
425
|
CODE_SIGN_STYLE = Automatic;
|
426
426
|
CURRENT_PROJECT_VERSION = 1;
|
427
427
|
GENERATE_INFOPLIST_FILE = YES;
|
428
|
-
INFOPLIST_FILE = <%= name %>/
|
428
|
+
INFOPLIST_FILE = <%= name %>/Resources/Info.plist;
|
429
429
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
430
430
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
431
431
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
@@ -481,7 +481,7 @@
|
|
481
481
|
repositoryURL = "https://github.com/hotwired/turbo-ios";
|
482
482
|
requirement = {
|
483
483
|
kind = exactVersion;
|
484
|
-
version = 7.0.
|
484
|
+
version = 7.0.1;
|
485
485
|
};
|
486
486
|
};
|
487
487
|
/* End XCRemoteSwiftPackageReference section */
|
@@ -9,7 +9,7 @@ class TurboNavigationController : UINavigationController {
|
|
9
9
|
|
10
10
|
func push(url: URL) {
|
11
11
|
let properties = session.pathConfiguration?.properties(for: url) ?? [:]
|
12
|
-
route(url: url, options:
|
12
|
+
route(url: url, options: .init(action: .advance), properties: properties)
|
13
13
|
}
|
14
14
|
|
15
15
|
func route(url: URL, options: VisitOptions, properties: PathProperties) {
|
@@ -122,8 +122,10 @@ extension TurboNavigationController {
|
|
122
122
|
popToRootViewController(animated: true)
|
123
123
|
} else if isReplaceAll(properties) {
|
124
124
|
setViewControllers([viewController], animated: false)
|
125
|
-
} else if isReplace(properties)
|
126
|
-
setViewControllers(
|
125
|
+
} else if isReplace(properties) {
|
126
|
+
setViewControllers(viewControllers.dropLast() + [viewController], animated: false)
|
127
|
+
} else if action == .replace {
|
128
|
+
setViewControllers(viewControllers.dropLast() + [viewController], animated: false)
|
127
129
|
} else {
|
128
130
|
pushViewController(viewController, animated: true)
|
129
131
|
}
|
data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Delegates/AppDelegate.swift
CHANGED
@@ -1,4 +1,23 @@
|
|
1
1
|
import UIKit
|
2
2
|
|
3
3
|
@main
|
4
|
-
class AppDelegate: UIResponder, UIApplicationDelegate {
|
4
|
+
class AppDelegate: UIResponder, UIApplicationDelegate {
|
5
|
+
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
6
|
+
// Override point for customization after application launch.
|
7
|
+
return true
|
8
|
+
}
|
9
|
+
|
10
|
+
// MARK: UISceneSession Lifecycle
|
11
|
+
|
12
|
+
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
13
|
+
// Called when a new scene session is being created.
|
14
|
+
// Use this method to select a configuration to create the new scene with.
|
15
|
+
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
|
16
|
+
}
|
17
|
+
|
18
|
+
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
|
19
|
+
// Called when the user discards a scene session.
|
20
|
+
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
|
21
|
+
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
22
|
+
}
|
23
|
+
}
|
@@ -22,18 +22,24 @@ final class SceneDelegate: UIResponder {
|
|
22
22
|
// MARK: - Setup
|
23
23
|
|
24
24
|
private func configureRootViewController() {
|
25
|
-
|
26
|
-
tabBarController.tabBar.scrollEdgeAppearance = .init()
|
25
|
+
UINavigationBar.appearance().scrollEdgeAppearance = .init()
|
27
26
|
|
28
|
-
navigationController1 =
|
29
|
-
navigationController1.
|
27
|
+
navigationController1 = TurboNavigationController()
|
28
|
+
navigationController1.tabBarItem = .init(title: nil, image: .init(systemName: "house"), tag: 0)
|
30
29
|
navigationController1.session = session1
|
31
30
|
navigationController1.modalSession = modalSession
|
32
31
|
|
33
|
-
navigationController2 =
|
34
|
-
navigationController2.
|
32
|
+
navigationController2 = TurboNavigationController()
|
33
|
+
navigationController2.tabBarItem = .init(title: nil, image: .init(systemName: "house"), tag: 1)
|
35
34
|
navigationController2.session = session2
|
36
35
|
navigationController2.modalSession = modalSession
|
36
|
+
|
37
|
+
UITabBar.appearance().scrollEdgeAppearance = .init()
|
38
|
+
|
39
|
+
tabBarController = UITabBarController()
|
40
|
+
tabBarController.viewControllers = [navigationController1, navigationController2]
|
41
|
+
|
42
|
+
window!.rootViewController = tabBarController
|
37
43
|
}
|
38
44
|
|
39
45
|
// MARK: - Sessions
|
@@ -113,8 +119,8 @@ extension SceneDelegate: SessionDelegate {
|
|
113
119
|
extension SceneDelegate: WKUIDelegate {
|
114
120
|
func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
|
115
121
|
let confirm = UIAlertController(title: nil, message: message, preferredStyle: .alert)
|
116
|
-
confirm.addAction(
|
117
|
-
confirm.addAction(
|
122
|
+
confirm.addAction(.init(title: "Cancel", style: .cancel) { _ in completionHandler(false) })
|
123
|
+
confirm.addAction(.init(title: "OK", style: .default) { _ in completionHandler(true) })
|
118
124
|
navigationController().present(confirm, animated: true)
|
119
125
|
}
|
120
126
|
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="Y6W-OH-hqX">
|
3
|
+
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
4
|
+
<dependencies>
|
5
|
+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
|
6
|
+
</dependencies>
|
7
|
+
<scenes>
|
8
|
+
<!--View Controller-->
|
9
|
+
<scene sceneID="s0d-6b-0kx">
|
10
|
+
<objects>
|
11
|
+
<viewController id="Y6W-OH-hqX" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController"/>
|
12
|
+
<placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
13
|
+
</objects>
|
14
|
+
<point key="canvasLocation" x="130" y="-2"/>
|
15
|
+
</scene>
|
16
|
+
</scenes>
|
17
|
+
</document>
|
data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject.xcodeproj/project.pbxproj.tt
CHANGED
@@ -65,27 +65,27 @@
|
|
65
65
|
/* End PBXFrameworksBuildPhase section */
|
66
66
|
|
67
67
|
/* Begin PBXGroup section */
|
68
|
-
5D2FA5CD2A9DB1AB001AF2F1 /* Configuration */ = {
|
69
|
-
isa = PBXGroup;
|
70
|
-
children = (
|
71
|
-
5DCC50E12A959DFA00B529A0 /* Info.plist */,
|
72
|
-
5DCC50E92A95A19600B529A0 /* path-configuration.json */,
|
73
|
-
);
|
74
|
-
path = Configuration;
|
75
|
-
sourceTree = "<group>";
|
76
|
-
};
|
77
68
|
5D8AB2F82ABC117400C6A82F /* Strada */ = {
|
78
69
|
isa = PBXGroup;
|
79
70
|
children = (
|
80
71
|
5D8AB2FA2ABC117F00C6A82F /* BridgeComponent+App.swift */,
|
81
|
-
5D8AB2F92ABC117F00C6A82F /* FormComponent.swift */,
|
82
|
-
5D1F2EC02ABEB12300B2819A /* NavButtonComponent.swift */,
|
83
72
|
5D2381402AC53D8900FABA1F /* FlashMessageComponent.swift */,
|
73
|
+
5D8AB2F92ABC117F00C6A82F /* FormComponent.swift */,
|
84
74
|
5DA9C9342AC874D200FEA7E6 /* MenuComponent.swift */,
|
75
|
+
5D1F2EC02ABEB12300B2819A /* NavButtonComponent.swift */,
|
85
76
|
);
|
86
77
|
path = Strada;
|
87
78
|
sourceTree = "<group>";
|
88
79
|
};
|
80
|
+
5DB1DBA12ADA1BF1008B0141 /* Views */ = {
|
81
|
+
isa = PBXGroup;
|
82
|
+
children = (
|
83
|
+
5DCC50DE2A959DFA00B529A0 /* LaunchScreen.storyboard */,
|
84
|
+
5D0D86212A9AA70500A525E9 /* Main.storyboard */,
|
85
|
+
);
|
86
|
+
path = Views;
|
87
|
+
sourceTree = "<group>";
|
88
|
+
};
|
89
89
|
5DCC50C72A959DF800B529A0 = {
|
90
90
|
isa = PBXGroup;
|
91
91
|
children = (
|
@@ -105,12 +105,12 @@
|
|
105
105
|
5DCC50D22A959DF900B529A0 /* <%= name %> */ = {
|
106
106
|
isa = PBXGroup;
|
107
107
|
children = (
|
108
|
-
5DD38FFC2AD659BC00EA0059 /* Extensions */,
|
109
|
-
5D8AB2F82ABC117400C6A82F /* Strada */,
|
110
108
|
5DCC50F42A95AC4E00B529A0 /* Controllers */,
|
111
109
|
5DCC50FB2A95B55200B529A0 /* Delegates */,
|
110
|
+
5DD38FFC2AD659BC00EA0059 /* Extensions */,
|
112
111
|
5DCC51072A95CCEE00B529A0 /* Resources */,
|
113
|
-
|
112
|
+
5D8AB2F82ABC117400C6A82F /* Strada */,
|
113
|
+
5DB1DBA12ADA1BF1008B0141 /* Views */,
|
114
114
|
5DCC50F22A95A7E600B529A0 /* <%= name %>.swift */,
|
115
115
|
);
|
116
116
|
path = <%= name %>;
|
@@ -119,10 +119,10 @@
|
|
119
119
|
5DCC50F42A95AC4E00B529A0 /* Controllers */ = {
|
120
120
|
isa = PBXGroup;
|
121
121
|
children = (
|
122
|
-
5DCC50E72A95A0D900B529A0 /* TurboNavigationController.swift */,
|
123
122
|
5DCC50ED2A95A27600B529A0 /* ErrorPresenter.swift */,
|
124
|
-
5DCC50D72A959DF900B529A0 /* TurboWebViewController.swift */,
|
125
123
|
5DDD58802AA9A8BE00FAC961 /* NumbersViewController.swift */,
|
124
|
+
5DCC50E72A95A0D900B529A0 /* TurboNavigationController.swift */,
|
125
|
+
5DCC50D72A959DF900B529A0 /* TurboWebViewController.swift */,
|
126
126
|
);
|
127
127
|
path = Controllers;
|
128
128
|
sourceTree = "<group>";
|
@@ -140,8 +140,8 @@
|
|
140
140
|
isa = PBXGroup;
|
141
141
|
children = (
|
142
142
|
5DCC50DC2A959DFA00B529A0 /* Assets.xcassets */,
|
143
|
-
|
144
|
-
|
143
|
+
5DCC50E12A959DFA00B529A0 /* Info.plist */,
|
144
|
+
5DCC50E92A95A19600B529A0 /* path-configuration.json */,
|
145
145
|
);
|
146
146
|
path = Resources;
|
147
147
|
sourceTree = "<group>";
|
@@ -396,7 +396,7 @@
|
|
396
396
|
CODE_SIGN_STYLE = Automatic;
|
397
397
|
CURRENT_PROJECT_VERSION = 1;
|
398
398
|
GENERATE_INFOPLIST_FILE = YES;
|
399
|
-
INFOPLIST_FILE = <%= name %>/
|
399
|
+
INFOPLIST_FILE = <%= name %>/Resources/Info.plist;
|
400
400
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
401
401
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
402
402
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
@@ -423,7 +423,7 @@
|
|
423
423
|
CODE_SIGN_STYLE = Automatic;
|
424
424
|
CURRENT_PROJECT_VERSION = 1;
|
425
425
|
GENERATE_INFOPLIST_FILE = YES;
|
426
|
-
INFOPLIST_FILE = <%= name %>/
|
426
|
+
INFOPLIST_FILE = <%= name %>/Resources/Info.plist;
|
427
427
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
428
428
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
429
429
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
@@ -479,7 +479,7 @@
|
|
479
479
|
repositoryURL = "https://github.com/hotwired/turbo-ios";
|
480
480
|
requirement = {
|
481
481
|
kind = exactVersion;
|
482
|
-
version = 7.0.
|
482
|
+
version = 7.0.1;
|
483
483
|
};
|
484
484
|
};
|
485
485
|
/* End XCRemoteSwiftPackageReference section */
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turbo-native-initializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nixon
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/base/NavDestination.kt.tt
|
45
45
|
- lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/native/NativeFragment.kt.tt
|
46
46
|
- lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/native/NumbersFragment.kt.tt
|
47
|
+
- lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebBottomSheetFragment.kt.tt
|
47
48
|
- lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebFragment.kt.tt
|
48
49
|
- lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebHomeFragment.kt.tt
|
49
50
|
- lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebModalFragment.kt.tt
|
@@ -99,6 +100,7 @@ files:
|
|
99
100
|
- lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/base/NavDestination.kt.tt
|
100
101
|
- lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/native/NativeFragment.kt.tt
|
101
102
|
- lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/native/NumbersFragment.kt.tt
|
103
|
+
- lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebBottomSheetFragment.kt.tt
|
102
104
|
- lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebFragment.kt.tt
|
103
105
|
- lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebHomeFragment.kt.tt
|
104
106
|
- lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebModalFragment.kt.tt
|
@@ -160,8 +162,6 @@ files:
|
|
160
162
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
161
163
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
|
162
164
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
|
163
|
-
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Configuration/Info.plist
|
164
|
-
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Configuration/path-configuration.json
|
165
165
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Controllers/ErrorPresenter.swift
|
166
166
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Controllers/NumbersViewController.swift
|
167
167
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Controllers/TurboNavigationController.swift
|
@@ -176,20 +176,20 @@ files:
|
|
176
176
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Resources/Assets.xcassets/Contents.json
|
177
177
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Resources/Assets.xcassets/SplashIcon.imageset/Contents.json
|
178
178
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Resources/Assets.xcassets/SplashIcon.imageset/turbo.png
|
179
|
-
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Resources/
|
180
|
-
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Resources/
|
179
|
+
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Resources/Info.plist
|
180
|
+
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Resources/path-configuration.json
|
181
181
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Strada/BridgeComponent+App.swift
|
182
182
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Strada/FlashMessageComponent.swift
|
183
183
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Strada/FormComponent.swift
|
184
184
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Strada/MenuComponent.swift
|
185
185
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Strada/NavButtonComponent.swift
|
186
186
|
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/TurboNativeProject.swift
|
187
|
+
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Views/Base.lproj/LaunchScreen.storyboard
|
188
|
+
- lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Views/Base.lproj/Main.storyboard
|
187
189
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject.xcodeproj/project.pbxproj.tt
|
188
190
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
189
191
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
|
190
192
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
|
191
|
-
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Configuration/Info.plist
|
192
|
-
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Configuration/path-configuration.json
|
193
193
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Controllers/ErrorPresenter.swift
|
194
194
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Controllers/NumbersViewController.swift
|
195
195
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Controllers/TurboNavigationController.swift
|
@@ -204,14 +204,16 @@ files:
|
|
204
204
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Resources/Assets.xcassets/Contents.json
|
205
205
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Resources/Assets.xcassets/SplashIcon.imageset/Contents.json
|
206
206
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Resources/Assets.xcassets/SplashIcon.imageset/turbo.png
|
207
|
-
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Resources/
|
208
|
-
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Resources/
|
207
|
+
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Resources/Info.plist
|
208
|
+
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Resources/path-configuration.json
|
209
209
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Strada/BridgeComponent+App.swift
|
210
210
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Strada/FlashMessageComponent.swift
|
211
211
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Strada/FormComponent.swift
|
212
212
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Strada/MenuComponent.swift
|
213
213
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Strada/NavButtonComponent.swift
|
214
214
|
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/TurboNativeProject.swift
|
215
|
+
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Views/Base.lproj/LaunchScreen.storyboard
|
216
|
+
- lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Views/Base.lproj/Main.storyboard
|
215
217
|
- lib/turbo_native_initializer/version.rb
|
216
218
|
homepage: https://github.com/lazaronixon/turbo-native-initializer
|
217
219
|
licenses:
|
@@ -1,52 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="33v-ad-2dz">
|
3
|
-
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
4
|
-
<dependencies>
|
5
|
-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
|
6
|
-
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
7
|
-
</dependencies>
|
8
|
-
<scenes>
|
9
|
-
<!--Turbo Navigation Controller-->
|
10
|
-
<scene sceneID="GwE-Ch-DRP">
|
11
|
-
<objects>
|
12
|
-
<viewController id="cXb-wA-NUs" customClass="TurboNavigationController" customModuleProvider="target" sceneMemberID="viewController">
|
13
|
-
<tabBarItem key="tabBarItem" title="" image="gear" catalog="system" id="rhZ-zi-yeq"/>
|
14
|
-
</viewController>
|
15
|
-
<placeholder placeholderIdentifier="IBFirstResponder" id="ife-PY-okT" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
16
|
-
</objects>
|
17
|
-
<point key="canvasLocation" x="1271" y="-647"/>
|
18
|
-
</scene>
|
19
|
-
<!--Turbo Navigation Controller-->
|
20
|
-
<scene sceneID="pAD-IL-Hdw">
|
21
|
-
<objects>
|
22
|
-
<viewController id="0en-nE-vJA" customClass="TurboNavigationController" customModuleProvider="target" sceneMemberID="viewController">
|
23
|
-
<tabBarItem key="tabBarItem" title="" image="house" catalog="system" id="ZWo-HO-m4a"/>
|
24
|
-
</viewController>
|
25
|
-
<placeholder placeholderIdentifier="IBFirstResponder" id="GRr-XE-fAM" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
26
|
-
</objects>
|
27
|
-
<point key="canvasLocation" x="1270" y="-1254"/>
|
28
|
-
</scene>
|
29
|
-
<!--Tab Bar Controller-->
|
30
|
-
<scene sceneID="So3-hc-mhH">
|
31
|
-
<objects>
|
32
|
-
<tabBarController id="33v-ad-2dz" sceneMemberID="viewController">
|
33
|
-
<tabBar key="tabBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="fR1-GM-qEi">
|
34
|
-
<rect key="frame" x="0.0" y="0.0" width="393" height="49"/>
|
35
|
-
<autoresizingMask key="autoresizingMask"/>
|
36
|
-
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
37
|
-
</tabBar>
|
38
|
-
<connections>
|
39
|
-
<segue destination="0en-nE-vJA" kind="relationship" relationship="viewControllers" id="z0u-hS-Voh"/>
|
40
|
-
<segue destination="cXb-wA-NUs" kind="relationship" relationship="viewControllers" id="eJZ-00-JTF"/>
|
41
|
-
</connections>
|
42
|
-
</tabBarController>
|
43
|
-
<placeholder placeholderIdentifier="IBFirstResponder" id="KRh-ez-iFz" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
44
|
-
</objects>
|
45
|
-
<point key="canvasLocation" x="364" y="-951"/>
|
46
|
-
</scene>
|
47
|
-
</scenes>
|
48
|
-
<resources>
|
49
|
-
<image name="gear" catalog="system" width="128" height="122"/>
|
50
|
-
<image name="house" catalog="system" width="128" height="104"/>
|
51
|
-
</resources>
|
52
|
-
</document>
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|