From f06d72f3eb372b427591d09c3963094e7ea2e0fc Mon Sep 17 00:00:00 2001 From: Brandon Evans Date: Thu, 24 Dec 2020 16:51:20 -0700 Subject: [PATCH] Split up Models.swift --- Xcodes.xcodeproj/project.pbxproj | 16 +++++++--- Xcodes/Backend/AvailableXcode.swift | 17 ++++++++++ Xcodes/Backend/Downloads.swift | 17 ++++++++++ .../{Models.swift => InstalledXcode.swift} | 32 ++----------------- 4 files changed, 48 insertions(+), 34 deletions(-) create mode 100644 Xcodes/Backend/AvailableXcode.swift create mode 100644 Xcodes/Backend/Downloads.swift rename Xcodes/Backend/{Models.swift => InstalledXcode.swift} (79%) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 1dae143..54a1f30 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -21,6 +21,8 @@ CA9FF86D25951C6E00E47BAF /* XCModel in Frameworks */ = {isa = PBXBuildFile; productRef = CA9FF86C25951C6E00E47BAF /* XCModel */; }; CA9FF877259528CC00E47BAF /* Version+XcodeReleases.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9FF876259528CC00E47BAF /* Version+XcodeReleases.swift */; }; CA9FF87B2595293E00E47BAF /* DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9FF87A2595293E00E47BAF /* DataSource.swift */; }; + CA9FF88125955C7000E47BAF /* AvailableXcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9FF88025955C7000E47BAF /* AvailableXcode.swift */; }; + CA9FF8872595607900E47BAF /* InstalledXcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9FF8862595607900E47BAF /* InstalledXcode.swift */; }; CAA1CB2D255A5262003FD669 /* AppleAPI in Frameworks */ = {isa = PBXBuildFile; productRef = CAA1CB2C255A5262003FD669 /* AppleAPI */; }; CAA1CB35255A5AD5003FD669 /* SignInCredentialsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA1CB34255A5AD5003FD669 /* SignInCredentialsView.swift */; }; CAA1CB45255A5B60003FD669 /* SignIn2FAView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA1CB44255A5B60003FD669 /* SignIn2FAView.swift */; }; @@ -31,7 +33,7 @@ CABFA9BF2592EEEA00380FEE /* URLSession+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFA9B32592EEEA00380FEE /* URLSession+Promise.swift */; }; CABFA9C12592EEEA00380FEE /* Version+.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFA9A82592EEE900380FEE /* Version+.swift */; }; CABFA9C22592EEEA00380FEE /* Promise+.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFA9B02592EEEA00380FEE /* Promise+.swift */; }; - CABFA9C32592EEEA00380FEE /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFA9B92592EEEA00380FEE /* Models.swift */; }; + CABFA9C32592EEEA00380FEE /* Downloads.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFA9B92592EEEA00380FEE /* Downloads.swift */; }; CABFA9C52592EEEA00380FEE /* FileManager+.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFA9B82592EEEA00380FEE /* FileManager+.swift */; }; CABFA9C72592EEEA00380FEE /* Entry+.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFA9B22592EEEA00380FEE /* Entry+.swift */; }; CABFA9C92592EEEA00380FEE /* URLRequest+Apple.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFA9AB2592EEE900380FEE /* URLRequest+Apple.swift */; }; @@ -87,6 +89,8 @@ CA9FF8652595130600E47BAF /* View+IsHidden.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+IsHidden.swift"; sourceTree = ""; }; CA9FF876259528CC00E47BAF /* Version+XcodeReleases.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Version+XcodeReleases.swift"; sourceTree = ""; }; CA9FF87A2595293E00E47BAF /* DataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataSource.swift; sourceTree = ""; }; + CA9FF88025955C7000E47BAF /* AvailableXcode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvailableXcode.swift; sourceTree = ""; }; + CA9FF8862595607900E47BAF /* InstalledXcode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstalledXcode.swift; sourceTree = ""; }; CAA1CB34255A5AD5003FD669 /* SignInCredentialsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInCredentialsView.swift; sourceTree = ""; }; CAA1CB44255A5B60003FD669 /* SignIn2FAView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignIn2FAView.swift; sourceTree = ""; }; CAA1CB48255A5C97003FD669 /* SignInSMSView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInSMSView.swift; sourceTree = ""; }; @@ -106,7 +110,7 @@ CABFA9B32592EEEA00380FEE /* URLSession+Promise.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSession+Promise.swift"; sourceTree = ""; }; CABFA9B42592EEEA00380FEE /* Process.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Process.swift; sourceTree = ""; }; CABFA9B82592EEEA00380FEE /* FileManager+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FileManager+.swift"; sourceTree = ""; }; - CABFA9B92592EEEA00380FEE /* Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = ""; }; + CABFA9B92592EEEA00380FEE /* Downloads.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Downloads.swift; sourceTree = ""; }; CABFA9BA2592EEEA00380FEE /* DateFormatter+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DateFormatter+.swift"; sourceTree = ""; }; CABFA9D42592EF6300380FEE /* DECISIONS.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = DECISIONS.md; sourceTree = ""; }; CABFAA2A2592FBFC00380FEE /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SettingsView.swift; path = Xcodes/SettingsView.swift; sourceTree = SOURCE_ROOT; }; @@ -205,15 +209,17 @@ isa = PBXGroup; children = ( CA378F982466567600A58CE0 /* AppState.swift */, + CA9FF88025955C7000E47BAF /* AvailableXcode.swift */, CABFAA2B2592FBFC00380FEE /* Configure.swift */, CABFAA482593162500380FEE /* Bundle+InfoPlistValues.swift */, CA9FF87A2595293E00E47BAF /* DataSource.swift */, CABFA9BA2592EEEA00380FEE /* DateFormatter+.swift */, + CABFA9B92592EEEA00380FEE /* Downloads.swift */, CABFA9B22592EEEA00380FEE /* Entry+.swift */, CABFA9A92592EEE900380FEE /* Environment.swift */, CABFA9B82592EEEA00380FEE /* FileManager+.swift */, CABFA9AC2592EEE900380FEE /* Foundation.swift */, - CABFA9B92592EEEA00380FEE /* Models.swift */, + CA9FF8862595607900E47BAF /* InstalledXcode.swift */, CABFA9AE2592EEE900380FEE /* Path+.swift */, CABFA9B42592EEEA00380FEE /* Process.swift */, CABFA9B02592EEEA00380FEE /* Promise+.swift */, @@ -460,12 +466,13 @@ CABFA9BF2592EEEA00380FEE /* URLSession+Promise.swift in Sources */, CABFA9BB2592EEEA00380FEE /* DateFormatter+.swift in Sources */, CABFA9BD2592EEEA00380FEE /* Environment.swift in Sources */, - CABFA9C32592EEEA00380FEE /* Models.swift in Sources */, + CABFA9C32592EEEA00380FEE /* Downloads.swift in Sources */, CA378F992466567600A58CE0 /* AppState.swift in Sources */, CAD2E7A42449574E00113D76 /* XcodeListView.swift in Sources */, CAA1CB45255A5B60003FD669 /* SignIn2FAView.swift in Sources */, CABFA9C52592EEEA00380FEE /* FileManager+.swift in Sources */, CABFA9CD2592EEEA00380FEE /* Foundation.swift in Sources */, + CA9FF8872595607900E47BAF /* InstalledXcode.swift in Sources */, CA9FF84E2595079F00E47BAF /* ScrollingTextView.swift in Sources */, CABFA9C12592EEEA00380FEE /* Version+.swift in Sources */, CA9FF8522595080100E47BAF /* AcknowledgementsView.swift in Sources */, @@ -488,6 +495,7 @@ 63EAA4EB259944450046AB8F /* ProgressButton.swift in Sources */, CA5D781E257365D6008EDE9D /* PinCodeTextView.swift in Sources */, CA39711924495F0E00AFFB77 /* AppStoreButtonStyle.swift in Sources */, + CA9FF88125955C7000E47BAF /* AvailableXcode.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Xcodes/Backend/AvailableXcode.swift b/Xcodes/Backend/AvailableXcode.swift new file mode 100644 index 0000000..f1c0c0a --- /dev/null +++ b/Xcodes/Backend/AvailableXcode.swift @@ -0,0 +1,17 @@ +import Foundation +import Version + +/// A version of Xcode that's available for installation +public struct AvailableXcode: Codable { + public let version: Version + public let url: URL + public let filename: String + public let releaseDate: Date? + + public init(version: Version, url: URL, filename: String, releaseDate: Date?) { + self.version = version + self.url = url + self.filename = filename + self.releaseDate = releaseDate + } +} diff --git a/Xcodes/Backend/Downloads.swift b/Xcodes/Backend/Downloads.swift new file mode 100644 index 0000000..45e2bb7 --- /dev/null +++ b/Xcodes/Backend/Downloads.swift @@ -0,0 +1,17 @@ +import Foundation +import Path +import Version + +struct Downloads: Codable { + let downloads: [Download] +} + +public struct Download: Codable { + public let name: String + public let files: [File] + public let dateModified: Date + + public struct File: Codable { + public let remotePath: String + } +} diff --git a/Xcodes/Backend/Models.swift b/Xcodes/Backend/InstalledXcode.swift similarity index 79% rename from Xcodes/Backend/Models.swift rename to Xcodes/Backend/InstalledXcode.swift index fe0fbb8..aa3d716 100644 --- a/Xcodes/Backend/Models.swift +++ b/Xcodes/Backend/InstalledXcode.swift @@ -1,7 +1,8 @@ import Foundation -import Path import Version +import Path +/// A version of Xcode that's already installed public struct InstalledXcode: Equatable { public let path: Path /// Composed of the bundle short version from Info.plist and the product build version from version.plist @@ -39,34 +40,6 @@ public struct InstalledXcode: Equatable { } } -public struct Xcode: Codable { - public let version: Version - public let url: URL - public let filename: String - public let releaseDate: Date? - - public init(version: Version, url: URL, filename: String, releaseDate: Date?) { - self.version = version - self.url = url - self.filename = filename - self.releaseDate = releaseDate - } -} - -struct Downloads: Codable { - let downloads: [Download] -} - -public struct Download: Codable { - public let name: String - public let files: [File] - public let dateModified: Date - - public struct File: Codable { - public let remotePath: String - } -} - public struct InfoPlist: Decodable { public let bundleID: String? public let bundleShortVersion: String? @@ -86,4 +59,3 @@ public struct VersionPlist: Decodable { case productBuildVersion = "ProductBuildVersion" } } -