diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/xcodes.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/xcodes.xcscheme
index 643d41e..95e0d9a 100644
--- a/.swiftpm/xcode/xcshareddata/xcschemes/xcodes.xcscheme
+++ b/.swiftpm/xcode/xcshareddata/xcschemes/xcodes.xcscheme
@@ -128,9 +128,13 @@
isEnabled = "NO">
+
+
diff --git a/Sources/XcodesKit/Models+Runtimes.swift b/Sources/XcodesKit/Models+Runtimes.swift
index 85c001f..7ae8903 100644
--- a/Sources/XcodesKit/Models+Runtimes.swift
+++ b/Sources/XcodesKit/Models+Runtimes.swift
@@ -12,6 +12,7 @@ public struct DownloadableRuntime: Decodable {
let category: Category
let simulatorVersion: SimulatorVersion
let source: String?
+ let architectures: [String]?
let dictionaryVersion: Int
let contentType: ContentType
let platform: Platform
@@ -23,7 +24,7 @@ public struct DownloadableRuntime: Decodable {
let authentication: Authentication?
var betaNumber: Int? {
- enum Regex { static let shared = try! NSRegularExpression(pattern: "b[0-9]+$") }
+ enum Regex { static let shared = try! NSRegularExpression(pattern: "b[0-9]+") }
guard var foundString = Regex.shared.firstString(in: identifier) else { return nil }
foundString.removeFirst()
return Int(foundString)!
@@ -34,7 +35,7 @@ public struct DownloadableRuntime: Decodable {
}
var visibleIdentifier: String {
- return platform.shortName + " " + completeVersion
+ return platform.shortName + " " + completeVersion + (architectures != nil ? " \(architectures?.joined(separator: "|") ?? "")" : "")
}
}
@@ -53,6 +54,7 @@ struct SDKToSimulatorMapping: Decodable {
let sdkBuildUpdate: String
let simulatorBuildUpdate: String
let sdkIdentifier: String
+ let downloadableIdentifiers: [String]?
}
extension DownloadableRuntime {
diff --git a/Sources/XcodesKit/RuntimeInstaller.swift b/Sources/XcodesKit/RuntimeInstaller.swift
index 1ae08be..136a805 100644
--- a/Sources/XcodesKit/RuntimeInstaller.swift
+++ b/Sources/XcodesKit/RuntimeInstaller.swift
@@ -28,13 +28,15 @@ public class RuntimeInstaller {
betaNumber: downloadable.betaNumber,
version: downloadable.simulatorVersion.version,
build: downloadable.simulatorVersion.buildUpdate,
- kind: $0.kind))
+ kind: $0.kind,
+ architectures: downloadable.architectures))
}
} else {
mappedRuntimes.append(PrintableRuntime(platform: downloadable.platform,
betaNumber: downloadable.betaNumber,
version: downloadable.simulatorVersion.version,
- build: downloadable.simulatorVersion.buildUpdate))
+ build: downloadable.simulatorVersion.buildUpdate,
+ architectures: downloadable.architectures))
}
}
@@ -47,7 +49,8 @@ public class RuntimeInstaller {
betaNumber: resolvedBetaNumber,
version: runtime.version,
build: runtime.build,
- kind: runtime.kind)
+ kind: runtime.kind,
+ architectures: nil)
mappedRuntimes.indices {
result.visibleIdentifier == $0.visibleIdentifier
@@ -361,7 +364,7 @@ extension RuntimeInstaller {
public var errorDescription: String? {
switch self {
case let .unavailableRuntime(version):
- return "Runtime \(version) is invalid or not downloadable"
+ return "Runtime \(version) is invalid or not downloadable. Please include arm64 or x86_64 in the version string if shown."
case .failedMountingDMG:
return "Failed to mount image."
case .rootNeeded:
@@ -384,13 +387,14 @@ fileprivate struct PrintableRuntime {
let build: String
var kind: InstalledRuntime.Kind? = nil
var hasDuplicateVersion = false
+ let architectures: [String]?
var completeVersion: String {
makeVersion(for: version, betaNumber: betaNumber)
}
var visibleIdentifier: String {
- return platform.shortName + " " + completeVersion
+ return platform.shortName + " " + completeVersion + (architectures != nil ? " \(architectures?.joined(separator: "|") ?? "")" : "")
}
}