Skip to content

Commit 4b244af

Browse files
committed
test: add unit tests
1 parent 949ed1f commit 4b244af

File tree

15 files changed

+596
-198
lines changed

15 files changed

+596
-198
lines changed

OSInAppBrowserLib.xcodeproj/project.pbxproj

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
/* Begin PBXBuildFile section */
1010
1BB4F8BC2C36F54800F50A33 /* OSIABErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BB4F8BB2C36F54800F50A33 /* OSIABErrorView.swift */; };
11-
7506BDD22C622B8D00409255 /* OSIABWebView13WrapperView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7506BDD12C622B8D00409255 /* OSIABWebView13WrapperView.swift */; };
1211
750949C02C11D992006843E1 /* OSIABToolbarPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750949BE2C11D992006843E1 /* OSIABToolbarPosition.swift */; };
1312
750949C12C11D992006843E1 /* OSIABWebViewOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750949BF2C11D992006843E1 /* OSIABWebViewOptions.swift */; };
1413
750949C32C11D9D0006843E1 /* OSIABWebViewRouterAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750949C22C11D9D0006843E1 /* OSIABWebViewRouterAdapter.swift */; };
@@ -40,6 +39,12 @@
4039
75EF1AFB2C13069E005D7164 /* OSIABViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EF1AFA2C13069E005D7164 /* OSIABViewModelTests.swift */; };
4140
75EF1AFD2C1306B1005D7164 /* OSIABCacheManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EF1AFC2C1306B1005D7164 /* OSIABCacheManagerTests.swift */; };
4241
75EF1B012C134878005D7164 /* OSIABWebViewStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EF1B002C134878005D7164 /* OSIABWebViewStub.swift */; };
42+
887287832E717E8F00D9E41B /* ViewInspector in Frameworks */ = {isa = PBXBuildFile; productRef = 887287822E717E8F00D9E41B /* ViewInspector */; };
43+
8872878B2E71806200D9E41B /* OSIABWebViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8872878A2E71806200D9E41B /* OSIABWebViewTests.swift */; };
44+
8872878F2E7192C200D9E41B /* OSIABWebViewRepresentableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8872878E2E7192C200D9E41B /* OSIABWebViewRepresentableTests.swift */; };
45+
887287912E7194D800D9E41B /* OSIABApplicationRouterAdapterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 887287902E7194D800D9E41B /* OSIABApplicationRouterAdapterTests.swift */; };
46+
887287932E7196C800D9E41B /* OSIABErrorViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 887287922E7196C800D9E41B /* OSIABErrorViewTests.swift */; };
47+
887287992E71C2E100D9E41B /* OSIABNavigationViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 887287982E71C2E100D9E41B /* OSIABNavigationViewTests.swift */; };
4348
/* End PBXBuildFile section */
4449

4550
/* Begin PBXContainerItemProxy section */
@@ -54,7 +59,6 @@
5459

5560
/* Begin PBXFileReference section */
5661
1BB4F8BB2C36F54800F50A33 /* OSIABErrorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIABErrorView.swift; sourceTree = "<group>"; };
57-
7506BDD12C622B8D00409255 /* OSIABWebView13WrapperView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIABWebView13WrapperView.swift; sourceTree = "<group>"; };
5862
750949BE2C11D992006843E1 /* OSIABToolbarPosition.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OSIABToolbarPosition.swift; sourceTree = "<group>"; };
5963
750949BF2C11D992006843E1 /* OSIABWebViewOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OSIABWebViewOptions.swift; sourceTree = "<group>"; };
6064
750949C22C11D9D0006843E1 /* OSIABWebViewRouterAdapter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OSIABWebViewRouterAdapter.swift; sourceTree = "<group>"; };
@@ -87,6 +91,11 @@
8791
75EF1AFA2C13069E005D7164 /* OSIABViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIABViewModelTests.swift; sourceTree = "<group>"; };
8892
75EF1AFC2C1306B1005D7164 /* OSIABCacheManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIABCacheManagerTests.swift; sourceTree = "<group>"; };
8993
75EF1B002C134878005D7164 /* OSIABWebViewStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIABWebViewStub.swift; sourceTree = "<group>"; };
94+
8872878A2E71806200D9E41B /* OSIABWebViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIABWebViewTests.swift; sourceTree = "<group>"; };
95+
8872878E2E7192C200D9E41B /* OSIABWebViewRepresentableTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIABWebViewRepresentableTests.swift; sourceTree = "<group>"; };
96+
887287902E7194D800D9E41B /* OSIABApplicationRouterAdapterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIABApplicationRouterAdapterTests.swift; sourceTree = "<group>"; };
97+
887287922E7196C800D9E41B /* OSIABErrorViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIABErrorViewTests.swift; sourceTree = "<group>"; };
98+
887287982E71C2E100D9E41B /* OSIABNavigationViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIABNavigationViewTests.swift; sourceTree = "<group>"; };
9099
/* End PBXFileReference section */
91100

