turbo-native-initializer 0.0.17 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|