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.
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>