92101
/* Begin PBXFrameworksBuildPhase section */
@@ -102,6 +111,7 @@
102111
buildActionMask = 2147483647;
103112
files = (
104113
7575CF6A2BFCEE6F008F3FD0 /* OSInAppBrowserLib.framework in Frameworks */,
114+
887287832E717E8F00D9E41B /* ViewInspector in Frameworks */,
105115
);
106116
runOnlyForDeploymentPostprocessing = 0;
107117
};
@@ -126,7 +136,6 @@
126136
759027B22C1AFBCB00E02498 /* OSIABNavigationView.swift */,
127137
750949C52C11D9E2006843E1 /* OSIABWebView.swift */,
128138
750949C92C11D9E2006843E1 /* OSIABWebViewRepresentable.swift */,
129-
7506BDD12C622B8D00409255 /* OSIABWebView13WrapperView.swift */,
130139
750949C72C11D9E2006843E1 /* OSIABWebViewWrapperView.swift */,
131140
);
132141
path = Views;
@@ -209,6 +218,8 @@
209218
7575CF6D2BFCEE6F008F3FD0 /* OSInAppBrowserLibTests */ = {
210219
isa = PBXGroup;
211220
children = (
221+
887287902E7194D800D9E41B /* OSIABApplicationRouterAdapterTests.swift */,
222+
8872877F2E717C4600D9E41B /* WebView */,
212223
7575CF7E2BFCEEEA008F3FD0 /* Helper Files */,
213224
75EF1AFC2C1306B1005D7164 /* OSIABCacheManagerTests.swift */,
214225
7575CF7D2BFCEEEA008F3FD0 /* OSIABEngineTests.swift */,
@@ -230,6 +241,25 @@
230241
path = "Helper Files";
231242
sourceTree = "<group>";
232243
};
244+
8872877E2E717C4600D9E41B /* Views */ = {
245+
isa = PBXGroup;
246+
children = (
247+
887287982E71C2E100D9E41B /* OSIABNavigationViewTests.swift */,
248+
887287922E7196C800D9E41B /* OSIABErrorViewTests.swift */,
249+
8872878A2E71806200D9E41B /* OSIABWebViewTests.swift */,
250+
8872878E2E7192C200D9E41B /* OSIABWebViewRepresentableTests.swift */,
251+
);
252+
path = Views;
253+
sourceTree = "<group>";
254+
};
255+
8872877F2E717C4600D9E41B /* WebView */ = {
256+
isa = PBXGroup;
257+
children = (
258+
8872877E2E717C4600D9E41B /* Views */,
259+
);
260+
path = WebView;
261+
sourceTree = "<group>";
262+
};
233263
/* End PBXGroup section */
234264

235265
/* Begin PBXHeadersBuildPhase section */
@@ -309,6 +339,9 @@
309339
Base,
310340
);
311341
mainGroup = 7575CF572BFCEE6F008F3FD0;
342+
packageReferences = (
343+
887287812E717E8F00D9E41B /* XCRemoteSwiftPackageReference "ViewInspector" */,
344+
);
312345
productRefGroup = 7575CF622BFCEE6F008F3FD0 /* Products */;
313346
projectDirPath = "";
314347
projectRoot = "";
@@ -371,7 +404,6 @@
371404
750949C02C11D992006843E1 /* OSIABToolbarPosition.swift in Sources */,
372405
750949CA2C11D9E2006843E1 /* OSIABCacheManager.swift in Sources */,
373406
759027B72C1B13CA00E02498 /* OSIABWebViewUIModel.swift in Sources */,
374-
7506BDD22C622B8D00409255 /* OSIABWebView13WrapperView.swift in Sources */,
375407
754451F62C04AB69003D7361 /* OSIABViewStyle.swift in Sources */,
376408
756346642C00F21000685AA3 /* OSIABApplicationRouterAdapter.swift in Sources */,
377409
750949CF2C11D9E2006843E1 /* OSIABWebViewRepresentable.swift in Sources */,
@@ -394,12 +426,17 @@
394426
buildActionMask = 2147483647;
395427
files = (
396428
756346482C00DD4700685AA3 /* OSIABSafariViewControllerRouterAdapterTests.swift in Sources */,
429+
8872878F2E7192C200D9E41B /* OSIABWebViewRepresentableTests.swift in Sources */,
430+
8872878B2E71806200D9E41B /* OSIABWebViewTests.swift in Sources */,
397431
75EF1AFB2C13069E005D7164 /* OSIABViewModelTests.swift in Sources */,
398432
7575CF812BFCEEEA008F3FD0 /* OSIABRouterSpy.swift in Sources */,
399433
75094A072C121BD9006843E1 /* OSIABCacheManagerStub.swift in Sources */,
434+
887287932E7196C800D9E41B /* OSIABErrorViewTests.swift in Sources */,
435+
887287992E71C2E100D9E41B /* OSIABNavigationViewTests.swift in Sources */,
400436
75EF1AFD2C1306B1005D7164 /* OSIABCacheManagerTests.swift in Sources */,
401437
7575CF802BFCEEEA008F3FD0 /* OSIABEngineTests.swift in Sources */,
402438
75EF1B012C134878005D7164 /* OSIABWebViewStub.swift in Sources */,
439+
887287912E7194D800D9E41B /* OSIABApplicationRouterAdapterTests.swift in Sources */,
403440
75094A052C1213A3006843E1 /* OSIABWebViewRouterAdapterTests.swift in Sources */,
404441
);
405442
runOnlyForDeploymentPostprocessing = 0;
@@ -559,7 +596,7 @@
559596
GENERATE_INFOPLIST_FILE = YES;
560597
INFOPLIST_KEY_NSHumanReadableCopyright = "";
561598
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
562-
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
599+
IPHONEOS_DEPLOYMENT_TARGET = 15.6;
563600
LD_RUNPATH_SEARCH_PATHS = (
564601
"$(inherited)",
565602
"@executable_path/Frameworks",
@@ -593,7 +630,7 @@
593630
GENERATE_INFOPLIST_FILE = YES;
594631
INFOPLIST_KEY_NSHumanReadableCopyright = "";
595632
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
596-
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
633+
IPHONEOS_DEPLOYMENT_TARGET = 15.6;
597634
LD_RUNPATH_SEARCH_PATHS = (
598635
"$(inherited)",
599636
"@executable_path/Frameworks",
@@ -619,7 +656,7 @@
619656
CODE_SIGN_STYLE = Automatic;
620657
CURRENT_PROJECT_VERSION = 5;
621658
GENERATE_INFOPLIST_FILE = YES;
622-
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
659+
IPHONEOS_DEPLOYMENT_TARGET = 15.6;
623660
MARKETING_VERSION = 2.2.0;
624661
PRODUCT_BUNDLE_IDENTIFIER = com.outsystems.rd.inappbrowser.OSInAppBrowserLibTests;
625662
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -641,7 +678,7 @@
641678
CODE_SIGN_STYLE = Automatic;
642679
CURRENT_PROJECT_VERSION = 5;
643680
GENERATE_INFOPLIST_FILE = YES;
644-
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
681+
IPHONEOS_DEPLOYMENT_TARGET = 15.6;
645682
MARKETING_VERSION = 2.2.0;
646683
PRODUCT_BUNDLE_IDENTIFIER = com.outsystems.rd.inappbrowser.OSInAppBrowserLibTests;
647684
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -685,6 +722,25 @@
685722
defaultConfigurationName = Release;
686723
};
687724
/* End XCConfigurationList section */
725+
726+
/* Begin XCRemoteSwiftPackageReference section */
727+
887287812E717E8F00D9E41B /* XCRemoteSwiftPackageReference "ViewInspector" */ = {
728+
isa = XCRemoteSwiftPackageReference;
729+
repositoryURL = "https://github.com/nalexn/ViewInspector";
730+
requirement = {
731+
kind = upToNextMajorVersion;
732+
minimumVersion = 0.10.2;
733+
};
734+
};
735+
/* End XCRemoteSwiftPackageReference section */
736+
737+
/* Begin XCSwiftPackageProductDependency section */
738+
887287822E717E8F00D9E41B /* ViewInspector */ = {
739+
isa = XCSwiftPackageProductDependency;
740+
package = 887287812E717E8F00D9E41B /* XCRemoteSwiftPackageReference "ViewInspector" */;
741+
productName = ViewInspector;
742+
};
743+
/* End XCSwiftPackageProductDependency section */
688744
};
689745
rootObject = 7575CF582BFCEE6F008F3FD0 /* Project object */;
690746
}

