mirror of
https://github.com/XcodesOrg/XcodesApp.git
synced 2025-12-25 12:14:17 +01:00
72 lines
1.9 KiB
Swift
72 lines
1.9 KiB
Swift
import AppKit
|
|
import Foundation
|
|
import Version
|
|
import struct XCModel.SDKs
|
|
import struct XCModel.Compilers
|
|
import Path
|
|
|
|
struct Xcode: Identifiable, CustomStringConvertible {
|
|
let version: Version
|
|
/// Other Xcode versions that have the same build identifier
|
|
let identicalBuilds: [Version]
|
|
var installState: XcodeInstallState
|
|
let selected: Bool
|
|
let icon: NSImage?
|
|
let requiredMacOSVersion: String?
|
|
let releaseNotesURL: URL?
|
|
let releaseDate: Date?
|
|
let sdks: SDKs?
|
|
let compilers: Compilers?
|
|
let downloadFileSize: Int64?
|
|
|
|
init(
|
|
version: Version,
|
|
identicalBuilds: [Version] = [],
|
|
installState: XcodeInstallState,
|
|
selected: Bool,
|
|
icon: NSImage?,
|
|
requiredMacOSVersion: String? = nil,
|
|
releaseNotesURL: URL? = nil,
|
|
releaseDate: Date? = nil,
|
|
sdks: SDKs? = nil,
|
|
compilers: Compilers? = nil,
|
|
downloadFileSize: Int64? = nil
|
|
) {
|
|
self.version = version
|
|
self.identicalBuilds = identicalBuilds
|
|
self.installState = installState
|
|
self.selected = selected
|
|
self.icon = icon
|
|
self.requiredMacOSVersion = requiredMacOSVersion
|
|
self.releaseNotesURL = releaseNotesURL
|
|
self.releaseDate = releaseDate
|
|
self.sdks = sdks
|
|
self.compilers = compilers
|
|
self.downloadFileSize = downloadFileSize
|
|
}
|
|
|
|
var id: Version { version }
|
|
|
|
var description: String {
|
|
version.appleDescription
|
|
}
|
|
|
|
var downloadFileSizeString: String? {
|
|
if let downloadFileSize = downloadFileSize {
|
|
return ByteCountFormatter.string(fromByteCount: downloadFileSize, countStyle: .file)
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
var installedPath: Path? {
|
|
switch installState {
|
|
case .installed(let path):
|
|
return path
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
}
|