Mist/Mist/Model/Installer.swift
2023-06-13 16:57:15 +10:00

793 lines
30 KiB
Swift

//
// Installer.swift
// Mist
//
// Created by Nindi Gill on 13/6/2022.
//
import Foundation
// swiftlint:disable file_length
// swiftlint:disable:next type_body_length
struct Installer: Decodable, Hashable, Identifiable {
enum CodingKeys: String, CodingKey {
case id = "Identifier"
case version = "Version"
case build = "Build"
case date = "PostDate"
case distributionURL = "DistributionURL"
case distributionSize = "DistributionSize"
case packages = "Packages"
case boardIDs = "BoardIDs"
case deviceIDs = "DeviceIDs"
case unsupportedModelIdentifiers = "UnsupportedModelIdentifiers"
}
static var example: Installer {
Installer(
id: "012-92138",
version: "13.0",
build: "22A380",
date: "2022-10-25",
distributionURL: "https://swdist.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/012-92138.English.dist",
distributionSize: 7_467,
packages: [
Package(
url: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/MajorOSInfo.pkg",
size: 1_334_737,
integrityDataURL: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/MajorOSInfo.pkg.integrityDataV1",
integrityDataSize: 104
),
Package(
url: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/InstallAssistant.pkg",
size: 12_151_608_300,
integrityDataURL: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/InstallAssistant.pkg.integrityDataV1",
integrityDataSize: 41_792
),
Package(
url: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/BuildManifest.plist",
size: 3_355_762,
integrityDataURL: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/BuildManifest.plist.integrityDataV1",
integrityDataSize: 104
),
Package(
url: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/InstallInfo.plist",
size: 181,
integrityDataURL: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/InstallInfo.plist.integrityDataV1",
integrityDataSize: 104
),
Package(
url: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/UpdateBrain.zip",
size: 3_450_528,
integrityDataURL: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/UpdateBrain.zip.integrityDataV1",
integrityDataSize: 104
),
Package(
url: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/Info.plist",
size: 5_042,
integrityDataURL: "https://swcdn.apple.com/content/downloads/25/16/012-92138-A_KGGGN26YQB/d0kr042ixfvkboeft8qt2i3aclr5bx1e6p/Info.plist.integrityDataV1",
integrityDataSize: 104
)
],
boardIDs: [
"Mac-0CFF9C7C2B63DF8D",
"Mac-112818653D3AABFC",
"Mac-1E7E29AD0135F9BC",
"Mac-226CB3C6A851A671",
"Mac-27AD2F918AE68F61",
"Mac-4B682C642B45593E",
"Mac-53FDB3D8DB8CA971",
"Mac-551B86E5744E2388",
"Mac-5F9802EFE386AA28",
"Mac-63001698E7A34814",
"Mac-77F17D7DA9285301",
"Mac-7BA5B2D9E42DDD94",
"Mac-7BA5B2DFE22DDD8C",
"Mac-827FAC58A8FDFA22",
"Mac-827FB448E656EC26",
"Mac-937A206F2EE63C01",
"Mac-A61BADE1FDAD7B05",
"Mac-AA95B1DDAB278B95",
"Mac-AF89B6D9451A490B",
"Mac-B4831CEBD52A0C4C",
"Mac-BE088AF8C5EB4FA2",
"Mac-CAD6701F7CEA0921",
"Mac-CFF7D910A743CAAF",
"Mac-E1008331FDC96864",
"Mac-E7203C0F68AA0004",
"Mac-EE2EBD4B90B839A8"
],
deviceIDs: [
"J132AP",
"J137AP",
"J140AAP",
"J140KAP",
"J152FAP",
"J160AP",
"J174AP",
"J185AP",
"J185FAP",
"J213AP",
"J214AP",
"J214KAP",
"J215AP",
"J223AP",
"J230AP",
"J230KAP",
"J274AP",
"J293AP",
"J313AP",
"J314CAP",
"J314SAP",
"J316CAP",
"J316SAP",
"J375CAP",
"J375DAP",
"J413AP",
"J456AP",
"J457AP",
"J493AP",
"J680AP",
"J780AP",
"VMA2MACOSAP",
"VMM-X86_64",
"X589AMLUAP",
"X86LEGACYAP"
],
unsupportedModelIdentifiers: []
)
}
static var legacyInstallers: [Installer] {
[
Installer(
id: "10.12.6-16G29",
version: "10.12.6",
build: "16G29",
date: "2017-07-15",
distributionURL: "",
distributionSize: 0,
packages: [
Package(
url: "http://updates-http.cdn-apple.com/2019/cert/061-39476-20191023-48f365f4-0015-4c41-9f44-39d3d2aca067/InstallOS.dmg",
size: 5_007_882_126,
integrityDataURL: nil,
integrityDataSize: nil
)
],
boardIDs: [
"Mac-00BE6ED71E35EB86",
"Mac-031AEE4D24BFF0B1",
"Mac-031B6874CF7F642A",
"Mac-06F11F11946D27C5",
"Mac-06F11FD93F0323C5",
"Mac-189A3D4F975D5FFC",
"Mac-27ADBB7B4CEE8E61",
"Mac-2BD1B31983FE1663",
"Mac-2E6FAB96566FE58C",
"Mac-35C1E88140C3E6CF",
"Mac-35C5E08120C7EEAF",
"Mac-3CBD00234E554E41",
"Mac-42FD25EABCABB274",
"Mac-473D31EABEB93F9B",
"Mac-4B682C642B45593E",
"Mac-4B7AC7E43945597E",
"Mac-4BC72D62AD45599E",
"Mac-50619A408DB004DA",
"Mac-551B86E5744E2388",
"Mac-65CE76090165799A",
"Mac-66E35819EE2D0D05",
"Mac-66F35F19FE2A0D05",
"Mac-6F01561E16C75D06",
"Mac-742912EFDBEE19B3",
"Mac-77EB7D7DAF985301",
"Mac-77F17D7DA9285301",
"Mac-7BA5B2794B2CDB12",
"Mac-7DF21CB3ED6977E5",
"Mac-7DF2A3B5E5D671ED",
"Mac-81E3E92DD6088272",
"Mac-8ED6AF5B48C039E1",
"Mac-937CB26E2E02BB01",
"Mac-942452F5819B1C1B",
"Mac-942459F5819B171B",
"Mac-94245A3940C91C80",
"Mac-94245B3640C91C81",
"Mac-942B59F58194171B",
"Mac-942B5BF58194151B",
"Mac-942C5DF58193131B",
"Mac-9AE82516C7C6B903",
"Mac-9F18E312C5C2BF0B",
"Mac-A369DDC4E67F1C45",
"Mac-A5C67F76ED83108C",
"Mac-AFD8A9D944EA4843",
"Mac-B4831CEBD52A0C4C",
"Mac-B809C3757DA9BB8D",
"Mac-BE088AF8C5EB4FA2",
"Mac-BE0E8AC46FE800CC",
"Mac-C08A6BB70A942AC2",
"Mac-C3EC7CD22292981F",
"Mac-CAD6701F7CEA0921",
"Mac-DB15BD556843C820",
"Mac-E43C1C25D4880AD6",
"Mac-EE2EBD4B90B839A8",
"Mac-F305150B0C7DEEEF",
"Mac-F60DEB81FF30ACF6",
"Mac-F65AE981FFA204ED",
"Mac-FA842E06C61E91C5",
"Mac-FC02E91DDD3FA6A4",
"Mac-FFE5EF870D7BA81A",
"Mac-F2208EC8",
"Mac-F221BEC8",
"Mac-F221DCC8",
"Mac-F222BEC8",
"Mac-F2238AC8",
"Mac-F2238BAE",
"Mac-F22586C8",
"Mac-F22589C8",
"Mac-F2268CC8",
"Mac-F2268DAE",
"Mac-F2268DC8",
"Mac-F22C89C8",
"Mac-F22C8AC8"
],
deviceIDs: [],
unsupportedModelIdentifiers: []
),
Installer(
id: "10.11.6-15G31",
version: "10.11.6",
build: "15G31",
date: "2016-05-18",
distributionURL: "",
distributionSize: 0,
packages: [
Package(
url: "http://updates-http.cdn-apple.com/2019/cert/061-41424-20191024-218af9ec-cf50-4516-9011-228c78eda3d2/InstallMacOSX.dmg",
size: 6_204_629_298,
integrityDataURL: nil,
integrityDataSize: nil
)
],
boardIDs: [
"Mac-00BE6ED71E35EB86",
"Mac-031AEE4D24BFF0B1",
"Mac-031B6874CF7F642A",
"Mac-06F11F11946D27C5",
"Mac-06F11FD93F0323C5",
"Mac-189A3D4F975D5FFC",
"Mac-27ADBB7B4CEE8E61",
"Mac-2BD1B31983FE1663",
"Mac-2E6FAB96566FE58C",
"Mac-35C1E88140C3E6CF",
"Mac-35C5E08120C7EEAF",
"Mac-3CBD00234E554E41",
"Mac-42FD25EABCABB274",
"Mac-4B7AC7E43945597E",
"Mac-4BC72D62AD45599E",
"Mac-50619A408DB004DA",
"Mac-65CE76090165799A",
"Mac-66F35F19FE2A0D05",
"Mac-6F01561E16C75D06",
"Mac-742912EFDBEE19B3",
"Mac-77EB7D7DAF985301",
"Mac-7BA5B2794B2CDB12",
"Mac-7DF21CB3ED6977E5",
"Mac-7DF2A3B5E5D671ED",
"Mac-81E3E92DD6088272",
"Mac-8ED6AF5B48C039E1",
"Mac-937CB26E2E02BB01",
"Mac-942452F5819B1C1B",
"Mac-942459F5819B171B",
"Mac-94245A3940C91C80",
"Mac-94245B3640C91C81",
"Mac-942B59F58194171B",
"Mac-942B5BF58194151B",
"Mac-942C5DF58193131B",
"Mac-9AE82516C7C6B903",
"Mac-9F18E312C5C2BF0B",
"Mac-A369DDC4E67F1C45",
"Mac-AFD8A9D944EA4843",
"Mac-B809C3757DA9BB8D",
"Mac-BE0E8AC46FE800CC",
"Mac-C08A6BB70A942AC2",
"Mac-C3EC7CD22292981F",
"Mac-DB15BD556843C820",
"Mac-E43C1C25D4880AD6",
"Mac-F305150B0C7DEEEF",
"Mac-F60DEB81FF30ACF6",
"Mac-F65AE981FFA204ED",
"Mac-FA842E06C61E91C5",
"Mac-FC02E91DDD3FA6A4",
"Mac-FFE5EF870D7BA81A",
"Mac-F2208EC8",
"Mac-F2218EA9",
"Mac-F2218EC8",
"Mac-F2218FA9",
"Mac-F2218FC8",
"Mac-F221BEC8",
"Mac-F221DCC8",
"Mac-F222BEC8",
"Mac-F2238AC8",
"Mac-F2238BAE",
"Mac-F223BEC8",
"Mac-F22586C8",
"Mac-F22587A1",
"Mac-F22587C8",
"Mac-F22589C8",
"Mac-F2268AC8",
"Mac-F2268CC8",
"Mac-F2268DAE",
"Mac-F2268DC8",
"Mac-F2268EC8",
"Mac-F226BEC8",
"Mac-F22788AA",
"Mac-F227BEC8",
"Mac-F22C86C8",
"Mac-F22C89C8",
"Mac-F22C8AC8",
"Mac-F42386C8",
"Mac-F42388C8",
"Mac-F4238BC8",
"Mac-F4238CC8",
"Mac-F42C86C8",
"Mac-F42C88C8",
"Mac-F42C89C8",
"Mac-F42D86A9",
"Mac-F42D86C8",
"Mac-F42D88C8",
"Mac-F42D89A9",
"Mac-F42D89C8"
],
deviceIDs: [],
unsupportedModelIdentifiers: []
),
Installer(
id: "10.10.5-14F27",
version: "10.10.5",
build: "14F27",
date: "2015-08-05",
distributionURL: "",
distributionSize: 0,
packages: [
Package(
url: "http://updates-http.cdn-apple.com/2019/cert/061-41343-20191023-02465f92-3ab5-4c92-bfe2-b725447a070d/InstallMacOSX.dmg",
size: 5_718_074_248,
integrityDataURL: nil,
integrityDataSize: nil
)
],
boardIDs: [
"Mac-00BE6ED71E35EB86",
"Mac-031AEE4D24BFF0B1",
"Mac-031B6874CF7F642A",
"Mac-06F11F11946D27C5",
"Mac-06F11FD93F0323C5",
"Mac-189A3D4F975D5FFC",
"Mac-27ADBB7B4CEE8E61",
"Mac-2BD1B31983FE1663",
"Mac-2E6FAB96566FE58C",
"Mac-35C1E88140C3E6CF",
"Mac-35C5E08120C7EEAF",
"Mac-3CBD00234E554E41",
"Mac-42FD25EABCABB274",
"Mac-4B7AC7E43945597E",
"Mac-4BC72D62AD45599E",
"Mac-50619A408DB004DA",
"Mac-66F35F19FE2A0D05",
"Mac-6F01561E16C75D06",
"Mac-742912EFDBEE19B3",
"Mac-77EB7D7DAF985301",
"Mac-7BA5B2794B2CDB12",
"Mac-7DF21CB3ED6977E5",
"Mac-7DF2A3B5E5D671ED",
"Mac-81E3E92DD6088272",
"Mac-8ED6AF5B48C039E1",
"Mac-937CB26E2E02BB01",
"Mac-942452F5819B1C1B",
"Mac-942459F5819B171B",
"Mac-94245A3940C91C80",
"Mac-94245B3640C91C81",
"Mac-942B59F58194171B",
"Mac-942B5BF58194151B",
"Mac-942C5DF58193131B",
"Mac-9F18E312C5C2BF0B",
"Mac-AFD8A9D944EA4843",
"Mac-BE0E8AC46FE800CC",
"Mac-C08A6BB70A942AC2",
"Mac-C3EC7CD22292981F",
"Mac-E43C1C25D4880AD6",
"Mac-F305150B0C7DEEEF",
"Mac-F60DEB81FF30ACF6",
"Mac-F65AE981FFA204ED",
"Mac-FA842E06C61E91C5",
"Mac-FC02E91DDD3FA6A4",
"Mac-F2208EC8",
"Mac-F2218EA9",
"Mac-F2218EC8",
"Mac-F2218FA9",
"Mac-F2218FC8",
"Mac-F221BEC8",
"Mac-F221DCC8",
"Mac-F222BEC8",
"Mac-F2238AC8",
"Mac-F2238BAE",
"Mac-F223BEC8",
"Mac-F22586C8",
"Mac-F22587A1",
"Mac-F22587C8",
"Mac-F22589C8",
"Mac-F2268AC8",
"Mac-F2268CC8",
"Mac-F2268DAE",
"Mac-F2268DC8",
"Mac-F2268EC8",
"Mac-F226BEC8",
"Mac-F22788AA",
"Mac-F227BEC8",
"Mac-F22C86C8",
"Mac-F22C89C8",
"Mac-F22C8AC8",
"Mac-F42386C8",
"Mac-F42388C8",
"Mac-F4238BC8",
"Mac-F4238CC8",
"Mac-F42C86C8",
"Mac-F42C88C8",
"Mac-F42C89C8",
"Mac-F42D86A9",
"Mac-F42D86C8",
"Mac-F42D88C8",
"Mac-F42D89A9",
"Mac-F42D89C8"
],
deviceIDs: [],
unsupportedModelIdentifiers: []
),
Installer(
id: "10.8.5-12F45",
version: "10.8.5",
build: "12F45",
date: "2013-09-27",
distributionURL: "",
distributionSize: 0,
packages: [
Package(
url: "https://updates.cdn-apple.com/2021/macos/031-0627-20210614-90D11F33-1A65-42DD-BBEA-E1D9F43A6B3F/InstallMacOSX.dmg",
size: 4_449_317_520,
integrityDataURL: nil,
integrityDataSize: nil
)
],
boardIDs: [
"Mac-00BE6ED71E35EB86",
"Mac-031AEE4D24BFF0B1",
"Mac-031B6874CF7F642A",
"Mac-27ADBB7B4CEE8E61",
"Mac-2E6FAB96566FE58C",
"Mac-35C1E88140C3E6CF",
"Mac-4B7AC7E43945597E",
"Mac-4BC72D62AD45599E",
"Mac-50619A408DB004DA",
"Mac-66F35F19FE2A0D05",
"Mac-6F01561E16C75D06",
"Mac-742912EFDBEE19B3",
"Mac-7BA5B2794B2CDB12",
"Mac-7DF21CB3ED6977E5",
"Mac-7DF2A3B5E5D671ED",
"Mac-8ED6AF5B48C039E1",
"Mac-942452F5819B1C1B",
"Mac-942459F5819B171B",
"Mac-94245A3940C91C80",
"Mac-94245B3640C91C81",
"Mac-942B59F58194171B",
"Mac-942B5BF58194151B",
"Mac-942C5DF58193131B",
"Mac-AFD8A9D944EA4843",
"Mac-C08A6BB70A942AC2",
"Mac-C3EC7CD22292981F",
"Mac-F65AE981FFA204ED",
"Mac-FC02E91DDD3FA6A4",
"Mac-F2208EC8",
"Mac-F2218EA9",
"Mac-F2218EC8",
"Mac-F2218FA9",
"Mac-F2218FC8",
"Mac-F221BEC8",
"Mac-F221DCC8",
"Mac-F222BEC8",
"Mac-F2238AC8",
"Mac-F2238BAE",
"Mac-F223BEC8",
"Mac-F22586C8",
"Mac-F22587A1",
"Mac-F22587C8",
"Mac-F22589C8",
"Mac-F2268AC8",
"Mac-F2268CC8",
"Mac-F2268DAE",
"Mac-F2268DC8",
"Mac-F2268EC8",
"Mac-F226BEC8",
"Mac-F22788AA",
"Mac-F227BEC8",
"Mac-F22C86C8",
"Mac-F22C89C8",
"Mac-F22C8AC8",
"Mac-F42386C8",
"Mac-F42388C8",
"Mac-F4238BC8",
"Mac-F4238CC8",
"Mac-F42C86C8",
"Mac-F42C88C8",
"Mac-F42C89C8",
"Mac-F42D86A9",
"Mac-F42D86C8",
"Mac-F42D88C8",
"Mac-F42D89A9",
"Mac-F42D89C8"
],
deviceIDs: [],
unsupportedModelIdentifiers: []
),
Installer(
id: "10.7.5-11G63",
version: "10.7.5",
build: "11G63",
date: "2012-09-28",
distributionURL: "",
distributionSize: 0,
packages: [
Package(
url: "https://updates.cdn-apple.com/2021/macos/041-7683-20210614-E610947E-C7CE-46EB-8860-D26D71F0D3EA/InstallMacOSX.dmg",
size: 4_720_237_409,
integrityDataURL: nil,
integrityDataSize: nil
)
],
boardIDs: [
"Mac-2E6FAB96566FE58C",
"Mac-4B7AC7E43945597E",
"Mac-4BC72D62AD45599E",
"Mac-66F35F19FE2A0D05",
"Mac-6F01561E16C75D06",
"Mac-742912EFDBEE19B3",
"Mac-7BA5B2794B2CDB12",
"Mac-8ED6AF5B48C039E1",
"Mac-942452F5819B1C1B",
"Mac-942459F5819B171B",
"Mac-94245A3940C91C80",
"Mac-94245B3640C91C81",
"Mac-942B59F58194171B",
"Mac-942B5BF58194151B",
"Mac-942C5DF58193131B",
"Mac-C08A6BB70A942AC2",
"Mac-C3EC7CD22292981F",
"Mac-F2208EC8",
"Mac-F2218EA9",
"Mac-F2218EC8",
"Mac-F2218FA9",
"Mac-F2218FC8",
"Mac-F221BEC8",
"Mac-F221DCC8",
"Mac-F222BEC8",
"Mac-F2238AC8",
"Mac-F2238BAE",
"Mac-F223BEC8",
"Mac-F22586C8",
"Mac-F22587A1",
"Mac-F22587C8",
"Mac-F22589C8",
"Mac-F2268AC8",
"Mac-F2268CC8",
"Mac-F2268DAE",
"Mac-F2268DC8",
"Mac-F2268EC8",
"Mac-F226BEC8",
"Mac-F22788A9",
"Mac-F22788AA",
"Mac-F22788C8",
"Mac-F227BEC8",
"Mac-F22C86C8",
"Mac-F22C89C8",
"Mac-F22C8AC8",
"Mac-F4208AC8",
"Mac-F4208CA9",
"Mac-F4208CAA",
"Mac-F4208DA9",
"Mac-F4208DC8",
"Mac-F4208EAA",
"Mac-F42187C8",
"Mac-F42189C8",
"Mac-F4218EC8",
"Mac-F4218FC8",
"Mac-F42289C8",
"Mac-F4228EC8",
"Mac-F42386C8",
"Mac-F42388C8",
"Mac-F4238BC8",
"Mac-F4238CC8",
"Mac-F42786A9",
"Mac-F42C86C8",
"Mac-F42C88C8",
"Mac-F42C89C8",
"Mac-F42C8CC8",
"Mac-F42D86A9",
"Mac-F42D86C8",
"Mac-F42D88C8",
"Mac-F42D89A9",
"Mac-F42D89C8"
],
deviceIDs: [],
unsupportedModelIdentifiers: []
)
]
}
static var filenameDescription: String {
"""
Use the following variables to set the filename dynamically. For example:
- **%NAME%** will be replaced with **'\(Installer.example.name)'**
- **%VERSION%** will be replaced with **'\(Installer.example.version)'**
- **%BUILD%** will be replaced with **'\(Installer.example.build)'**
"""
}
static var packageDescription: String {
"""
Use the following variables to set the identifier dynamically. For example:
- **%NAME%** will be replaced with **'\(Installer.example.name)'**
- **%VERSION%** will be replaced with **'\(Installer.example.version)'**
- **%BUILD%** will be replaced with **'\(Installer.example.build)'**
- Spaces will be replaced with hyphens **-**
"""
}
let id: String
let version: String
let build: String
let date: String
let distributionURL: String
let distributionSize: Int
let packages: [Package]
let boardIDs: [String]
let deviceIDs: [String]
let unsupportedModelIdentifiers: [String]
var name: String {
var name: String = ""
if version.range(of: "^14", options: .regularExpression) != nil {
name = "macOS Sonoma"
} else if version.range(of: "^13", options: .regularExpression) != nil {
name = "macOS Ventura"
} else if version.range(of: "^12", options: .regularExpression) != nil {
name = "macOS Monterey"
} else if version.range(of: "^11", options: .regularExpression) != nil {
name = "macOS Big Sur"
} else if version.range(of: "^10\\.15", options: .regularExpression) != nil {
name = "macOS Catalina"
} else if version.range(of: "^10\\.14", options: .regularExpression) != nil {
name = "macOS Mojave"
} else if version.range(of: "^10\\.13", options: .regularExpression) != nil {
name = "macOS High Sierra"
} else if version.range(of: "^10\\.12", options: .regularExpression) != nil {
name = "macOS Sierra"
} else if version.range(of: "^10\\.11", options: .regularExpression) != nil {
name = "OS X El Capitan"
} else if version.range(of: "^10\\.10", options: .regularExpression) != nil {
name = "OS X Yosemite"
} else if version.range(of: "^10\\.9", options: .regularExpression) != nil {
name = "OS X Mavericks"
} else if version.range(of: "^10\\.8", options: .regularExpression) != nil {
name = "OS X Mountain Lion"
} else if version.range(of: "^10\\.7", options: .regularExpression) != nil {
name = "Mac OS X Lion"
} else {
name = "macOS \(version)"
}
name = beta ? "\(name) beta" : name
return name
}
var compatible: Bool {
// Board ID (Intel)
if let boardID: String = Hardware.boardID,
!boardIDs.isEmpty,
!boardIDs.contains(boardID) {
return false
}
// Device ID (Apple Silicon or Intel T2)
// macOS Big Sur 11 or newer
if version.range(of: "^1[1-9]\\.", options: .regularExpression) != nil,
let deviceID: String = Hardware.deviceID,
!deviceIDs.isEmpty,
!deviceIDs.contains(deviceID) {
return false
}
// Model Identifier (Apple Silicon or Intel)
// macOS Catalina 10.15 or older
if version.range(of: "^10\\.", options: .regularExpression) != nil {
if let architecture: Architecture = Hardware.architecture,
architecture == .appleSilicon {
return false
}
if let modelIdentifier: String = Hardware.modelIdentifier,
!unsupportedModelIdentifiers.isEmpty,
unsupportedModelIdentifiers.contains(modelIdentifier) {
return false
}
}
return true
}
var allDownloads: [Package] {
(sierraOrOlder ? [] : [Package(url: distributionURL, size: distributionSize, integrityDataURL: nil, integrityDataSize: nil)]) + packages.sorted { $0.filename < $1.filename }
}
var temporaryDiskImageMountPointURL: URL {
URL(fileURLWithPath: "/Volumes/\(id)")
}
var temporaryInstallerURL: URL {
temporaryDiskImageMountPointURL.appendingPathComponent("/Applications/Install \(name).app")
}
var temporaryISOMountPointURL: URL {
URL(fileURLWithPath: "/Volumes/Install \(name)")
}
var dictionary: [String: Any] {
[
"identifier": id,
"name": name,
"version": version,
"build": build,
"size": size,
"date": date,
"compatible": compatible,
"distribution": distributionURL,
"packages": packages.map { $0.dictionary },
"beta": beta
]
}
var sierraOrOlder: Bool {
version.range(of: "^10\\.([7-9]|1[0-2])\\.", options: .regularExpression) != nil
}
var catalinaOrNewer: Bool {
bigSurOrNewer || version.range(of: "^10\\.15\\.", options: .regularExpression) != nil
}
var bigSurOrNewer: Bool {
version.range(of: "^1[1-9]\\.", options: .regularExpression) != nil
}
var beta: Bool {
build.range(of: "[a-z]$", options: .regularExpression) != nil
}
var imageName: String {
name.replacingOccurrences(of: " beta", with: "")
}
var size: UInt64 {
UInt64(packages.map { $0.size }.reduce(0, +))
}
var diskImageSize: Double {
ceil(Double(size) / Double(UInt64.gigabyte)) + 1.5
}
var isoSize: Double {
ceil(Double(size) / Double(UInt64.gigabyte)) + 1.5
}
var tooltip: String {
"""
Version: \(version)
Build Number: \(build)
Release Date: \(date)
Download Size: \(size.bytesString())
"""
}
}
extension Installer: Equatable {
static func == (lhs: Installer, rhs: Installer) -> Bool {
lhs.version == rhs.version && lhs.build == rhs.build
}
}