Defined the Application protocol in the Core library and conformed the UIApplication to it.
This commit is contained in:
parent
f79b2bd473
commit
9c091c12eb
@ -0,0 +1,23 @@
|
|||||||
|
//
|
||||||
|
// Application.swift
|
||||||
|
// Core
|
||||||
|
//
|
||||||
|
// Created by Javier Cicchelli on 13/04/2023.
|
||||||
|
// Copyright © 2023 Röck+Cöde. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
public protocol Application {
|
||||||
|
|
||||||
|
// MARK: Functions
|
||||||
|
|
||||||
|
func canOpenURL(_ url: URL) -> Bool
|
||||||
|
func open(
|
||||||
|
_ url: URL,
|
||||||
|
options: [UIApplication.OpenExternalURLOptionsKey : Any],
|
||||||
|
completionHandler completion: ((Bool) -> Void)?
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
@ -7,10 +7,15 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import Core
|
import Core
|
||||||
|
import Dependency
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class LocationsListCoordinator: Coordinator {
|
class LocationsListCoordinator: Coordinator {
|
||||||
|
|
||||||
|
// MARK: Dependencies
|
||||||
|
|
||||||
|
@Dependency(\.app) private var app
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
var children: [Coordinator] = []
|
var children: [Coordinator] = []
|
||||||
@ -62,11 +67,11 @@ extension LocationsListCoordinator: LocationsListCoordination {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func openWikipediaApp(with url: URL) {
|
func openWikipediaApp(with url: URL) {
|
||||||
guard UIApplication.shared.canOpenURL(url) else {
|
guard app.canOpenURL(url) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
UIApplication.shared.open(url)
|
app.open(url, options: [:], completionHandler: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,13 +6,20 @@
|
|||||||
// Copyright © 2023 Röck+Cöde. All rights reserved.
|
// Copyright © 2023 Röck+Cöde. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import Core
|
||||||
import Dependency
|
import Dependency
|
||||||
import Persistence
|
import Persistence
|
||||||
import Remote
|
import Remote
|
||||||
|
import UIKit
|
||||||
|
|
||||||
// MARK: - DependencyService+Keys
|
// MARK: - DependencyService+Keys
|
||||||
|
|
||||||
extension DependencyService {
|
extension DependencyService {
|
||||||
|
var app: Core.Application {
|
||||||
|
get { Self[ApplicationKey.self] }
|
||||||
|
set { Self[ApplicationKey.self] = newValue }
|
||||||
|
}
|
||||||
|
|
||||||
var persistence: Persistence.Service {
|
var persistence: Persistence.Service {
|
||||||
get { Self[PersistenceKey.self] }
|
get { Self[PersistenceKey.self] }
|
||||||
set { Self[PersistenceKey.self] = newValue }
|
set { Self[PersistenceKey.self] = newValue }
|
||||||
@ -26,6 +33,10 @@ extension DependencyService {
|
|||||||
|
|
||||||
// MARK: - Dependency keys
|
// MARK: - Dependency keys
|
||||||
|
|
||||||
|
struct ApplicationKey: DependencyKey {
|
||||||
|
static var currentValue: Core.Application = UIApplication.shared
|
||||||
|
}
|
||||||
|
|
||||||
struct PersistenceKey: DependencyKey {
|
struct PersistenceKey: DependencyKey {
|
||||||
static var currentValue: Persistence.Service = PersistenceService.shared
|
static var currentValue: Persistence.Service = PersistenceService.shared
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// UIApplication+Conformances.swift
|
||||||
|
// Locations
|
||||||
|
//
|
||||||
|
// Created by Javier Cicchelli on 13/04/2023.
|
||||||
|
// Copyright © 2023 Röck+Cöde. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Core
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UIApplication: Application {}
|
@ -24,6 +24,7 @@
|
|||||||
46C3B7D829E5E55000F8F57C /* LocationsListCoordination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46C3B7D729E5E55000F8F57C /* LocationsListCoordination.swift */; };
|
46C3B7D829E5E55000F8F57C /* LocationsListCoordination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46C3B7D729E5E55000F8F57C /* LocationsListCoordination.swift */; };
|
||||||
46C3B7DC29E5ED2300F8F57C /* LocationsAddCoordination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46C3B7DB29E5ED2300F8F57C /* LocationsAddCoordination.swift */; };
|
46C3B7DC29E5ED2300F8F57C /* LocationsAddCoordination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46C3B7DB29E5ED2300F8F57C /* LocationsAddCoordination.swift */; };
|
||||||
46C3B7DE29E5ED2E00F8F57C /* LocationsAddCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46C3B7DD29E5ED2E00F8F57C /* LocationsAddCoordinator.swift */; };
|
46C3B7DE29E5ED2E00F8F57C /* LocationsAddCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46C3B7DD29E5ED2E00F8F57C /* LocationsAddCoordinator.swift */; };
|
||||||
|
46DF736D29E82A1500AA6D21 /* UIApplication+Conformances.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46DF736C29E82A1500AA6D21 /* UIApplication+Conformances.swift */; };
|
||||||
46EB331B29E1CE04001D5EAF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46EB331A29E1CE04001D5EAF /* AppDelegate.swift */; };
|
46EB331B29E1CE04001D5EAF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46EB331A29E1CE04001D5EAF /* AppDelegate.swift */; };
|
||||||
46EB331F29E1CE04001D5EAF /* LocationsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46EB331E29E1CE04001D5EAF /* LocationsListViewController.swift */; };
|
46EB331F29E1CE04001D5EAF /* LocationsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46EB331E29E1CE04001D5EAF /* LocationsListViewController.swift */; };
|
||||||
46EB332729E1CE05001D5EAF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 46EB332629E1CE05001D5EAF /* Assets.xcassets */; };
|
46EB332729E1CE05001D5EAF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 46EB332629E1CE05001D5EAF /* Assets.xcassets */; };
|
||||||
@ -143,6 +144,7 @@
|
|||||||
46C3B7D729E5E55000F8F57C /* LocationsListCoordination.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationsListCoordination.swift; sourceTree = "<group>"; };
|
46C3B7D729E5E55000F8F57C /* LocationsListCoordination.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationsListCoordination.swift; sourceTree = "<group>"; };
|
||||||
46C3B7DB29E5ED2300F8F57C /* LocationsAddCoordination.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationsAddCoordination.swift; sourceTree = "<group>"; };
|
46C3B7DB29E5ED2300F8F57C /* LocationsAddCoordination.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationsAddCoordination.swift; sourceTree = "<group>"; };
|
||||||
46C3B7DD29E5ED2E00F8F57C /* LocationsAddCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationsAddCoordinator.swift; sourceTree = "<group>"; };
|
46C3B7DD29E5ED2E00F8F57C /* LocationsAddCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationsAddCoordinator.swift; sourceTree = "<group>"; };
|
||||||
|
46DF736C29E82A1500AA6D21 /* UIApplication+Conformances.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+Conformances.swift"; sourceTree = "<group>"; };
|
||||||
46EB325829E1BD5C001D5EAF /* Wikipedia.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Wikipedia.xcodeproj; path = Wikipedia/Wikipedia.xcodeproj; sourceTree = "<group>"; };
|
46EB325829E1BD5C001D5EAF /* Wikipedia.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Wikipedia.xcodeproj; path = Wikipedia/Wikipedia.xcodeproj; sourceTree = "<group>"; };
|
||||||
46EB331829E1CE04001D5EAF /* Locations.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Locations.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
46EB331829E1CE04001D5EAF /* Locations.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Locations.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
46EB331A29E1CE04001D5EAF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
46EB331A29E1CE04001D5EAF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
@ -180,6 +182,7 @@
|
|||||||
children = (
|
children = (
|
||||||
02031EC829E60B29003C108C /* DependencyService+Keys.swift */,
|
02031EC829E60B29003C108C /* DependencyService+Keys.swift */,
|
||||||
02031F0929E7645F003C108C /* Location+URLs.swift */,
|
02031F0929E7645F003C108C /* Location+URLs.swift */,
|
||||||
|
46DF736C29E82A1500AA6D21 /* UIApplication+Conformances.swift */,
|
||||||
);
|
);
|
||||||
path = Extensions;
|
path = Extensions;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -550,6 +553,7 @@
|
|||||||
02031EEA29E6B495003C108C /* ErrorMessageView.swift in Sources */,
|
02031EEA29E6B495003C108C /* ErrorMessageView.swift in Sources */,
|
||||||
46C3B7DC29E5ED2300F8F57C /* LocationsAddCoordination.swift in Sources */,
|
46C3B7DC29E5ED2300F8F57C /* LocationsAddCoordination.swift in Sources */,
|
||||||
46C3B7D829E5E55000F8F57C /* LocationsListCoordination.swift in Sources */,
|
46C3B7D829E5E55000F8F57C /* LocationsListCoordination.swift in Sources */,
|
||||||
|
46DF736D29E82A1500AA6D21 /* UIApplication+Conformances.swift in Sources */,
|
||||||
46C3B7D629E5E50500F8F57C /* LocationsListViewModeling.swift in Sources */,
|
46C3B7D629E5E50500F8F57C /* LocationsListViewModeling.swift in Sources */,
|
||||||
4656CBC229E6D33C00600EE6 /* LoadRemoteLocationsUseCase.swift in Sources */,
|
4656CBC229E6D33C00600EE6 /* LoadRemoteLocationsUseCase.swift in Sources */,
|
||||||
46C3B7CF29E5D00E00F8F57C /* LocationsAddViewModel.swift in Sources */,
|
46C3B7CF29E5D00E00F8F57C /* LocationsAddViewModel.swift in Sources */,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user