OSInAppBrowserLib.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Scheme
3+
LastUpgradeVersion = "1640"
4+
version = "1.7">
5+
<BuildAction
6+
parallelizeBuildables = "YES"
7+
buildImplicitDependencies = "YES"
8+
buildArchitectures = "Automatic">
9+
</BuildAction>
10+
<TestAction
11+
buildConfiguration = "Debug"
12+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
13+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
14+
shouldUseLaunchSchemeArgsEnv = "YES"
15+
shouldAutocreateTestPlan = "YES">
16+
<Testables>
17+
<TestableReference
18+
skipped = "NO"
19+
parallelizable = "YES">
20+
<BuildableReference
21+
BuildableIdentifier = "primary"
22+
BlueprintIdentifier = "7575CF682BFCEE6F008F3FD0"
23+
BuildableName = "OSInAppBrowserLibTests.xctest"
24+
BlueprintName = "OSInAppBrowserLibTests"
25+
ReferencedContainer = "container:OSInAppBrowserLib.xcodeproj">
26+
</BuildableReference>
27+
</TestableReference>
28+
</Testables>
29+
</TestAction>
30+
<LaunchAction
31+
buildConfiguration = "Debug"
32+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
33+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
34+
launchStyle = "0"
35+
useCustomWorkingDirectory = "NO"
36+
ignoresPersistentStateOnLaunch = "NO"
37+
debugDocumentVersioning = "YES"
38+
debugServiceExtension = "internal"
39+
allowLocationSimulation = "YES">
40+
</LaunchAction>
41+
<ProfileAction
42+
buildConfiguration = "Release"
43+
shouldUseLaunchSchemeArgsEnv = "YES"
44+
savedToolIdentifier = ""
45+
useCustomWorkingDirectory = "NO"
46+
debugDocumentVersioning = "YES">
47+
</ProfileAction>
48+
<AnalyzeAction
49+
buildConfiguration = "Debug">
50+
</AnalyzeAction>
51+
<ArchiveAction
52+
buildConfiguration = "Release"
53+
revealArchiveInOrganizer = "YES">
54+
</ArchiveAction>
55+
</Scheme>
Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,35 @@
11
import UIKit
22

