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.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/turbo_native_initializer/generator.rb +1 -1
  4. data/lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebBottomSheetFragment.kt.tt +8 -0
  5. data/lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/main/MainSessionNavHostFragment.kt.tt +8 -1
  6. data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebBottomSheetFragment.kt.tt +8 -0
  7. data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/main/BaseSessionNavHostFragment.kt.tt +8 -1
  8. data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Controllers/TurboNavigationController.swift +5 -3
  9. data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Delegates/AppDelegate.swift +20 -1
  10. data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Delegates/SceneDelegate.swift +7 -6
  11. data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/{Resources → Views}/Base.lproj/Main.storyboard +2 -2
  12. data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject.xcodeproj/project.pbxproj.tt +20 -20
  13. data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Controllers/TurboNavigationController.swift +5 -3
  14. data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Delegates/AppDelegate.swift +20 -1
  15. data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Delegates/SceneDelegate.swift +14 -8
  16. data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Views/Base.lproj/Main.storyboard +17 -0
  17. data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject.xcodeproj/project.pbxproj.tt +21 -21
  18. data/lib/turbo_native_initializer/version.rb +1 -1
  19. metadata +12 -10
  20. data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Resources/Base.lproj/Main.storyboard +0 -52
  21. /data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/{Configuration → Resources}/Info.plist +0 -0
  22. /data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/{Configuration → Resources}/path-configuration.json +0 -0
  23. /data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/{Resources → Views}/Base.lproj/LaunchScreen.storyboard +0 -0
  24. /data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/{Configuration → Resources}/Info.plist +0 -0
  25. /data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/{Configuration → Resources}/path-configuration.json +0 -0
  26. /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: 3b5ef5d8b7a0d8f95f129356baa6f612368985f84ddec474db83057174b438ac
4
- data.tar.gz: e99f39bff9585a3b391d4ab6bf6f5516355e646eb79490704b172470ed83449a
3
+ metadata.gz: 6833f8bad7eb840005b6b4112a54ba0fc0356eff5fef5549b20e80f207beabd1
4
+ data.tar.gz: 120c51e582c425132d8be00d420b3fb73127adff18ec73e428909d6ebc6e42f4
5
5
  SHA512:
6
- metadata.gz: 12a257749999a07cfdd00f3738b383e6f608ac0433d8026ca2139a929b39ad503cf9998774765c03db9d1b9d1103f7e14933c73a9af8ad1183ad9e9b47047495
7
- data.tar.gz: 176211b7e460001de9b829a30fb3eec2d5dd8f960b829dd1b422dd45a23e0d4fe164ef3e42a2d419a5ef9d5fb030d9075a50438c8ce991062f3c5c3d35f2d254
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 `pop`, `refresh`, `none`, `replace`, `clear-all`, and `replace-all`. (iOS)
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(WebFragment::class, WebHomeFragment::class, WebModalFragment::class, NumbersFragment::class)
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(WebFragment::class, WebHomeFragment::class, WebModalFragment::class, NumbersFragment::class)
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: VisitOptions(action: .advance), properties: properties)
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) || action == .replace {
126
- setViewControllers(Array(viewControllers.dropLast()) + [viewController], animated: false)
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
  }
@@ -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
- navigationController = window!.rootViewController as? TurboNavigationController
17
- navigationController.navigationBar.scrollEdgeAppearance = .init()
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(UIAlertAction(title: "Cancel", style: .cancel) { _ in completionHandler(false) })
103
- confirm.addAction(UIAlertAction(title: "OK", style: .default) { _ in completionHandler(true) })
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
- <!--Turbo Navigation Controller-->
8
+ <!--View Controller-->
9
9
  <scene sceneID="s0d-6b-0kx">
10
10
  <objects>
11
- <viewController id="Y6W-OH-hqX" customClass="TurboNavigationController" customModuleProvider="target" sceneMemberID="viewController"/>
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
- 5D2FA5CD2A9DB1AB001AF2F1 /* Configuration */,
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 = Resources;
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 %>/Configuration/Info.plist;
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 %>/Configuration/Info.plist;
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.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: VisitOptions(action: .advance), properties: properties)
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) || action == .replace {
126
- setViewControllers(Array(viewControllers.dropLast()) + [viewController], animated: false)
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
  }
@@ -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
- tabBarController = window!.rootViewController as? UITabBarController
26
- tabBarController.tabBar.scrollEdgeAppearance = .init()
25
+ UINavigationBar.appearance().scrollEdgeAppearance = .init()
27
26
 
28
- navigationController1 = tabBarController.viewControllers![0] as? TurboNavigationController
29
- navigationController1.navigationBar.scrollEdgeAppearance = .init()
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 = tabBarController.viewControllers![1] as? TurboNavigationController
34
- navigationController2.navigationBar.scrollEdgeAppearance = .init()
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(UIAlertAction(title: "Cancel", style: .cancel) { _ in completionHandler(false) })
117
- confirm.addAction(UIAlertAction(title: "OK", style: .default) { _ in completionHandler(true) })
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>
@@ -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
- 5D2FA5CD2A9DB1AB001AF2F1 /* Configuration */,
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
- 5DCC50DE2A959DFA00B529A0 /* LaunchScreen.storyboard */,
144
- 5D0D86212A9AA70500A525E9 /* Main.storyboard */,
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 %>/Configuration/Info.plist;
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 %>/Configuration/Info.plist;
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.0;
482
+ version = 7.0.1;
483
483
  };
484
484
  };
485
485
  /* End XCRemoteSwiftPackageReference section */
@@ -1,3 +1,3 @@
1
1
  module TurboNativeInitializer
2
- VERSION = "0.0.17"
2
+ VERSION = "0.0.19"
3
3
  end
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.17
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-10-11 00:00:00.000000000 Z
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/Base.lproj/LaunchScreen.storyboard
180
- - lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Resources/Base.lproj/Main.storyboard
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/Base.lproj/LaunchScreen.storyboard
208
- - lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Resources/Base.lproj/Main.storyboard
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>