diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index 1426042..3f5731e 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -522,6 +522,7 @@ class AppState: ObservableObject { icon: (installedXcode?.path.string).map(NSWorkspace.shared.icon(forFile:)), requiredMacOSVersion: availableXcode.requiredMacOSVersion, releaseNotesURL: availableXcode.releaseNotesURL, + releaseDate: availableXcode.releaseDate, sdks: availableXcode.sdks, compilers: availableXcode.compilers, downloadFileSize: availableXcode.fileSize diff --git a/Xcodes/Backend/Xcode.swift b/Xcodes/Backend/Xcode.swift index ebf1f23..f78ec76 100644 --- a/Xcodes/Backend/Xcode.swift +++ b/Xcodes/Backend/Xcode.swift @@ -13,6 +13,7 @@ struct Xcode: Identifiable, CustomStringConvertible { let icon: NSImage? let requiredMacOSVersion: String? let releaseNotesURL: URL? + let releaseDate: Date? let sdks: SDKs? let compilers: Compilers? let downloadFileSize: Int64? @@ -25,6 +26,7 @@ struct Xcode: Identifiable, CustomStringConvertible { icon: NSImage?, requiredMacOSVersion: String? = nil, releaseNotesURL: URL? = nil, + releaseDate: Date? = nil, sdks: SDKs? = nil, compilers: Compilers? = nil, downloadFileSize: Int64? = nil @@ -36,6 +38,7 @@ struct Xcode: Identifiable, CustomStringConvertible { self.icon = icon self.requiredMacOSVersion = requiredMacOSVersion self.releaseNotesURL = releaseNotesURL + self.releaseDate = releaseDate self.sdks = sdks self.compilers = compilers self.downloadFileSize = downloadFileSize diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 93b7627..c00a85c 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -55,6 +55,7 @@ struct InfoPane: View { Group{ releaseNotes(for: xcode) + releaseDate(for: xcode) identicalBuilds(for: xcode) compatibility(for: xcode) sdks(for: xcode) @@ -111,6 +112,22 @@ struct InfoPane: View { EmptyView() } } + + @ViewBuilder + private func releaseDate(for xcode: Xcode) -> some View { + if let releaseDate = xcode.releaseDate { + VStack(alignment: .leading) { + Text("Release Date") + .font(.headline) + .frame(maxWidth: .infinity, alignment: .leading) + Text(DateFormatter.downloadsReleaseDate.string(from: releaseDate)) + .font(.subheadline) + .frame(maxWidth: .infinity, alignment: .leading) + } + } else { + EmptyView() + } + } @ViewBuilder private func releaseNotes(for xcode: Xcode) -> some View { @@ -235,6 +252,7 @@ struct InfoPane_Previews: PreviewProvider { icon: NSWorkspace.shared.icon(forFile: "/Applications/Xcode-12.3.0.app"), requiredMacOSVersion: "10.15.4", releaseNotesURL: URL(string: "https://developer.apple.com/documentation/xcode-release-notes/xcode-12_3-release-notes/")!, + releaseDate: Date(), sdks: SDKs( macOS: .init(number: "11.1"), iOS: .init(number: "14.3"),