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: "|") ?? "")" : "") } }