3-
/// Adapter that makes the required calls so that can perform the External Browser routing.
4-
public class OSIABApplicationRouterAdapter: OSIABRouter {
5-
public typealias ReturnType = Bool
6-
7-
/// Constructor method.
3+
public protocol URLOpener {
4+
func canOpenURL(_ url: URL) -> Bool
5+
func open(_ url: URL, completionHandler: ((Bool) -> Void)?)
6+
}
7+
8+
public class DefaultURLOpener: URLOpener {
89
public init() {}
910

11+
public func canOpenURL(_ url: URL) -> Bool {
12+
UIApplication.shared.canOpenURL(url)
13+
}
14+
15+
public func open(_ url: URL, completionHandler: ((Bool) -> Void)?) {
16+
UIApplication.shared.open(url, completionHandler: completionHandler ?? { _ in })
17+
}
18+
}
19+
20+
public class OSIABApplicationRouterAdapter: OSIABRouter {
21+
public typealias ReturnType = Bool
22+
23+
private let urlOpener: URLOpener
24+
25+
public init(urlOpener: URLOpener = DefaultURLOpener()) {
26+
self.urlOpener = urlOpener
27+
}
28+
1029
public func handleOpen(_ url: URL, _ completionHandler: @escaping (ReturnType) -> Void) {
11-
guard UIApplication.shared.canOpenURL(url) else { return completionHandler(false) }
12-
UIApplication.shared.open(url, completionHandler: completionHandler)
30+
guard urlOpener.canOpenURL(url) else {
31+
return completionHandler(false)
32+
}
33+
urlOpener.open(url, completionHandler: completionHandler)
1334
}
1435
}

Sources/OSInAppBrowserLib/RouterAdapters/OSIABWebViewRouterAdapter.swift

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,7 @@ public class OSIABWebViewRouterAdapter: NSObject, OSIABRouter {
5353
let dismissCallback: () -> Void = { self.callbackHandler.onBrowserClosed(true) }
5454
let hostingController: UIViewController
5555

56-
if #available(iOS 14.0, *) {
57-
hostingController = OSIABWebViewController(rootView: .init(viewModel), dismiss: dismissCallback)
58-
} else {
59-
hostingController = OSIABWebView13Controller(rootView: .init(viewModel), dismiss: dismissCallback)
60-
}
56+
hostingController = OSIABWebViewController(rootView: .init(viewModel), dismiss: dismissCallback)
6157
hostingController.modalPresentationStyle = options.modalPresentationStyle
6258
hostingController.modalTransitionStyle = options.modalTransitionStyle
6359
hostingController.presentationController?.delegate = self
@@ -127,31 +123,3 @@ private class OSIABWebViewController: UIHostingController<OSIABWebViewWrapperVie
127123
})
128124
}
129125
}
130-
131-
/// A subclass for `UIHostingController` where it's possible to delegate the `dismiss` call to its callers.
132-
@available(iOS, deprecated: 14.0, message: "Use OSIABWebViewController for iOS 14.0+")
133-
private class OSIABWebView13Controller: UIHostingController<OSIABWebView13WrapperView> {
134-
/// Callback to trigger when the view controller is closed.
135-
let dismiss: (() -> Void)?
136-
137-
/// Constructor method.
138-
/// - Parameters:
139-
/// - rootView: The root view of the SwiftUI view hierarchy that you want to manage using the hosting view controller.
140-
/// - dismiss: The callback to trigger when the view controller is dismissed.
141-
init(rootView: OSIABWebView13WrapperView, dismiss: (() -> Void)?) {
142-
self.dismiss = dismiss
143-
super.init(rootView: rootView)
144-
}
145-
146-
@MainActor required dynamic init?(coder aDecoder: NSCoder) {
147-
self.dismiss = nil
148-
super.init(coder: aDecoder)
149-
}
150-
151-
override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
152-
super.dismiss(animated: flag, completion: {
153-
self.dismiss?()
154-
completion?()
155-
})
156-
}
157-
}

