diff --git a/IconDark.png b/IconDark.png new file mode 100644 index 0000000..85f8d18 Binary files /dev/null and b/IconDark.png differ diff --git a/IconMono.png b/IconMono.png new file mode 100644 index 0000000..8e22df1 Binary files /dev/null and b/IconMono.png differ diff --git a/README.md b/README.md index a5c26de..55fdbec 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -

Xcodes.app

+

Xcodes.app

The easiest way to install and switch between multiple versions of Xcode. @@ -23,6 +23,8 @@ XcodesApp is now part of the `XcodesOrg` - [read more here](nextstep.md) - View release notes, OS compatibility, included SDKs and compilers from [Xcode Releases](https://xcodereleases.com). - Dark/Light Mode supported - Security Key Authentication supported +- Support installing Platforms/Runtimes +- Support installing Apple Silicon variants ## Platforms/Runtimes @@ -30,6 +32,10 @@ XcodesApp is now part of the `XcodesOrg` - [read more here](nextstep.md) **Note: iOS 18+, tvOS 18+, watchOS 11+, visionOS 2+ requires that Xcode 16.1 Beta 3+ be installed and active.** +## Apple Silicon Variants + +As of Xcode 26, Apple provides Apple Silicon as well as Universal variants for Xcode versions as well as each runtime. Simply tap on which variant you want installed. To install the Apple Silicon runtime variant Xcode 26 is required to be active. + ## Experiments - Thanks to the wonderful work of [https://github.com/saagarjha/unxip](https://github.com/saagarjha/unxip), turn on the experiment to increase your unxipping time by up to 70%! More can be found on his repo, but bugs, high memory may occur if used. @@ -54,12 +60,14 @@ The following languages are supported because of the following community users! |German 🇩🇪|[@drct](https://github.com/drct)|Dutch 🇳🇱|[@jfversluis](https://github/com/jfversluis)| |Brazilian Portuguese 🇧🇷|[@brunomunizaf](https://github.com/brunomunizaf)|Polish 🇵🇱|[@jakex7](https://github.com/jakex7)| |Catalan|[@ferranabello](https://github.com/ferranabello)|Greek 🇬🇷|[@alladinian](https://github.com/alladinian) +|Thai 🇹🇭|[@neetrath](https://github.com/neetrath)| Want to add more languages? Simply create a PR with the updated strings file. ## Installation v1.X - requires macOS 11 or newer v2.X - requires macOS 13 +v3.X - requires macOS 13 - architecture variants and updated icon. ### Install with Homebrew @@ -84,7 +92,7 @@ Xcodes.app and CLI is updated, maintained with contributors like yourself. Even ## Development -You'll need macOS 13.5 Ventura and Xcode 15 in order to build and run Xcodes.app. +You'll need macOS 15.6 Ventura and Xcode 26 in order to build and run Xcodes.app. `Unxip` and `aria2` must be compiled as a universal binary ``` @@ -99,7 +107,6 @@ You'll need macOS 13.5 Ventura and Xcode 15 in order to build and run Xcodes.app lipo -archs unxip ``` -Notable design decisions are recorded in [DECISIONS.md](./DECISIONS.md). The Apple authentication flow is described in [Apple.paw](./Apple.paw), which will allow you to play with the API endpoints that are involved using the [Paw](https://paw.cloud) app. [`xcode-install`](https://github.com/xcpretty/xcode-install) and [fastlane/spaceship](https://github.com/fastlane/fastlane/tree/master/spaceship) both deserve credit for figuring out the hard parts of what makes this possible. diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index e634c89..419ed76 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -141,6 +141,7 @@ E8DA461125FAF7FB002E85EF /* NotificationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8DA461025FAF7FB002E85EF /* NotificationsView.swift */; }; E8E98A9025D8631800EC89A0 /* InstallationStepRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFBC3FF259AC17F00E2A3D8 /* InstallationStepRowView.swift */; }; E8E98A9625D863D700EC89A0 /* InstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */; }; + E8EEAD1D2E79174F00BE67E8 /* XcodesIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = E8EEAD1C2E79174F00BE67E8 /* XcodesIcon.icon */; }; E8F44A1E296B4CD7002D6592 /* Path in Frameworks */ = {isa = PBXBuildFile; productRef = E8F44A1D296B4CD7002D6592 /* Path */; }; E8FA00542B5B109800769CE0 /* com.xcodesorg.xcodesapp.Helper in Copy Helper */ = {isa = PBXBuildFile; fileRef = CA9FF8AE2595967A00E47BAF /* com.xcodesorg.xcodesapp.Helper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; E8FD5727291EE4AC001E004C /* AsyncNetworkService in Frameworks */ = {isa = PBXBuildFile; productRef = E8FD5726291EE4AC001E004C /* AsyncNetworkService */; }; @@ -340,6 +341,7 @@ E8D655BF288DD04700A139C2 /* SelectedActionType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedActionType.swift; sourceTree = ""; }; E8DA461025FAF7FB002E85EF /* NotificationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsView.swift; sourceTree = ""; }; E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstallationStepDetailView.swift; sourceTree = ""; }; + E8EEAD1C2E79174F00BE67E8 /* XcodesIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = XcodesIcon.icon; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -555,6 +557,7 @@ CABFAA1D2592F7F200380FEE /* Resources */ = { isa = PBXGroup; children = ( + E8EEAD1C2E79174F00BE67E8 /* XcodesIcon.icon */, CAA858DA25A3E11F00ACF8C0 /* aria2-release-1.35.0.tar.gz */, CAA8588025A2B63A00ACF8C0 /* aria2c */, CAA8588A25A2B69300ACF8C0 /* aria2c.LICENSE */, @@ -797,6 +800,7 @@ nl, pl, ar, + th, ); mainGroup = CAD2E7952449574E00113D76; packageReferences = ( @@ -831,6 +835,7 @@ files = ( CAD2E7A92449575000113D76 /* Preview Assets.xcassets in Resources */, 9DD4FFCB2B13EC1800C974F1 /* Localizable.xcstrings in Resources */, + E8EEAD1D2E79174F00BE67E8 /* XcodesIcon.icon in Resources */, CA9FF83F2594FBC000E47BAF /* Licenses.rtf in Resources */, CAA858DB25A3E11F00ACF8C0 /* aria2-release-1.35.0.tar.gz in Resources */, CAD2E7A62449575000113D76 /* Assets.xcassets in Resources */, @@ -1098,14 +1103,15 @@ CA8FB636256E154800469DA5 /* Test configuration for PBXNativeTarget "Xcodes" */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = XcodesIcon; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; CODE_SIGN_ENTITLEMENTS = Xcodes/Resources/XcodesTest.entitlements; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 33; DEAD_CODE_STRIPPING = YES; + CURRENT_PROJECT_VERSION = 34; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = NO; @@ -1117,7 +1123,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 3.0.1; + MARKETING_VERSION = 3.0.2; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1366,14 +1372,15 @@ CAD2E7BD2449575100113D76 /* Debug configuration for PBXNativeTarget "Xcodes" */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = XcodesIcon; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; CODE_SIGN_ENTITLEMENTS = Xcodes/Resources/Xcodes.entitlements; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 33; DEAD_CODE_STRIPPING = YES; + CURRENT_PROJECT_VERSION = 34; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; @@ -1385,7 +1392,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 3.0.1; + MARKETING_VERSION = 3.0.2; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; SWIFT_VERSION = 5.0; @@ -1395,14 +1402,15 @@ CAD2E7BE2449575100113D76 /* Release configuration for PBXNativeTarget "Xcodes" */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = XcodesIcon; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; CODE_SIGN_ENTITLEMENTS = Xcodes/Resources/Xcodes.entitlements; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 33; DEAD_CODE_STRIPPING = YES; + CURRENT_PROJECT_VERSION = 34; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; @@ -1414,7 +1422,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 3.0.1; + MARKETING_VERSION = 3.0.2; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; SWIFT_VERSION = 5.0; @@ -1510,10 +1518,10 @@ /* Begin XCRemoteSwiftPackageReference section */ 33027E282CA8BB5800CB387C /* XCRemoteSwiftPackageReference "LibFido2Swift" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/kinoroy/LibFido2Swift.git"; + repositoryURL = "https://github.com/kinoroy/LibFido2Swift"; requirement = { - kind = upToNextMinorVersion; - minimumVersion = 0.1.4; + branch = main; + kind = branch; }; }; CAA858CB25A3D8BC00ACF8C0 /* XCRemoteSwiftPackageReference "ErrorHandling" */ = { diff --git a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 2c9a521..02c2265 100644 --- a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -66,11 +66,11 @@ }, { "package": "LibFido2Swift", - "repositoryURL": "https://github.com/kinoroy/LibFido2Swift.git", + "repositoryURL": "https://github.com/kinoroy/LibFido2Swift", "state": { - "branch": null, - "revision": "94d496d6f850dcbb3e8c4a27cd7eeabfad9f14e3", - "version": "0.1.4" + "branch": "main", + "revision": "b87a93300c5b35307c9f26ae490963196bd927f1", + "version": null } }, { diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift index f9a9864..a0a0ba8 100644 --- a/Xcodes/Backend/AppState+Runtimes.swift +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -63,7 +63,8 @@ extension AppState { if selectedXcode.version > Version(major: 16, minor: 0, patch: 0) { if runtime.architectures?.isAppleSilicon ?? false { - if selectedXcode.version > Version(major: 26, minor: 0, patch: 0) { + // Need Xcode 26 but with some RC/Beta's its simpler to just to greater > 25 + if selectedXcode.version > Version(major: 25, minor: 0, patch: 0) { downloadRuntimeViaXcodeBuild(runtime: runtime) } else { // not supported diff --git a/Xcodes/Frontend/InfoPane/PlatformsView.swift b/Xcodes/Frontend/InfoPane/PlatformsView.swift index 9235870..ea268c1 100644 --- a/Xcodes/Frontend/InfoPane/PlatformsView.swift +++ b/Xcodes/Frontend/InfoPane/PlatformsView.swift @@ -11,7 +11,7 @@ import XcodesKit struct PlatformsView: View { @EnvironmentObject var appState: AppState - @AppStorage("selectedRuntimeArchitecture") private var selectedRuntimeArchitecture: Architecture = .arm64 + @AppStorage("selectedRuntimeArchitecture") private var selectedVariant: ArchitectureVariant = .universal let xcode: Xcode @@ -22,7 +22,9 @@ struct PlatformsView: View { appState.downloadableRuntimes.filter { $0.sdkBuildUpdate?.contains(sdkBuild) ?? false && ($0.architectures?.isEmpty ?? true || - $0.architectures?.contains(selectedRuntimeArchitecture) ?? false) + ($0.architectures?.isUniversal ?? false && selectedVariant == .universal) || + ($0.architectures?.isAppleSilicon ?? false && selectedVariant == .appleSilicon) + ) } } @@ -35,21 +37,18 @@ struct PlatformsView: View { .frame(maxWidth: .infinity, alignment: .leading) if !architectures.isEmpty { Spacer() - Button { - switch selectedRuntimeArchitecture { - case .arm64: selectedRuntimeArchitecture = .x86_64 - case .x86_64: selectedRuntimeArchitecture = .arm64 - } - } label: { - switch selectedRuntimeArchitecture { - case .arm64: - Label(selectedRuntimeArchitecture.displayString, systemImage: "m4.button.horizontal") - .labelStyle(.trailingIcon) - case .x86_64: - Label(selectedRuntimeArchitecture.displayString, systemImage: "cpu.fill") - .labelStyle(.trailingIcon) + Picker("Architecture", selection: $selectedVariant) { + ForEach(ArchitectureVariant.allCases, id: \.self) { arch in + Label(arch.displayString, systemImage: arch.iconName) + .tag(arch) } + .labelStyle(.trailingIcon) } + .pickerStyle(.menu) + .menuStyle(.button) + .buttonStyle(.borderless) + .fixedSize() + .labelsHidden() } } @@ -76,6 +75,7 @@ struct PlatformsView: View { ForEach(runtime.architectures ?? [], id: \.self) { architecture in TagView(text: architecture.displayString) } + pathIfAvailable(xcode: xcode, runtime: runtime) if runtime.installState == .notInstalled { diff --git a/Xcodes/Frontend/XcodeList/MainToolbar.swift b/Xcodes/Frontend/XcodeList/MainToolbar.swift index c4511de..b0ad763 100644 --- a/Xcodes/Frontend/XcodeList/MainToolbar.swift +++ b/Xcodes/Frontend/XcodeList/MainToolbar.swift @@ -22,60 +22,44 @@ struct MainToolbarModifier: ViewModifier { } .keyboardShortcut(KeyEquivalent("r")) .help("RefreshDescription") - Spacer() - - Button(action: { - switch architectures { - case .universal: architectures = .appleSilicon - case .appleSilicon: architectures = .universal - } - }) { - switch architectures { - case .universal: - Label("Universal", systemImage: "cpu.fill") - case .appleSilicon: - Label("Apple Silicon", systemImage: "m4.button.horizontal") - .labelStyle(.trailingIcon) - .foregroundColor(.accentColor) - } - } - .help("FilterAvailableDescription") - .disabled(architectures.isManaged) - Button(action: { - switch category { - case .all: category = .release - case .release: category = .beta - case .beta: category = .all + Spacer() + + let isFiltering = isInstalledOnly || category != .all || architectures != .universal + Menu("Filter", systemImage: "line.horizontal.3.decrease.circle") { + Section { + Toggle("Installed Only", systemImage: "arrow.down.app", isOn: $isInstalledOnly) .labelStyle(.titleAndIcon) } - }) { - switch category { - case .all: - Label("All", systemImage: "line.horizontal.3.decrease.circle") - case .release: + .help("FilterInstalledDescription") + + Section { + Picker("Category", selection: $category) { + Label("All", systemImage: "line.horizontal.3.decrease.circle") + .tag(XcodeListCategory.all) Label("ReleaseOnly", systemImage: "line.horizontal.3.decrease.circle.fill") - .labelStyle(.trailingIcon) + .tag(XcodeListCategory.release) + Label("BetaOnly", systemImage: "line.horizontal.3.decrease.circle.fill") + .tag(XcodeListCategory.beta) + } + } + .help("FilterAvailableDescription") + .disabled(category.isManaged) + + Section { + Picker("Architecture", selection: $architectures) { + Label("Universal", systemImage: "cpu.fill") + .tag(XcodeListArchitecture.universal) + Label("Apple Silicon", systemImage: "m4.button.horizontal") .foregroundColor(.accentColor) - case .beta: - Label("BetaOnly", systemImage: "line.horizontal.3.decrease.circle.fill") - .labelStyle(.trailingIcon) - .foregroundColor(.accentColor) + .tag(XcodeListArchitecture.appleSilicon) + } + .help("FilterArchitecturesDescription") + .disabled(architectures.isManaged) } + .labelStyle(.titleAndIcon) } - .help("FilterAvailableDescription") - .disabled(category.isManaged) - - Button(action: { - isInstalledOnly.toggle() - }) { - if isInstalledOnly { - Label("Filter", systemImage: "arrow.down.app.fill") - .foregroundColor(.accentColor) - } else { - Label("Filter", systemImage: "arrow.down.app") - } - } - .help("FilterInstalledDescription") + .pickerStyle(.inline) + .symbolVariant(isFiltering ? .fill : .none) } } } diff --git a/Xcodes/Frontend/XcodeList/XcodeListView.swift b/Xcodes/Frontend/XcodeList/XcodeListView.swift index 2eb6406..c22a961 100644 --- a/Xcodes/Frontend/XcodeList/XcodeListView.swift +++ b/Xcodes/Frontend/XcodeList/XcodeListView.swift @@ -88,6 +88,7 @@ struct XcodeListView: View { PlatformsPocket() .padding(.horizontal) .padding(.vertical, 8) + } } } @@ -166,11 +167,13 @@ struct PlatformsPocket: View { openWindow(id: "platforms") } ) { - HStack(spacing: 5) { - Image(systemName: "square.3.layers.3d") - .font(.title3.weight(.medium)) - Text("PlatformsDescription") - Spacer() + if #available(macOS 26.0, *) { + platformsLabel + .glassEffect(in: .rect(cornerRadius: 8, style: .continuous)) + } else { + platformsLabel + .background(.quaternary.opacity(0.75)) + .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous)) } .font(.body.weight(.medium)) .padding(.horizontal) @@ -180,6 +183,18 @@ struct PlatformsPocket: View { } .buttonStyle(.plain) } + + var platformsLabel: some View { + HStack(spacing: 5) { + Image(systemName: "square.3.layers.3d") + .font(.title3.weight(.medium)) + Text("PlatformsDescription") + Spacer() + } + .font(.body.weight(.medium)) + .padding(.horizontal) + .padding(.vertical, 12) + } } struct XcodeListView_Previews: PreviewProvider { diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index 772f874..b458c23 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -93,6 +93,12 @@ "value" : "" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -211,6 +217,12 @@ "value" : "%@" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -335,6 +347,12 @@ "value" : "%1$@ %2$@ %3$@" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ %3$@" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -459,6 +477,12 @@ "value" : "⚠️ Отказано в доступе ⚠️\n\nПожалуйста, откройте настройки уведомлений и выберите Xcodes, чтобы разрешить доступ." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ การเข้าถึงถูกปฏิเสธ ⚠️\n\nโปรดเปิดการตั้งค่าการแจ้งเตือนและเลือก Xcodes หากคุณต้องการอนุญาตการเข้าถึง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -584,6 +608,12 @@ "value" : "Доступ разрешен. Вы будете получать уведомления от Xcodes." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ได้รับอนุญาตการเข้าถึงแล้ว คุณจะได้รับการแจ้งเตือนจาก Xcodes" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -702,6 +732,12 @@ "value" : "Юридическая информация" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รับทราบ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -820,6 +856,12 @@ "value" : "Активно" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใช้งาน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -938,6 +980,12 @@ "value" : "Активировать/Выбрать" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใช้งาน/เลือกใช้งาน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -1063,6 +1111,12 @@ "value" : "Это активная версия" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "นี่คือเวอร์ชันที่ใช้งานอยู่" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -1182,6 +1236,12 @@ "value" : "Дополнительно" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ขั้นสูง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -1306,6 +1366,12 @@ "value" : "Прогресс будет сброшен." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ความคืบหน้าใด ๆ จะถูกยกเลิก" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -1430,6 +1496,12 @@ "value" : "Остановить установку" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "หยุดการติดตั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -1547,7 +1619,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Are you sure you want to stop the installation of Xcode %@?" + "value" : "Tem certeza que deseja interromper a instalação do Xcode %@?" } }, "ru" : { @@ -1556,6 +1628,12 @@ "value" : "Вы уверены, что хотите остановить установку Xcode %@?" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณแน่ใจหรือไม่ว่าต้องการหยุดการติดตั้ง Xcode %@?" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -1682,6 +1760,12 @@ "value" : "Вы уверены, что хотите остановить установку Xcode %@?" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณแน่ใจหรือไม่ว่าต้องการหยุดการติดตั้ง Xcode %@?" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -1798,7 +1882,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Delete" + "value" : "Remover" } }, "ru" : { @@ -1807,6 +1891,12 @@ "value" : "Удалить" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลบ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -1923,7 +2013,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Are you sure you want to delete %@?" + "value" : "Tem certeza que deseja remover %@?" } }, "ru" : { @@ -1932,6 +2022,12 @@ "value" : "Вы уверены, что хотите удалить %@?" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณแน่ใจว่าต้องการลบ %@ หรือไม่?" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -2056,6 +2152,12 @@ "value" : "You are not authorized. Please Sign in with your Apple ID first." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณไม่ได้รับอนุญาต กรุณาลงชื่อเข้าใช้ด้วย Apple ID ของคุณก่อน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -2172,7 +2274,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Apple only supports downloading runtimes iOS 16.0+, watchOS 9.0+, tvOS 16+, visionOS 1.0+ with Xcode 16.1+. Please download, make active and try again." + "value" : "A Apple oferece suporte para download somente nos sistemas operacionais iOS 16.0+, watchOS 9.0+, tvOS 16+ e visionOS 1.0+ com Xcode 16.1+. Baixe, ative e tente novamente." } }, "ru" : { @@ -2181,6 +2283,12 @@ "value" : "Apple only supports downloading runtimes iOS 16.0+, watchOS 9.0+, tvOS 16+, visionOS 1.0+ with Xcode 16.1+. Please download, make active and try again." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple รองรับการดาวน์โหลดรันไทม์ iOS 16.0+, watchOS 9.0+, tvOS 16+, visionOS 1.0+ ด้วย Xcode 16.1+ เท่านั้น กรุณาดาวน์โหลด เปิดใช้งาน แล้วลองอีกครั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -2297,7 +2405,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Apple supports downloading Apple Silicon runtimes only when Xcode 26+ is selected. Please Select and try downloading again or download the universal build." + "value" : "A Apple oferece suporte ao download de runtimes do Apple Silicon somente quando o Xcode 26+ estiver selecionado. Selecione e tente baixar novamente ou baixe a compilação universal." } }, "ru" : { @@ -2306,6 +2414,12 @@ "value" : "Apple supports downloading Apple Silicon runtimes only when Xcode 26+ is selected. Please Select and try downloading again or download the universal build." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple รองรับการดาวน์โหลดรันไทม์ Apple Silicon เฉพาะเมื่อเลือก Xcode 26 ขึ้นไปเท่านั้น โปรดเลือกและลองดาวน์โหลดอีกครั้ง หรือดาวน์โหลดเวอร์ชัน Universal" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -2432,6 +2546,12 @@ "value" : "Невозможно установить Xcode" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถติดตั้ง Xcode ได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -2557,6 +2677,12 @@ "value" : "Невозможно установить заархивированный Xcode" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถติดตั้ง Archive ของ Xcode ได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -2682,6 +2808,12 @@ "value" : "Xcode %@ требует macOS %@, но вы используете macOS %@, вы все еще хотите установить?" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ ต้องใช้ macOS %@ แต่คุณกำลังใช้งาน macOS %@ คุณยังคงต้องการติดตั้งหรือไม่" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -2807,6 +2939,12 @@ "value" : "Текущая macOS не соответствует минимальным требованиям" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ความต้องการขั้นต่ำยังไม่เพียงพอ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -2933,6 +3071,12 @@ "value" : "Невозможно выполнить дополнительные шаги после установки" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถดำเนินการตามขั้นตอนหลังการติดตั้งได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -3058,6 +3202,12 @@ "value" : "Невозможно установить помощник" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถติดตั้งตัวช่วยได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -3182,6 +3332,12 @@ "value" : "Xcodes использует отдельный привилегированный помощник для выполнения задач от имени root-пользователя. Это команды, которые потребуют sudo в командной строке, включая шаги после установки и переключение версий Xcode с помощью xcode-select.\n\nВам будет предложено указать пароль от вашей учетной записи macOS для его установки." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes ใช้ตัวช่วยที่มีสิทธิพิเศษแยกต่างหากเพื่อดำเนินการต่าง ๆ ในฐานะ root สิ่งเหล่านี้จำเป็นต้องใช้คำสั่ง sudo บน Command Line รวมถึงขั้นตอนหลังการติดตั้งและการสลับเวอร์ชัน Xcode ด้วยคำสั่ง xcode-select\n\nระบบจะขอให้คุณป้อนรหัสผ่านของบัญชี macOS ของคุณเพื่อทำการติดตั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -3307,6 +3463,12 @@ "value" : "Привилегированный помощник" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตัวช่วยที่มีสิทธิพิเศษ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -3433,6 +3595,12 @@ "value" : "Невозможно выбрать Xcode" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถเลือก Xcode ได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -3558,6 +3726,12 @@ "value" : "Xcode.app существует и не является символической ссылкой" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app มีอยู่และไม่ใช่ Symbolic Link" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -3684,6 +3858,12 @@ "value" : "Невозможно создать символическую ссылку" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถสร้าง Symbolic Link ได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -3800,7 +3980,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Could not find file \"%@\"." + "value" : "Não foi possível encontrar o arquivo \"%@\"." } }, "ru" : { @@ -3809,6 +3989,12 @@ "value" : "Не удалось найти файл «%@»." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่พบไฟล์ \"%@\"" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -3934,6 +4120,12 @@ "value" : "Невозможно удалить Xcode" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถถอนการติดตั้ง Xcode ได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -4058,6 +4250,12 @@ "value" : "Файлы будут перемещены в корзину, но не будут очищены из неё автоматически." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "มันจะถูกย้ายไปที่ถังขยะ แต่จะไม่ถูกลบอย่างถาวร" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -4184,6 +4382,12 @@ "value" : "Удалить Xcode %@?" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ถอนการติดตั้ง Xcode %@?" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -4310,6 +4514,12 @@ "value" : "Невозможно обновить выбранный Xcode" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถอัปเดต Xcode ที่เลือกได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -4428,6 +4638,12 @@ "value" : "Все" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ทั้งหมด" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -4546,6 +4762,12 @@ "value" : "Apple Silicon" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple Silicon" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -4670,6 +4892,12 @@ "value" : "Apple ID:" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -4794,6 +5022,12 @@ "value" : "Обновления Xcodes.app" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อัปเดต Xcodes.app" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -4819,6 +5053,9 @@ } } } + }, + "Architecture" : { + }, "Authenticating" : { "extractionState" : "manual", @@ -4910,7 +5147,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Authenticating" + "value" : "Autenticando" } }, "ru" : { @@ -4919,6 +5156,12 @@ "value" : "Authenticating" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กำลังตรวจสอบความถูกต้อง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -5043,6 +5286,12 @@ "value" : "Автоматически создавать символическую ссылку к Xcode.app" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "สร้าง Symbolic Link ไปยัง Xcode.app โดยอัตโนมัติ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -5167,6 +5416,12 @@ "value" : "Когда вы делаете версию Xcode активной/выбранной, будет выполнена попытка создать символическую ссылку с именем Xcode.app в директории установки" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เมื่อทำให้เวอร์ชัน Xcode เป็น ใช้งาน/ถูกเลือก ให้ลองสร้าง Symbolic link ชื่อ Xcode.app ในไดเร็กทอรีของการติดตั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -5291,6 +5546,12 @@ "value" : "Автоматически устанавливать новые версии Xcode" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ติดตั้ง Xcode เวอร์ชันล่าสุดโดยอัตโนมัติ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -5416,6 +5677,12 @@ "value" : "Бета" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เบต้า" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -5540,6 +5807,12 @@ "value" : "Только бета" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เบต้าเท่านั้น" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -5658,6 +5931,12 @@ "value" : "Отмена" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยกเลิก" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -5683,6 +5962,9 @@ } } } + }, + "Category" : { + }, "Change" : { "localizations" : { @@ -5776,6 +6058,12 @@ "value" : "Изменить" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เปลี่ยน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -5900,6 +6188,12 @@ "value" : "Автоматически проверять наличие обновлений" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตรวจสอบเวอร์ชันล่าสุดของ Xcodes โดยอัตโนมัติ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -6025,6 +6319,12 @@ "value" : "Проверка безопасности" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การตรวจสอบความปลอดภัย" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -6149,6 +6449,12 @@ "value" : "Проверить сейчас" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตรวจสอบตอนนี้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -6267,6 +6573,12 @@ "value" : "Закрыть" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ปิด" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -6385,6 +6697,12 @@ "value" : "Совместимость" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ความเข้ากันได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -6503,6 +6821,12 @@ "value" : "Компиляторы" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คอมไพเลอร์" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -6621,6 +6945,12 @@ "value" : "Продолжить" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ดำเนินการต่อ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -6745,6 +7075,12 @@ "value" : "Копировать путь" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คัดลอก Path" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -6860,7 +7196,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Copy URL" + "value" : "Copiar URL" } }, "ru" : { @@ -6869,6 +7205,12 @@ "value" : "Копировать URL" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คัดลอก URL" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -6984,7 +7326,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Criar Symlink como Xcode.app" + "value" : "Criar link simbólico como Xcode.app" } }, "ru" : { @@ -6993,6 +7335,12 @@ "value" : "Создать символическую ссылку к Xcode.app" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "สร้าง Symlink เป็น Xcode.app" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -7108,7 +7456,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Create Symlink as Xcode-Beta.app" + "value" : "Criar link simbólico como Xcode-Beta.app" } }, "ru" : { @@ -7117,6 +7465,12 @@ "value" : "Создать символическую ссылку к Xcode-Beta.app" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "สร้าง Symlink เป็น Xcode-Beta.app" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -7241,6 +7595,12 @@ "value" : "Источник данных" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "แหล่งข้อมูล" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -7366,6 +7726,12 @@ "value" : "Источник данных Apple применяет технологию \"веб-скрейпинга\" к веб-сайту Apple для разработчиков. Он всегда показывает последние доступные выпуски, но является менее стабильным источником данных.\n\n[Xcode Releases](https://xcodereleases.com) — это неофициальный список выпусков Xcode. Он предоставляется в виде удобно структурированных данных, содержит дополнительную информацию, которую не всегда можно получить от Apple и который с меньшей вероятностью перестанет работать, если Apple изменит дизайн своего веб-сайта для разработчиков." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "แหล่งข้อมูล Apple จะรวบรวมข้อมูลจากเว็บไซต์นักพัฒนาของ Apple ซึ่งจะแสดงเวอร์ชันล่าสุดที่พร้อมใช้งานอยู่เสมอ แต่มีความเปราะบางมากกว่า\n\n[Xcode Releases](https://xcodereleases.com) คือรายชื่อของ [Xcode Releases](https://xcodereleases.com) อย่างไม่เป็นทางการ มีข้อมูลเพิ่มเติมที่ไม่สามารถหาได้จาก Apple และมีโอกาสเสียหายน้อยกว่าเมื่อ Apple ออกแบบเว็บไซต์นักพัฒนาใหม่" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -7492,6 +7858,12 @@ "value" : "Введите %d цифровой код с одного из ваших доверенных устройств:" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ป้อนรหัส %d หลักจากหนึ่งในอุปกรณ์ที่เชื่อถือได้ของคุณ:" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -7610,6 +7982,12 @@ "value" : "Загрузчик" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เครื่องมือในการดาวน์โหลด" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -7735,6 +8113,12 @@ "value" : "[aria2](https://github.com/aria2/aria2) использует до 16 подключений для загрузки Xcode в 3-5 раз быстрее, чем URLSession. Он поставляется в виде исполняемого файла вместе с исходным кодом в Xcodes, чтобы соответствовать лицензии GPLv2.\n\nURLSession — это API Apple по умолчанию для выполнения запросов по сети." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "[aria2](https://github.com/aria2/aria2) ใช้การเชื่อมต่อสูงสุด 16 ทาง เพื่อดาวน์โหลด Xcode ที่เร็วกว่า URLSession 3-5 เท่า มันถูกรวมเป็นไฟล์ปฏิบัติการพร้อมกับซอร์สโค้ดภายใน Xcodes เพื่อให้สอดคล้องกับใบอนุญาต GPLv2\n\nURLSession คือ API ค่าเริ่มต้นของ Apple สำหรับการส่ง URL requests" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -7861,6 +8245,12 @@ "value" : "Скачивание" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กำลังดาวน์โหลด" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -7986,6 +8376,12 @@ "value" : "Информация о загрузке не найдена" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่พบข้อมูลของการดาวน์โหลด" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -8111,6 +8507,12 @@ "value" : "Скачивание: %d% завершено" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กำลังดาวน์โหลด: %d%% เสร็จแล้ว" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -8230,6 +8632,12 @@ "value" : "Загрузки" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ดาวน์โหลด" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -8354,6 +8762,12 @@ "value" : "Размер загрузки" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ขนาดที่ต้องดาวน์โหลด" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -8496,6 +8910,12 @@ "value" : "Включить уведомления" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เปิดการแจ้งเตือน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -8621,6 +9041,12 @@ "value" : "Введите %1$d цифровой код, отправленный на %2$@: " } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ป้อนรหัส %1$d หลักที่ส่งไปที่ %2$@:" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -8737,7 +9163,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Error" + "value" : "Erro" } }, "ru" : { @@ -8746,6 +9172,12 @@ "value" : "Ошибка" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ข้อผิดพลาด" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -8856,7 +9288,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Experiments" + "value" : "Experimentos" } }, "ru" : { @@ -8865,6 +9297,12 @@ "value" : "Эксперименты" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การทดลอง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -8989,6 +9427,12 @@ "value" : "Быстрый Unxip" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip เร็วขึ้น" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -9114,6 +9558,12 @@ "value" : "Благодаря [@_saagarjha](https://twitter.com/_saagarjha) этот эксперимент может увеличить скорость распаковки до 70% на некоторых системах.\n\nДополнительную информацию о том, как достигается такой результат, можно прочесть в репозитории unxip — https://github.com/saagarjha/unxip. " } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ขอขอบคุณ [@_saagarjha](https://twitter.com/_saagarjha) การทดลองนี้สามารถเพิ่มความเร็วในการ unxipping ได้มากถึง 70% สำหรับบางระบบ\n\nดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการดำเนินการนี้ได้ที่ repo ของ unxip - https://github.com/saagarjha/unxip" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -9232,6 +9682,12 @@ "value" : "Фильтр" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คัดกรอง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -9257,6 +9713,9 @@ } } } + }, + "FilterArchitecturesDescription" : { + }, "FilterAvailableDescription" : { "localizations" : { @@ -9356,6 +9815,12 @@ "value" : "Отфильтровать доступные версии" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คัดกรองเวอร์ชันที่พร้อมใช้งาน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -9480,6 +9945,12 @@ "value" : "Отфильтровать установленные версии" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คัดกรองเวอร์ชันที่ติดตั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -9605,6 +10076,12 @@ "value" : "Завершение" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กำลังจะเสร็จสิ้น" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -9724,6 +10201,12 @@ "value" : "Общее" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ทั่วไป" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -9848,6 +10331,12 @@ "value" : "Репозиторий GitHub" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub Repo" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -9973,6 +10462,12 @@ "value" : "Невозможно установить связь с привилегированным помощником." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถติดต่อกับตัวช่วยที่มีสิทธิพิเศษได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -10097,6 +10592,12 @@ "value" : "Помощник установлен" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตัวช่วยถูกติดตั้งแล้ว" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -10221,6 +10722,12 @@ "value" : "Помощник не установлен" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตัวช่วยยังไม่ถูกติดตั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -10346,6 +10853,12 @@ "value" : "Идентичные выпуски" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Builds ที่เหมือนกัน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -10470,6 +10983,12 @@ "value" : "Иногда предварительная и релизная версии представляют собой один и тот же выпуск. Xcodes автоматически отображает эти версии вместе." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "บางครั้งเวอร์ชันก่อนวางจำหน่ายและเวอร์ชันวางจำหน่ายจะเป็นรุ่นเดียวกัน Xcodes จะแสดงเวอร์ชันเหล่านี้พร้อมกันโดยอัตโนมัติ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -10594,6 +11113,12 @@ "value" : "Включить предварительные/бета-версии" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รวมถึงเวอร์ชัน prerelease/beta " + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -10719,6 +11244,12 @@ "value" : "Установить" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ติดตั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -10828,7 +11359,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Install Apple Silicon" + "value" : "Instalar Apple Silicon" } }, "ru" : { @@ -10837,6 +11368,12 @@ "value" : "Install Apple Silicon" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ติดตั้ง Apple Silicon" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -10954,7 +11491,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Install Universal" + "value" : "Instalar Universal" } }, "ru" : { @@ -10963,6 +11500,12 @@ "value" : "Install Universal" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ติดตั้ง Universal" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -11088,6 +11631,12 @@ "value" : "Загруженный Xcode не прошел проверку подписи сертификата со следующим выводом:\n%@" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode ที่ดาวน์โหลดมาล้มเหลวในการตรวจสอบการลงนามโค้ด โดยมีผลลัพธ์ดังต่อไปนี้:\n%@" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -11214,6 +11763,12 @@ "value" : "Архив \"%@\" поврежден и не может быть расширен." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไฟล์ \"%@\" เสียหายและไม่สามารถแตกไฟล์ได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -11339,6 +11894,12 @@ "value" : "Xcode %@ не прошел оценку безопасности со следующим выводом:\n%@\nОн остается установленным в %@, если вы все равно хотите его использовать." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ ไม่ผ่านการประเมินความปลอดภัย โดยมีผลลัพธ์ดังนี้:\n%@\nระบบจะติดตั้งไว้ที่ %@ หากคุณต้องการใช้งานต่อไป" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -11464,6 +12025,12 @@ "value" : "Не удалось переместить Xcode в директорию %@." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถย้าย Xcode ไปยังไดเร็กทอรี %@ ได้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -11589,6 +12156,12 @@ "value" : "%@ не является допустимым номером версии." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ไม่ใช่หมายเลขเวอร์ชันที่ถูกต้อง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -11714,6 +12287,12 @@ "value" : "Отсутствует пароль. Повторите попытку." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยังขาดรหัสผ่านอยู่ กรุณาลองอีกครั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -11839,6 +12418,12 @@ "value" : "Отсутствует имя пользователя или пароль. Пожалуйста, попробуйте еще раз." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยังขาดชื่อผู้ใช้หรือรหัสผ่านอยู่ กรุณาลองอีกครั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -11964,6 +12549,12 @@ "value" : "Нет доступных не предварительных версий." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่มีเวอร์ชันที่ไม่ใช่รุ่นก่อนวางจำหน่ายที่พร้อมใช้งาน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -12089,6 +12680,12 @@ "value" : "Предварительные версии недоступны." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่มีเวอร์ชันก่อนวางจำหน่ายที่พร้อมใช้งาน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -12214,6 +12811,12 @@ "value" : "Архив \"%@\" не может быть расширен, поскольку в текущем жестком диске недостаточно свободного места.\n\nОсвободите больше места для расширения архива, а затем снова установите Xcode %@, чтобы начать установку с того места, где он остановился." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถขยายไฟล์ \"%@\" ได้ เนื่องจากพื้นที่ว่างในไดรฟ์ปัจจุบันไม่เพียงพอ\n\nเพิ่มพื้นที่ว่างเพื่อขยายไฟล์ แล้วติดตั้ง Xcode %@ อีกครั้งเพื่อเริ่มการติดตั้งต่อจากจุดที่ค้างไว้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -12339,6 +12942,12 @@ "value" : "Установка завершена, но некоторые шаги после установки не были выполнены автоматически. Они будут выполнены при первом запуске Xcode %@." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การติดตั้งเสร็จสมบูรณ์แล้ว แต่บางขั้นตอนหลังการติดตั้งไม่ได้ดำเนินการโดยอัตโนมัติ ขั้นตอนเหล่านี้จะดำเนินการเมื่อคุณเปิด Xcode %@ ครั้งแรก" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -12464,6 +13073,12 @@ "value" : "Установка была завершена, но некоторые шаги после установки не были выполнены автоматически. Xcodes выполняет эти шаги с привилегированным помощником, который, похоже, не установлен. Вы можете установить его из Настройки > Дополнительно.\n\nЭти шаги будут выполнены при первом запуске Xcode %@." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การติดตั้งเสร็จสมบูรณ์แล้ว แต่บางขั้นตอนหลังการติดตั้งไม่ได้ดำเนินการโดยอัตโนมัติ Xcodes ดำเนินการตามขั้นตอนเหล่านี้ด้วยตัวช่วยที่มีสิทธิ์ ซึ่งดูเหมือนจะไม่ได้ติดตั้ง คุณสามารถติดตั้งได้จาก การตั้งค่า > ขั้นสูง\n\nขั้นตอนเหล่านี้จะดำเนินการเมื่อคุณเปิด Xcode %@ ครั้งแรก" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -12589,6 +13204,12 @@ "value" : "Не удалось найти версию %@." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่พบเวอร์ชัน %@" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -12714,6 +13335,12 @@ "value" : "Загруженный Xcode не имеет ожидаемого идентификатора подписи сертификата.\nПолучено:\n%@\n%@\nОжидается:\n%@\n%@" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode ที่ดาวน์โหลดมาไม่มีรหัสประจำตัวการลงนามตามที่ต้องการ\nได้รับ:\n%@\n%@\nต้องการ:\n%@\n%@" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -12839,6 +13466,12 @@ "value" : "Xcodes (пока) не поддерживает установку Xcode из формата файла %@." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes ยังไม่รองรับการติดตั้ง Xcode จากรูปแบบไฟล์ %@" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -12964,6 +13597,12 @@ "value" : "%@ уже установлен в %@" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ได้รับการติดตั้งแล้วที่ %@" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -13089,6 +13728,12 @@ "value" : "%@ не установлен." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ยังไม่ได้รับการติดตั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -13215,6 +13860,12 @@ "value" : "Шаг %1$d из %2$d: %3$@" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ขั้นตอนที่ %1$d จาก %2$d: %3$@" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -13339,6 +13990,12 @@ "value" : "Установить эту версию" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ติดตั้งเวอร์ชันนี้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -13454,7 +14111,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Install Directory" + "value" : "Diretório de instalação" } }, "ru" : { @@ -13463,6 +14120,12 @@ "value" : "Путь для установки" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ติดตั้งที่ไดเร็กทอรี" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -13488,6 +14151,9 @@ } } } + }, + "Installed Only" : { + }, "InstallHelper" : { "localizations" : { @@ -13587,6 +14253,12 @@ "value" : "Установить помощника" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ติดตั้งตัวช่วย" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -13710,7 +14382,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Xcodes searches and installs to a single directory. By default (and recommended) is to keep this /Applications. Any changes to where Xcode is stored may result in other apps/services to stop working. " + "value" : "Xcodes procura e instala em um diretório único. Por padrão (e recomendado) é mantido no /Applications. Qualquer mudança onde o Xcode é instalado pode resultar na falha de outros aplicativos/serviços." } }, "ru" : { @@ -13719,6 +14391,12 @@ "value" : "Xcodes использует единый путь для поиска и установки выпусков Xcode. По умолчанию, рекомендуется оставить /Applications. Любые изменения в то, где находится Xcode, могут привести к тому, что другие приложения/сервисы могут перестать работать. " } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes จะค้นหาและติดตั้งลงในไดเรกทอรีเดียว โดยค่าเริ่มต้น (และแนะนำ) คือการเก็บข้อมูลนี้ไว้ใน /Applications การเปลี่ยนแปลงใด ๆ เกี่ยวกับตำแหน่งที่เก็บ Xcode อาจทำให้แอปพลิเคชัน/บริการอื่น ๆ หยุดทำงาน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -13844,6 +14522,12 @@ "value" : "Последняя проверка: %@" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตรวจสอบล่าสุดเมื่อ: %@" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -13957,7 +14641,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Licensa" + "value" : "Licença" } }, "ru" : { @@ -13966,6 +14650,12 @@ "value" : "Лицензия" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใบอนุญาต" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14090,6 +14780,12 @@ "value" : "Путь к локальному кешу" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตำแหน่งที่เก็บไฟล์แคช" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14214,6 +14910,12 @@ "value" : "Xcodes кеширует доступные версии Xcode и временно загружает новые версии в указанную директорию" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes แคชเวอร์ชัน Xcode ที่มีอยู่และดาวน์โหลดเวอร์ชันใหม่ชั่วคราวไปยังไดเร็กทอรี" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14333,6 +15035,12 @@ "value" : "Логин" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เข้าสู่ระบบ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14457,6 +15165,12 @@ "value" : "Открыть окно логина" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เปิดหน้าเข้าสู่ระบบ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14582,6 +15296,12 @@ "value" : "Требуется macOS %@ или новее" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ต้องใช้ macOS %@ หรือใหม่กว่า" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14706,6 +15426,12 @@ "value" : "Активировать" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เลือกใช้งาน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14830,6 +15556,12 @@ "value" : "Сделать эту версию активной" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เลือกเวอร์ชันนี้มาใช้งาน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14955,6 +15687,12 @@ "value" : "О Xcodes" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เกี่ยวกับ Xcodes" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -15080,6 +15818,12 @@ "value" : "Юридическая информация Xcodes" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คำขอบคุณจาก Xcodes" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -15204,6 +15948,12 @@ "value" : "Проверить наличие обновлений..." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตรวจสอบการอัปเดต..." + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -15328,6 +16078,12 @@ "value" : "GitHub-репозиторий Xcodes" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub Repo" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -15452,6 +16208,12 @@ "value" : "Сообщить об ошибке" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รายงานจุดบกพร่อง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -15567,7 +16329,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Requerir uma nova funcionalidade" + "value" : "Solicitar uma nova funcionalidade" } }, "ru" : { @@ -15576,6 +16338,12 @@ "value" : "Запросить новую функцию" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ต้องการฟีเจอร์ใหม่" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -15691,7 +16459,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Misc" + "value" : "Diversos" } }, "ru" : { @@ -15700,6 +16468,12 @@ "value" : "Misc" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อื่น ๆ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -15825,6 +16599,12 @@ "value" : "Перемещение в %@" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กำลังย้ายไปที่ %@" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -15950,6 +16730,12 @@ "value" : "Никогда" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่อีกเลย" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -16068,6 +16854,12 @@ "value" : "Далее" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ถัดไป" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -16193,6 +16985,12 @@ "value" : "Завершена установка" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ติดตั้งเสร็จแล้ว" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -16319,6 +17117,12 @@ "value" : "Доступна новая версия" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เวอร์ชันใหม่พร้อมใช้งานแล้ว" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -16444,6 +17248,12 @@ "value" : "Новые версии Xcode доступны для скачивания." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode เวอร์ชันใหม่พร้อมให้ดาวน์โหลดแล้ว" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -16570,6 +17380,12 @@ "value" : "Новые версии Xcode" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode เวอร์ชันใหม่" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -16688,6 +17504,12 @@ "value" : "Уведомления" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การแจ้งเตือน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -16812,6 +17634,12 @@ "value" : "Настройки уведомлений" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การตั้งค่าการแจ้งเตือน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -16928,7 +17756,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Sua conta não possui nenhum telefone confiável, mas é necessário para autenticação de dois fatores.\n\nVer https://support.apple.com/en-ca/HT204915." + "value" : "Sua conta não possui nenhum telefone confiável, mas é necessário para autenticação de dois fatores.\n\nVeja https://support.apple.com/en-ca/HT204915." } }, "ru" : { @@ -16937,6 +17765,12 @@ "value" : "В вашем аккаунтe нет доверенных телефонных номеров, но они необходимы для двухфакторной аутентификации.\n\nСм. https://support.apple.com/HT204915." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "บัญชีของคุณไม่มีหมายเลขโทรศัพท์ที่เชื่อถือได้ แต่จำเป็นต้องใช้สำหรับการยืนยันตัวตนแบบสองปัจจัย\n\nดู https://support.apple.com/HT204915" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -17061,6 +17895,12 @@ "value" : "Xcode не выбран" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่ได้เลือก Xcode" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -17179,6 +18019,12 @@ "value" : "OK" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตกลง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -17304,6 +18150,12 @@ "value" : "Сохранять формат имени Xcode-X.X.X.app" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใช้ชื่อว่า Xcode-X.X.X.app" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -17420,7 +18272,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "On select, will keep the name as the version eg. Xcode-13.4.1.app" + "value" : "Quando selecionado, será mantido o nome com a versão ex. Xcode-13.4.1.app" } }, "ru" : { @@ -17429,6 +18281,12 @@ "value" : "Если выбрано, формат имени будет содержать версию, прим. Xcode-13.4.1.app" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เมื่อเลือก จะเก็บชื่อไว้เป็นเวอร์ชัน เช่น Xcode-13.4.1.app" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -17554,6 +18412,12 @@ "value" : "Всегда переименовывать в Xcode.app" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เปลี่ยนชื่อเป็น Xcode.app เสมอ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -17679,6 +18543,12 @@ "value" : "Если выбрано, будет выполнена попытка переименовать активный Xcode в Xcode.app, а предыдущий Xcode.app в формат имени с версией." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เมื่อเลือก จะพยายามเปลี่ยนชื่อ Xcode ที่ใช้งานอยู่เป็น Xcode.app โดยอัตโนมัติ โดยเปลี่ยนชื่อ Xcode.app ก่อนหน้าเป็นชื่อเวอร์ชันแทน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -17797,6 +18667,12 @@ "value" : "Открыть" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เปิด" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -17906,7 +18782,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Open In Rosetta" + "value" : "Abrir com Rosetta" } }, "ru" : { @@ -17915,6 +18791,12 @@ "value" : "Открыть в Rosetta" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เปิดด้วย Rosetta" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -18039,6 +18921,12 @@ "value" : "Открыть эту версию" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เปิดเวอร์ชันนี้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -18163,6 +19051,12 @@ "value" : "Пароль:" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รหัสผ่าน:" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -18272,7 +19166,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Perform post-install steps" + "value" : "Executar passos pós-instalação" } }, "ru" : { @@ -18281,6 +19175,12 @@ "value" : "Perform post-install steps" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ดำเนินการตามขั้นตอนหลังการติดตั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -18405,6 +19305,12 @@ "value" : "PIN" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รหัส PIN" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -18520,7 +19426,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "PIN not set" + "value" : "PIN não definido" } }, "ru" : { @@ -18529,6 +19435,12 @@ "value" : "PIN not set" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่ได้ตั้งรหัส PIN" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -18544,7 +19456,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "PIN not set" + "value" : "没有设置 PIN" } }, "zh-Hant" : { @@ -18644,7 +19556,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Platforms" + "value" : "Plataformas" } }, "ru" : { @@ -18653,6 +19565,12 @@ "value" : "Платформы" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "แพลตฟอร์ม" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -18768,7 +19686,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Installed Platforms" + "value" : "Plataformas instaladas" } }, "ru" : { @@ -18777,6 +19695,12 @@ "value" : "Установленные платформы" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "แพลตฟอร์มที่ติดตั้งแล้ว" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -18893,7 +19817,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Below are a list of platforms that are installed on this machine. " + "value" : "Abaixo contém uma lista de plataformas que estão instalada nesse computador." } }, "ru" : { @@ -18902,6 +19826,12 @@ "value" : "Below are a list of platforms that are installed on this machine. " } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ด้านล่างนี้เป็นรายการของแพลตฟอร์มที่ได้รับการติดตั้งบนเครื่องนี้" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -19026,6 +19956,12 @@ "value" : "Hастройки" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การตั้งค่า" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -19150,6 +20086,12 @@ "value" : "Открыть настройки" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เปิดการตั้งค่า" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -19274,6 +20216,12 @@ "value" : "Привилегированный помощник" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตัวช่วยที่มีสิทธิพิเศษ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -19398,6 +20346,12 @@ "value" : "Xcodes использует отдельный привилегированный помощник для выполнения задач от имени root-пользователя. Это команды, которые потребуют sudo в командной строке, включая шаги после установки и переключение версий Xcode с помощью xcode-select.\n\nВам будет предложено указать пароль от вашей учетной записи macOS для его установки." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes ใช้ตัวช่วยที่มีสิทธิพิเศษแยกต่างหากเพื่อดำเนินการต่าง ๆ ในฐานะ root สิ่งเหล่านี้จำเป็นต้องใช้คำสั่ง sudo บน Command Line รวมถึงขั้นตอนหลังการติดตั้งและการสลับเวอร์ชัน Xcode ด้วยคำสั่ง xcode-select\n\nระบบจะขอให้คุณป้อนรหัสผ่านของบัญชี macOS ของคุณเพื่อทำการติดตั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -19522,6 +20476,12 @@ "value" : "Обновить" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รีเฟรช" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -19646,6 +20606,12 @@ "value" : "Обновить список Xcode" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รีเฟรชรายการของ Xcode" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -19771,6 +20737,12 @@ "value" : "Pелиз" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ปล่อย" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -19895,6 +20867,12 @@ "value" : "Дата выпуска" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "วันที่ปล่อย" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -20019,6 +20997,12 @@ "value" : "Просмотреть примечания к выпуску" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ดูข้อมูลการปล่อย" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -20143,6 +21127,12 @@ "value" : "Только релиз" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ปล่อยเท่านั้น" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -20261,6 +21251,12 @@ "value" : "Обязательно" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "จำเป็น" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -20385,6 +21381,12 @@ "value" : "Показать в Finder" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "แสดงใน Finder" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -20503,6 +21505,12 @@ "value" : "SDK" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -20619,7 +21627,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Insert your physical security key and enter the PIN" + "value" : "Insira sua chave de segurança física e digite o PIN" } }, "ru" : { @@ -20628,6 +21636,12 @@ "value" : "Insert your physical security key and enter the PIN" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใส่คีย์ความปลอดภัยของคุณและป้อน PIN" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -20744,7 +21758,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Touch your security key to verify that it’s you" + "value" : "Toque na sua chave de segurança para verificar que é você" } }, "ru" : { @@ -20753,6 +21767,12 @@ "value" : "Touch your security key to verify that it’s you" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "แตะคีย์ความปลอดภัยของคุณเพื่อยืนยันว่าเป็นคุณ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -20871,6 +21891,12 @@ "value" : "Выбрать" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เลือก" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -20989,6 +22015,12 @@ "value" : "Выбрано" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ถูกเลือก" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -21114,6 +22146,12 @@ "value" : "Выберите доверенный номер телефона для получения %d цифрового кода по SMS:" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เลือกหมายเลขโทรศัพท์ที่เชื่อถือได้เพื่อรับรหัส %d หลักผ่าน SMS:" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -21238,6 +22276,12 @@ "value" : "Отправить SMS" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่ง SMS" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -21353,7 +22397,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar opçao abrir com Rosetta" + "value" : "Mostrar opção abrir com Rosetta" } }, "ru" : { @@ -21362,6 +22406,12 @@ "value" : "Показать опцию «Открыть в Rosetta»" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "แสดงตัวเลือกให้เปิดใน Rosetta" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -21486,6 +22536,12 @@ "value" : "Опция «Открыть в Rosetta» будет показана там, где доступны другие функции «Открыть». Примечание: опция будет отображаться только для компьютеров Apple Silicon." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตัวเลือก \"เปิดใน Rosetta\" จะแสดงเมื่อมีตัวเลือกในการเปิดอื่น ๆ ที่พร้อมใช้งานอยู่เท่านั้น หมายเหตุ: ตัวเลือกนี้จะแสดงเฉพาะเครื่อง Apple Silicon เท่านั้น" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -21610,6 +22666,12 @@ "value" : "Войти" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เข้าสู่ระบบ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -21735,6 +22797,12 @@ "value" : "Войти со своим Apple ID." } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เข้าสู่ระบบด้วย Apple ID" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -21859,6 +22927,12 @@ "value" : "Выход" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ออกจากระบบ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -21983,6 +23057,12 @@ "value" : "Остановить установку" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "หยุดการติดตั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -22099,7 +23179,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Support Xcodes" + "value" : "Ajude o Xcodes" } }, "ru" : { @@ -22108,6 +23188,12 @@ "value" : "Поддержать Xcodes" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "สนับสนุน Xcodes" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -22223,7 +23309,7 @@ "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Terminate App after last window is closed" + "value" : "Encerrar o aplicativo quando a ultima janela for fechada" } }, "ru" : { @@ -22232,6 +23318,12 @@ "value" : "Terminate App after last window is closed" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยุติการทำงานของแอปเมื่อหน้าต่างสุดท้ายถูกปิดลง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -22357,6 +23449,12 @@ "value" : "Перемещение архива в корзину" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กำลังย้ายไฟล์ไปที่ถังขยะ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -22482,6 +23580,12 @@ "value" : "Разархивирование (это может занять некоторое время)" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กำลังแตกไฟล์ (อาจใช้เวลาสักครู่)" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -22600,6 +23704,12 @@ "value" : "Удалить" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ถอนการติดตั้ง" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -22718,6 +23828,12 @@ "value" : "Universal" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Universal" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -22842,6 +23958,12 @@ "value" : "Экспериментальный Unxip" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip Experiment" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -22968,6 +24090,12 @@ "value" : "Обновлено" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อัปเดตเมื่อ" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -23087,6 +24215,12 @@ "value" : "Обновления" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อัปเดต" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -23211,6 +24345,12 @@ "value" : "При выполнении unxip будет использован экспериментальный функционал" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใช้ unxip ในการแตกไฟล์" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -23329,6 +24469,12 @@ "value" : "Версии" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เวอร์ชัน" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -23455,6 +24601,12 @@ "value" : "Версия %@ (%@)" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เวอร์ชัน %@ (%@)" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -23581,6 +24733,12 @@ "value" : "👨🏻‍💻👩🏼‍💻 Счастливого WWDC %@! 👨🏽‍💻🧑🏻‍💻" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -23699,6 +24857,12 @@ "value" : "Xcode" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -23821,6 +24985,12 @@ "value" : "Xcodes" } }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes" + } + }, "tr" : { "stringUnit" : { "state" : "translated", diff --git a/Xcodes/Resources/XcodesIcon.icon/Assets/Dark.png b/Xcodes/Resources/XcodesIcon.icon/Assets/Dark.png new file mode 100644 index 0000000..3244844 Binary files /dev/null and b/Xcodes/Resources/XcodesIcon.icon/Assets/Dark.png differ diff --git a/Xcodes/Resources/XcodesIcon.icon/Assets/Light.png b/Xcodes/Resources/XcodesIcon.icon/Assets/Light.png new file mode 100644 index 0000000..c8728f9 Binary files /dev/null and b/Xcodes/Resources/XcodesIcon.icon/Assets/Light.png differ diff --git a/Xcodes/Resources/XcodesIcon.icon/Assets/Mono.png b/Xcodes/Resources/XcodesIcon.icon/Assets/Mono.png new file mode 100644 index 0000000..e151de3 Binary files /dev/null and b/Xcodes/Resources/XcodesIcon.icon/Assets/Mono.png differ diff --git a/Xcodes/Resources/XcodesIcon.icon/icon.json b/Xcodes/Resources/XcodesIcon.icon/icon.json new file mode 100644 index 0000000..b3cadb6 --- /dev/null +++ b/Xcodes/Resources/XcodesIcon.icon/icon.json @@ -0,0 +1,50 @@ +{ + "fill" : { + "automatic-gradient" : "extended-srgb:0.00000,0.47843,1.00000,1.00000" + }, + "groups" : [ + { + "layers" : [ + { + "glass" : false, + "hidden" : false, + "image-name-specializations" : [ + { + "value" : "Light.png" + }, + { + "appearance" : "dark", + "value" : "Dark.png" + }, + { + "appearance" : "tinted", + "value" : "Mono.png" + } + ], + "name" : "Dark", + "position" : { + "scale" : 1, + "translation-in-points" : [ + 0, + 0 + ] + } + } + ], + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "specular" : false, + "translucency" : { + "enabled" : false, + "value" : 0.5 + } + } + ], + "supported-platforms" : { + "squares" : [ + "macOS" + ] + } +} \ No newline at end of file diff --git a/Xcodes/XcodesKit/Package.swift b/Xcodes/XcodesKit/Package.swift index 81447ab..abb461f 100644 --- a/Xcodes/XcodesKit/Package.swift +++ b/Xcodes/XcodesKit/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "XcodesKit", - platforms: [.macOS(.v11)], + platforms: [.macOS(.v13)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/XcodeReleases/Architecture.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/XcodeReleases/Architecture.swift index eb3ab40..607d7f8 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/XcodeReleases/Architecture.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/XcodeReleases/Architecture.swift @@ -8,7 +8,7 @@ import Foundation /// The name of an Architecture. -public enum Architecture: String, Codable, Equatable, Hashable, Identifiable { +public enum Architecture: String, Codable, Equatable, Hashable, Identifiable, CaseIterable { public var id: Self { self } /// The Arm64 architecture (Apple Silicon) @@ -24,10 +24,48 @@ public enum Architecture: String, Codable, Equatable, Hashable, Identifiable { return "Intel" } } + + public var iconName: String { + switch self { + case .arm64: + return "m4.button.horizontal" + case .x86_64: + return "cpu.fill" + } + } +} + +public enum ArchitectureVariant: String, Codable, Equatable, Hashable, Identifiable, CaseIterable { + public var id: Self { self } + + case universal + case appleSilicon + + public var displayString: String { + switch self { + case .appleSilicon: + return "Apple Silicon" + case .universal: + return "Universal" + } + } + + public var iconName: String { + switch self { + case .appleSilicon: + return "m4.button.horizontal" + case .universal: + return "cpu.fill" + } + } } extension Array where Element == Architecture { public var isAppleSilicon: Bool { self == [.arm64] } + + public var isUniversal: Bool { + self.contains([.arm64, .x86_64]) + } } diff --git a/icon.png b/icon.png index e2073c1..0024bbd 100644 Binary files a/icon.png and b/icon.png differ