diff --git a/Nos.xcodeproj/project.pbxproj b/Nos.xcodeproj/project.pbxproj index b1cf16735..af3b7b5b3 100644 --- a/Nos.xcodeproj/project.pbxproj +++ b/Nos.xcodeproj/project.pbxproj @@ -437,6 +437,7 @@ C987F85429BA951E00B44E7A /* ClarityCity-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = C987F83129BA951E00B44E7A /* ClarityCity-Thin.otf */; }; C987F85529BA951E00B44E7A /* ClarityCity-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = C987F83129BA951E00B44E7A /* ClarityCity-Thin.otf */; }; C987F85B29BA9ED800B44E7A /* Font+Clarity.swift in Sources */ = {isa = PBXBuildFile; fileRef = C987F85729BA981800B44E7A /* Font+Clarity.swift */; }; + C98905A22CD3B8CF00C17EE0 /* Inject in Frameworks */ = {isa = PBXBuildFile; productRef = C98905A12CD3B8CF00C17EE0 /* Inject */; }; C98A32272A05795E00E3FA13 /* Task+Timeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C98A32262A05795E00E3FA13 /* Task+Timeout.swift */; }; C98A32282A05795E00E3FA13 /* Task+Timeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C98A32262A05795E00E3FA13 /* Task+Timeout.swift */; }; C98B8B4029FBF83B009789C8 /* NotificationCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = C98B8B3F29FBF83B009789C8 /* NotificationCard.swift */; }; @@ -2101,6 +2102,7 @@ C9FD35122BCED5A6008F8D95 /* NostrSDK */, 03C49ABF2C938A9C00502321 /* SwiftSoup */, 039389222CA4985C00698978 /* SDWebImageWebPCoder */, + C98905A12CD3B8CF00C17EE0 /* Inject */, ); productName = Nos; productReference = C9DEBFCE298941000078B43A /* Nos.app */; @@ -2197,6 +2199,7 @@ C9FD35112BCED5A6008F8D95 /* XCRemoteSwiftPackageReference "nostr-sdk-ios" */, 03C49ABE2C938A9C00502321 /* XCRemoteSwiftPackageReference "SwiftSoup" */, 039389212CA4985C00698978 /* XCRemoteSwiftPackageReference "SDWebImageWebPCoder" */, + C98905A02CD3B8CF00C17EE0 /* XCRemoteSwiftPackageReference "Inject" */, ); productRefGroup = C9DEBFCF298941000078B43A /* Products */; projectDirPath = ""; @@ -3661,6 +3664,14 @@ minimumVersion = 1.0.0; }; }; + C98905A02CD3B8CF00C17EE0 /* XCRemoteSwiftPackageReference "Inject" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/krzysztofzablocki/Inject.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.5.2; + }; + }; C99DBF7C2A9E81CF00F7068F /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/SDWebImage/SDWebImageSwiftUI"; @@ -3812,6 +3823,11 @@ package = C96CB98A2A6040C500498C4E /* XCRemoteSwiftPackageReference "swift-collections" */; productName = DequeModule; }; + C98905A12CD3B8CF00C17EE0 /* Inject */ = { + isa = XCSwiftPackageProductDependency; + package = C98905A02CD3B8CF00C17EE0 /* XCRemoteSwiftPackageReference "Inject" */; + productName = Inject; + }; C99DBF7D2A9E81CF00F7068F /* SDWebImageSwiftUI */ = { isa = XCSwiftPackageProductDependency; package = C99DBF7C2A9E81CF00F7068F /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */; diff --git a/Nos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Nos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 7590212f9..6ebc64605 100644 --- a/Nos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Nos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "f8bae06dbeb84f5992ca8659ee3a2a75550fe8b31994d37a658183a21f1c8131", + "originHash" : "62d037ae150ed2e6e150f06b42119c5158134318243e742971b3ccfa3a3a5323", "pins" : [ { "identity" : "bech32", @@ -37,6 +37,15 @@ "version" : "1.8.2" } }, + { + "identity" : "inject", + "kind" : "remoteSourceControl", + "location" : "https://github.com/krzysztofzablocki/Inject.git", + "state" : { + "revision" : "728c56639ecb3df441d51d5bc6747329afabcfc9", + "version" : "1.5.2" + } + }, { "identity" : "libwebp-xcode", "kind" : "remoteSourceControl", diff --git a/Nos/NosApp.swift b/Nos/NosApp.swift index 48ef27900..1a06325a7 100644 --- a/Nos/NosApp.swift +++ b/Nos/NosApp.swift @@ -2,6 +2,7 @@ import SwiftUI import Logger import Dependencies import TipKit +import Inject @main struct NosApp: App { @@ -15,6 +16,7 @@ struct NosApp: App { private let appController = AppController() @Environment(\.scenePhase) private var scenePhase @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate + @ObserveInjection var inject init() { _ = crashReporting // force crash reporting init as early as possible @@ -24,6 +26,11 @@ struct NosApp: App { UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = .systemBlue persistenceController.scheduleBackgroundCleanupTask() try? Tips.configure() + + #if DEBUG + Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle")?.load() + InjectConfiguration.animation = .interactiveSpring() + #endif } var body: some Scene { diff --git a/Nos/Views/AppView.swift b/Nos/Views/AppView.swift index 5bd1d21e0..dec6b4de2 100644 --- a/Nos/Views/AppView.swift +++ b/Nos/Views/AppView.swift @@ -1,5 +1,6 @@ import SwiftUI import Dependencies +import Inject struct AppView: View { @@ -14,6 +15,7 @@ struct AppView: View { @Dependency(\.userDefaults) private var userDefaults @Environment(CurrentUser.self) var currentUser @Environment(RelayService.self) private var relayService + @ObserveInjection var inject @State private var lastSelectedTab = AppDestination.home @State private var showNIP05Wizard = false @@ -47,6 +49,7 @@ struct AppView: View { } .task { await presentNIP05SheetIfNeeded() } .tint(.primaryTxt) + .enableInjection() } private var tabView: some View { diff --git a/Nos/Views/Home/HomeFeedView.swift b/Nos/Views/Home/HomeFeedView.swift index d36e73fc1..b0bf4a6d4 100644 --- a/Nos/Views/Home/HomeFeedView.swift +++ b/Nos/Views/Home/HomeFeedView.swift @@ -3,12 +3,14 @@ import CoreData import Combine import Dependencies import TipKit +import Inject struct HomeFeedView: View { @Environment(\.managedObjectContext) private var viewContext @EnvironmentObject private var router: Router @ObservationIgnored @Dependency(\.analytics) private var analytics + @ObserveInjection var inject @State private var refreshController = RefreshController(lastRefreshDate: Date.now + Self.staticLoadTime) @State private var isVisible = false @@ -164,6 +166,7 @@ struct HomeFeedView: View { GoToFeedTip.viewedFeed.sendDonation() } } + .enableInjection() } } diff --git a/Nos/Views/Home/HomeTab.swift b/Nos/Views/Home/HomeTab.swift index 7a0892268..8297f850a 100644 --- a/Nos/Views/Home/HomeTab.swift +++ b/Nos/Views/Home/HomeTab.swift @@ -1,16 +1,19 @@ import SwiftUI import Dependencies +import Inject struct HomeTab: View { @ObservedObject var user: Author @EnvironmentObject private var router: Router + @ObserveInjection var inject var body: some View { NosNavigationStack(path: $router.homeFeedPath) { HomeFeedView(user: user) } + .enableInjection() } } diff --git a/Nos/Views/SideMenu/SideMenuContent.swift b/Nos/Views/SideMenu/SideMenuContent.swift index 6d3bb5f6d..857fffab8 100644 --- a/Nos/Views/SideMenu/SideMenuContent.swift +++ b/Nos/Views/SideMenu/SideMenuContent.swift @@ -1,12 +1,14 @@ import SwiftUI import MessageUI import Dependencies +import Inject struct SideMenuContent: View { @EnvironmentObject private var router: Router @Environment(CurrentUser.self) private var currentUser @Dependency(\.analytics) private var analytics + @ObserveInjection var inject @State private var isShowingReportABugMailView = false @State private var shareNosPressed = false @@ -118,6 +120,7 @@ struct SideMenuContent: View { ProfileEditView(author: destination.profile) } } + .enableInjection() } }