Sources/OSInAppBrowserLib/WebView/OSIABWebViewModel.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,14 @@ class OSIABWebViewModel: NSObject, ObservableObject {
3838
@Published private(set) var addressLabel: String = ""
3939

4040
private var cancellables = Set<AnyCancellable>()
41-
41+
42+
#if DEBUG
43+
/// Test-only method to set error for unit tests
44+
func setErrorForTesting(_ error: Error?) {
45+
self.error = error
46+
}
47+
#endif
48+
4249
/// Constructor method.
4350
/// - Parameters:
4451
/// - url: The current URL being displayed

Sources/OSInAppBrowserLib/WebView/Views/OSIABNavigationView.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import SwiftUI
22

3-
private struct OSIABNavigationButton: View {
3+
internal struct OSIABNavigationButton: View {
44
/// Handler to trigger when the button is pressed.
55
private let buttonPressed: () -> Void
66
/// The icon to set the button with.
77
private let iconName: String
88
/// Indicates if the button should appeared as enabled or not.
9-
private let isDisabled: Bool
9+
internal let isDisabled: Bool
1010

1111
/// Constructor method.
1212
/// - Parameters:
@@ -88,7 +88,7 @@ struct OSIABNavigationView: View {
8888

8989
OSIABNavigationButton(
9090
forwardButtonPressed,
91-
iconName: "chevron.forward",
91+
iconName: "chevron.forward",
9292
isDisabled: !forwardButtonEnabled
9393
)
9494
}
@@ -151,6 +151,7 @@ private struct OSIABTestNavigationView: View {
151151
}
152152
}
153153

154+
@available(*, unavailable)
154155
struct OSIABNavigationView_Previews: PreviewProvider {
155156
static var previews: some View {
156157
// Default - Light Mode

0 commit comments

Comments
 (0)