diff --git a/Cores/4DO b/Cores/4DO index f1895719e2..c118555828 160000 --- a/Cores/4DO +++ b/Cores/4DO @@ -1 +1 @@ -Subproject commit f1895719e2101f9556be955bca5d98690e177b1c +Subproject commit c11855582820a91b691cf86f110e6c33dcfe6a0c diff --git a/Cores/Atari800/Package.swift b/Cores/Atari800/Package.swift index 286dee683f..62293a0f02 100644 --- a/Cores/Atari800/Package.swift +++ b/Cores/Atari800/Package.swift @@ -6,7 +6,7 @@ import PackageDescription let package = Package( name: "PVCoreAtari800", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v11), diff --git a/Cores/Bliss b/Cores/Bliss index 5885ddfa63..3705ef7af3 160000 --- a/Cores/Bliss +++ b/Cores/Bliss @@ -1 +1 @@ -Subproject commit 5885ddfa63be1b048061ee273eaca31cbb8f5687 +Subproject commit 3705ef7af3ebeb18bfd255ccbe2686ff84b13619 diff --git a/Cores/CrabEMU b/Cores/CrabEMU index 3874f17103..a665ed0120 160000 --- a/Cores/CrabEMU +++ b/Cores/CrabEMU @@ -1 +1 @@ -Subproject commit 3874f171037e92e6229dadec593a9ed227655793 +Subproject commit a665ed012051f74cb59435e14da838ab2340f501 diff --git a/Cores/Gambatte/Package.swift b/Cores/Gambatte/Package.swift index dfe2526edd..7ce7ff1722 100644 --- a/Cores/Gambatte/Package.swift +++ b/Cores/Gambatte/Package.swift @@ -6,7 +6,7 @@ import PackageDescription let package = Package( name: "PVCoreGambatte", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v11), diff --git a/Cores/Mednafen/Package.swift b/Cores/Mednafen/Package.swift index 09779c85d0..37123b5cb5 100644 --- a/Cores/Mednafen/Package.swift +++ b/Cores/Mednafen/Package.swift @@ -119,7 +119,7 @@ func mednafenTarget(name: String, dependencies: [String] = [], path: String, sou let package = Package( name: "PVCoreMednafen", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v11), diff --git a/Cores/PicoDrive/Package.swift b/Cores/PicoDrive/Package.swift index 3293a61714..1e7bdbb7a1 100644 --- a/Cores/PicoDrive/Package.swift +++ b/Cores/PicoDrive/Package.swift @@ -6,7 +6,7 @@ import PackageDescription let package = Package( name: "PVCorePicoDrive", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v11), diff --git a/Cores/PokeMini/Package.swift b/Cores/PokeMini/Package.swift index 1f4ae0ce42..a026085469 100644 --- a/Cores/PokeMini/Package.swift +++ b/Cores/PokeMini/Package.swift @@ -14,7 +14,7 @@ let VIDEO_UPSCALE = "1" let package = Package( name: "PVCorePokeMini", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v11), diff --git a/Cores/Stella/Package.swift b/Cores/Stella/Package.swift index f9d697f642..10e317b3ca 100644 --- a/Cores/Stella/Package.swift +++ b/Cores/Stella/Package.swift @@ -6,7 +6,7 @@ import PackageDescription let package = Package( name: "PVCoreStella", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v11), diff --git a/Cores/TGBDual/Package.swift b/Cores/TGBDual/Package.swift index f0123e9a38..170889c0ea 100644 --- a/Cores/TGBDual/Package.swift +++ b/Cores/TGBDual/Package.swift @@ -6,7 +6,7 @@ import PackageDescription let package = Package( name: "PVCoreTGBDual", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v11), diff --git a/Cores/VirtualJaguar b/Cores/VirtualJaguar index 253ee8c09b..2590d15665 160000 --- a/Cores/VirtualJaguar +++ b/Cores/VirtualJaguar @@ -1 +1 @@ -Subproject commit 253ee8c09b161148d19c40de329b1acc42a1e970 +Subproject commit 2590d156659317aa5f7e90207d0b7c15d151b174 diff --git a/Cores/mGBA/Package.swift b/Cores/mGBA/Package.swift index b71e2871ff..bd6774ecd4 100644 --- a/Cores/mGBA/Package.swift +++ b/Cores/mGBA/Package.swift @@ -33,7 +33,7 @@ let libmGBACSettings: [PackageDescription.CSetting] = [ let package = Package( name: "PVCoremGBA", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v10_13), diff --git a/MoltenVK/Package.swift b/MoltenVK/Package.swift index 928a13c30d..c38d0e0939 100644 --- a/MoltenVK/Package.swift +++ b/MoltenVK/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "MoltenVK", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v11), diff --git a/PVJIT/Package.swift b/PVJIT/Package.swift index a3d8997491..7c887a9798 100644 --- a/PVJIT/Package.swift +++ b/PVJIT/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "PVJIT", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .visionOS(.v1) ], diff --git a/PVLibrary/Package.swift b/PVLibrary/Package.swift index 6179c2a9d8..40b96cd0a3 100644 --- a/PVLibrary/Package.swift +++ b/PVLibrary/Package.swift @@ -23,7 +23,7 @@ let linkerSettings: [LinkerSetting] = [ let package = Package( name: "PVLibrary", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v14), diff --git a/PVLibrary/Sources/PVLibrary/DirectoryWatcher/BIOSDirectoryWatcher.swift b/PVLibrary/Sources/PVLibrary/DirectoryWatcher/BIOSDirectoryWatcher.swift index 5010da417e..e9ea693031 100644 --- a/PVLibrary/Sources/PVLibrary/DirectoryWatcher/BIOSDirectoryWatcher.swift +++ b/PVLibrary/Sources/PVLibrary/DirectoryWatcher/BIOSDirectoryWatcher.swift @@ -13,18 +13,14 @@ import PVLogging import Perception import PVFileSystem -#if !os(tvOS) -@Observable -#else @Perceptible -#endif public final class BIOSWatcher: ObservableObject { public static let shared = BIOSWatcher() private let biosPath: URL private var directoryWatcher: DirectoryWatcher? - @ObservationIgnored + //@ObservationIgnored private var newBIOSFilesContinuation: AsyncStream<[URL]>.Continuation? public var newBIOSFilesSequence: AsyncStream<[URL]> { diff --git a/PVLibrary/Sources/PVLibrary/DirectoryWatcher/ConflictsWatcher.swift b/PVLibrary/Sources/PVLibrary/DirectoryWatcher/ConflictsWatcher.swift index 53cc3be478..de0a9b1a33 100644 --- a/PVLibrary/Sources/PVLibrary/DirectoryWatcher/ConflictsWatcher.swift +++ b/PVLibrary/Sources/PVLibrary/DirectoryWatcher/ConflictsWatcher.swift @@ -4,11 +4,7 @@ import Combine import PVLogging import Perception -#if !os(tvOS) -@Observable -#else @Perceptible -#endif public final class ConflictsWatcher: ObservableObject { public static let shared = ConflictsWatcher() diff --git a/PVLibrary/Sources/PVLibrary/DirectoryWatcher/DirectoryWatcher.swift b/PVLibrary/Sources/PVLibrary/DirectoryWatcher/DirectoryWatcher.swift index 2eb3629fd9..54fded0e6e 100644 --- a/PVLibrary/Sources/PVLibrary/DirectoryWatcher/DirectoryWatcher.swift +++ b/PVLibrary/Sources/PVLibrary/DirectoryWatcher/DirectoryWatcher.swift @@ -64,11 +64,7 @@ import Perception /// /// The DirectoryWatcher monitors a specified directory for new files and changes, /// handling archive extraction and file processing automatically. -#if !os(tvOS) -@Observable -#else @Perceptible -#endif public final class DirectoryWatcher: ObservableObject { private let watcherManager: FileWatcherManager @@ -94,7 +90,7 @@ public final class DirectoryWatcher: ObservableObject { /// The current extraction status public var extractionStatus: ExtractionStatus = .idle // #if !os(tvOS) - @ObservationIgnored +// @ObservationIgnored // #endif private var statusContinuation: AsyncStream.Continuation? @@ -108,12 +104,12 @@ public final class DirectoryWatcher: ObservableObject { } } - #if os(tvOS) +// #if os(tvOS) +// private var completedFilesContinuation: AsyncStream<[URL]>.Continuation? +// #else +// @ObservationIgnored private var completedFilesContinuation: AsyncStream<[URL]>.Continuation? - #else - @ObservationIgnored - private var completedFilesContinuation: AsyncStream<[URL]>.Continuation? - #endif +// #endif /// A sequence of completed files public var completedFilesSequence: AsyncStream<[URL]> { diff --git a/PVLibrary/Sources/PVLibrary/Importer/Models/ImportQueueItem.swift b/PVLibrary/Sources/PVLibrary/Importer/Models/ImportQueueItem.swift index e01ff83349..b1c24121cb 100644 --- a/PVLibrary/Sources/PVLibrary/Importer/Models/ImportQueueItem.swift +++ b/PVLibrary/Sources/PVLibrary/Importer/Models/ImportQueueItem.swift @@ -7,6 +7,7 @@ import SwiftUI import PVPrimitives +import Perception // Enum to define the possible statuses of each import public enum ImportStatus: String { @@ -52,7 +53,7 @@ public enum ProcessingState { } // ImportItem model to hold each file's metadata and progress -@Observable +@Perceptible public class ImportQueueItem: Identifiable, ObservableObject { public let id = UUID() public var url: URL diff --git a/PVLibrary/Sources/PVLibrary/Importer/Services/GameImporter/GameImporter.swift b/PVLibrary/Sources/PVLibrary/Importer/Services/GameImporter/GameImporter.swift index a3d9dd6124..493c54b1c8 100644 --- a/PVLibrary/Sources/PVLibrary/Importer/Services/GameImporter/GameImporter.swift +++ b/PVLibrary/Sources/PVLibrary/Importer/Services/GameImporter/GameImporter.swift @@ -122,11 +122,11 @@ public protocol GameImporting { } -#if !os(tvOS) -@Observable -#else +//#if !os(tvOS) +//@Observable +//#else @Perceptible -#endif +//#endif public final class GameImporter: GameImporting, ObservableObject { /// Closure called when import starts public var importStartedHandler: GameImporterImportStartedHandler? diff --git a/PVLibrary/Sources/PVLibrary/SwiftData/BIOS_Data.swift b/PVLibrary/Sources/PVLibrary/SwiftData/BIOS_Data.swift index 6d6ed19441..11df4bca80 100644 --- a/PVLibrary/Sources/PVLibrary/SwiftData/BIOS_Data.swift +++ b/PVLibrary/Sources/PVLibrary/SwiftData/BIOS_Data.swift @@ -9,18 +9,18 @@ import SwiftData import PVPrimitives -#if !os(tvOS) -@Model -#endif +//#if !os(tvOS) +//@Model +//#endif public class BIOS_Data { // Attributes -#if !os(tvOS) - @Attribute(.unique) -#endif +//#if !os(tvOS) +// @Attribute(.unique) +//#endif public var expectedFilename: String = "" -#if !os(tvOS) - @Attribute(.unique) -#endif +//#if !os(tvOS) +// @Attribute(.unique) +//#endif public var expectedMD5: String = "" public var expectedSize: Int = 0 public var optional: Bool = false diff --git a/PVLibrary/Sources/PVLibrary/SwiftData/Cheats_Data.swift b/PVLibrary/Sources/PVLibrary/SwiftData/Cheats_Data.swift index 80c84aa566..5a116e144b 100644 --- a/PVLibrary/Sources/PVLibrary/SwiftData/Cheats_Data.swift +++ b/PVLibrary/Sources/PVLibrary/SwiftData/Cheats_Data.swift @@ -8,9 +8,9 @@ #if canImport(SwiftData) && !os(tvOS) import SwiftData -@Model +//@Model public class Cheats_Data { - @Attribute(.unique) +// @Attribute(.unique) public var id = UUID().uuidString // Data diff --git a/PVLibrary/Sources/PVLibrary/SwiftData/Core_Data.swift b/PVLibrary/Sources/PVLibrary/SwiftData/Core_Data.swift index ed1c76d685..7b070cc44f 100644 --- a/PVLibrary/Sources/PVLibrary/SwiftData/Core_Data.swift +++ b/PVLibrary/Sources/PVLibrary/SwiftData/Core_Data.swift @@ -9,9 +9,9 @@ import SwiftData import PVLogging -@Model +//@Model public class Core_Data { - @Attribute(.unique) +// @Attribute(.unique) public var identifier: String = "" public var principleClass: String = "" diff --git a/PVLibrary/Sources/PVLibrary/SwiftData/File_Data.swift b/PVLibrary/Sources/PVLibrary/SwiftData/File_Data.swift index 87fa0d8cb9..85e3b66b41 100644 --- a/PVLibrary/Sources/PVLibrary/SwiftData/File_Data.swift +++ b/PVLibrary/Sources/PVLibrary/SwiftData/File_Data.swift @@ -8,7 +8,7 @@ #if canImport(SwiftData) && !os(tvOS) import SwiftData -@Model +//@Model public class File_Data { // Data internal var partialPath: String = "" diff --git a/PVLibrary/Sources/PVLibrary/SwiftData/Game_Data.swift b/PVLibrary/Sources/PVLibrary/SwiftData/Game_Data.swift index 480ae63e48..db90a8cd11 100644 --- a/PVLibrary/Sources/PVLibrary/SwiftData/Game_Data.swift +++ b/PVLibrary/Sources/PVLibrary/SwiftData/Game_Data.swift @@ -8,7 +8,7 @@ #if canImport(SwiftData) && !os(tvOS) import SwiftData -@Model +//@Model public class RecentGame_Data { public var game: Game_Data public var lastPlayedDate: Date = Date() @@ -22,12 +22,12 @@ public class RecentGame_Data { } -@Model +//@Model public class Game_Data { - @Attribute(.spotlight) +// @Attribute(.spotlight) public var title: String = "" - @Attribute(.unique) +// @Attribute(.unique) public var id :String = NSUUID().uuidString // TODO: This is a 'partial path' meaing it's something like {system id}.filename @@ -54,9 +54,9 @@ public class Game_Data { public var systemIdentifier: String = "" public var system: System_Data! - @Attribute(.unique) +// @Attribute(.unique) public var md5Hash: String = "" - @Attribute(.unique) +// @Attribute(.unique) public var crc: String = "" // If the user has set 'always use' for a specfic core @@ -87,15 +87,15 @@ public class Game_Data { } /* Extra metadata from OpenBG */ - @Attribute(.spotlight) +// @Attribute(.spotlight) public var gameDescription: String? public var boxBackArtworkURL: String? - @Attribute(.spotlight) +// @Attribute(.spotlight) public var developer: String? - @Attribute(.spotlight) +// @Attribute(.spotlight) public var publisher: String? public var publishDate: String? - @Attribute(.spotlight) +// @Attribute(.spotlight) public var genres: String? // Is a comma seperated list or single entry public var referenceURL: String? public var releaseID: String? diff --git a/PVLibrary/Sources/PVLibrary/SwiftData/ImageFile_Data.swift b/PVLibrary/Sources/PVLibrary/SwiftData/ImageFile_Data.swift index d443e7d344..5af2986643 100644 --- a/PVLibrary/Sources/PVLibrary/SwiftData/ImageFile_Data.swift +++ b/PVLibrary/Sources/PVLibrary/SwiftData/ImageFile_Data.swift @@ -12,7 +12,7 @@ import CoreGraphics import SwiftUI #warning("Make subclass of File_Data") -@Model +//@Model public class ImageFile_Data {// : File_Data { internal var partialPath: String = "" diff --git a/PVLibrary/Sources/PVLibrary/SwiftData/Library_Data.swift b/PVLibrary/Sources/PVLibrary/SwiftData/Library_Data.swift index 1ab81ad486..c10829b14d 100644 --- a/PVLibrary/Sources/PVLibrary/SwiftData/Library_Data.swift +++ b/PVLibrary/Sources/PVLibrary/SwiftData/Library_Data.swift @@ -8,11 +8,11 @@ #if canImport(SwiftData) && !os(tvOS) import SwiftData -@Model +//@Model public class Library_Data { // Data - @Attribute(.unique) +// @Attribute(.unique) public var uuid: String = "" public var name: String = "" diff --git a/PVLibrary/Sources/PVLibrary/SwiftData/SaveState_Data.swift b/PVLibrary/Sources/PVLibrary/SwiftData/SaveState_Data.swift index 02238890b4..31d6fe9c73 100644 --- a/PVLibrary/Sources/PVLibrary/SwiftData/SaveState_Data.swift +++ b/PVLibrary/Sources/PVLibrary/SwiftData/SaveState_Data.swift @@ -8,11 +8,11 @@ #if canImport(SwiftData) && !os(tvOS) import SwiftData -@Model +//@Model public class SaveState_Data { // Data - @Attribute(.unique) +// @Attribute(.unique) public var id: String = UUID().uuidString public var date: Date = Date() diff --git a/PVLibrary/Sources/PVLibrary/SwiftData/System_Data.swift b/PVLibrary/Sources/PVLibrary/SwiftData/System_Data.swift index 3a4c30c7d7..d7e547ade7 100644 --- a/PVLibrary/Sources/PVLibrary/SwiftData/System_Data.swift +++ b/PVLibrary/Sources/PVLibrary/SwiftData/System_Data.swift @@ -20,7 +20,7 @@ import Systems import TVServices #endif -@Model +//@Model public class System_Data { public typealias BIOSInfoProviderType = BIOS_Data diff --git a/PVLibrary/Sources/PVLibrary/SwiftData/User_Data.swift b/PVLibrary/Sources/PVLibrary/SwiftData/User_Data.swift index 8e0db89d8a..85858588f3 100644 --- a/PVLibrary/Sources/PVLibrary/SwiftData/User_Data.swift +++ b/PVLibrary/Sources/PVLibrary/SwiftData/User_Data.swift @@ -8,14 +8,14 @@ #if canImport(SwiftData) && !os(tvOS) import SwiftData -#if !os(tvOS) -@Model -#endif +//#if !os(tvOS) +//@Model +//#endif public class User_Data { // Data -#if !os(tvOS) - @Attribute(.unique) -#endif +//#if !os(tvOS) +// @Attribute(.unique) +//#endif public var uuid: String = UUID().uuidString public var name: String = "" diff --git a/PVThemes/Package.swift b/PVThemes/Package.swift index 14249e8520..cb058e273d 100644 --- a/PVThemes/Package.swift +++ b/PVThemes/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "PVThemes", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v11), diff --git a/PVUI/Package.swift b/PVUI/Package.swift index 7ee9438f5e..0d32074417 100644 --- a/PVUI/Package.swift +++ b/PVUI/Package.swift @@ -9,7 +9,7 @@ let package = Package( name: "PVUI", defaultLocalization: "en", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v14), diff --git a/PVUI/Sources/PVSwiftUI/GameItem/GameItemView.swift b/PVUI/Sources/PVSwiftUI/GameItem/GameItemView.swift index 9582f05cff..4cb0e3ae1e 100644 --- a/PVUI/Sources/PVSwiftUI/GameItem/GameItemView.swift +++ b/PVUI/Sources/PVSwiftUI/GameItem/GameItemView.swift @@ -10,7 +10,7 @@ import PVRealm import PVMediaCache import RealmSwift -@available(iOS 17, tvOS 16, *) +@available(iOS 16, tvOS 16, *) struct GameItemView: SwiftUI.View { @ObservedRealmObject var game: PVGame @@ -34,15 +34,15 @@ struct GameItemView: SwiftUI.View { .onAppear { updateArtwork() } - #if os(tvOS) +// #if os(tvOS) .onChange(of: game.trueArtworkURL) { newValue in updateArtwork() } - #else - .onChange(of: game.trueArtworkURL) { _, newValue in - updateArtwork() - } - #endif +// #else +// .onChange(of: game.trueArtworkURL) { _, newValue in +// updateArtwork() +// } +// #endif } private func updateArtwork() { diff --git a/PVUI/Sources/PVUIBase/State Management/EmulationState.swift b/PVUI/Sources/PVUIBase/State Management/EmulationState.swift index 8b81b9a727..2c85806b5a 100644 --- a/PVUI/Sources/PVUIBase/State Management/EmulationState.swift +++ b/PVUI/Sources/PVUIBase/State Management/EmulationState.swift @@ -9,9 +9,11 @@ import PVEmulatorCore import PVCoreBridge import SwiftUI import PVLogging +import Perception @MainActor -@Observable +//@Observable +@Perceptible public final class EmulationState: ObservableObject { public var core: PVEmulatorCore? { didSet { diff --git a/PVWebServer/Package.swift b/PVWebServer/Package.swift index 19b41e3991..1e4d90d219 100644 --- a/PVWebServer/Package.swift +++ b/PVWebServer/Package.swift @@ -6,7 +6,7 @@ let package = Package( name: "PVWebServer", defaultLocalization: .init(stringLiteral: "en"), platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v11), diff --git a/PVmemcpy/Package.swift b/PVmemcpy/Package.swift index eca615973d..45e3f4a501 100644 --- a/PVmemcpy/Package.swift +++ b/PVmemcpy/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "PVmemcpy", platforms: [ - .iOS(.v17), + .iOS(.v16), .tvOS(.v16), .watchOS(.v9), .macOS(.v11), diff --git a/Provenance.xcodeproj/project.pbxproj b/Provenance.xcodeproj/project.pbxproj index 10dcc6b310..4ee80decaa 100644 --- a/Provenance.xcodeproj/project.pbxproj +++ b/Provenance.xcodeproj/project.pbxproj @@ -677,6 +677,7 @@ B396209C2C66E1F30094F6F0 /* PVSupport in Frameworks */ = {isa = PBXBuildFile; productRef = B396209B2C66E1F30094F6F0 /* PVSupport */; }; B396209E2C66E1FC0094F6F0 /* PVLogging in Frameworks */ = {isa = PBXBuildFile; productRef = B396209D2C66E1FC0094F6F0 /* PVLogging */; }; B39620A02C66E20B0094F6F0 /* PVCoreBridge in Frameworks */ = {isa = PBXBuildFile; productRef = B396209F2C66E20B0094F6F0 /* PVCoreBridge */; }; + B39680492CE720E300E1AB6D /* Perception in Frameworks */ = {isa = PBXBuildFile; productRef = B39680482CE720E300E1AB6D /* Perception */; }; B39B53882C66E7A900C220C6 /* PVSettings in Frameworks */ = {isa = PBXBuildFile; productRef = B39B53872C66E7A900C220C6 /* PVSettings */; }; B39B538A2C66E7BA00C220C6 /* PVSettings in Frameworks */ = {isa = PBXBuildFile; productRef = B39B53892C66E7BA00C220C6 /* PVSettings */; }; B39CE2882C8E3E8400A1AC8C /* PVVirtualJaguar-Dynamic in Frameworks */ = {isa = PBXBuildFile; productRef = B39CE2872C8E3E8400A1AC8C /* PVVirtualJaguar-Dynamic */; }; @@ -2896,6 +2897,7 @@ B392B3DE2CCC592600B1C760 /* PVFlycast.framework in Frameworks */, B35EEFD52C6C6D1A00EBD1A8 /* Reachability in Frameworks */, B35EEFD62C6C6D1A00EBD1A8 /* SteamController in Frameworks */, + B39680492CE720E300E1AB6D /* Perception in Frameworks */, B36C8E7E2C7ECF7700BD4377 /* PVPokeMini-Dynamic in Frameworks */, B3A477C52C941F120052500A /* PVFCEU.framework in Frameworks */, B39342162CC5784D008AA673 /* MoltenVK-Catalyst in Frameworks */, @@ -4464,6 +4466,7 @@ B39342152CC5784D008AA673 /* MoltenVK-Catalyst */, B392B3E12CCC5BB700B1C760 /* PVVisualBoyAdvance-Dynamic */, B37228CB2CCDC7D300E6F627 /* FreemiumKit */, + B39680482CE720E300E1AB6D /* Perception */, ); productName = Provenance; productReference = B35EF0042C6C6D1A00EBD1A8 /* Provenance Lite.app */; @@ -4929,6 +4932,7 @@ B35B177D2CCCDFC7007059CA /* XCLocalSwiftPackageReference "PVAudio" */, B37228C82CCDC7A700E6F627 /* XCRemoteSwiftPackageReference "FreemiumKit" */, B38A68BA2CCEFB73001C57D0 /* XCLocalSwiftPackageReference "Cores/VisualBoyAdvance-M" */, + B39680472CE720E300E1AB6D /* XCRemoteSwiftPackageReference "swift-perception" */, ); productRefGroup = 1A3D409517B2DCE4004DFFFC /* Products */; projectDirPath = ""; @@ -8378,8 +8382,7 @@ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.arcade-games"; INFOPLIST_KEY_NSStickerSharingLevel = OS; INFOPLIST_KEY_UISupportsDocumentBrowser = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.5; - "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -8476,8 +8479,7 @@ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.arcade-games"; INFOPLIST_KEY_NSStickerSharingLevel = OS; INFOPLIST_KEY_UISupportsDocumentBrowser = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.5; - "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -8575,8 +8577,7 @@ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.arcade-games"; INFOPLIST_KEY_NSStickerSharingLevel = OS; INFOPLIST_KEY_UISupportsDocumentBrowser = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.5; - "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -9058,8 +9059,7 @@ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.arcade-games"; INFOPLIST_KEY_NSStickerSharingLevel = OS; INFOPLIST_KEY_UISupportsDocumentBrowser = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.4; - "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -9156,8 +9156,7 @@ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.arcade-games"; INFOPLIST_KEY_NSStickerSharingLevel = OS; INFOPLIST_KEY_UISupportsDocumentBrowser = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.5; - "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -9254,8 +9253,7 @@ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.arcade-games"; INFOPLIST_KEY_NSStickerSharingLevel = OS; INFOPLIST_KEY_UISupportsDocumentBrowser = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.5; - "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -10022,7 +10020,7 @@ ); INFOPLIST_FILE = "Provenance/Provenance-Lite-Info.plist"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.arcade-games"; - IPHONEOS_DEPLOYMENT_TARGET = 17.6; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -10093,7 +10091,7 @@ ); INFOPLIST_FILE = "Provenance/Provenance-Lite-Info.plist"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.arcade-games"; - IPHONEOS_DEPLOYMENT_TARGET = 17.6; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -10165,7 +10163,7 @@ ); INFOPLIST_FILE = "Provenance/Provenance-Lite-Info.plist"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.arcade-games"; - IPHONEOS_DEPLOYMENT_TARGET = 17.6; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -11129,6 +11127,14 @@ minimumVersion = 5.0.2; }; }; + B39680472CE720E300E1AB6D /* XCRemoteSwiftPackageReference "swift-perception" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/pointfreeco/swift-perception.git"; + requirement = { + branch = main; + kind = branch; + }; + }; B3D30FBD26F0B4CD0064603F /* XCRemoteSwiftPackageReference "SteamController" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/Provenance-Emu/SteamController.git"; @@ -11811,6 +11817,11 @@ package = B3F904A52C2002F9002283B3 /* XCLocalSwiftPackageReference "PVCoreBridge" */; productName = PVCoreBridge; }; + B39680482CE720E300E1AB6D /* Perception */ = { + isa = XCSwiftPackageProductDependency; + package = B39680472CE720E300E1AB6D /* XCRemoteSwiftPackageReference "swift-perception" */; + productName = Perception; + }; B39B53872C66E7A900C220C6 /* PVSettings */ = { isa = XCSwiftPackageProductDependency; productName = PVSettings; diff --git a/Provenance.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Provenance.xcworkspace/xcshareddata/swiftpm/Package.resolved index 1ddb08eeca..fb374122ae 100644 --- a/Provenance.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Provenance.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -51,8 +51,8 @@ "repositoryURL": "https://github.com/FlineDev/FreemiumKit.git", "state": { "branch": null, - "revision": "afdcaebebab117114809e9bb33008dcb0526fdf7", - "version": "1.12.1" + "revision": "3e8f78f8fd45d7b1ec1a0f91c2f29407b0af484a", + "version": "1.13.0" } }, { diff --git a/Provenance/Main UI/MainView.swift b/Provenance/Main UI/MainView.swift index 4254f5635c..ee913e1203 100644 --- a/Provenance/Main UI/MainView.swift +++ b/Provenance/Main UI/MainView.swift @@ -9,9 +9,11 @@ import SwiftUI import PVLogging import PVUIBase +import Perception struct MainView: View { - @EnvironmentObject private var appState: AppState + @EnvironmentObject + private var appState: AppState let appDelegate: PVAppDelegate init(appDelegate: PVAppDelegate) { @@ -20,18 +22,20 @@ struct MainView: View { } var body: some View { - Group { - if appState.useUIKit { - UIKitHostedProvenanceMainView(appDelegate: appDelegate) - .edgesIgnoringSafeArea(.all) - } else { - SwiftUIHostedProvenanceMainView(appDelegate: appDelegate) - .edgesIgnoringSafeArea(.all) + WithPerceptionTracking { + Group { + if appState.useUIKit { + UIKitHostedProvenanceMainView(appDelegate: appDelegate) + .edgesIgnoringSafeArea(.all) + } else { + SwiftUIHostedProvenanceMainView(appDelegate: appDelegate) + .edgesIgnoringSafeArea(.all) + } } + .onAppear { + ILOG("MainView: Appeared") + } + .edgesIgnoringSafeArea(.all) } - .onAppear { - ILOG("MainView: Appeared") - } - .edgesIgnoringSafeArea(.all) } } diff --git a/Provenance/Main UI/PVAppDelegate.swift b/Provenance/Main UI/PVAppDelegate.swift index 0305d03e3a..5ecc862246 100644 --- a/Provenance/Main UI/PVAppDelegate.swift +++ b/Provenance/Main UI/PVAppDelegate.swift @@ -43,12 +43,12 @@ import SteamController import FreemiumKit #endif -#if os(tvOS) +//#if os(tvOS) //@Perceptible -#else -@Observable -#endif -final class PVAppDelegate: UIResponder, GameLaunchingAppDelegate, UIApplicationDelegate { +//#else +//@Observable +//#endif +final class PVAppDelegate: UIResponder, GameLaunchingAppDelegate, UIApplicationDelegate, ObservableObject { /// This is set by the UIApplicationDelegateAdaptor internal var window: UIWindow? = nil diff --git a/Provenance/Main UI/ProvenanceApp.swift b/Provenance/Main UI/ProvenanceApp.swift index 509497a3d4..43be3f8e73 100644 --- a/Provenance/Main UI/ProvenanceApp.swift +++ b/Provenance/Main UI/ProvenanceApp.swift @@ -34,7 +34,7 @@ struct ProvenanceApp: App { #endif } } - .onChange(of: scenePhase) { oldPhase, newPhase in + .onChange(of: scenePhase) { newPhase in if newPhase == .active { appState.startBootupSequence() diff --git a/TODO.md b/TODO.md index 6da7f987dd..025e5212c7 100644 --- a/TODO.md +++ b/TODO.md @@ -7,7 +7,7 @@ _My personal TODO notes_ ## Major bugs -- [ ] Test iOS 17.0 and then 16.X +- [X] Test iOS 17.0 and then 16.X - [ ] Gamepad navigation in swiftUI - [ ] Remove or fix new shaders - [ ] Artwork ratios are wrong