From 2030ef2d5ac2665822a937aa32dd27e9438aa7b0 Mon Sep 17 00:00:00 2001 From: Ferran Date: Wed, 28 Sep 2022 19:07:37 +0200 Subject: [PATCH 01/86] Added catalan localization strings --- Xcodes.xcodeproj/project.pbxproj | 3 + Xcodes/Resources/ca.lproj/Localizable.strings | 229 ++++++++++++++++++ 2 files changed, 232 insertions(+) create mode 100644 Xcodes/Resources/ca.lproj/Localizable.strings diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 63ea87c..9d350f7 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -176,6 +176,7 @@ 53CBAB2B263DCC9100410495 /* XcodesAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodesAlert.swift; sourceTree = ""; }; 58F743C02810A34900EEC0F3 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 5AA8A6102877EDAD009ECDB0 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; + 5C3927ED28E4B486007B5119 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; 63EAA4EA259944450046AB8F /* ProgressButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressButton.swift; sourceTree = ""; }; 6CA3A090282EBE72005A6E35 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; 7CBF284E28606D2C001AA66B /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = ""; }; @@ -721,6 +722,7 @@ de, uk, fi, + ca, ); mainGroup = CAD2E7952449574E00113D76; packageReferences = ( @@ -934,6 +936,7 @@ A0187D39285792D1002F46F9 /* de */, 7CBF284E28606D2C001AA66B /* uk */, 5AA8A6102877EDAD009ECDB0 /* fi */, + 5C3927ED28E4B486007B5119 /* ca */, ); name = Localizable.strings; sourceTree = ""; diff --git a/Xcodes/Resources/ca.lproj/Localizable.strings b/Xcodes/Resources/ca.lproj/Localizable.strings new file mode 100644 index 0000000..1958baa --- /dev/null +++ b/Xcodes/Resources/ca.lproj/Localizable.strings @@ -0,0 +1,229 @@ +// Menu +"Menu.About" = "Sobre Xcodes"; +"Menu.CheckForUpdates" = "Cerca actualitzacions..."; +"Menu.Acknowledgements" = "Agraïments d'Xcodes"; +"Menu.GitHubRepo" = "Repositori de Github d'Xcodes"; +"Menu.ReportABug" = "Informa d'un error"; +"Menu.RequestNewFeature" = "Demana una nova funcionalitat"; + +// Common +"Install" = "Instal·lar"; +"InstallDescription" = "Instal·lar aquesta versió"; +"RevealInFinder" = "Obrir al Finder"; +"Active" = "Activa"; +"MakeActive" = "Fer-la activa"; +"Open" = "Obrir"; +"OpenDescription" = "Obrir aquesta versió"; +"CopyPath" = "Copiar la ruta"; +"CreateSymLink" = "Crear un Symlink com a Xcode.app"; +"Uninstall" = "Desinstal·lar"; +"Selected" = "Seleccionat"; +"Select" = "Seleccionar"; +"Cancel" = "Cancelar"; +"Next" = "Següent"; +"Continue" = "Continuar"; +"Close" = "Tancar"; +"OK" = "D'acord"; + +// Info Pane +"IdenticalBuilds" = "Builds idèntiques"; +"IdenticalBuilds.help" = "A vegades alguna versió provisional i algna versió definitiva son exactament iguals. L'Xcodes mostrarà automàticament aquestes versions conjuntament."; + +"ReleaseDate" = "Data de la versió"; +"ReleaseNotes" = "Notes de la versió"; +"ReleaseNotes.help" = "Veure les notes de la versió"; +"CopyReleaseNoteURL" = "Copiar l'URL"; +"Compatibility" = "Compatibilitat"; +"MacOSRequirement" = "És necessari macOS %@ o posterior"; +"SDKs" = "SDKs"; +"Compilers" = "Compiladors"; +"DownloadSize" = "Tamany de descàrrega"; +"NoXcodeSelected" = "Cap Xcode seleccionat"; + +// Installation Steps +// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" +// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" +"InstallationStepDescription" = "Pas %1$d de %2$d: %3$@"; +"DownloadingPercentDescription" = "Descarregant: %d%% completat"; +"StopInstallation" = "Aturar l'instal·lació"; +"DownloadingError" = "Cap informació de la descàrrega trobada"; + +// About +"VersionWithBuild" = "Versió %@ (%@)"; +"GithubRepo" = "Repositori de GitHub"; +"Acknowledgements" = "Agraïments"; +"UnxipExperiment" = "Experiment d'Unxip"; +"License" = "Llicència"; + +// General Preference Pane +"General" = "General"; +"AppleID" = "Apple ID"; +"SignIn" = "Iniciar sessió"; +"Notifications" = "Notificacions"; + +// Updates Preference Pane +"Updates" = "Actualitzacions"; +"Versions" = "Versions"; +"AutomaticInstallNewVersion" = "Instal·lar automàticament noves versions d'Xcode"; +"IncludePreRelease" = "Incloure versions provisionals/beta"; +"AppUpdates" = "Actualitzacions d'Xcodes.app"; +"CheckForAppUpdates" = "Cercar actualitzacions automàticament"; +"CheckNow" = "Revisar ara"; +"LastChecked" = "Última consulta: %@"; +"Never" = "Mai"; + +// Advanced Preference Pane +"Advanced" = "Avançat"; +"LocalCachePath" = "Ruta de la memòria cau local"; +"LocalCachePathDescription" = "L'Xcodes guarda a la memòria cau les versions d'Xcode disponibles i hi descarrega temporalment les noves versions"; +"Change" = "Canviar"; +"Active/Select" = "Activar/Seleccionar"; +"InstallDirectory" = "Directori d'instal·lació"; +"InstallPathDescription" = "L'Xcodes busca i instal·la en un sol directori. Per defecte (recomanat) utilitza la carpeta /Applications. Qualsevol canvi d'aquest directory pot provocar que altres aplicatius/serveis deixin de funcionar."; + +"OnSelectDoNothing" = "Mantenir el nom Xcode-X.X.X.app"; +"OnSelectDoNothingDescription" = "Al seleccionar aquesta opció es mantindrà el nom amb la versió, p.e. Xcode-13.4.1.app"; +"AutomaticallyCreateSymbolicLink" = "Crea automàticament un link simbòlic a Xcode.app"; +"AutomaticallyCreateSymbolicLinkDescription" = "Quan s'activa/selecciona una versió d'Xcode, prova de crear un enllaç simbòlic dins el directori d'instal·lació"; +"OnSelectRenameXcodeDescription" = "Al seleccionar aquesta opció, s'intentarà canviar el nom de la versió activa d'Xcode a Xcode.app; canviant així també el nom de l'antiga Xcode.app a el nom amb versió."; + +"DataSource" = "Font de dades"; +"DataSourceDescription" = "La font de dades d'Apple rebusca dins la pàgina web de desenvolupadors d'Apple. Això farà que sempre mostri les últimes versions disponibles, però també és una opció més inestable.\n\nXcode Releases es una llista no oficial de les versions d'Xcode. Està formada per dades ben composades, conté informació extra que no està disponible llegint les dades oficials d'Apple i és menys probable que es trenqui si Apple decideix redissenyar el seu portal de desenvolupadors."; +"Downloader" = "Descàrrega"; +"DownloaderDescription" = "aria2 utilitza fins a 16 connexions simultànies per a descarregar l'Xcode 3-5x vegades més de pressa que URLSesson. A més de l'executable, està empaquestat amb el seu codi font dins Xcodes per complir amb la llicència GPLv2.\n\nURLSession is la opció per defecte de l'API d'Apple per a fer crides URL."; +"PrivilegedHelper" = "Servei Privilegiat"; +"PrivilegedHelperDescription" = "L'Xcodes utilitza, a part, un servei que executa tasques com a root. Aquestes tasques son coses que requereixin la comanda sudo a la línia de comandes, incloent-hi les tasques al finalitzar l'instal·lació i canviar les versions d'Xcode seleccionades utilitzant xcode-select.\n\nEl sistema operatiu et demanarà la teva contrassenya per poder-lo instal·lar."; +"HelperInstalled" = "El servei està instal·lat"; +"HelperNotInstalled" = "El servei no està instal·lat"; +"InstallHelper" = "Instal·lar el servei"; + +// Experiment Preference Pane +"Experiments" = "Experiments"; +"FasterUnxip" = "Unxip més ràpid"; +"UseUnxipExperiment" = "Quan es fa l'unxip, utilitza l'experiment"; +"FasterUnxipDescription" = "Gràcies a @_saagarjha, aquest experiment pot incrementar la velocitat de l'unxip en un 70% en alguns sistemes.\n\nMés informació sobre com s'aconsegueix pot ser consultada en el seu repositori - https://github.com/saagarjha/unxip"; + +// Notifications +"AccessGranted" = "Accés garantit. Rebràs notificacions d'Xcodes."; +"AccessDenied" = "⚠️ Accés denegat ⚠️\n\nSi us plau, obre les preferències de les notificacions i selecciona Xcodes si vols garantir-li l'accés."; +"NotificationSettings" = "Preferències de notificacions"; +"EnableNotifications" = "Activar les notificacions"; + +// SignIn +"SignInWithApple" = "Inicia sessió amb el teu Apple ID."; +"AppleID" = "AppleID:"; +"Password" = "Contrassenya:"; +"Required" = "Requerida"; +"SignOut" = "Tancar sessió"; + +// SMS/2FA +"DigitCodeDescription" = "Introdueix el codi de %d dígits d'un dels teus dispositius de confiança:"; +"SendSMS" = "Enviar SMS"; +"EnterDigitCodeDescription" = "Introdueix el codi de %d dígits enviat a %@: "; +"SelectTrustedPhone" = "Selecciona un número de mòbil de confiança on rebre el codi de %d dígits a través d'SMS:"; +"NoTrustedPhones" = "El teu compte no té cap número de confiança, però se'n necessita un per a l'autenticació de dos factors.\n\nVeure https://support.apple.com/en-ca/HT204915."; + +// MainWindow +"UpdatedAt" = "Actualitzat el"; + +// ToolBar +"Login" = "Inici de sessió"; +"LoginDescription" = "Obrir l'inici de sessió"; +"Refresh" = "Actualitzar"; +"RefreshDescription" = "Actualitzar la llista d'Xcode"; +"All" = "Tot"; +"Release" = "Versió"; +"ReleaseOnly" = "Només versions oficials"; +"Beta" = "Beta"; +"BetaOnly" = "Només Beta"; +"Filter" = "Filtre"; +"FilterAvailableDescription" = "Filtrar versions disponibles"; +"FilterInstalledDescription" = "Filtrar versions instal·lades"; +"Info" = "Informació"; +"InfoDescription" = "Mostrar o ocultar el panell d'informació"; +"Preferences" = "Preferències"; +"PreferencesDescription" = "Obrir les preferències"; +"Search" = "Cercar..."; +"SearchDescription" = "Llistat de cerca"; + +// List +"ActiveVersionDescription" = "Aquesta és la versió activa"; +"MakeActiveVersionDescription" = "Fer aquesta versió activa"; + +// Alerts +// Uninstall +"Alert.Uninstall.Title" = "Desinstal·lar l'Xcode %@?"; +"Alert.Uninstall.Message" = "Es mourà a la paperera, però no es buidarà."; +"Alert.Uninstall.Error.Title" = "Incapaç de desinstal·lar l'Xcode"; + +// Cancel Install +"Alert.CancelInstall.Title" = "Estàs segur que vols aturar l'instal·lació de l'Xcode %@?"; +"Alert.CancelInstall.Message" = "Tot el progrés serà descartat."; +"Alert.CancelInstall.PrimaryButton" = "Aturar l'instal·lació"; + +// Privileged Helper +"Alert.PrivilegedHelper.Title" = "Servei privilegiat"; +"Alert.PrivilegedHelper.Message" = "L'Xcodes utilitza, a part, un servei que executa tasques com a root. Aquestes tasques son coses que requereixin la comanda sudo a la línia de comandes, incloent-hi les tasques al finalitzar l'instal·lació i canviar les versions d'Xcode seleccionades utilitzant xcode-select.\n\nEl sistema operatiu et demanarà la teva contrassenya per poder-lo instal·lar."; +"Alert.PrivilegedHelper.Error.Title" = "No ha sigut possible instal·lar el servei"; + +// Min MacOS Supported +"Alert.MinSupported.Title" = "No es compleixen els requeriments mínims"; +"Alert.MinSupported.Message" = "L'Xcode %@ necessita MacOS %@, però tu estàs utilitzant MacOS %@, vols instal·lar-lo igualment?"; + +// Install +"Alert.Install.Error.Title" = "Incapaç d'instal·lar l'Xcode"; +"Alert.InstallArchive.Error.Title" = "Incapaç d'instal·lar l'Xcode comprimit"; + +// Update +"Alert.Update.Error.Title" = "Incapaç d'actualitzar l'Xcode seleccionat"; + +// Active/Select +"Alert.Select.Error.Title" = "Incapaç de seleccionar l'Xcode"; + +// Symbolic Links +"Alert.SymLink.Title" = "Incapaç de crear un enllaç simbòlic"; +"Alert.SymLink.Message" = "L'Xcode.app existeix i no és un enllaç simbòlic"; + +// Post install +"Alert.PostInstall.Title" = "Incapaç de realitzar les tasques post instal·lació"; + +// InstallationErrors +"InstallationError.DamagedXIP" = "L'arxiu \"%@\" està malmès i no es pot expandir."; +"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "L'arxiu \"%@\" no es pot expandir perquè el volum actual no té suficient espai lliure.\n\nAllibera més espai disponible per a poder expandir l'arxiu i llavors torna a instal·lar l'Xcode %@ des d'on ho havia deixat."; +"InstallationError.FailedToMoveXcodeToApplications" = "No s'ha pogut moure l'Xcode al directori %@."; +"InstallationError.FailedSecurityAssessment" = "L'Xcode %@ ha fallat l'avaluació de seguretat amb el següent missatge:\n%@\nEs manté instal·lat a %@ Si desitges continuar de totes maneres."; +"InstallationError.CodesignVerifyFailed" = "L'Xcode descarregat ha fallat en la verificació de la signatura de seguretat amb el següent missatge:\n%@"; +"InstallationError.UnexpectedCodeSigningIdentity" = "The downloaded Xcode doesn't have the expected code signing identity.\nGot:\n%@\n%@\nExpected:\n%@\n%@"; +"InstallationError.UnsupportedFileFormat" = "L'Xcodes no soporta (encara) instal·lar l'Xcode amb el format %@."; +"InstallationError.MissingSudoerPassword" = "Falta la contrassenya. Si us plau, torna-ho a intentar."; +"InstallationError.UnavailableVersion" = "No s'ha trobat la versió %@."; +"InstallationError.NoNonPrereleaseVersionAvailable" = "Cap versió que no sigui provisional disponible."; +"InstallationError.NoPrereleaseVersionAvailable" = "Cap versió provisional disponible."; +"InstallationError.MissingUsernameOrPassword" = "Falta l'usuari o la contrassenya. Si us plau, torna-ho a intentar."; +"InstallationError.VersionAlreadyInstalled" = "%@ ja està instal·lada a %@"; +"InstallationError.InvalidVersion" = "%@ no és un número de versió vàlid."; +"InstallationError.VersionNotInstalled" = "%@ no està instal·lada."; +"InstallationError.PostInstallStepsNotPerformed.Installed" = "L'instal·lació ha finalitzat, però algunes tasques post instal·lació no s'han executat de manera automàtica. S'executaran la primera vegada que obris l'Xcode %@."; +"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "L'instal·lació ha finalitzat, però algunes tasques post instal·lació no s'han executat de manera automàtica. L'Xcodes executa aquestes tasques amb el servei privilegiat, que sembla que no està instal·lat. El pots instal·lar des de les Preferències > Avançat.\n\nAquestes tasques s'executaran la primera vegada que obris l'Xcode %@."; + +// Installation Steps +"Downloading" = "Descarregant"; +"Unarchiving" = "Descomprimint (pot trigar una estona)"; +"Moving" = "Movent a %@"; +"TrashingArchive" = "Movent l'arxiu comprimit a la paperera"; +"CheckingSecurity" = "Verificació de seguretat"; +"Finishing" = "Acabant"; + +// Notifications +"Notification.NewVersionAvailable" = "Nova versió disponible"; +"Notification.FinishedInstalling" = "S'ha acabat d'instal·lar"; + + +"HelperClient.error" = "Incapaç de comunicar-se amb el servei privilegiat."; +///++ +// Notifications +"Notification.NewXcodeVersion.Title" = "Noves versions d'Xcode"; +"Notification.NewXcodeVersion.Body" = "Hi ha noves versions de l'Xcode disponibles per a descarregar."; + +// WWDC +"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Feliç WWDC %@! 👨🏽‍💻🧑🏻‍💻"; From beca9b4187b5ff6858bb2ca7f3b1582dbc5d339f Mon Sep 17 00:00:00 2001 From: Ferran Date: Wed, 28 Sep 2022 19:07:54 +0200 Subject: [PATCH 02/86] Update Readme file --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 965dcb8..0169687 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ The following languages are supported because of the following community users! |Hindi 🇮🇳 |[@KGurpreet](https://github.com/KGurpreet)|Chinese-Simplified 🇨🇳|[@megabitsenmzq](https://github.com/megabitsenmzq)| |Finnish 🇫🇮 |[@marcusziade](https://github.com/marcusziade)|Chinese-Traditional 🇹🇼|[@itszero](https://github.com/itszero)| |Ukranian 🇺🇦 |[@gelosi](https://github.com/gelosi)|Japanese 🇯🇵|[@tatsuz0u](https://github.com/tatsuz0u)| -|German 🇩🇪|[@drct](https://github.com/drct)|| +|German 🇩🇪|[@drct](https://github.com/drct)|Catalan|[@ferranabello](https://github.com/ferranabello)|| Want to add more languages? Simply create a PR with the updated strings file. ## Installation From 8169ee0a220833392a8b531c57de2c61bca14eb5 Mon Sep 17 00:00:00 2001 From: Jinyu Meng Date: Tue, 6 Jun 2023 16:11:02 +0900 Subject: [PATCH 03/86] Update zh_CN localizations. --- Xcodes/Resources/zh-Hans.lproj/Localizable.strings | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Xcodes/Resources/zh-Hans.lproj/Localizable.strings b/Xcodes/Resources/zh-Hans.lproj/Localizable.strings index 3bea058..3eb546e 100644 --- a/Xcodes/Resources/zh-Hans.lproj/Localizable.strings +++ b/Xcodes/Resources/zh-Hans.lproj/Localizable.strings @@ -102,6 +102,9 @@ "HelperNotInstalled" = "帮助程序未安装"; "InstallHelper" = "安装帮助程序"; +"ShowOpenInRosetta" = "显示“在Rosetta中打开”选项"; +"ShowOpenInRosettaDescription" = "“在Rosetta中打开”将会在有其他“打开”方式可用时显示。注:此选项只会在Apple Silicon设备上显示。"; + // Experiment Preference Pane "Experiments" = "实验性功能"; "FasterUnxip" = "更快的xip解压"; @@ -160,6 +163,7 @@ "Alert.Uninstall.Title" = "要卸载Xcode %@吗?"; "Alert.Uninstall.Message" = "它会被移动到废纸篓,但废纸篓不会清空。"; "Alert.Uninstall.Error.Title" = "无法卸载Xcode"; +"Alert.Uninstall.Error.Message.FileNotFound" = "无法找到文件\"%@\"."; // Cancel Install "Alert.CancelInstall.Title" = "您确定要终止Xcode %@的安装吗?"; From 4f25905f4c5544f8089e33dbd794f48e604030cf Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Tue, 6 Jun 2023 23:29:09 -0500 Subject: [PATCH 04/86] start moving over to XcodesKit package. Runtimes searching --- Xcodes.xcodeproj/project.pbxproj | 72 +++++--- .../xcshareddata/swiftpm/Package.resolved | 13 +- Xcodes/Backend/AppState+Install.swift | 1 + Xcodes/Backend/AppState+Runtimes.swift | 32 ++++ Xcodes/Backend/AppState+Update.swift | 18 ++ Xcodes/Backend/AppState.swift | 24 +++ Xcodes/Backend/Entry+.swift | 12 +- Xcodes/Backend/Environment.swift | 8 +- Xcodes/Backend/Logger.swift | 10 -- Xcodes/Backend/Path+.swift | 4 + Xcodes/Backend/Process.swift | 11 +- Xcodes/Backend/SDKs+Xcode.swift | 32 ++++ Xcodes/Backend/Xcode.swift | 1 + Xcodes/Backend/XcodeCommands.swift | 18 ++ Xcodes/Frontend/InfoPane/InfoPane.swift | 25 +++ Xcodes/Resources/Licenses.rtf | 31 +++- Xcodes/Resources/en.lproj/Localizable.strings | 1 + Xcodes/XcodesKit/.gitignore | 9 + Xcodes/XcodesKit/Package.swift | 33 ++++ Xcodes/XcodesKit/README.md | 3 + .../Sources/XcodesKit/Environment.swift | 7 + .../XcodesKit/Extensions/Foundation.swift | 12 ++ .../Sources/XcodesKit/Extensions/Logger.swift | 10 ++ .../XcodesKit/Models/InstallState.swift | 34 ++++ .../XcodesKit/Models/InstallationStep.swift | 60 +++++++ .../Models/Runtimes/CoreSimulatorImage.swift | 21 +++ .../XcodesKit/Models/Runtimes/Runtimes.swift | 161 ++++++++++++++++++ .../XcodesKit/Services/RuntimeService.swift | 55 ++++++ .../Sources/XcodesKit/Shell/Process.swift | 66 +++++++ .../Sources/XcodesKit/Shell/Shell.swift | 8 + .../Tests/XcodesKitTests/XcodesKitTests.swift | 11 ++ 31 files changed, 749 insertions(+), 54 deletions(-) create mode 100644 Xcodes/Backend/AppState+Runtimes.swift delete mode 100644 Xcodes/Backend/Logger.swift create mode 100644 Xcodes/Backend/SDKs+Xcode.swift create mode 100644 Xcodes/XcodesKit/.gitignore create mode 100644 Xcodes/XcodesKit/Package.swift create mode 100644 Xcodes/XcodesKit/README.md create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Environment.swift create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Extensions/Foundation.swift create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Extensions/Logger.swift create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallState.swift create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallationStep.swift create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Shell/Process.swift create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Shell/Shell.swift create mode 100644 Xcodes/XcodesKit/Tests/XcodesKitTests/XcodesKitTests.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 3f9e7d7..56d06e7 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -18,7 +18,6 @@ CA25192A25A9644800F08414 /* XcodeInstallState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA25192925A9644800F08414 /* XcodeInstallState.swift */; }; CA378F992466567600A58CE0 /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA378F982466567600A58CE0 /* AppState.swift */; }; CA39711924495F0E00AFFB77 /* AppStoreButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA39711824495F0E00AFFB77 /* AppStoreButtonStyle.swift */; }; - CA42DD6E25AEA8B200BC0B0C /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA42DD6D25AEA8B200BC0B0C /* Logger.swift */; }; CA42DD7325AEB04300BC0B0C /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA42DD7225AEB04300BC0B0C /* Logger.swift */; }; CA44901F2463AD34003D8213 /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA44901E2463AD34003D8213 /* Tag.swift */; }; CA452BB0259FD9770072DFA4 /* ProgressIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA452BAF259FD9770072DFA4 /* ProgressIndicator.swift */; }; @@ -71,7 +70,6 @@ CABFA9CD2592EEEA00380FEE /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFA9AC2592EEE900380FEE /* Foundation.swift */; }; CABFA9CE2592EEEA00380FEE /* Version+Xcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFA9A62592EEE900380FEE /* Version+Xcode.swift */; }; CABFA9CF2592EEEA00380FEE /* Process.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFA9B42592EEEA00380FEE /* Process.swift */; }; - CABFA9DF2592F07A00380FEE /* Path in Frameworks */ = {isa = PBXBuildFile; productRef = CABFA9DE2592F07A00380FEE /* Path */; }; CABFA9E42592F08E00380FEE /* Version in Frameworks */ = {isa = PBXBuildFile; productRef = CABFA9E32592F08E00380FEE /* Version */; }; CABFA9EE2592F0CC00380FEE /* SwiftSoup in Frameworks */ = {isa = PBXBuildFile; productRef = CABFA9ED2592F0CC00380FEE /* SwiftSoup */; }; CABFA9F82592F0F900380FEE /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = CABFA9F72592F0F900380FEE /* KeychainAccess */; }; @@ -108,6 +106,9 @@ E87DD6EB25D053FA00D86808 /* Progress+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87DD6EA25D053FA00D86808 /* Progress+.swift */; }; E89342FA25EDCC17007CF557 /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E89342F925EDCC17007CF557 /* NotificationManager.swift */; }; E8977EA325C11E1500835F80 /* PreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8977EA225C11E1500835F80 /* PreferencesView.swift */; }; + E8B20CBF2A2EDEC20057D816 /* SDKs+Xcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8B20CBE2A2EDEC20057D816 /* SDKs+Xcode.swift */; }; + E8C0EB1A291EF43E0081528A /* XcodesKit in Frameworks */ = {isa = PBXBuildFile; productRef = E8C0EB19291EF43E0081528A /* XcodesKit */; }; + E8C0EB1C291EF9A10081528A /* AppState+Runtimes.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8C0EB1B291EF9A10081528A /* AppState+Runtimes.swift */; }; E8CBDB8927ADE32300B22292 /* unxip in Copy aria2c */ = {isa = PBXBuildFile; fileRef = E8CBDB8627ADD92000B22292 /* unxip */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; E8CBDB8B27AE02FF00B22292 /* ExperiementsPreferencePane.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8CBDB8A27AE02FF00B22292 /* ExperiementsPreferencePane.swift */; }; E8D0296F284B029800647641 /* BottomStatusBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D0296E284B029800647641 /* BottomStatusBar.swift */; }; @@ -115,7 +116,9 @@ 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 */; }; + E8F44A1E296B4CD7002D6592 /* Path in Frameworks */ = {isa = PBXBuildFile; productRef = E8F44A1D296B4CD7002D6592 /* Path */; }; E8F81FC4282D8A17006CBD0F /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = E8F81FC3282D8A17006CBD0F /* Sparkle */; }; + E8FD5727291EE4AC001E004C /* AsyncNetworkService in Frameworks */ = {isa = PBXBuildFile; productRef = E8FD5726291EE4AC001E004C /* AsyncNetworkService */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -196,7 +199,6 @@ CA25192925A9644800F08414 /* XcodeInstallState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodeInstallState.swift; sourceTree = ""; }; CA378F982466567600A58CE0 /* AppState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppState.swift; sourceTree = ""; }; CA39711824495F0E00AFFB77 /* AppStoreButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppStoreButtonStyle.swift; sourceTree = ""; }; - CA42DD6D25AEA8B200BC0B0C /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; }; CA42DD7225AEB04300BC0B0C /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; }; CA44901E2463AD34003D8213 /* Tag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tag.swift; sourceTree = ""; }; CA452BAF259FD9770072DFA4 /* ProgressIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressIndicator.swift; sourceTree = ""; }; @@ -297,11 +299,14 @@ CAFFFEEE259CEAC400903F81 /* RingProgressViewStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RingProgressViewStyle.swift; sourceTree = ""; }; E2AFDCCA28F024D000864ADD /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; E81D7E9F2805250100A205FC /* Collection+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+.swift"; sourceTree = ""; }; + E856BB73291EDD3D00DC438B /* XcodesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = XcodesKit; path = Xcodes/XcodesKit; sourceTree = ""; }; E872EE4F2808D4F100D3DD8B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; E87AB3C42939B65E00D72F43 /* Hardware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hardware.swift; sourceTree = ""; }; E87DD6EA25D053FA00D86808 /* Progress+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Progress+.swift"; sourceTree = ""; }; E89342F925EDCC17007CF557 /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = ""; }; E8977EA225C11E1500835F80 /* PreferencesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesView.swift; sourceTree = ""; }; + E8B20CBE2A2EDEC20057D816 /* SDKs+Xcode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SDKs+Xcode.swift"; sourceTree = ""; }; + E8C0EB1B291EF9A10081528A /* AppState+Runtimes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppState+Runtimes.swift"; sourceTree = ""; }; E8CBDB8627ADD92000B22292 /* unxip */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = unxip; sourceTree = ""; }; E8CBDB8A27AE02FF00B22292 /* ExperiementsPreferencePane.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExperiementsPreferencePane.swift; sourceTree = ""; }; E8D0296E284B029800647641 /* BottomStatusBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomStatusBar.swift; sourceTree = ""; }; @@ -328,9 +333,11 @@ CA9FF86D25951C6E00E47BAF /* XCModel in Frameworks */, CABFA9F82592F0F900380FEE /* KeychainAccess in Frameworks */, CAA858CD25A3D8BC00ACF8C0 /* ErrorHandling in Frameworks */, + E8C0EB1A291EF43E0081528A /* XcodesKit in Frameworks */, + E8FD5727291EE4AC001E004C /* AsyncNetworkService in Frameworks */, CAA1CB2D255A5262003FD669 /* AppleAPI in Frameworks */, - CABFA9DF2592F07A00380FEE /* Path in Frameworks */, CABFA9EE2592F0CC00380FEE /* SwiftSoup in Frameworks */, + E8F44A1E296B4CD7002D6592 /* Path in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -452,6 +459,7 @@ isa = PBXGroup; children = ( CA378F982466567600A58CE0 /* AppState.swift */, + E8C0EB1B291EF9A10081528A /* AppState+Runtimes.swift */, CAE424B3259A764700B8B246 /* AppState+Install.swift */, CABFA9A72592EEE900380FEE /* AppState+Update.swift */, CAA8589A25A2B83000ACF8C0 /* Aria2CError.swift */, @@ -473,7 +481,6 @@ CAC281D9259F985100B8AB0B /* InstallationStep.swift */, CA9FF8862595607900E47BAF /* InstalledXcode.swift */, CAA8587B25A2B37900ACF8C0 /* IsTesting.swift */, - CA42DD6D25AEA8B200BC0B0C /* Logger.swift */, E89342F925EDCC17007CF557 /* NotificationManager.swift */, CAE4248B259A68B800B8B246 /* Optional+IsNotNil.swift */, CABFA9AE2592EEE900380FEE /* Path+.swift */, @@ -492,6 +499,7 @@ E81D7E9F2805250100A205FC /* Collection+.swift */, E8D655BF288DD04700A139C2 /* SelectedActionType.swift */, E87AB3C42939B65E00D72F43 /* Hardware.swift */, + E8B20CBE2A2EDEC20057D816 /* SDKs+Xcode.swift */, ); path = Backend; sourceTree = ""; @@ -532,6 +540,7 @@ CAD2E7952449574E00113D76 = { isa = PBXGroup; children = ( + E856BB73291EDD3D00DC438B /* XcodesKit */, CA8FB5F8256E0F9400469DA5 /* README.md */, CABFA9D42592EF6300380FEE /* DECISIONS.md */, CABFA9A02592EAF500380FEE /* R&PLogo.png */, @@ -656,7 +665,6 @@ name = Xcodes; packageProductDependencies = ( CAA1CB2C255A5262003FD669 /* AppleAPI */, - CABFA9DE2592F07A00380FEE /* Path */, CABFA9E32592F08E00380FEE /* Version */, CABFA9ED2592F0CC00380FEE /* SwiftSoup */, CABFA9F72592F0F900380FEE /* KeychainAccess */, @@ -664,6 +672,9 @@ CA9FF86C25951C6E00E47BAF /* XCModel */, CAA858CC25A3D8BC00ACF8C0 /* ErrorHandling */, E8F81FC3282D8A17006CBD0F /* Sparkle */, + E8FD5726291EE4AC001E004C /* AsyncNetworkService */, + E8C0EB19291EF43E0081528A /* XcodesKit */, + E8F44A1D296B4CD7002D6592 /* Path */, ); productName = XcodesMac; productReference = CAD2E79E2449574E00113D76 /* Xcodes.app */; @@ -737,7 +748,6 @@ ); mainGroup = CAD2E7952449574E00113D76; packageReferences = ( - CABFA9DD2592F07A00380FEE /* XCRemoteSwiftPackageReference "Path" */, CABFA9E22592F08E00380FEE /* XCRemoteSwiftPackageReference "Version" */, CABFA9EC2592F0CC00380FEE /* XCRemoteSwiftPackageReference "SwiftSoup" */, CABFA9F62592F0F900380FEE /* XCRemoteSwiftPackageReference "KeychainAccess" */, @@ -746,6 +756,8 @@ CAA858CB25A3D8BC00ACF8C0 /* XCRemoteSwiftPackageReference "ErrorHandling" */, CAC28186259EE27200B8AB0B /* XCRemoteSwiftPackageReference "CombineExpectations" */, E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */, + E8FD5725291EE4AC001E004C /* XCRemoteSwiftPackageReference "AsyncHTTPNetworkService" */, + E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */, ); productRefGroup = CAD2E79F2449574E00113D76 /* Products */; projectDirPath = ""; @@ -854,7 +866,6 @@ 36741BFF291E50F500A85AAE /* FileError.swift in Sources */, CA9FF8872595607900E47BAF /* InstalledXcode.swift in Sources */, 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */, - CA42DD6E25AEA8B200BC0B0C /* Logger.swift in Sources */, CA61A6E0259835580008926E /* Xcode.swift in Sources */, CAE4247F259A666100B8B246 /* MainWindow.swift in Sources */, CA452BB0259FD9770072DFA4 /* ProgressIndicator.swift in Sources */, @@ -871,6 +882,7 @@ E8DA461125FAF7FB002E85EF /* NotificationsView.swift in Sources */, CAA1CB35255A5AD5003FD669 /* SignInCredentialsView.swift in Sources */, E81D7EA02805250100A205FC /* Collection+.swift in Sources */, + E8B20CBF2A2EDEC20057D816 /* SDKs+Xcode.swift in Sources */, CA9FF877259528CC00E47BAF /* Version+XcodeReleases.swift in Sources */, CABFAA2D2592FBFC00380FEE /* Configure.swift in Sources */, CA73510D257BFCEF00EA9CF8 /* NSAttributedString+.swift in Sources */, @@ -894,6 +906,7 @@ CABFA9C92592EEEA00380FEE /* URLRequest+Apple.swift in Sources */, CABFAA432593104F00380FEE /* AboutView.swift in Sources */, E8D0296F284B029800647641 /* BottomStatusBar.swift in Sources */, + E8C0EB1C291EF9A10081528A /* AppState+Runtimes.swift in Sources */, E8E98A9025D8631800EC89A0 /* InstallationStepRowView.swift in Sources */, CABFA9CC2592EEEA00380FEE /* Path+.swift in Sources */, CAD2E7A22449574E00113D76 /* XcodesApp.swift in Sources */, @@ -1416,14 +1429,6 @@ minimumVersion = 0.1.0; }; }; - CABFA9DD2592F07A00380FEE /* XCRemoteSwiftPackageReference "Path" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/mxcl/Path.swift"; - requirement = { - kind = upToNextMinorVersion; - minimumVersion = 0.16.0; - }; - }; CABFA9E22592F08E00380FEE /* XCRemoteSwiftPackageReference "Version" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/mxcl/Version"; @@ -1464,6 +1469,14 @@ minimumVersion = 0.6.0; }; }; + E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/mxcl/Path.swift"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sparkle-project/Sparkle"; @@ -1472,6 +1485,14 @@ minimumVersion = 2.0.0; }; }; + E8FD5725291EE4AC001E004C /* XCRemoteSwiftPackageReference "AsyncHTTPNetworkService" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/RobotsAndPencils/AsyncHTTPNetworkService"; + requirement = { + branch = main; + kind = branch; + }; + }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ @@ -1489,11 +1510,6 @@ package = CAA858CB25A3D8BC00ACF8C0 /* XCRemoteSwiftPackageReference "ErrorHandling" */; productName = ErrorHandling; }; - CABFA9DE2592F07A00380FEE /* Path */ = { - isa = XCSwiftPackageProductDependency; - package = CABFA9DD2592F07A00380FEE /* XCRemoteSwiftPackageReference "Path" */; - productName = Path; - }; CABFA9E32592F08E00380FEE /* Version */ = { isa = XCSwiftPackageProductDependency; package = CABFA9E22592F08E00380FEE /* XCRemoteSwiftPackageReference "Version" */; @@ -1519,11 +1535,25 @@ package = CAC28186259EE27200B8AB0B /* XCRemoteSwiftPackageReference "CombineExpectations" */; productName = CombineExpectations; }; + E8C0EB19291EF43E0081528A /* XcodesKit */ = { + isa = XCSwiftPackageProductDependency; + productName = XcodesKit; + }; + E8F44A1D296B4CD7002D6592 /* Path */ = { + isa = XCSwiftPackageProductDependency; + package = E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */; + productName = Path; + }; E8F81FC3282D8A17006CBD0F /* Sparkle */ = { isa = XCSwiftPackageProductDependency; package = E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */; productName = Sparkle; }; + E8FD5726291EE4AC001E004C /* AsyncNetworkService */ = { + isa = XCSwiftPackageProductDependency; + package = E8FD5725291EE4AC001E004C /* XCRemoteSwiftPackageReference "AsyncHTTPNetworkService" */; + productName = AsyncNetworkService; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = CAD2E7962449574E00113D76 /* Project object */; diff --git a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 58f4e08..abfd4fe 100644 --- a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,6 +1,15 @@ { "object": { "pins": [ + { + "package": "AsyncNetworkService", + "repositoryURL": "https://github.com/RobotsAndPencils/AsyncHTTPNetworkService", + "state": { + "branch": "main", + "revision": "97770856c4e429f880d4b4dd68cfaf286dc00c30", + "version": null + } + }, { "package": "CombineExpectations", "repositoryURL": "https://github.com/groue/CombineExpectations", @@ -51,8 +60,8 @@ "repositoryURL": "https://github.com/mxcl/Path.swift", "state": { "branch": null, - "revision": "dac007e907a4f4c565cfdc55a9ce148a761a11d5", - "version": "0.16.3" + "revision": "9c6f807b0a76be0e27aecc908bc6f173400d839e", + "version": "1.4.0" } }, { diff --git a/Xcodes/Backend/AppState+Install.swift b/Xcodes/Backend/AppState+Install.swift index ccf637d..a889e69 100644 --- a/Xcodes/Backend/AppState+Install.swift +++ b/Xcodes/Backend/AppState+Install.swift @@ -5,6 +5,7 @@ import AppleAPI import Version import LegibleError import os.log +import XcodesKit /// Downloads and installs Xcodes extension AppState { diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift new file mode 100644 index 0000000..a07f798 --- /dev/null +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -0,0 +1,32 @@ +import Foundation +import XcodesKit +import OSLog + +extension AppState { + func updateDownloadableRuntimes() { + Task { + do { + let runtimes = try await self.runtimeService.downloadableRuntimes().downloadables + DispatchQueue.main.async { + self.downloadableRuntimes = runtimes + } + try? cacheDownloadableRuntimes(runtimes) + } catch { + Logger.appState.error("Error downloading runtimes: \(error.localizedDescription)") + } + } + } + + func updateInstalledRuntimes() { + Task { + do { + let runtimes = try await self.runtimeService.localInstalledRuntimes() + DispatchQueue.main.async { + self.installedRuntimes = runtimes + } + } catch { + Logger.appState.error("Error loading installed runtimes: \(error.localizedDescription)") + } + } + } +} diff --git a/Xcodes/Backend/AppState+Update.swift b/Xcodes/Backend/AppState+Update.swift index 8dad172..90f531f 100644 --- a/Xcodes/Backend/AppState+Update.swift +++ b/Xcodes/Backend/AppState+Update.swift @@ -5,6 +5,7 @@ import Version import SwiftSoup import struct XCModel.Xcode import AppleAPI +import XcodesKit extension AppState { @@ -36,6 +37,8 @@ extension AppState { func update() { guard !isUpdating else { return } + updateDownloadableRuntimes() + updateInstalledRuntimes() updatePublisher = updateSelectedXcodePath() .flatMap { _ in self.updateAvailableXcodes(from: self.dataSource) @@ -125,6 +128,21 @@ extension AppState { withIntermediateDirectories: true) try data.write(to: Path.cacheFile.url) } + + // MARK: Runtime Cache + + func loadCacheDownloadableRuntimes() throws { + guard let data = Current.files.contents(atPath: Path.runtimeCacheFile.string) else { return } + let runtimes = try JSONDecoder().decode([DownloadableRuntime].self, from: data) + self.downloadableRuntimes = runtimes + } + + func cacheDownloadableRuntimes(_ runtimes: [DownloadableRuntime]) throws { + let data = try JSONEncoder().encode(runtimes) + try FileManager.default.createDirectory(at: Path.runtimeCacheFile.url.deletingLastPathComponent(), + withIntermediateDirectories: true) + try data.write(to: Path.runtimeCacheFile.url) + } } extension AppState { diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index ebd44b5..2745ec9 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -7,9 +7,11 @@ import KeychainAccess import Path import Version import os.log +import XcodesKit class AppState: ObservableObject { private let client = AppleAPI.Client() + internal let runtimeService = RuntimeService() // MARK: - Published Properties @@ -99,6 +101,12 @@ class AppState: ObservableObject { Current.defaults.set(showOpenInRosettaOption, forKey: "showOpenInRosettaOption") } } + + // MARK: - Runtimes + + @Published var downloadableRuntimes: [DownloadableRuntime] = [] + @Published var installedRuntimes: [CoreSimulatorRuntimeInfo] = [] + // MARK: - Publisher Cancellables var cancellables = Set() @@ -136,6 +144,7 @@ class AppState: ObservableObject { init() { guard !isTesting else { return } try? loadCachedAvailableXcodes() + try? loadCacheDownloadableRuntimes() checkIfHelperIsInstalled() setupAutoInstallTimer() setupDefaults() @@ -783,6 +792,21 @@ class AppState: ObservableObject { self.allXcodes = newAllXcodes.sorted { $0.version > $1.version } } + // MARK: Runtimes + func getRunTimes(xcode: Xcode) -> [DownloadableRuntime] { + + let builds = xcode.sdks?.allBuilds() + + let runtime = builds?.flatMap { sdkBuild in + downloadableRuntimes.filter { + $0.simulatorVersion.buildUpdate == sdkBuild + } + } + // appState.installedRuntimes has a list of builds that user has installed. + + return runtime ?? [] + } + // MARK: - Private private func uninstallXcode(path: Path) -> AnyPublisher { diff --git a/Xcodes/Backend/Entry+.swift b/Xcodes/Backend/Entry+.swift index c6e8c11..b195fb0 100644 --- a/Xcodes/Backend/Entry+.swift +++ b/Xcodes/Backend/Entry+.swift @@ -1,13 +1,13 @@ import Foundation import Path -extension Entry { - static func isAppBundle(kind: Kind, path: Path) -> Bool { - kind == .directory && +extension Path { + static func isAppBundle(path: Path) -> Bool { + path.isDirectory && path.extension == "app" && !path.isSymlink } - static func infoPlist(kind: Kind, path: Path) -> InfoPlist? { + static func infoPlist(path: Path) -> InfoPlist? { let infoPlistPath = path.join("Contents").join("Info.plist") guard let infoPlistData = try? Data(contentsOf: infoPlistPath.url), @@ -18,10 +18,10 @@ extension Entry { } var isAppBundle: Bool { - Entry.isAppBundle(kind: kind, path: path) + Path.isAppBundle(path: self) } var infoPlist: InfoPlist? { - Entry.infoPlist(kind: kind, path: path) + Path.infoPlist(path: self) } } diff --git a/Xcodes/Backend/Environment.swift b/Xcodes/Backend/Environment.swift index 9a43ec8..2c93381 100644 --- a/Xcodes/Backend/Environment.swift +++ b/Xcodes/Backend/Environment.swift @@ -3,7 +3,7 @@ import Foundation import Path import AppleAPI import KeychainAccess - +import XcodesKit /** Lightweight dependency injection using global mutable state :P @@ -166,7 +166,7 @@ public struct Files { public var installedXcodes = _installedXcodes public func installedXcode(destination: Path) -> InstalledXcode? { - if Entry.isAppBundle(kind: destination.isDirectory ? .directory : .file, path: destination) && Entry.infoPlist(kind: destination.isDirectory ? .directory : .file, path: destination)?.bundleID == "com.apple.dt.Xcode" { + if Path.isAppBundle(path: destination) && Path.infoPlist(path: destination)?.bundleID == "com.apple.dt.Xcode" { return InstalledXcode.init(path: destination) } else { return nil @@ -175,9 +175,9 @@ public struct Files { } private func _installedXcodes(destination: Path) -> [InstalledXcode] { - ((try? destination.ls()) ?? []) + destination.ls() .filter { $0.isAppBundle && $0.infoPlist?.bundleID == "com.apple.dt.Xcode" } - .map { $0.path } + .map { $0 } .compactMap(InstalledXcode.init) } diff --git a/Xcodes/Backend/Logger.swift b/Xcodes/Backend/Logger.swift deleted file mode 100644 index 57540b8..0000000 --- a/Xcodes/Backend/Logger.swift +++ /dev/null @@ -1,10 +0,0 @@ -import Foundation -import os.log - -extension Logger { - private static var subsystem = Bundle.main.bundleIdentifier! - - static let appState = Logger(subsystem: subsystem, category: "appState") - static let helperClient = Logger(subsystem: subsystem, category: "helperClient") - static let subprocess = Logger(subsystem: subsystem, category: "subprocess") -} diff --git a/Xcodes/Backend/Path+.swift b/Xcodes/Backend/Path+.swift index 36e0042..8bcc59c 100644 --- a/Xcodes/Backend/Path+.swift +++ b/Xcodes/Backend/Path+.swift @@ -28,4 +28,8 @@ extension Path { } return path } + + static var runtimeCacheFile: Path { + return xcodesApplicationSupport/"downloadable-runtimes.json" + } } diff --git a/Xcodes/Backend/Process.swift b/Xcodes/Backend/Process.swift index fe96001..77935df 100644 --- a/Xcodes/Backend/Process.swift +++ b/Xcodes/Backend/Process.swift @@ -2,12 +2,11 @@ import Combine import Foundation import os.log import Path - -public typealias ProcessOutput = (status: Int32, out: String, err: String) +import XcodesKit extension Process { @discardableResult - static func run(_ executable: Path, workingDirectory: URL? = nil, input: String? = nil, _ arguments: String...) -> AnyPublisher { + static func run(_ executable: any Pathish, workingDirectory: URL? = nil, input: String? = nil, _ arguments: String...) -> AnyPublisher { return run(executable.url, workingDirectory: workingDirectory, input: input, arguments) } @@ -67,9 +66,3 @@ extension Process { .eraseToAnyPublisher() } } - -struct ProcessExecutionError: Error { - let process: Process - let standardOutput: String - let standardError: String -} diff --git a/Xcodes/Backend/SDKs+Xcode.swift b/Xcodes/Backend/SDKs+Xcode.swift new file mode 100644 index 0000000..9aeca4a --- /dev/null +++ b/Xcodes/Backend/SDKs+Xcode.swift @@ -0,0 +1,32 @@ +// +// SDKs+Xcode.swift +// Xcodes +// +// Created by Matt Kiazyk on 2023-06-05. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import Foundation +import struct XCModel.SDKs + +extension SDKs { + /// Loops through all SDK's and returns an array of buildNumbers (to be used to correlate runtimes) + func allBuilds() -> [String] { + var buildNumbers: [String] = [] + + if let iOS = self.iOS?.compactMap({ $0.build }) { + buildNumbers += iOS + } + if let tvOS = self.tvOS?.compactMap({ $0.build }) { + buildNumbers += tvOS + } + if let macOS = self.macOS?.compactMap({ $0.build }) { + buildNumbers += macOS + } + if let watchOS = self.watchOS?.compactMap({ $0.build }) { + buildNumbers += watchOS + } + + return buildNumbers + } +} diff --git a/Xcodes/Backend/Xcode.swift b/Xcodes/Backend/Xcode.swift index 603e35d..4003ac2 100644 --- a/Xcodes/Backend/Xcode.swift +++ b/Xcodes/Backend/Xcode.swift @@ -67,4 +67,5 @@ struct Xcode: Identifiable, CustomStringConvertible { return nil } } + } diff --git a/Xcodes/Backend/XcodeCommands.swift b/Xcodes/Backend/XcodeCommands.swift index 76e9924..0f74a92 100644 --- a/Xcodes/Backend/XcodeCommands.swift +++ b/Xcodes/Backend/XcodeCommands.swift @@ -1,4 +1,5 @@ import SwiftUI +import XcodesKit // MARK: - CommandMenu @@ -207,6 +208,23 @@ struct CreateSymbolicLinkButton: View { } } +struct DownloadRuntimeButton: View { + @EnvironmentObject var appState: AppState + let runtime: DownloadableRuntime? + + var body: some View { + Button(action: install) { + Text("Install") + .help("Install") + } + } + + private func install() { + guard let runtime = runtime else { return } + // appState.checkMinVersionAndInstall(id: xcode.id) + } +} + struct CreateSymbolicBetaLinkButton: View { @EnvironmentObject var appState: AppState let xcode: Xcode? diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 88195da..9b616a6 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -54,6 +54,7 @@ struct InfoPane: View { Divider() Group{ + runtimes(for: xcode) releaseNotes(for: xcode) releaseDate(for: xcode) identicalBuilds(for: xcode) @@ -245,6 +246,29 @@ struct InfoPane: View { .frame(maxWidth: .infinity, maxHeight: .infinity) .padding() } + + @ViewBuilder + private func runtimes(for xcode: Xcode) -> some View { + let runtimes = appState.getRunTimes(xcode: xcode) + + VStack(alignment: .leading) { + Text("Platforms") + .font(.headline) + .frame(maxWidth: .infinity, alignment: .leading) + + ForEach(runtimes, id: \.simulatorVersion.buildUpdate) { runtime in + HStack { + Text("\(runtime.visibleIdentifier)") + .font(.subheadline) + Spacer() + Text(runtime.downloadFileSizeString) + .font(.subheadline) + DownloadRuntimeButton(runtime: runtime) + } + + } + } + } } struct InfoPane_Previews: PreviewProvider { @@ -329,6 +353,7 @@ struct InfoPane_Previews: PreviewProvider { ), downloadFileSize: 242342424) ] + }) .previewDisplayName("Populated, Uninstalled") diff --git a/Xcodes/Resources/Licenses.rtf b/Xcodes/Resources/Licenses.rtf index 93bc0ff..9d4ab70 100644 --- a/Xcodes/Resources/Licenses.rtf +++ b/Xcodes/Resources/Licenses.rtf @@ -1,10 +1,37 @@ -{\rtf1\ansi\ansicpg1252\cocoartf2639 +{\rtf1\ansi\ansicpg1252\cocoartf2709 \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fnil\fcharset0 .SFNS-Regular;} {\colortbl;\red255\green255\blue255;} {\*\expandedcolortbl;;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\f0\fs34 \cf0 SwiftSoup\ +\f0\fs34 \cf0 AsyncHTTPNetworkService\ +\ + +\fs26 MIT License\ +\ +Copyright (c) 2022 Robots and Pencils\ +\ +Permission is hereby granted, free of charge, to any person obtaining a copy\ +of this software and associated documentation files (the "Software"), to deal\ +in the Software without restriction, including without limitation the rights\ +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ +copies of the Software, and to permit persons to whom the Software is\ +furnished to do so, subject to the following conditions:\ +\ +The above copyright notice and this permission notice shall be included in all\ +copies or substantial portions of the Software.\ +\ +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\ +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\ +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\ +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\ +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\ +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\ +SOFTWARE.\ +\ +\ + +\fs34 SwiftSoup\ \ \fs26 MIT License\ diff --git a/Xcodes/Resources/en.lproj/Localizable.strings b/Xcodes/Resources/en.lproj/Localizable.strings index 59a8676..2ae234e 100644 --- a/Xcodes/Resources/en.lproj/Localizable.strings +++ b/Xcodes/Resources/en.lproj/Localizable.strings @@ -40,6 +40,7 @@ "Compilers" = "Compilers"; "DownloadSize" = "Download Size"; "NoXcodeSelected" = "No Xcode Selected"; +"Platforms" = "Platforms"; // Installation Steps // When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" diff --git a/Xcodes/XcodesKit/.gitignore b/Xcodes/XcodesKit/.gitignore new file mode 100644 index 0000000..3b29812 --- /dev/null +++ b/Xcodes/XcodesKit/.gitignore @@ -0,0 +1,9 @@ +.DS_Store +/.build +/Packages +/*.xcodeproj +xcuserdata/ +DerivedData/ +.swiftpm/config/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/Xcodes/XcodesKit/Package.swift b/Xcodes/XcodesKit/Package.swift new file mode 100644 index 0000000..81447ab --- /dev/null +++ b/Xcodes/XcodesKit/Package.swift @@ -0,0 +1,33 @@ +// swift-tools-version: 5.7 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "XcodesKit", + platforms: [.macOS(.v11)], + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "XcodesKit", + targets: ["XcodesKit"]), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/RobotsAndPencils/AsyncHTTPNetworkService", branch: "main"), + .package(url: "https://github.com/mxcl/Path.swift", from: "1.0.0"), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "XcodesKit", + dependencies: [ + .product(name: "AsyncNetworkService", package: "AsyncHTTPNetworkService"), + .product(name: "Path", package: "Path.swift") + ]), + .testTarget( + name: "XcodesKitTests", + dependencies: ["XcodesKit"]), + ] +) diff --git a/Xcodes/XcodesKit/README.md b/Xcodes/XcodesKit/README.md new file mode 100644 index 0000000..5312c49 --- /dev/null +++ b/Xcodes/XcodesKit/README.md @@ -0,0 +1,3 @@ +# XcodesKit + +A description of this package. diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Environment.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Environment.swift new file mode 100644 index 0000000..a988ce9 --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Environment.swift @@ -0,0 +1,7 @@ +import Foundation + +public struct Environment { + public var shell = Shell() +} + +public var Current = Environment() diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Extensions/Foundation.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Extensions/Foundation.swift new file mode 100644 index 0000000..02b1e02 --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Extensions/Foundation.swift @@ -0,0 +1,12 @@ +import Foundation + +extension NSRegularExpression { + func firstString(in string: String, options: NSRegularExpression.MatchingOptions = []) -> String? { + let range = NSRange(location: 0, length: string.utf16.count) + guard let firstMatch = firstMatch(in: string, options: options, range: range), + let resultRange = Range(firstMatch.range, in: string) else { + return nil + } + return String(string[resultRange]) + } +} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Extensions/Logger.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Extensions/Logger.swift new file mode 100644 index 0000000..222e908 --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Extensions/Logger.swift @@ -0,0 +1,10 @@ +import Foundation +import os.log + +extension Logger { + private static var subsystem = Bundle.main.bundleIdentifier! + + static public let appState = Logger(subsystem: subsystem, category: "appState") + static public let helperClient = Logger(subsystem: subsystem, category: "helperClient") + static public let subprocess = Logger(subsystem: subsystem, category: "subprocess") +} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallState.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallState.swift new file mode 100644 index 0000000..8aa6b1e --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallState.swift @@ -0,0 +1,34 @@ +// +// InstallState.swift +// +// +// Created by Matt Kiazyk on 2023-06-06. +// + +import Foundation +import Path + +public enum InstallState: Equatable { + case notInstalled + case installing(InstallationStep) + case installed(Path) + + var notInstalled: Bool { + switch self { + case .notInstalled: return true + default: return false + } + } + var installing: Bool { + switch self { + case .installing: return true + default: return false + } + } + var installed: Bool { + switch self { + case .installed: return true + default: return false + } + } +} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallationStep.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallationStep.swift new file mode 100644 index 0000000..fa54998 --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallationStep.swift @@ -0,0 +1,60 @@ +// +// InstallationStep.swift +// +// +// Created by Matt Kiazyk on 2023-06-06. +// + +import Foundation + +// A numbered step +public enum InstallationStep: Equatable, CustomStringConvertible { + case downloading(progress: Progress) + case unarchiving + case moving(destination: String) + case trashingArchive + case checkingSecurity + case finishing + + public var description: String { + "(\(stepNumber)/\(stepCount)) \(message)" + } + + var message: String { + switch self { + case .downloading: + return localizeString("Downloading") + case .unarchiving: + return localizeString("Unarchiving") + case .moving(let destination): + return String(format: localizeString("Moving"), destination) + case .trashingArchive: + return localizeString("TrashingArchive") + case .checkingSecurity: + return localizeString("CheckingSecurity") + case .finishing: + return localizeString("Finishing") + } + } + + var stepNumber: Int { + switch self { + case .downloading: return 1 + case .unarchiving: return 2 + case .moving: return 3 + case .trashingArchive: return 4 + case .checkingSecurity: return 5 + case .finishing: return 6 + } + } + + var stepCount: Int { 6 } +} +func localizeString(_ key: String, comment: String = "") -> String { + if #available(macOS 12, *) { + return String(localized: String.LocalizationValue(key)) + } else { + return NSLocalizedString(key, comment: comment) + } + +} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift new file mode 100644 index 0000000..69dd9da --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift @@ -0,0 +1,21 @@ +// +// CoreSimulatorImage.swift +// +// +// Created by Matt Kiazyk on 2023-01-08. +// + +import Foundation + +public struct CoreSimulatorPlist: Decodable { + public let images: [CoreSimulatorImage] +} + +public struct CoreSimulatorImage: Decodable { + public let uuid: String + public let runtimeInfo: CoreSimulatorRuntimeInfo +} + +public struct CoreSimulatorRuntimeInfo: Decodable { + public let build: String +} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift new file mode 100644 index 0000000..0e57b9a --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift @@ -0,0 +1,161 @@ +import Foundation + +public struct DownloadableRuntimesResponse: Codable { + public let sdkToSimulatorMappings: [SDKToSimulatorMapping] + public let sdkToSeedMappings: [SDKToSeedMapping] + public let refreshInterval: Int + public let downloadables: [DownloadableRuntime] + public let version: String +} + +public struct DownloadableRuntime: Codable { + public let category: Category + public let simulatorVersion: SimulatorVersion + public let source: String + public let dictionaryVersion: Int + public let contentType: ContentType + public let platform: Platform + public let identifier: String + public let version: String + public let fileSize: Int + public let hostRequirements: HostRequirements? + public let name: String + public let authentication: Authentication? + + // dynamically updated - not decoded + public var installState: InstallState = .notInstalled + + enum CodingKeys: CodingKey { + case category + case simulatorVersion + case source + case dictionaryVersion + case contentType + case platform + case identifier + case version + case fileSize + case hostRequirements + case name + case authentication + } + + var betaNumber: Int? { + 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)! + } + + var completeVersion: String { + makeVersion(for: simulatorVersion.version, betaNumber: betaNumber) + } + + public var visibleIdentifier: String { + return platform.shortName + " " + completeVersion + } + + func makeVersion(for osVersion: String, betaNumber: Int?) -> String { + let betaSuffix = betaNumber.flatMap { "-beta\($0)" } ?? "" + return osVersion + betaSuffix + } + + public var downloadFileSizeString: String { + return ByteCountFormatter.string(fromByteCount: Int64(fileSize), countStyle: .file) + } +} + +public struct SDKToSeedMapping: Codable { + public let buildUpdate: String + public let platform: DownloadableRuntime.Platform + public let seedNumber: Int +} + +public struct SDKToSimulatorMapping: Codable { + public let sdkBuildUpdate: String + public let simulatorBuildUpdate: String + public let sdkIdentifier: String +} + +extension DownloadableRuntime { + public struct SimulatorVersion: Codable { + public let buildUpdate: String + public let version: String + } + + public struct HostRequirements: Codable { + let maxHostVersion: String? + let excludedHostArchitectures: [String]? + let minHostVersion: String? + let minXcodeVersion: String? + } + + public enum Authentication: String, Codable { + case virtual = "virtual" + } + + public enum Category: String, Codable { + case simulator = "simulator" + } + + public enum ContentType: String, Codable { + case diskImage = "diskImage" + case package = "package" + } + + public enum Platform: String, Codable { + case iOS = "com.apple.platform.iphoneos" + case macOS = "com.apple.platform.macosx" + case watchOS = "com.apple.platform.watchos" + case tvOS = "com.apple.platform.appletvos" + + var order: Int { + switch self { + case .iOS: return 1 + case .macOS: return 2 + case .watchOS: return 3 + case .tvOS: return 4 + } + } + + var shortName: String { + switch self { + case .iOS: return "iOS" + case .macOS: return "macOS" + case .watchOS: return "watchOS" + case .tvOS: return "tvOS" + } + } + } +} + +public struct InstalledRuntime: Decodable { + let build: String + let deletable: Bool + let identifier: UUID + let kind: Kind + let lastUsedAt: Date? + let path: String + let platformIdentifier: Platform + let runtimeBundlePath: String + let runtimeIdentifier: String + let signatureState: String + let state: String + let version: String + let sizeBytes: Int? +} + +extension InstalledRuntime { + enum Kind: String, Decodable { + case diskImage = "Disk Image" + case bundled = "Bundled with Xcode" + case legacyDownload = "Legacy Download" + } + + enum Platform: String, Decodable { + case tvOS = "com.apple.platform.appletvsimulator" + case iOS = "com.apple.platform.iphonesimulator" + case watchOS = "com.apple.platform.watchsimulator" + } +} + diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift new file mode 100644 index 0000000..429fc48 --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift @@ -0,0 +1,55 @@ +import Foundation +import AsyncNetworkService +import Path + +extension URL { + static let downloadableRuntimes = URL(string: "https://devimages-cdn.apple.com/downloads/xcode/simulators/index2.dvtdownloadableindex")! +} + +public struct RuntimeService { + var networkService: AsyncHTTPNetworkService + + public init() { + networkService = AsyncHTTPNetworkService() + } + + public func downloadableRuntimes() async throws -> DownloadableRuntimesResponse { + let urlRequest = URLRequest(url: .downloadableRuntimes) + + // Apple gives a plist for download + let (data, _) = try await networkService.requestData(urlRequest, validators: []) + let decodedResponse = try PropertyListDecoder().decode(DownloadableRuntimesResponse.self, from: data) + + return decodedResponse + } + + public func installedRuntimes() async throws -> [InstalledRuntime] { + // This only uses the Selected Xcode, so we don't know what other SDK's have been installed in previous versions + let output = try await Current.shell.installedRuntimes() + + let decoder = JSONDecoder() + decoder.dateDecodingStrategy = .iso8601 + let outputDictionary = try decoder.decode([String: InstalledRuntime].self, from: output.out.data(using: .utf8)!) + + return outputDictionary.values.sorted { first, second in + return first.identifier.uuidString.compare(second.identifier.uuidString, options: .numeric) == .orderedAscending + } + } + + /// Loops through `/Library/Developer/CoreSimulator/images/images.plist` which contains a list of downloaded Simuator Runtimes + /// This is different then using `simctl` (`installedRuntimes()`) which only returns the installed runtimes for the selected xcode version. + public func localInstalledRuntimes() async throws -> [CoreSimulatorRuntimeInfo] { + guard let path = Path("/Library/Developer/CoreSimulator/images/images.plist") else { throw "Could not find images.plist for CoreSimulators" } + guard let infoPlistData = FileManager.default.contents(atPath: path.string) else { throw "Could not get data from \(path.string)" } + + do { + let infoPlist: CoreSimulatorPlist = try PropertyListDecoder().decode(CoreSimulatorPlist.self, from: infoPlistData) + return infoPlist.images.map { $0.runtimeInfo } + } catch { + throw error + } + } + +} + +extension String: Error {} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Process.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Process.swift new file mode 100644 index 0000000..b83a079 --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Process.swift @@ -0,0 +1,66 @@ +import Foundation +import Path +import os.log + +public typealias ProcessOutput = (status: Int32, out: String, err: String) + +extension Process { + static func run(_ executable: Path, workingDirectory: URL? = nil, input: String? = nil, _ arguments: String...) async throws -> ProcessOutput { + return try await run(executable.url, workingDirectory: workingDirectory, input: input, arguments) + } + + static func run(_ executable: URL, workingDirectory: URL? = nil, input: String? = nil, _ arguments: [String]) async throws -> ProcessOutput { + + let process = Process() + process.currentDirectoryURL = workingDirectory ?? executable.deletingLastPathComponent() + process.executableURL = executable + process.arguments = arguments + + let (stdout, stderr) = (Pipe(), Pipe()) + process.standardOutput = stdout + process.standardError = stderr + + if let input = input { + let inputPipe = Pipe() + process.standardInput = inputPipe.fileHandleForReading + inputPipe.fileHandleForWriting.write(Data(input.utf8)) + inputPipe.fileHandleForWriting.closeFile() + } + + do { + Logger.subprocess.info("Process.run executable: \(executable), input: \(input ?? ""), arguments: \(arguments.joined(separator: ", "))") + + try process.run() + process.waitUntilExit() + + let output = String(data: stdout.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) ?? "" + let error = String(data: stderr.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) ?? "" + + Logger.subprocess.info("Process.run output: \(output)") + if !error.isEmpty { + Logger.subprocess.error("Process.run error: \(error)") + } + + guard process.terminationReason == .exit, process.terminationStatus == 0 else { + throw ProcessExecutionError(process: process, standardOutput: output, standardError: error) + } + + return (process.terminationStatus, output, error) + } catch { + throw error + } + } + +} + +public struct ProcessExecutionError: Error { + public let process: Process + public let standardOutput: String + public let standardError: String + + public init(process: Process, standardOutput: String, standardError: String) { + self.process = process + self.standardOutput = standardOutput + self.standardError = standardError + } +} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Shell.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Shell.swift new file mode 100644 index 0000000..520ad0a --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Shell.swift @@ -0,0 +1,8 @@ +import Foundation +import Path + +public struct Shell { + public var installedRuntimes: () async throws -> ProcessOutput = { + try await Process.run(Path.root.usr.bin.join("xcrun"), "simctl", "runtime", "list", "-j") + } +} diff --git a/Xcodes/XcodesKit/Tests/XcodesKitTests/XcodesKitTests.swift b/Xcodes/XcodesKit/Tests/XcodesKitTests/XcodesKitTests.swift new file mode 100644 index 0000000..98f0c96 --- /dev/null +++ b/Xcodes/XcodesKit/Tests/XcodesKitTests/XcodesKitTests.swift @@ -0,0 +1,11 @@ +import XCTest +@testable import XcodesKit + +final class XcodesKitTests: XCTestCase { + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct + // results. + XCTAssertEqual(XcodesKit().text, "Hello, World!") + } +} From a556d95ee98f49d7d4149d31be9c7ba5a2d63673 Mon Sep 17 00:00:00 2001 From: Anton Quietzsch Date: Fri, 9 Jun 2023 10:53:52 +0200 Subject: [PATCH 05/86] Fix typos in DE localization --- Xcodes/Resources/de.lproj/Localizable.strings | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Xcodes/Resources/de.lproj/Localizable.strings b/Xcodes/Resources/de.lproj/Localizable.strings index e40d7cc..606aa7c 100644 --- a/Xcodes/Resources/de.lproj/Localizable.strings +++ b/Xcodes/Resources/de.lproj/Localizable.strings @@ -76,7 +76,7 @@ // Download Preference Pane "Downloads" = "Downloads"; "DataSource" = "Datenquelle"; -"DataSourceDescription" = "Die Apple-Datenquelle liest die Apple Developer-Website aus. Sie zeigt immer die neuesten Releases an, die verfügbar sind, ist allerdings etwas instabiler.\n\nXcode Releases ist eine inoffizielle Liste von Xcode-Veröffentlichungen. Sie wird als formatierte Daten bereitsgestellt, enthält Extrainformationen die nicht ohne weiteres von Apple erhältlich sind und ist mit höherer Wahrscheinlichkeit weiter verfügbar, sollte Apple seine Entwickler-Website neu gestalten."; +"DataSourceDescription" = "Die Apple-Datenquelle liest die Apple Developer-Website aus. Sie zeigt immer die neuesten Releases an, die verfügbar sind, ist allerdings etwas instabiler.\n\nXcode Releases ist eine inoffizielle Liste von Xcode-Veröffentlichungen. Sie wird als formatierte Daten bereitgestellt, enthält Extrainformationen die nicht ohne weiteres von Apple erhältlich sind und ist mit höherer Wahrscheinlichkeit weiter verfügbar, sollte Apple seine Entwickler-Website neu gestalten."; "Downloader" = "Downloader"; "DownloaderDescription" = "aria2 verwendet bis zu 16 Verbindungen, um Xcode 3-5x schneller als URLSession herunterzuladen. Es ist zusammen mit seinem Quellcode in Xcode enthalten, um seiner GPLv2-Lizenz nachzukommen.\n\nURLSession ist Apples Standard-API für URL-Requests."; @@ -163,7 +163,7 @@ "Alert.Uninstall.Error.Message.FileNotFound" = "Datei \"%@\" konnte nicht gefunden werden."; // Cancel Install -"Alert.CancelInstall.Title" = "Bist du sicher, dass Du die installation von Xcode %@ anhalten möchtest?"; +"Alert.CancelInstall.Title" = "Bist du sicher, dass Du die Installation von Xcode %@ anhalten möchtest?"; "Alert.CancelInstall.Message" = "Jeglicher Fortschritt wird verworfen."; "Alert.CancelInstall.PrimaryButton" = "Installation anhalten"; @@ -173,7 +173,7 @@ "Alert.PrivilegedHelper.Error.Title" = "Installation des Helfers nicht möglich"; // Min MacOS Supported -"Alert.MinSupported.Title" = "Minimalanforderungen nicht erfülltt"; +"Alert.MinSupported.Title" = "Minimalanforderungen nicht erfüllt"; "Alert.MinSupported.Message" = "Xcode %@ erfordert MacOS %@ aber es läuft nur MacOS %@. Möchtest Du es trotzdem installieren?"; // Install From 2de476b10178e3db758f8745cc41c0136305e546 Mon Sep 17 00:00:00 2001 From: Anton Quietzsch Date: Fri, 9 Jun 2023 10:54:29 +0200 Subject: [PATCH 06/86] Add missing localization --- Xcodes/Resources/de.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xcodes/Resources/de.lproj/Localizable.strings b/Xcodes/Resources/de.lproj/Localizable.strings index 606aa7c..51b9da1 100644 --- a/Xcodes/Resources/de.lproj/Localizable.strings +++ b/Xcodes/Resources/de.lproj/Localizable.strings @@ -225,7 +225,7 @@ "Notification.FinishedInstalling" = "Installation beendet"; -"HelperClient.error" = "Unable to communicate with privileged helper."; +"HelperClient.error" = "Kommunikation mit privilegiertem Helfer nicht möglich."; ///++ // Notifications "Notification.NewXcodeVersion.Title" = "Neue Xcode-Versionen"; From fb42bfc013a0fd401470760c8a9f931e70bf2687 Mon Sep 17 00:00:00 2001 From: Anton Quietzsch Date: Fri, 9 Jun 2023 11:03:52 +0200 Subject: [PATCH 07/86] Fix Mac strings --- Xcodes/Resources/de.lproj/Localizable.strings | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Xcodes/Resources/de.lproj/Localizable.strings b/Xcodes/Resources/de.lproj/Localizable.strings index 51b9da1..ae19ecf 100644 --- a/Xcodes/Resources/de.lproj/Localizable.strings +++ b/Xcodes/Resources/de.lproj/Localizable.strings @@ -87,7 +87,7 @@ "Change" = "Ändern"; "Active/Select" = "Aktiv/Auswählen"; "InstallDirectory" = "Installationsverzeichnis"; -"InstallPathDescription" = "Xcodes sucht and installiert in ein einzelnes Verzeichnis. Standard (und empfohlen beizubehalten) ist /Applications. Änderungen am Speicherort von Xcode können dazu führen, dass andere Apps/Dienste aufhören zu funktionieren. "; +"InstallPathDescription" = "Xcodes sucht and installiert in ein einzelnes Verzeichnis. Standard (und empfohlen beizubehalten) ist /Programme. Änderungen am Speicherort von Xcode können dazu führen, dass andere Apps/Dienste aufhören zu funktionieren. "; "OnSelectDoNothing" = "Name beibehalten als Xcode-X.X.X.app"; "OnSelectDoNothingDescription" = "Bei Auswahl wird der Name mit Version beibehalten, z. B. Xcode-13.4.1.app"; @@ -174,7 +174,7 @@ // Min MacOS Supported "Alert.MinSupported.Title" = "Minimalanforderungen nicht erfüllt"; -"Alert.MinSupported.Message" = "Xcode %@ erfordert MacOS %@ aber es läuft nur MacOS %@. Möchtest Du es trotzdem installieren?"; +"Alert.MinSupported.Message" = "Xcode %@ erfordert macOS %@ aber es läuft nur macOS %@. Möchtest Du es trotzdem installieren?"; // Install "Alert.Install.Error.Title" = "Installation von Xcode nicht möglich"; From 581af769480a2a7b07e70fd03597d02e31d04d4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Duarte?= Date: Sun, 11 Jun 2023 10:42:19 +0100 Subject: [PATCH 08/86] Fix typo in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 396f692..092bb4a 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ _If you're looking for a command-line version of Xcodes.app, try [`xcodes`](http ![](screenshot_light.png#gh-light-mode-only) ![](screenshot_dark.png#gh-dark-mode-only) -### :tada: Announcment +### :tada: Announcement XcodesApp is now part of the `XcodesOrg` - [read more here](nextstep.md) From 415d86718cb7d5c1baa11a003e9191e96dd88b81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Jun 2023 11:13:04 +0000 Subject: [PATCH 09/86] Bump ruby/setup-ruby from 1.149.0 to 1.152.0 Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.149.0 to 1.152.0. - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Commits](https://github.com/ruby/setup-ruby/compare/v1.149.0...v1.152.0) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/appcast.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appcast.yml b/.github/workflows/appcast.yml index ce61d3f..55603a3 100644 --- a/.github/workflows/appcast.yml +++ b/.github/workflows/appcast.yml @@ -23,7 +23,7 @@ jobs: ${{ runner.os }}-gems- - name: Setup Ruby, JRuby and TruffleRuby - uses: ruby/setup-ruby@v1.149.0 + uses: ruby/setup-ruby@v1.152.0 with: ruby-version: '2.7' From fc35950885c591cf7e77c026f71c39dd2abc300b Mon Sep 17 00:00:00 2001 From: Kyle Date: Tue, 20 Jun 2023 18:04:31 +0800 Subject: [PATCH 10/86] Add PinCodeTextField autocomplete support --- Xcodes/Frontend/SignIn/PinCodeTextView.swift | 17 +++++++++++++---- Xcodes/Frontend/SignIn/SignIn2FAView.swift | 4 +++- Xcodes/Frontend/SignIn/SignInSMSView.swift | 4 +++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Xcodes/Frontend/SignIn/PinCodeTextView.swift b/Xcodes/Frontend/SignIn/PinCodeTextView.swift index 45465f3..f0b1c2a 100644 --- a/Xcodes/Frontend/SignIn/PinCodeTextView.swift +++ b/Xcodes/Frontend/SignIn/PinCodeTextView.swift @@ -6,10 +6,12 @@ struct PinCodeTextField: NSViewRepresentable { @Binding var code: String let numberOfDigits: Int + let complete: (String) -> Void func makeNSView(context: Context) -> NSViewType { let view = PinCodeTextView(numberOfDigits: numberOfDigits, itemSpacing: 10) - view.codeDidChange = { c in code = c } + view.codeDidChange = { c in code = c } + view.codeDidComplete = { complete($0) } return view } @@ -29,8 +31,9 @@ struct PinCodeTextField_Previews: PreviewProvider { struct PreviewContainer: View { @State private var code = "1234567890" var body: some View { - PinCodeTextField(code: $code, numberOfDigits: 11) - .padding() + PinCodeTextField(code: $code, numberOfDigits: 11) { + print("Input is complete \($0)") + }.padding() } } @@ -52,10 +55,16 @@ class PinCodeTextView: NSControl, NSTextFieldDelegate { handler(String(code.compactMap { $0 })) } updateText() + + if code.compactMap({ $0 }).count == numberOfDigits, + let handler = codeDidComplete { + handler(String(code.compactMap { $0 })) + } } } var codeDidChange: ((String) -> Void)? = nil - + var codeDidComplete: ((String) -> Void)? = nil + private let numberOfDigits: Int private let stackView: NSStackView = .init(frame: .zero) private var characterViews: [PinCodeCharacterTextField] = [] diff --git a/Xcodes/Frontend/SignIn/SignIn2FAView.swift b/Xcodes/Frontend/SignIn/SignIn2FAView.swift index 2e336e4..1095033 100644 --- a/Xcodes/Frontend/SignIn/SignIn2FAView.swift +++ b/Xcodes/Frontend/SignIn/SignIn2FAView.swift @@ -15,7 +15,9 @@ struct SignIn2FAView: View { HStack { Spacer() - PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length) + PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length) { + appState.submitSecurityCode(.device(code: $0), sessionData: sessionData) + } Spacer() } .padding() diff --git a/Xcodes/Frontend/SignIn/SignInSMSView.swift b/Xcodes/Frontend/SignIn/SignInSMSView.swift index 74d7af0..c8a04db 100644 --- a/Xcodes/Frontend/SignIn/SignInSMSView.swift +++ b/Xcodes/Frontend/SignIn/SignInSMSView.swift @@ -15,7 +15,9 @@ struct SignInSMSView: View { HStack { Spacer() - PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length) + PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length) { + appState.submitSecurityCode(.sms(code: $0, phoneNumberId: trustedPhoneNumber.id), sessionData: sessionData) + } Spacer() } .padding() From 73255028533299af13d0702c09e73a9d78d7ed20 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Fri, 23 Jun 2023 14:45:13 -0500 Subject: [PATCH 11/86] more runtime download work --- Xcodes.xcodeproj/project.pbxproj | 14 +- .../xcshareddata/swiftpm/Package.resolved | 4 +- Xcodes/Backend/AppState+Install.swift | 9 ++ Xcodes/Backend/AppState+Runtimes.swift | 124 +++++++++++++++++- Xcodes/Backend/AppState.swift | 33 +++-- Xcodes/Backend/InstallationStep.swift | 90 ++++++------- Xcodes/Backend/SDKs+Xcode.swift | 3 + Xcodes/Backend/XcodeCommands.swift | 2 +- Xcodes/Backend/XcodeInstallState.swift | 1 + Xcodes/Frontend/InfoPane/InfoPane.swift | 28 +++- .../InfoPane/InstallationStepDetailView.swift | 1 + .../XcodeList/InstallationStepRowView.swift | 1 + .../XcodesKit/Models/InstallationStep.swift | 6 +- .../Models/Runtimes/CoreSimulatorImage.swift | 1 + .../XcodesKit/Models/Runtimes/Runtimes.swift | 23 +++- .../XcodesKit/Services/RuntimeService.swift | 6 +- 16 files changed, 269 insertions(+), 77 deletions(-) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 56d06e7..17491bf 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -1054,7 +1054,7 @@ "@executable_path/../Frameworks", ); MARKETING_VERSION = 1.10.0; - PRODUCT_BUNDLE_IDENTIFIER = com.robotsandpencils.XcodesApp; + PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -1286,7 +1286,7 @@ COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 18; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; - DEVELOPMENT_TEAM = PBH8V487HB; + DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = Xcodes/Resources/Info.plist; @@ -1295,7 +1295,7 @@ "@executable_path/../Frameworks", ); MARKETING_VERSION = 1.10.0; - PRODUCT_BUNDLE_IDENTIFIER = com.robotsandpencils.XcodesApp; + PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; SWIFT_VERSION = 5.0; }; @@ -1310,7 +1310,7 @@ COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 18; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; - DEVELOPMENT_TEAM = PBH8V487HB; + DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = Xcodes/Resources/Info.plist; @@ -1319,7 +1319,7 @@ "@executable_path/../Frameworks", ); MARKETING_VERSION = 1.10.0; - PRODUCT_BUNDLE_IDENTIFIER = com.robotsandpencils.XcodesApp; + PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; SWIFT_VERSION = 5.0; }; @@ -1417,8 +1417,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/xcodereleases/data"; requirement = { - kind = revision; - revision = b47228c688b608e34b3b84079ab6052a24c7a981; + 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 abfd4fe..74dc3a7 100644 --- a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -23,8 +23,8 @@ "package": "XcodeReleases", "repositoryURL": "https://github.com/xcodereleases/data", "state": { - "branch": null, - "revision": "b47228c688b608e34b3b84079ab6052a24c7a981", + "branch": "main", + "revision": "a43ad89e536d7a3da525fcc23fb182c37b756ecc", "version": null } }, diff --git a/Xcodes/Backend/AppState+Install.swift b/Xcodes/Backend/AppState+Install.swift index a889e69..70f82d0 100644 --- a/Xcodes/Backend/AppState+Install.swift +++ b/Xcodes/Backend/AppState+Install.swift @@ -466,6 +466,15 @@ extension AppState { let xcode = self.allXcodes[index] Current.notificationManager.scheduleNotification(title: xcode.id.appleDescription, body: step.description, category: .normal) } + }w func setInstallationStep(of runtime: DownloadableRuntime, to step: InstallationStep) { + DispatchQueue.main.async { + + guard let index = self.downloadableRuntimes.firstIndex(where: { $0.identifier == runtime.identifier }) else { return } + self.downloadableRuntimes[index].installState = .installing(step) + + // let xcode = self.allXcodes[index] + // Current.notificationManager.scheduleNotification(title: xcode.id.appleDescription, body: step.description, category: .normal) + } } } diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift index a07f798..2f1c568 100644 --- a/Xcodes/Backend/AppState+Runtimes.swift +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -1,12 +1,27 @@ import Foundation import XcodesKit import OSLog +import Combine +import Path +import AppleAPI extension AppState { func updateDownloadableRuntimes() { Task { do { - let runtimes = try await self.runtimeService.downloadableRuntimes().downloadables + + let downloadableRuntimes = try await self.runtimeService.downloadableRuntimes() + let runtimes = downloadableRuntimes.downloadables.map { runtime in + var updatedRuntime = runtime + + // This loops through and matches up the simulatorVersion to the mappings + let simulatorBuildUpdate = downloadableRuntimes.sdkToSimulatorMappings.first { SDKToSimulatorMapping in + SDKToSimulatorMapping.simulatorBuildUpdate == runtime.simulatorVersion.buildUpdate + } + updatedRuntime.sdkBuildUpdate = simulatorBuildUpdate?.sdkBuildUpdate + return updatedRuntime + } + DispatchQueue.main.async { self.downloadableRuntimes = runtimes } @@ -29,4 +44,111 @@ extension AppState { } } } + + func downloadRuntime(runtime: DownloadableRuntime) { + self.runtimePublishers[runtime.identifier] = downloadRunTimeFull(runtime: runtime) + .receive(on: DispatchQueue.main) + .sink( + receiveCompletion: { [unowned self] completion in + self.runtimePublishers[runtime.identifier] = nil + if case let .failure(error) = completion { +// // Prevent setting the app state error if it is an invalid session, we will present the sign in view instead +// if error as? AuthenticationError != .invalidSession { +// self.error = error +// self.presentedAlert = .generic(title: localizeString("Alert.Install.Error.Title"), message: error.legibleLocalizedDescription) +// } +// if let index = self.allXcodes.firstIndex(where: { $0.id == id }) { +// self.allXcodes[index].installState = .notInstalled +// } + } + }, + receiveValue: { _ in } + ) + } + + func downloadRunTimeFull(runtime: DownloadableRuntime) -> AnyPublisher<(DownloadableRuntime, URL), Error> { + // gets a proper cookie for runtimes + + return validateADCSession(path: runtime.downloadPath) + .flatMap { _ in + // we shouldn't have to be authenticated to download runtimes + let downloader = Downloader(rawValue: UserDefaults.standard.string(forKey: "downloader") ?? "aria2") ?? .aria2 + Logger.appState.info("Downloading \(runtime.visibleIdentifier) with \(downloader)") + + return self.downloadRuntime(for: runtime, downloader: downloader, progressChanged: { [unowned self] progress in + DispatchQueue.main.async { + self.setInstallationStep(of: runtime, to: .downloading(progress: progress)) + } + }) + .map { return (runtime, $0) } + } + .eraseToAnyPublisher() + } + + func downloadRuntime(for runtime: DownloadableRuntime, downloader: Downloader, progressChanged: @escaping (Progress) -> Void) -> AnyPublisher { + // Check to see if the dmg is in the expected path in case it was downloaded but failed to install + + // call https://developerservices2.apple.com/services/download?path=/Developer_Tools/watchOS_10_beta/watchOS_10_beta_Simulator_Runtime.dmg 1st to get cookie + // use runtime.url for final with cookies + + // Check to see if the archive is in the expected path in case it was downloaded but failed to install + let expectedRuntimePath = Path.xcodesApplicationSupport/"\(runtime.name).\(runtime.name.suffix(fromLast: "."))" + // aria2 downloads directly to the destination (instead of into /tmp first) so we need to make sure that the download isn't incomplete + let aria2DownloadMetadataPath = expectedRuntimePath.parent/(expectedRuntimePath.basename() + ".aria2") + var aria2DownloadIsIncomplete = false + if case .aria2 = downloader, aria2DownloadMetadataPath.exists { + aria2DownloadIsIncomplete = true + } + if Current.files.fileExistsAtPath(expectedRuntimePath.string), aria2DownloadIsIncomplete == false { + Logger.appState.info("Found existing runtime that will be used for installation at \(expectedRuntimePath).") + return Just(expectedRuntimePath.url) + .setFailureType(to: Error.self) + .eraseToAnyPublisher() + } + else { +// let destination = Path.xcodesApplicationSupport/"Xcode-\(availableXcode.version).\(availableXcode.filename.suffix(fromLast: "."))" + switch downloader { + case .aria2: + let aria2Path = Path(url: Bundle.main.url(forAuxiliaryExecutable: "aria2c")!)! + return downloadRuntimeWithAria2( + runtime, + to: expectedRuntimePath, + aria2Path: aria2Path, + progressChanged: progressChanged) +// return downloadXcodeWithAria2( +// availableXcode, +// to: destination, +// aria2Path: aria2Path, +// progressChanged: progressChanged +// ) + case .urlSession: + + return Just(runtime.url) + .setFailureType(to: Error.self) + .eraseToAnyPublisher() + +// return downloadXcodeWithURLSession( +// availableXcode, +// to: destination, +// progressChanged: progressChanged +// ) + } + } + + } + + public func downloadRuntimeWithAria2(_ runtime: DownloadableRuntime, to destination: Path, aria2Path: Path, progressChanged: @escaping (Progress) -> Void) -> AnyPublisher { + let cookies = AppleAPI.Current.network.session.configuration.httpCookieStorage?.cookies(for: runtime.url) ?? [] + + let (progress, publisher) = Current.shell.downloadWithAria2( + aria2Path, + runtime.url, + destination, + cookies + ) + progressChanged(progress) + return publisher + .map { _ in destination.url } + .eraseToAnyPublisher() + } } diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index 2745ec9..55a0ce0 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -105,12 +105,13 @@ class AppState: ObservableObject { // MARK: - Runtimes @Published var downloadableRuntimes: [DownloadableRuntime] = [] - @Published var installedRuntimes: [CoreSimulatorRuntimeInfo] = [] + @Published var installedRuntimes: [CoreSimulatorImage] = [] // MARK: - Publisher Cancellables var cancellables = Set() private var installationPublishers: [Version: AnyCancellable] = [:] + internal var runtimePublishers: [String: AnyCancellable] = [:] private var selectPublisher: AnyCancellable? private var uninstallPublisher: AnyCancellable? private var autoInstallTimer: Timer? @@ -148,6 +149,7 @@ class AppState: ObservableObject { checkIfHelperIsInstalled() setupAutoInstallTimer() setupDefaults() + updateInstalledRuntimes() } func setupDefaults() { @@ -175,7 +177,11 @@ class AppState: ObservableObject { func validateADCSession(path: String) -> AnyPublisher { return Current.network.dataTask(with: URLRequest.downloadADCAuth(path: path)) .receive(on: DispatchQueue.main) - .tryMap { _ in + .tryMap { result -> Void in + let httpResponse = result.response as! HTTPURLResponse + if httpResponse.statusCode == 401 { + throw AuthenticationError.notAuthorized + } } .eraseToAnyPublisher() } @@ -796,16 +802,27 @@ class AppState: ObservableObject { func getRunTimes(xcode: Xcode) -> [DownloadableRuntime] { let builds = xcode.sdks?.allBuilds() - - let runtime = builds?.flatMap { sdkBuild in + + let runtimes: [DownloadableRuntime]? = builds?.flatMap { sdkBuild in downloadableRuntimes.filter { - $0.simulatorVersion.buildUpdate == sdkBuild + $0.sdkBuildUpdate == sdkBuild } } - // appState.installedRuntimes has a list of builds that user has installed. - - return runtime ?? [] + + let updatedRuntimes = runtimes?.map { runtime in + var updatedRuntime = runtime + if let coreSimulatorInfo = installedRuntimes.filter({ $0.runtimeInfo.build == runtime.sdkBuildUpdate }).first { + let url = URL(fileURLWithPath: coreSimulatorInfo.path["relative"]!) + updatedRuntime.installState = .installed(Path(url: url)!) + } else { + updatedRuntime.installState = .notInstalled + } + return updatedRuntime + } + + return updatedRuntimes ?? [] } + // MARK: - Private diff --git a/Xcodes/Backend/InstallationStep.swift b/Xcodes/Backend/InstallationStep.swift index ca2001d..9519cf5 100644 --- a/Xcodes/Backend/InstallationStep.swift +++ b/Xcodes/Backend/InstallationStep.swift @@ -1,45 +1,45 @@ -import Foundation - -/// A numbered step -enum InstallationStep: Equatable, CustomStringConvertible { - case downloading(progress: Progress) - case unarchiving - case moving(destination: String) - case trashingArchive - case checkingSecurity - case finishing - - var description: String { - "(\(stepNumber)/\(stepCount)) \(message)" - } - - var message: String { - switch self { - case .downloading: - return localizeString("Downloading") - case .unarchiving: - return localizeString("Unarchiving") - case .moving(let destination): - return String(format: localizeString("Moving"), destination) - case .trashingArchive: - return localizeString("TrashingArchive") - case .checkingSecurity: - return localizeString("CheckingSecurity") - case .finishing: - return localizeString("Finishing") - } - } - - var stepNumber: Int { - switch self { - case .downloading: return 1 - case .unarchiving: return 2 - case .moving: return 3 - case .trashingArchive: return 4 - case .checkingSecurity: return 5 - case .finishing: return 6 - } - } - - var stepCount: Int { 6 } -} +//import Foundation +// +///// A numbered step +//enum InstallationStep: Equatable, CustomStringConvertible { +// case downloading(progress: Progress) +// case unarchiving +// case moving(destination: String) +// case trashingArchive +// case checkingSecurity +// case finishing +// +// var description: String { +// "(\(stepNumber)/\(stepCount)) \(message)" +// } +// +// var message: String { +// switch self { +// case .downloading: +// return localizeString("Downloading") +// case .unarchiving: +// return localizeString("Unarchiving") +// case .moving(let destination): +// return String(format: localizeString("Moving"), destination) +// case .trashingArchive: +// return localizeString("TrashingArchive") +// case .checkingSecurity: +// return localizeString("CheckingSecurity") +// case .finishing: +// return localizeString("Finishing") +// } +// } +// +// var stepNumber: Int { +// switch self { +// case .downloading: return 1 +// case .unarchiving: return 2 +// case .moving: return 3 +// case .trashingArchive: return 4 +// case .checkingSecurity: return 5 +// case .finishing: return 6 +// } +// } +// +// var stepCount: Int { 6 } +//} diff --git a/Xcodes/Backend/SDKs+Xcode.swift b/Xcodes/Backend/SDKs+Xcode.swift index 9aeca4a..1462b96 100644 --- a/Xcodes/Backend/SDKs+Xcode.swift +++ b/Xcodes/Backend/SDKs+Xcode.swift @@ -26,6 +26,9 @@ extension SDKs { if let watchOS = self.watchOS?.compactMap({ $0.build }) { buildNumbers += watchOS } + if let visionOS = self.visionOS?.compactMap({ $0.build }) { + buildNumbers += visionOS + } return buildNumbers } diff --git a/Xcodes/Backend/XcodeCommands.swift b/Xcodes/Backend/XcodeCommands.swift index 0f74a92..a662547 100644 --- a/Xcodes/Backend/XcodeCommands.swift +++ b/Xcodes/Backend/XcodeCommands.swift @@ -221,7 +221,7 @@ struct DownloadRuntimeButton: View { private func install() { guard let runtime = runtime else { return } - // appState.checkMinVersionAndInstall(id: xcode.id) + appState.downloadRuntime(runtime: runtime) } } diff --git a/Xcodes/Backend/XcodeInstallState.swift b/Xcodes/Backend/XcodeInstallState.swift index a02181e..b23b75e 100644 --- a/Xcodes/Backend/XcodeInstallState.swift +++ b/Xcodes/Backend/XcodeInstallState.swift @@ -1,5 +1,6 @@ import Foundation import Path +import XcodesKit enum XcodeInstallState: Equatable { case notInstalled diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 9b616a6..f18474b 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -257,13 +257,27 @@ struct InfoPane: View { .frame(maxWidth: .infinity, alignment: .leading) ForEach(runtimes, id: \.simulatorVersion.buildUpdate) { runtime in - HStack { - Text("\(runtime.visibleIdentifier)") - .font(.subheadline) - Spacer() - Text(runtime.downloadFileSizeString) - .font(.subheadline) - DownloadRuntimeButton(runtime: runtime) + VStack { + HStack { + Text("\(runtime.visibleIdentifier)") + .font(.subheadline) + Spacer() + Text(runtime.downloadFileSizeString) + .font(.subheadline) + DownloadRuntimeButton(runtime: runtime) + } + switch runtime.installState { + + + case .notInstalled: + Text("NOT INSTALLED") + case .installing(let installationStep): + Text("INSTALLING") + InstallationStepDetailView(installationStep: installationStep) + .fixedSize(horizontal: false, vertical: true) + case .installed(let path): + Text(path.string) + } } } diff --git a/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift b/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift index 863f204..e10b193 100644 --- a/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift +++ b/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift @@ -1,4 +1,5 @@ import SwiftUI +import XcodesKit struct InstallationStepDetailView: View { let installationStep: InstallationStep diff --git a/Xcodes/Frontend/XcodeList/InstallationStepRowView.swift b/Xcodes/Frontend/XcodeList/InstallationStepRowView.swift index e2e81f1..ef716af 100644 --- a/Xcodes/Frontend/XcodeList/InstallationStepRowView.swift +++ b/Xcodes/Frontend/XcodeList/InstallationStepRowView.swift @@ -1,4 +1,5 @@ import SwiftUI +import XcodesKit struct InstallationStepRowView: View { let installationStep: InstallationStep diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallationStep.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallationStep.swift index fa54998..e33528f 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallationStep.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallationStep.swift @@ -20,7 +20,7 @@ public enum InstallationStep: Equatable, CustomStringConvertible { "(\(stepNumber)/\(stepCount)) \(message)" } - var message: String { + public var message: String { switch self { case .downloading: return localizeString("Downloading") @@ -37,7 +37,7 @@ public enum InstallationStep: Equatable, CustomStringConvertible { } } - var stepNumber: Int { + public var stepNumber: Int { switch self { case .downloading: return 1 case .unarchiving: return 2 @@ -48,7 +48,7 @@ public enum InstallationStep: Equatable, CustomStringConvertible { } } - var stepCount: Int { 6 } + public var stepCount: Int { 6 } } func localizeString(_ key: String, comment: String = "") -> String { if #available(macOS 12, *) { diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift index 69dd9da..a85d3c8 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift @@ -13,6 +13,7 @@ public struct CoreSimulatorPlist: Decodable { public struct CoreSimulatorImage: Decodable { public let uuid: String + public let path: [String: String] public let runtimeInfo: CoreSimulatorRuntimeInfo } diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift index 0e57b9a..2ab3362 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift @@ -21,9 +21,16 @@ public struct DownloadableRuntime: Codable { public let hostRequirements: HostRequirements? public let name: String public let authentication: Authentication? + public var url: URL { + return URL(string: source)! + } + public var downloadPath: String { + url.path + } // dynamically updated - not decoded public var installState: InstallState = .notInstalled + public var sdkBuildUpdate: String? enum CodingKeys: CodingKey { case category @@ -38,6 +45,7 @@ public struct DownloadableRuntime: Codable { case hostRequirements case name case authentication + case sdkBuildUpdate } var betaNumber: Int? { @@ -108,13 +116,15 @@ extension DownloadableRuntime { case macOS = "com.apple.platform.macosx" case watchOS = "com.apple.platform.watchos" case tvOS = "com.apple.platform.appletvos" - + case visionOS = "com.apple.platform.xros" + var order: Int { switch self { case .iOS: return 1 case .macOS: return 2 case .watchOS: return 3 case .tvOS: return 4 + case .visionOS: return 5 } } @@ -124,6 +134,7 @@ extension DownloadableRuntime { case .macOS: return "macOS" case .watchOS: return "watchOS" case .tvOS: return "tvOS" + case .visionOS: return "visionOS" } } } @@ -156,6 +167,16 @@ extension InstalledRuntime { case tvOS = "com.apple.platform.appletvsimulator" case iOS = "com.apple.platform.iphonesimulator" case watchOS = "com.apple.platform.watchsimulator" + case visionOS = "com.apple.platform.xrsimulator" + + var asPlatformOS: DownloadableRuntime.Platform { + switch self { + case .watchOS: return .watchOS + case .iOS: return .iOS + case .tvOS: return .tvOS + case .visionOS: return .visionOS + } + } } } diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift index 429fc48..e269375 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift @@ -38,17 +38,19 @@ public struct RuntimeService { /// Loops through `/Library/Developer/CoreSimulator/images/images.plist` which contains a list of downloaded Simuator Runtimes /// This is different then using `simctl` (`installedRuntimes()`) which only returns the installed runtimes for the selected xcode version. - public func localInstalledRuntimes() async throws -> [CoreSimulatorRuntimeInfo] { + public func localInstalledRuntimes() async throws -> [CoreSimulatorImage] { guard let path = Path("/Library/Developer/CoreSimulator/images/images.plist") else { throw "Could not find images.plist for CoreSimulators" } guard let infoPlistData = FileManager.default.contents(atPath: path.string) else { throw "Could not get data from \(path.string)" } do { let infoPlist: CoreSimulatorPlist = try PropertyListDecoder().decode(CoreSimulatorPlist.self, from: infoPlistData) - return infoPlist.images.map { $0.runtimeInfo } + return infoPlist.images } catch { throw error } } + + } From 8654a2075a57dc4ef2d730f9f29c3a4d162aa0f6 Mon Sep 17 00:00:00 2001 From: lavare Date: Mon, 26 Jun 2023 16:41:34 +0800 Subject: [PATCH 12/86] Update lastest xcodereleases/data --- Xcodes.xcodeproj/project.pbxproj | 2 +- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 0fc83e8..67c5306 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -1408,7 +1408,7 @@ repositoryURL = "https://github.com/xcodereleases/data"; requirement = { kind = revision; - revision = b47228c688b608e34b3b84079ab6052a24c7a981; + revision = a43ad89e536d7a3da525fcc23fb182c37b756ecc; }; }; CAA858CB25A3D8BC00ACF8C0 /* XCRemoteSwiftPackageReference "ErrorHandling" */ = { diff --git a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 58f4e08..65f6510 100644 --- a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,7 +15,7 @@ "repositoryURL": "https://github.com/xcodereleases/data", "state": { "branch": null, - "revision": "b47228c688b608e34b3b84079ab6052a24c7a981", + "revision": "a43ad89e536d7a3da525fcc23fb182c37b756ecc", "version": null } }, From 597721025224394788cd355ac2ad28f842322f63 Mon Sep 17 00:00:00 2001 From: lavare Date: Mon, 26 Jun 2023 16:44:25 +0800 Subject: [PATCH 13/86] Panel parsing visionOS field --- Xcodes/Frontend/InfoPane/InfoPane.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 88195da..3842a55 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -180,6 +180,7 @@ struct InfoPane: View { ("iOS", \.iOS), ("watchOS", \.watchOS), ("tvOS", \.tvOS), + ("visionOS", \.visionOS), ], id: \.0) { row in if let sdk = sdks[keyPath: row.1] { Text("\(row.0): \(sdk.compactMap { $0.number }.joined(separator: ", "))") From 9dd91a2ce85b80ea1379871b81f676a5718cccb7 Mon Sep 17 00:00:00 2001 From: Sam Lu Date: Sun, 24 Jan 2021 22:22:21 -0700 Subject: [PATCH 14/86] Add DockProgress swift package --- Xcodes.xcodeproj/project.pbxproj | 17 +++++++++++++++++ .../xcshareddata/swiftpm/Package.resolved | 9 +++++++++ Xcodes/Resources/Licenses.rtf | 15 +++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 0fc83e8..3f47b6e 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -116,6 +116,7 @@ E8E98A9025D8631800EC89A0 /* InstallationStepRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFBC3FF259AC17F00E2A3D8 /* InstallationStepRowView.swift */; }; E8E98A9625D863D700EC89A0 /* InstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */; }; E8F81FC4282D8A17006CBD0F /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = E8F81FC3282D8A17006CBD0F /* Sparkle */; }; + E689540325BE8C64000EBCEA /* DockProgress in Frameworks */ = {isa = PBXBuildFile; productRef = E689540225BE8C64000EBCEA /* DockProgress */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -326,6 +327,7 @@ E8F81FC4282D8A17006CBD0F /* Sparkle in Frameworks */, CABFA9E42592F08E00380FEE /* Version in Frameworks */, CABFA9FD2592F13300380FEE /* LegibleError in Frameworks */, + E689540325BE8C64000EBCEA /* DockProgress in Frameworks */, CA9FF86D25951C6E00E47BAF /* XCModel in Frameworks */, CABFA9F82592F0F900380FEE /* KeychainAccess in Frameworks */, CAA858CD25A3D8BC00ACF8C0 /* ErrorHandling in Frameworks */, @@ -665,6 +667,7 @@ CA9FF86C25951C6E00E47BAF /* XCModel */, CAA858CC25A3D8BC00ACF8C0 /* ErrorHandling */, E8F81FC3282D8A17006CBD0F /* Sparkle */, + E689540225BE8C64000EBCEA /* DockProgress */, ); productName = XcodesMac; productReference = CAD2E79E2449574E00113D76 /* Xcodes.app */; @@ -748,6 +751,7 @@ CAA858CB25A3D8BC00ACF8C0 /* XCRemoteSwiftPackageReference "ErrorHandling" */, CAC28186259EE27200B8AB0B /* XCRemoteSwiftPackageReference "CombineExpectations" */, E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */, + E689540125BE8C64000EBCEA /* XCRemoteSwiftPackageReference "DockProgress" */, ); productRefGroup = CAD2E79F2449574E00113D76 /* Products */; projectDirPath = ""; @@ -1475,6 +1479,14 @@ minimumVersion = 2.0.0; }; }; + E689540125BE8C64000EBCEA /* XCRemoteSwiftPackageReference "DockProgress" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sindresorhus/DockProgress"; + requirement = { + kind = upToNextMinorVersion; + minimumVersion = 3.2.0; + }; + }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ @@ -1527,6 +1539,11 @@ package = E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */; productName = Sparkle; }; + E689540225BE8C64000EBCEA /* DockProgress */ = { + isa = XCSwiftPackageProductDependency; + package = E689540125BE8C64000EBCEA /* XCRemoteSwiftPackageReference "DockProgress" */; + productName = DockProgress; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = CAD2E7962449574E00113D76 /* Project object */; diff --git a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 58f4e08..4e1ffc8 100644 --- a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -19,6 +19,15 @@ "version": null } }, + { + "package": "DockProgress", + "repositoryURL": "https://github.com/sindresorhus/DockProgress", + "state": { + "branch": null, + "revision": "7100b68571e2dafe3a06ad5905b80fc3b0107b4b", + "version": "3.2.0" + } + }, { "package": "ErrorHandling", "repositoryURL": "https://github.com/RobotsAndPencils/ErrorHandling", diff --git a/Xcodes/Resources/Licenses.rtf b/Xcodes/Resources/Licenses.rtf index 93bc0ff..095deef 100644 --- a/Xcodes/Resources/Licenses.rtf +++ b/Xcodes/Resources/Licenses.rtf @@ -308,6 +308,21 @@ For more information, please refer to <>\ otherwise be required by Sections 4(a), 4(b) and 4(d) of the License.\ \ +\fs34 DockProgress\ +\ + +\fs26 MIT License\ +\ +Copyright (c) Sindre Sorhus (sindresorhus.com)\ +\ +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\ +\ +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\ +\ +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\ +\ +\ + \fs34 KeychainAccess\ \ From de35bed9fad20f30834b36e04e0ff40d48f50b69 Mon Sep 17 00:00:00 2001 From: Sam Lu Date: Sun, 24 Jan 2021 22:58:12 -0700 Subject: [PATCH 15/86] Add dock progress indicator in .bar style --- Xcodes/Backend/AppState+Install.swift | 10 +++++++++- Xcodes/Backend/AppState.swift | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Xcodes/Backend/AppState+Install.swift b/Xcodes/Backend/AppState+Install.swift index ccf637d..d539263 100644 --- a/Xcodes/Backend/AppState+Install.swift +++ b/Xcodes/Backend/AppState+Install.swift @@ -5,6 +5,7 @@ import AppleAPI import Version import LegibleError import os.log +import DockProgress /// Downloads and installs Xcodes extension AppState { @@ -151,6 +152,7 @@ extension AppState { cookies ) progressChanged(progress) + updateDockIcon(withProgress: progress) return publisher .map { _ in destination.url } .eraseToAnyPublisher() @@ -160,11 +162,12 @@ extension AppState { let resumeDataPath = Path.xcodesApplicationSupport/"Xcode-\(availableXcode.version).resumedata" let persistedResumeData = Current.files.contents(atPath: resumeDataPath.string) - return attemptResumableTask(maximumRetryCount: 3) { resumeData -> AnyPublisher in + return attemptResumableTask(maximumRetryCount: 3) { [weak self] resumeData -> AnyPublisher in let (progress, publisher) = Current.network.downloadTask(with: availableXcode.url, to: destination.url, resumingWith: resumeData ?? persistedResumeData) progressChanged(progress) + self?.updateDockIcon(withProgress: progress) return publisher .map { $0.saveLocation } .eraseToAnyPublisher() @@ -174,6 +177,11 @@ extension AppState { }) .eraseToAnyPublisher() } + + private func updateDockIcon(withProgress progress: Progress) { + DockProgress.style = .bar + DockProgress.progressInstance = progress + } public func installArchivedXcode(_ availableXcode: AvailableXcode, at archiveURL: URL) -> AnyPublisher { do { diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index ebd44b5..ca629f2 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -7,6 +7,7 @@ import KeychainAccess import Path import Version import os.log +import DockProgress class AppState: ObservableObject { private let client = AppleAPI.Client() @@ -489,6 +490,9 @@ class AppState: ObservableObject { // Cancel the publisher installationPublishers[id] = nil + + // Remove dock icon progress indicator + DockProgress.progress = 1 // Only way to completely remove overlay with DockProgress is setting progress to complete // If the download is cancelled by the user, clean up the download files that aria2 creates. // This isn't done as part of the publisher with handleEvents(receiveCancel:) because it shouldn't happen when e.g. the app quits. From 622fac605c8c02cd3ee11a7e14aa7f2749ce797a Mon Sep 17 00:00:00 2001 From: Sam Lu Date: Fri, 15 Sep 2023 14:56:36 -0600 Subject: [PATCH 16/86] Set up overall progress object to track both downloading and unarchiving and reflect this in dock progress --- Xcodes/Backend/AppState+Install.swift | 40 +++++++++++++++++++++------ Xcodes/Backend/AppState.swift | 16 +++++++++-- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/Xcodes/Backend/AppState+Install.swift b/Xcodes/Backend/AppState+Install.swift index d539263..416d38e 100644 --- a/Xcodes/Backend/AppState+Install.swift +++ b/Xcodes/Backend/AppState+Install.swift @@ -44,6 +44,8 @@ extension AppState { Logger.appState.info("Using \(downloader) downloader") + setupDockProgress() + return validateSession() .flatMap { _ in self.getXcodeArchive(installationType, downloader: downloader) @@ -52,6 +54,8 @@ extension AppState { self.installArchivedXcode(xcode, at: url) } .catch { error -> AnyPublisher in + self.resetDockProgressTracking() + switch error { case InstallationError.damagedXIP(let damagedXIPURL): guard attemptNumber < 1 else { return Fail(error: error).eraseToAnyPublisher() } @@ -100,6 +104,7 @@ extension AppState { self.downloadOrUseExistingArchive(for: availableXcode, downloader: downloader, progressChanged: { [unowned self] progress in DispatchQueue.main.async { self.setInstallationStep(of: availableXcode.version, to: .downloading(progress: progress)) + self.overallProgress.addChild(progress, withPendingUnitCount: AppState.totalProgressUnits - AppState.unxipProgressWeight) } }) .map { return (availableXcode, $0) } @@ -152,7 +157,7 @@ extension AppState { cookies ) progressChanged(progress) - updateDockIcon(withProgress: progress) + return publisher .map { _ in destination.url } .eraseToAnyPublisher() @@ -162,12 +167,12 @@ extension AppState { let resumeDataPath = Path.xcodesApplicationSupport/"Xcode-\(availableXcode.version).resumedata" let persistedResumeData = Current.files.contents(atPath: resumeDataPath.string) - return attemptResumableTask(maximumRetryCount: 3) { [weak self] resumeData -> AnyPublisher in + return attemptResumableTask(maximumRetryCount: 3) { resumeData -> AnyPublisher in let (progress, publisher) = Current.network.downloadTask(with: availableXcode.url, to: destination.url, resumingWith: resumeData ?? persistedResumeData) progressChanged(progress) - self?.updateDockIcon(withProgress: progress) + return publisher .map { $0.saveLocation } .eraseToAnyPublisher() @@ -177,13 +182,11 @@ extension AppState { }) .eraseToAnyPublisher() } - - private func updateDockIcon(withProgress progress: Progress) { - DockProgress.style = .bar - DockProgress.progressInstance = progress - } public func installArchivedXcode(_ availableXcode: AvailableXcode, at archiveURL: URL) -> AnyPublisher { + unxipProgress.completedUnitCount = 0 + overallProgress.addChild(unxipProgress, withPendingUnitCount: AppState.unxipProgressWeight) + do { let destinationURL = Path.installDirectory.join("Xcode-\(availableXcode.version.descriptionWithoutBuildMetadata).app").url switch archiveURL.pathExtension { @@ -423,6 +426,9 @@ extension AppState { } self.presentedAlert = .privilegedHelper } + + unxipProgress.completedUnitCount = AppState.totalProgressUnits + resetDockProgressTracking() return helperInstallConsentSubject .flatMap { @@ -463,6 +469,24 @@ extension AppState { .eraseToAnyPublisher() } + // MARK: - Dock Progress Tracking + + private func setupDockProgress() { + DockProgress.progressInstance = nil + DockProgress.style = .bar + + let progress = Progress(totalUnitCount: AppState.totalProgressUnits) + progress.kind = .file + progress.fileOperationKind = .downloading + overallProgress = progress + + DockProgress.progressInstance = overallProgress + } + + func resetDockProgressTracking() { + DockProgress.progress = 1 // Only way to completely remove overlay with DockProgress is setting progress to complete + } + // MARK: - func setInstallationStep(of version: Version, to step: InstallationStep) { diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index ca629f2..49e22de 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -107,6 +107,19 @@ class AppState: ObservableObject { private var selectPublisher: AnyCancellable? private var uninstallPublisher: AnyCancellable? private var autoInstallTimer: Timer? + + // MARK: - Dock Progress Tracking + + public static let totalProgressUnits = Int64(10) + public static let unxipProgressWeight = Int64(1) + var overallProgress = Progress() + var unxipProgress = { + let progress = Progress(totalUnitCount: totalProgressUnits) + progress.kind = .file + progress.fileOperationKind = .copying + return progress + }() + // MARK: - var dataSource: DataSource { @@ -491,8 +504,7 @@ class AppState: ObservableObject { // Cancel the publisher installationPublishers[id] = nil - // Remove dock icon progress indicator - DockProgress.progress = 1 // Only way to completely remove overlay with DockProgress is setting progress to complete + resetDockProgressTracking() // If the download is cancelled by the user, clean up the download files that aria2 creates. // This isn't done as part of the publisher with handleEvents(receiveCancel:) because it shouldn't happen when e.g. the app quits. From b6e654c6f22d61c3200576eb4cb726ae2169d91e Mon Sep 17 00:00:00 2001 From: Sam Lu Date: Tue, 19 Sep 2023 12:16:06 -0600 Subject: [PATCH 17/86] Update CI workflow to use Xcode 14.2 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3a4a580..eb4d569 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,5 +13,5 @@ jobs: - uses: actions/checkout@v3 - name: Run tests env: - DEVELOPER_DIR: /Applications/Xcode_13.2.1.app + DEVELOPER_DIR: /Applications/Xcode_14.2.app run: xcodebuild test -scheme Xcodes From dc5a8b03b6a30706be4eb9866ca5277eaff6fbf5 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Fri, 22 Sep 2023 15:35:26 -0500 Subject: [PATCH 18/86] WIP download runtime, refactor --- Xcodes/Backend/AppState+Install.swift | 3 +- Xcodes/Backend/AppState+Runtimes.swift | 127 ++++++++++++++---- Xcodes/Backend/AppState.swift | 39 +++--- Xcodes/Backend/Environment.swift | 102 +++++++++++++- Xcodes/Backend/Path+.swift | 11 ++ Xcodes/Frontend/InfoPane/InfoPane.swift | 31 +++-- .../XcodesKit/Services/RuntimeService.swift | 27 ++++ .../Sources/XcodesKit/Shell/Shell.swift | 18 +++ 8 files changed, 297 insertions(+), 61 deletions(-) diff --git a/Xcodes/Backend/AppState+Install.swift b/Xcodes/Backend/AppState+Install.swift index 70f82d0..41d71cc 100644 --- a/Xcodes/Backend/AppState+Install.swift +++ b/Xcodes/Backend/AppState+Install.swift @@ -466,7 +466,8 @@ extension AppState { let xcode = self.allXcodes[index] Current.notificationManager.scheduleNotification(title: xcode.id.appleDescription, body: step.description, category: .normal) } - }w func setInstallationStep(of runtime: DownloadableRuntime, to step: InstallationStep) { + } + func setInstallationStep(of runtime: DownloadableRuntime, to step: InstallationStep) { DispatchQueue.main.async { guard let index = self.downloadableRuntimes.firstIndex(where: { $0.identifier == runtime.identifier }) else { return } diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift index 2f1c568..092accc 100644 --- a/Xcodes/Backend/AppState+Runtimes.swift +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -46,28 +46,38 @@ extension AppState { } func downloadRuntime(runtime: DownloadableRuntime) { - self.runtimePublishers[runtime.identifier] = downloadRunTimeFull(runtime: runtime) - .receive(on: DispatchQueue.main) - .sink( - receiveCompletion: { [unowned self] completion in - self.runtimePublishers[runtime.identifier] = nil - if case let .failure(error) = completion { -// // Prevent setting the app state error if it is an invalid session, we will present the sign in view instead -// if error as? AuthenticationError != .invalidSession { -// self.error = error -// self.presentedAlert = .generic(title: localizeString("Alert.Install.Error.Title"), message: error.legibleLocalizedDescription) -// } -// if let index = self.allXcodes.firstIndex(where: { $0.id == id }) { -// self.allXcodes[index].installState = .notInstalled -// } - } - }, - receiveValue: { _ in } - ) + Task { + try? await downloadRunTimeFull(runtime: runtime) + } + +// self.runtimePublishers[runtime.identifier] = downloadRunTimeFull(runtime: runtime) +// .receive(on: DispatchQueue.main) +// .sink( +// receiveCompletion: { [unowned self] completion in +// self.runtimePublishers[runtime.identifier] = nil +// if case let .failure(error) = completion { +// Logger.appState.error("Error downloading runtime: \(error.localizedDescription)") +//// // Prevent setting the app state error if it is an invalid session, we will present the sign in view instead +//// if error as? AuthenticationError != .invalidSession { +//// self.error = error +//// self.presentedAlert = .generic(title: localizeString("Alert.Install.Error.Title"), message: error.legibleLocalizedDescription) +//// } +//// if let index = self.allXcodes.firstIndex(where: { $0.id == id }) { +//// self.allXcodes[index].installState = .notInstalled +//// } +// } +// }, +// receiveValue: { _ in } +// ) } - func downloadRunTimeFull(runtime: DownloadableRuntime) -> AnyPublisher<(DownloadableRuntime, URL), Error> { - // gets a proper cookie for runtimes + func downloadRunTimeFull(runtime: DownloadableRuntime) async throws { + // sets a proper cookie for runtimes + try await validateADCSession(path: runtime.downloadPath) + + let downloader = Downloader(rawValue: UserDefaults.standard.string(forKey: "downloader") ?? "aria2") ?? .aria2 + Logger.appState.info("Downloading \(runtime.visibleIdentifier) with \(downloader)") + return validateADCSession(path: runtime.downloadPath) .flatMap { _ in @@ -82,6 +92,18 @@ extension AppState { }) .map { return (runtime, $0) } } + .flatMap { runtime, url -> AnyPublisher in + switch runtime.contentType { + case .package: + return self.installFromPackage(dmgURL: url, runtime: runtime) + case .diskImage: + return self.installFromImage(dmgURL: url) + } + } + .map { url in + // Done deleting + Logger.appState.debug("URL: \(url)") + } .eraseToAnyPublisher() } @@ -92,7 +114,9 @@ extension AppState { // use runtime.url for final with cookies // Check to see if the archive is in the expected path in case it was downloaded but failed to install - let expectedRuntimePath = Path.xcodesApplicationSupport/"\(runtime.name).\(runtime.name.suffix(fromLast: "."))" +// let expectedRuntimePath = Path.xcodesApplicationSupport/"\(runtime.name).\(runtime.name.suffix(fromLast: "."))" + let url = URL(string: runtime.source)! + let expectedRuntimePath = Path.xcodesApplicationSupport/"\(url.lastPathComponent)" // aria2 downloads directly to the destination (instead of into /tmp first) so we need to make sure that the download isn't incomplete let aria2DownloadMetadataPath = expectedRuntimePath.parent/(expectedRuntimePath.basename() + ".aria2") var aria2DownloadIsIncomplete = false @@ -106,7 +130,8 @@ extension AppState { .eraseToAnyPublisher() } else { -// let destination = Path.xcodesApplicationSupport/"Xcode-\(availableXcode.version).\(availableXcode.filename.suffix(fromLast: "."))" + + Logger.appState.info("Downloading runtime: \(url.lastPathComponent)") switch downloader { case .aria2: let aria2Path = Path(url: Bundle.main.url(forAuxiliaryExecutable: "aria2c")!)! @@ -115,12 +140,7 @@ extension AppState { to: expectedRuntimePath, aria2Path: aria2Path, progressChanged: progressChanged) -// return downloadXcodeWithAria2( -// availableXcode, -// to: destination, -// aria2Path: aria2Path, -// progressChanged: progressChanged -// ) + case .urlSession: return Just(runtime.url) @@ -134,7 +154,6 @@ extension AppState { // ) } } - } public func downloadRuntimeWithAria2(_ runtime: DownloadableRuntime, to destination: Path, aria2Path: Path, progressChanged: @escaping (Progress) -> Void) -> AnyPublisher { @@ -151,4 +170,54 @@ extension AppState { .map { _ in destination.url } .eraseToAnyPublisher() } + + public func downloadRuntimeWithAria2(_ runtime: DownloadableRuntime, to destination: Path, aria2Path: Path, progressChanged: @escaping (Progress) -> Void) async -> URL { + + } + + public func installFromImage(dmgURL: URL) -> AnyPublisher { + + + try? self.runtimeService.installRuntimeImage(dmgURL: dmgURL) + + + return Just(dmgURL) + .setFailureType(to: Error.self) + .eraseToAnyPublisher() + + } + + public func installFromPackage(dmgURL: URL, runtime: DownloadableRuntime) -> AnyPublisher { + Logger.appState.info("Mounting DMG") + Task { + do { + let mountedUrl = try await self.runtimeService.mountDMG(dmgUrl: dmgURL) + + // 2-Get the first path under the mounted path, should be a .pkg + let pkgPath = Path(url: mountedUrl)!.ls().first! + try Path.xcodesCaches.mkdir().setCurrentUserAsOwner() + + let expandedPkgPath = Path.xcodesCaches/runtime.identifier + //try expandedPkgPath.mkdir() + Logger.appState.info("PKG Path: \(pkgPath)") + Logger.appState.info("Expanded PKG Path: \(expandedPkgPath)") + //try? Current.files.removeItem(at: expandedPkgPath.url) + + // 5-Expand (not install) the pkg to temporary path + try await self.runtimeService.expand(pkgPath: pkgPath, expandedPkgPath: expandedPkgPath) + //try await self.runtimeService.unmountDMG(mountedURL: mountedUrl) + + } catch { + Logger.appState.error("Error installing runtime: \(error.localizedDescription)") + } + + } + + + + return Just(dmgURL) + .setFailureType(to: Error.self) + .eraseToAnyPublisher() + } + } diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index 55a0ce0..2fb00b8 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -186,6 +186,14 @@ class AppState: ObservableObject { .eraseToAnyPublisher() } + func validateADCSession(path: String) async throws { + let result = try await Current.network.dataTaskAsync(with: URLRequest.downloadADCAuth(path: path)) + let httpResponse = result.1 as! HTTPURLResponse + if httpResponse.statusCode == 401 { + throw AuthenticationError.notAuthorized + } + } + func validateSession() -> AnyPublisher { return Current.network.validateSession() @@ -799,30 +807,17 @@ class AppState: ObservableObject { } // MARK: Runtimes - func getRunTimes(xcode: Xcode) -> [DownloadableRuntime] { - - let builds = xcode.sdks?.allBuilds() - - let runtimes: [DownloadableRuntime]? = builds?.flatMap { sdkBuild in - downloadableRuntimes.filter { - $0.sdkBuildUpdate == sdkBuild - } + func runtimeInstallPath(xcode: Xcode, runtime: DownloadableRuntime) -> Path? { + if let coreSimulatorInfo = installedRuntimes.filter({ $0.runtimeInfo.build == runtime.sdkBuildUpdate }).first { + let urlString = coreSimulatorInfo.path["relative"]! + // app was not allowed to open up file:// url's so remove + let fileRemovedString = urlString.replacingOccurrences(of: "file://", with: "") + let url = URL(fileURLWithPath: fileRemovedString) + + return Path(url: url)! } - - let updatedRuntimes = runtimes?.map { runtime in - var updatedRuntime = runtime - if let coreSimulatorInfo = installedRuntimes.filter({ $0.runtimeInfo.build == runtime.sdkBuildUpdate }).first { - let url = URL(fileURLWithPath: coreSimulatorInfo.path["relative"]!) - updatedRuntime.installState = .installed(Path(url: url)!) - } else { - updatedRuntime.installState = .notInstalled - } - return updatedRuntime - } - - return updatedRuntimes ?? [] + return nil } - // MARK: - Private diff --git a/Xcodes/Backend/Environment.swift b/Xcodes/Backend/Environment.swift index 2c93381..8b7da37 100644 --- a/Xcodes/Backend/Environment.swift +++ b/Xcodes/Backend/Environment.swift @@ -112,6 +112,101 @@ public struct Shell { return (progress, publisher) } + public var downloadWithAria2Async: (Path, URL, Path, [HTTPCookie]) async throws -> Progress = { aria2Path, url, destination, cookies in + let process = Process() + process.executableURL = aria2Path.url + process.arguments = [ + "--header=Cookie: \(cookies.map { "\($0.name)=\($0.value)" }.joined(separator: "; "))", + "--max-connection-per-server=16", + "--split=16", + "--summary-interval=1", + "--stop-with-process=\(ProcessInfo.processInfo.processIdentifier)", // if xcodes quits, stop aria2 process + "--dir=\(destination.parent.string)", + "--out=\(destination.basename())", + "--human-readable=false", // sets the output to use bytes instead of formatting + url.absoluteString, + ] + let stdOutPipe = Pipe() + process.standardOutput = stdOutPipe + let stdErrPipe = Pipe() + process.standardError = stdErrPipe + + var progress = Progress() + progress.kind = .file + progress.fileOperationKind = .downloading + + let observer = NotificationCenter.default.addObserver( + forName: .NSFileHandleDataAvailable, + object: nil, + queue: OperationQueue.main + ) { note in + guard + // This should always be the case for Notification.Name.NSFileHandleDataAvailable + let handle = note.object as? FileHandle, + handle === stdOutPipe.fileHandleForReading || handle === stdErrPipe.fileHandleForReading + else { return } + + defer { handle.waitForDataInBackgroundAndNotify() } + + let string = String(decoding: handle.availableData, as: UTF8.self) + + progress.updateFromAria2(string: string) + } + + stdOutPipe.fileHandleForReading.waitForDataInBackgroundAndNotify() + stdErrPipe.fileHandleForReading.waitForDataInBackgroundAndNotify() + + do { + + defer { + //DispatchQueue.global(qos: .default).async { + process.waitUntilExit() + + NotificationCenter.default.removeObserver(observer, name: .NSFileHandleDataAvailable, object: nil) + + guard process.terminationReason == .exit, process.terminationStatus == 0 else { + if let aria2cError = Aria2CError(exitStatus: process.terminationStatus) { + throw aria2cError + } else { + throw ProcessExecutionError(process: process, standardOutput: "", standardError: "") + } + } + return +// } + } + try process.run() + } catch { + throw error + } + + +// let publisher = Deferred { +// Future { promise in +// DispatchQueue.global(qos: .default).async { +// process.waitUntilExit() +// +// NotificationCenter.default.removeObserver(observer, name: .NSFileHandleDataAvailable, object: nil) +// +// guard process.terminationReason == .exit, process.terminationStatus == 0 else { +// if let aria2cError = Aria2CError(exitStatus: process.terminationStatus) { +// return promise(.failure(aria2cError)) +// } else { +// return promise(.failure(ProcessExecutionError(process: process, standardOutput: "", standardError: ""))) +// } +// } +// promise(.success(())) +// } +// } +// } +// .handleEvents(receiveCancel: { +// process.terminate() +// NotificationCenter.default.removeObserver(observer, name: .NSFileHandleDataAvailable, object: nil) +// }) +// .eraseToAnyPublisher() +// +// return (progress, publisher) + } + public var unxipExperiment: (URL) -> AnyPublisher = { url in let unxipPath = Path(url: Bundle.main.url(forAuxiliaryExecutable: "unxip")!)! return Process.run(unxipPath.url, workingDirectory: url.deletingLastPathComponent(), ["\(url.path)"]) @@ -189,10 +284,15 @@ public struct Network { .mapError { $0 as Error } .eraseToAnyPublisher() } + public func dataTask(with request: URLRequest) -> AnyPublisher { dataTask(request) } - + + public func dataTaskAsync(with request: URLRequest) async throws -> (Data, URLResponse) { + return try await AppleAPI.Current.network.session.data(for: request) + } + public var downloadTask: (URL, URL, Data?) -> (Progress, AnyPublisher<(saveLocation: URL, response: URLResponse), Error>) = { AppleAPI.Current.network.session.downloadTask(with: $0, to: $1, resumingWith: $2) } public func downloadTask(with url: URL, to saveLocation: URL, resumingWith resumeData: Data?) -> (progress: Progress, publisher: AnyPublisher<(saveLocation: URL, response: URLResponse), Error>) { diff --git a/Xcodes/Backend/Path+.swift b/Xcodes/Backend/Path+.swift index 8bcc59c..06bbe63 100644 --- a/Xcodes/Backend/Path+.swift +++ b/Xcodes/Backend/Path+.swift @@ -32,4 +32,15 @@ extension Path { static var runtimeCacheFile: Path { return xcodesApplicationSupport/"downloadable-runtimes.json" } + + static var xcodesCaches: Path { + return caches/"com.xcodesorg.xcodesapp" + } + + @discardableResult + func setCurrentUserAsOwner() -> Path { + let user = ProcessInfo.processInfo.environment["SUDO_USER"] ?? NSUserName() + try? FileManager.default.setAttributes([.ownerAccountName: user], ofItemAtPath: string) + return self + } } diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index f18474b..7896426 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -249,14 +249,22 @@ struct InfoPane: View { @ViewBuilder private func runtimes(for xcode: Xcode) -> some View { - let runtimes = appState.getRunTimes(xcode: xcode) + VStack(alignment: .leading) { Text("Platforms") .font(.headline) .frame(maxWidth: .infinity, alignment: .leading) - ForEach(runtimes, id: \.simulatorVersion.buildUpdate) { runtime in + let builds = xcode.sdks?.allBuilds() + let runtimes = builds?.flatMap { sdkBuild in + appState.downloadableRuntimes.filter { + $0.sdkBuildUpdate == sdkBuild + } + } +// let runtimes = appState.getRunTimes(xcode: xcode) + + ForEach(runtimes ?? [], id: \.simulatorVersion.buildUpdate) { runtime in VStack { HStack { Text("\(runtime.visibleIdentifier)") @@ -264,19 +272,26 @@ struct InfoPane: View { Spacer() Text(runtime.downloadFileSizeString) .font(.subheadline) - DownloadRuntimeButton(runtime: runtime) + + // it's installed if we have a path + if let path = appState.runtimeInstallPath(xcode: xcode, runtime: runtime) { + Button(action: { appState.reveal(path: path.string) }) { + Image(systemName: "arrow.right.circle.fill") + } + .buttonStyle(PlainButtonStyle()) + .help("RevealInFinder") + } else { + DownloadRuntimeButton(runtime: runtime) + } } switch runtime.installState { - - case .notInstalled: - Text("NOT INSTALLED") case .installing(let installationStep): Text("INSTALLING") InstallationStepDetailView(installationStep: installationStep) .fixedSize(horizontal: false, vertical: true) - case .installed(let path): - Text(path.string) + default: + EmptyView() } } diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift index e269375..c767207 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift @@ -8,6 +8,10 @@ extension URL { public struct RuntimeService { var networkService: AsyncHTTPNetworkService + public enum Error: LocalizedError, Equatable { + case unavailableRuntime(String) + case failedMountingDMG + } public init() { networkService = AsyncHTTPNetworkService() @@ -50,7 +54,30 @@ public struct RuntimeService { } } + public func installRuntimeImage(dmgURL: URL) throws { + Task { + _ = try await Current.shell.installRuntimeImage(dmgURL) + } + } + public func mountDMG(dmgUrl: URL) async throws -> URL { + let resultPlist = try await Current.shell.mountDmg(dmgUrl) + + let dict = try? (PropertyListSerialization.propertyList(from: resultPlist.out.data(using: .utf8)!, format: nil) as? NSDictionary) + let systemEntities = dict?["system-entities"] as? NSArray + guard let path = systemEntities?.compactMap ({ ($0 as? NSDictionary)?["mount-point"] as? String }).first else { + throw Error.failedMountingDMG + } + return URL(fileURLWithPath: path) + } + + public func unmountDMG(mountedURL: URL) async throws { + let url = try await Current.shell.unmountDmg(mountedURL) + } + + public func expand(pkgPath: Path, expandedPkgPath: Path) async throws { + _ = try await Current.shell.expandPkg(pkgPath.url, expandedPkgPath.url) + } } diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Shell.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Shell.swift index 520ad0a..81157d7 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Shell.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Shell.swift @@ -5,4 +5,22 @@ public struct Shell { public var installedRuntimes: () async throws -> ProcessOutput = { try await Process.run(Path.root.usr.bin.join("xcrun"), "simctl", "runtime", "list", "-j") } + public var mountDmg: (URL) async throws -> ProcessOutput = { + try await Process.run(Path.root.usr.bin.join("hdiutil"), "attach", "-nobrowse", "-plist", $0.path) + } + public var unmountDmg: (URL) async throws -> ProcessOutput = { + try await Process.run(Path.root.usr.bin.join("hdiutil"), "detach", $0.path) + } + public var expandPkg: (URL, URL) async throws -> ProcessOutput = { + try await Process.run(Path.root.usr.sbin.join("pkgutil"), "--verbose", "--expand", $0.path, $1.path) + } + public var createPkg: (URL, URL) async throws -> ProcessOutput = { + try await Process.run(Path.root.usr.sbin.join("pkgutil"), "--flatten", $0.path, $1.path) + } + public var installPkg: (URL, String) async throws -> ProcessOutput = { + try await Process.run(Path.root.usr.sbin.join("installer"), "-pkg", $0.path, "-target", $1) + } + public var installRuntimeImage: (URL) async throws -> ProcessOutput = { + try await Process.run(Path.root.usr.bin.join("xcrun"), "simctl", "runtime", "add", $0.path) + } } From 35fb72db6831e8781b407d084f274707d32356c7 Mon Sep 17 00:00:00 2001 From: Elon Park Date: Sun, 24 Sep 2023 02:47:37 +0900 Subject: [PATCH 19/86] Fix SMS Enter Digit Code Crash --- Xcodes/Resources/de.lproj/Localizable.strings | 2 +- Xcodes/Resources/en.lproj/Localizable.strings | 2 +- Xcodes/Resources/es.lproj/Localizable.strings | 2 +- Xcodes/Resources/fi.lproj/Localizable.strings | 2 +- Xcodes/Resources/fr.lproj/Localizable.strings | 2 +- Xcodes/Resources/hi.lproj/Localizable.strings | 2 +- Xcodes/Resources/ja.lproj/Localizable.strings | 2 +- Xcodes/Resources/ko.lproj/Localizable.strings | 2 +- Xcodes/Resources/nl.lproj/Localizable.strings | 2 +- Xcodes/Resources/pl.lproj/Localizable.strings | 2 +- Xcodes/Resources/pt-BR.lproj/Localizable.strings | 2 +- Xcodes/Resources/ru.lproj/Localizable.strings | 2 +- Xcodes/Resources/tr.lproj/Localizable.strings | 2 +- Xcodes/Resources/uk.lproj/Localizable.strings | 2 +- Xcodes/Resources/zh-Hans.lproj/Localizable.strings | 2 +- Xcodes/Resources/zh-Hant.lproj/Localizable.strings | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Xcodes/Resources/de.lproj/Localizable.strings b/Xcodes/Resources/de.lproj/Localizable.strings index e40d7cc..fddec18 100644 --- a/Xcodes/Resources/de.lproj/Localizable.strings +++ b/Xcodes/Resources/de.lproj/Localizable.strings @@ -124,7 +124,7 @@ // SMS/2FA "DigitCodeDescription" = "Gib den %d-stelligen Code von einem Deiner Vertrauensgeräte ein:"; "SendSMS" = "SMS senden"; -"EnterDigitCodeDescription" = "Gib den %d-stelligen Code ein der an '%@' gesendet wurde."; +"EnterDigitCodeDescription" = "Gib den %1$d-stelligen Code ein der an '%2$@' gesendet wurde."; "SelectTrustedPhone" = "Wähle eine vertrauenswürdige Telefonnummer aus, um einen %d-stelligen Code via SMS zum empfangen:"; "NoTrustedPhones" = "Dein Account verfügt über keine vertrauenswürdigen Telefonnummern, diese sind aber für Zwei-Faktor-Authentifizierung erforderlich.\n\nInformationen dazu unter https://support.apple.com/HT204915."; diff --git a/Xcodes/Resources/en.lproj/Localizable.strings b/Xcodes/Resources/en.lproj/Localizable.strings index 59a8676..15513a6 100644 --- a/Xcodes/Resources/en.lproj/Localizable.strings +++ b/Xcodes/Resources/en.lproj/Localizable.strings @@ -127,7 +127,7 @@ // SMS/2FA "DigitCodeDescription" = "Enter the %d digit code from one of your trusted devices:"; "SendSMS" = "Send SMS"; -"EnterDigitCodeDescription" = "Enter the %d digit code sent to %@: "; +"EnterDigitCodeDescription" = "Enter the %1$d digit code sent to %2$@: "; "SelectTrustedPhone" = "Select a trusted phone number to receive a %d digit code via SMS:"; "NoTrustedPhones" = "Your account doesn't have any trusted phone numbers, but they're required for two-factor authentication.\n\nSee https://support.apple.com/HT204915."; diff --git a/Xcodes/Resources/es.lproj/Localizable.strings b/Xcodes/Resources/es.lproj/Localizable.strings index a910bc7..0cce216 100644 --- a/Xcodes/Resources/es.lproj/Localizable.strings +++ b/Xcodes/Resources/es.lproj/Localizable.strings @@ -120,7 +120,7 @@ // SMS/2FA "DigitCodeDescription" = "Ingrese el código de %d dígitos de uno de sus dispositivos de confianza:"; "SendSMS" = "Enviar SMS"; -"EnterDigitCodeDescription" = "Ingrese el código de dígito %d enviado a %@: "; +"EnterDigitCodeDescription" = "Ingrese el código de dígito %1$d enviado a %2$@: "; "SelectTrustedPhone" = "Selecciona un número de teléfono de confianza para recibir un código de %d dígitos por SMS:"; "NoTrustedPhones" = "Su cuenta no tiene números de teléfono de confianza, pero son necesarios para la autenticación de dos factores.\n\nVer https://support.apple.com/HT204915."; diff --git a/Xcodes/Resources/fi.lproj/Localizable.strings b/Xcodes/Resources/fi.lproj/Localizable.strings index 905a1e0..b7fd612 100644 --- a/Xcodes/Resources/fi.lproj/Localizable.strings +++ b/Xcodes/Resources/fi.lproj/Localizable.strings @@ -115,7 +115,7 @@ // SMS/2FA "DigitCodeDescription" = "Anna %d numeroinen koodi jostakin luotetusta laitteesta:"; "SendSMS" = "Lähetä tekstiviesti"; -"EnterDigitCodeDescription" = "Anna %d numeroinen koodi, joka lähetettiin osoitteeseen %@: "; +"EnterDigitCodeDescription" = "Anna %1$d numeroinen koodi, joka lähetettiin osoitteeseen %2$@: "; "SelectTrustedPhone" = "Valitse luotettu puhelinnumero saadaksesi %d numeroisen koodin tekstiviestinä:"; "NoTrustedPhones" = "Tililläsi ei ole luotettuja puhelinnumeroita, mutta ne vaaditaan kaksivaiheiseen todentamiseen.\n\nKatso https://support.apple.com/HT204915."; diff --git a/Xcodes/Resources/fr.lproj/Localizable.strings b/Xcodes/Resources/fr.lproj/Localizable.strings index 0e619ef..254d933 100644 --- a/Xcodes/Resources/fr.lproj/Localizable.strings +++ b/Xcodes/Resources/fr.lproj/Localizable.strings @@ -120,7 +120,7 @@ // SMS/2FA "DigitCodeDescription" = "Saisissez le code à %d chiffres de l'un de vos appareils de confiance :"; "SendSMS" = "Envoyer un SMS"; -"EnterDigitCodeDescription" = "Entrez le code à %d chiffres envoyé à %@ : "; +"EnterDigitCodeDescription" = "Entrez le code à %1$d chiffres envoyé à %2$@ : "; "SelectTrustedPhone" = "Sélectionnez le numéro de téléphone de confiance pour recevoir un code à %d chiffres par SMS :"; "NoTrustedPhones" = "Votre compte n'a aucun numéro de téléphone de confiance, mais ils sont requis pour l'authentification à deux facteurs.\n\nVoir https://support.apple.com/HT204915."; diff --git a/Xcodes/Resources/hi.lproj/Localizable.strings b/Xcodes/Resources/hi.lproj/Localizable.strings index 22a672d..8a0e682 100644 --- a/Xcodes/Resources/hi.lproj/Localizable.strings +++ b/Xcodes/Resources/hi.lproj/Localizable.strings @@ -115,7 +115,7 @@ // SMS/2FA "DigitCodeDescription" = "अपने किसी विश्वसनीय डिवाइस से %d अंक कोड दर्ज करें:"; "SendSMS" = "SMS भेजें"; -"EnterDigitCodeDescription" = "%@ को भेजा गया %d अंक कोड दर्ज करें: "; +"EnterDigitCodeDescription" = "%2$@ को भेजा गया %1$d अंक कोड दर्ज करें: "; "SelectTrustedPhone" = "SMS के द्वारा %d अंक कोड प्राप्त करने के लिए विश्वसनीय फ़ोन नंबर चुनें:"; "NoTrustedPhones" = "आपके खाते में कोई विश्वसनीय फ़ोन नंबर नहीं है, लेकिन वे दो-कारक प्रमाणीकरण के लिए आवश्यक हैं।\n\nhttps://support.apple.com/HT204915 देखें।"; diff --git a/Xcodes/Resources/ja.lproj/Localizable.strings b/Xcodes/Resources/ja.lproj/Localizable.strings index 90aa86f..2be065e 100644 --- a/Xcodes/Resources/ja.lproj/Localizable.strings +++ b/Xcodes/Resources/ja.lproj/Localizable.strings @@ -127,7 +127,7 @@ // SMS/2FA "DigitCodeDescription" = "信頼できるデバイスから、%d桁のコードを入力してください。"; "SendSMS" = "SMS を送信"; -"EnterDigitCodeDescription" = "%d桁のコードを%@に送信したので入力してください。"; +"EnterDigitCodeDescription" = "%1$d桁のコードを%2$@に送信したので入力してください。"; "SelectTrustedPhone" = "信頼できる電話番号を選択し、%d桁のコードをSMSで受信します。"; "NoTrustedPhones" = "このアカウントに2要素認証に利用する、信頼できる電話番号がありません。\n\n詳しくはこちらをご確認ください。https://support.apple.com/HT204915"; diff --git a/Xcodes/Resources/ko.lproj/Localizable.strings b/Xcodes/Resources/ko.lproj/Localizable.strings index 24e0b6d..7f5653e 100644 --- a/Xcodes/Resources/ko.lproj/Localizable.strings +++ b/Xcodes/Resources/ko.lproj/Localizable.strings @@ -116,7 +116,7 @@ // SMS/2FA "DigitCodeDescription" = "신뢰할 수 있는 장치 중 하나에서 %d 자리 코드를 입력하세요."; "SendSMS" = "SMS 보내기"; -"EnterDigitCodeDescription" = "%@(으)로 전송된 %d 자리 코드를 입력하세요."; +"EnterDigitCodeDescription" = "%2$@(으)로 전송된 %1$d 자리 코드를 입력하세요."; "SelectTrustedPhone" = "SMS를 통해 %d 자리 코드를 수신하려면 신뢰할 수 있는 전화번호를 선택하세요."; "NoTrustedPhones" = "계정에 신뢰할 수 있는 전화번호가 없지만 이중 인증(2FA)에 필요합니다.\n\nhttps://support.apple.com/HT204915를 참조하세요."; diff --git a/Xcodes/Resources/nl.lproj/Localizable.strings b/Xcodes/Resources/nl.lproj/Localizable.strings index 2b52b12..e1fe455 100644 --- a/Xcodes/Resources/nl.lproj/Localizable.strings +++ b/Xcodes/Resources/nl.lproj/Localizable.strings @@ -120,7 +120,7 @@ // SMS/2FA "DigitCodeDescription" = "Voer de %d code in van een van je vertrouwde apparaten:"; "SendSMS" = "Verstuur SMS"; -"EnterDigitCodeDescription" = "Voer de %d code in die is verstuurd naar %@: "; +"EnterDigitCodeDescription" = "Voer de %1$d code in die is verstuurd naar %2$@: "; "SelectTrustedPhone" = "Selecteer een vertrouwd telefoonnumer on een %d code te ontvangen via SMS:"; "NoTrustedPhones" = "Je account heeft geen vertrouwde telefoonnummers, dit is nodig voor two-factor authenticatie.\n\nZie https://support.apple.com/HT204915."; diff --git a/Xcodes/Resources/pl.lproj/Localizable.strings b/Xcodes/Resources/pl.lproj/Localizable.strings index c505451..f1a968e 100644 --- a/Xcodes/Resources/pl.lproj/Localizable.strings +++ b/Xcodes/Resources/pl.lproj/Localizable.strings @@ -127,7 +127,7 @@ // SMS/2FA "DigitCodeDescription" = "Wprowadź %d-cyfrowy kod z jednego ze swoich zaufanych urządzeń:"; "SendSMS" = "Wyślij SMS"; -"EnterDigitCodeDescription" = "Wprowadź %d-cyfrowy kod wysłany do %@: "; +"EnterDigitCodeDescription" = "Wprowadź %1$d-cyfrowy kod wysłany do %2$@: "; "SelectTrustedPhone" = "Wybierz zaufany numer telefonu, aby otrzymać %d-cyfrowy kod przez SMS:"; "NoTrustedPhones" = "Twoje konto nie ma żadnych zaufanych numerów telefonów, ale są one wymagane do autoryzacji dwuskładnikowej.\n\nZobacz https://support.apple.com/HT204915."; diff --git a/Xcodes/Resources/pt-BR.lproj/Localizable.strings b/Xcodes/Resources/pt-BR.lproj/Localizable.strings index 9eb73a3..605b2af 100644 --- a/Xcodes/Resources/pt-BR.lproj/Localizable.strings +++ b/Xcodes/Resources/pt-BR.lproj/Localizable.strings @@ -117,7 +117,7 @@ // SMS/2FA "DigitCodeDescription" = "Insira o código de %d dígitos de um de seus dispositivos confiáveis:"; "SendSMS" = "Enviar SMS"; -"EnterDigitCodeDescription" = "Insira o código de %d dígitos enviado para %@: "; +"EnterDigitCodeDescription" = "Insira o código de %1$d dígitos enviado para %2$@: "; "SelectTrustedPhone" = "Selecione um número de telefone confiável para receber um código de %d dígitos via SMS:"; "NoTrustedPhones" = "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."; diff --git a/Xcodes/Resources/ru.lproj/Localizable.strings b/Xcodes/Resources/ru.lproj/Localizable.strings index e785967..4569fea 100644 --- a/Xcodes/Resources/ru.lproj/Localizable.strings +++ b/Xcodes/Resources/ru.lproj/Localizable.strings @@ -124,7 +124,7 @@ // SMS/2FA "DigitCodeDescription" = "Введите %d цифровой код с одного из ваших доверенных устройств:"; "SendSMS" = "Отправить SMS"; -"EnterDigitCodeDescription" = "Введите %d цифровой код, отправленный на %@: "; +"EnterDigitCodeDescription" = "Введите %1$d цифровой код, отправленный на %2$@: "; "SelectTrustedPhone" = "Выберите доверенный номер телефона для получения %d цифрового кода по SMS:"; "NoTrustedPhones" = "В вашем аккаунтe нет доверенных телефонных номеров, но они необходимы для двухфакторной аутентификации.\n\nСм. https://support.apple.com/HT204915."; diff --git a/Xcodes/Resources/tr.lproj/Localizable.strings b/Xcodes/Resources/tr.lproj/Localizable.strings index 1cbb514..7b1421b 100644 --- a/Xcodes/Resources/tr.lproj/Localizable.strings +++ b/Xcodes/Resources/tr.lproj/Localizable.strings @@ -127,7 +127,7 @@ // SMS/2FA "DigitCodeDescription" = "Güvenilir cihazından aldığın %d rakamlı kodu gir:"; "SendSMS" = "SMS Gönder"; -"EnterDigitCodeDescription" = "%@ kaynağından gönderilen %d rakamlı kodu gir: "; +"EnterDigitCodeDescription" = "%2$@ kaynağından gönderilen %1$d rakamlı kodu gir: "; "SelectTrustedPhone" = "%d rakamlı kodu SMS olarak almak için güvenilir telefon numarasını seç:"; "NoTrustedPhones" = "Hesabına tanımlı güvenli bir telefon numarası yok, fakat iki aşamalı doğrulama için gerekmektedir.\n\nDaha fazlası için https://support.apple.com/HT204915 adresine bakın."; diff --git a/Xcodes/Resources/uk.lproj/Localizable.strings b/Xcodes/Resources/uk.lproj/Localizable.strings index 8dd8df7..752586a 100644 --- a/Xcodes/Resources/uk.lproj/Localizable.strings +++ b/Xcodes/Resources/uk.lproj/Localizable.strings @@ -115,7 +115,7 @@ // SMS/2FA "DigitCodeDescription" = "Введіть %d-значний код з одного з довірених пристроїв:"; "SendSMS" = "Надіслати СМС"; -"EnterDigitCodeDescription" = "Введіть %d-значний код відправлений на %@:"; +"EnterDigitCodeDescription" = "Введіть %1$d-значний код відправлений на %2$@:"; "SelectTrustedPhone" = "Виберіть довірений номер телефону щоб отримати %d-значний код в СМС:"; "NoTrustedPhones" = "Ваш аккаунт не має перевіреного телефонного номеру, що вимагається для двофакторної авторизації.\n\nДивіться https://support.apple.com/HT204915."; diff --git a/Xcodes/Resources/zh-Hans.lproj/Localizable.strings b/Xcodes/Resources/zh-Hans.lproj/Localizable.strings index 3bea058..4997236 100644 --- a/Xcodes/Resources/zh-Hans.lproj/Localizable.strings +++ b/Xcodes/Resources/zh-Hans.lproj/Localizable.strings @@ -124,7 +124,7 @@ // SMS/2FA "DigitCodeDescription" = "请输入从信任的设备接收到的%d位代码:"; "SendSMS" = "发送短信"; -"EnterDigitCodeDescription" = "请输入%d位代码,已发送到%@:"; +"EnterDigitCodeDescription" = "请输入%1$d位代码,已发送到%2$@:"; "SelectTrustedPhone" = "请选择一个信任的手机号来从短信接收%d位代码:"; "NoTrustedPhones" = "您的账户没有任何信任的手机号,但这是两步验证所必须的。\n\n请参阅 https://support.apple.com/HT204915。"; diff --git a/Xcodes/Resources/zh-Hant.lproj/Localizable.strings b/Xcodes/Resources/zh-Hant.lproj/Localizable.strings index 3f16514..b655c83 100644 --- a/Xcodes/Resources/zh-Hant.lproj/Localizable.strings +++ b/Xcodes/Resources/zh-Hant.lproj/Localizable.strings @@ -116,7 +116,7 @@ // SMS/2FA "DigitCodeDescription" = "請輸入顯示在你其中一個信任裝置中的 %d 位數密碼:"; "SendSMS" = "傳送簡訊"; -"EnterDigitCodeDescription" = "請輸入 %d 位數密碼,已傳送至 %@: "; +"EnterDigitCodeDescription" = "請輸入 %1$d 位數密碼,已傳送至 %2$@: "; "SelectTrustedPhone" = "請輸入一個你想用來接收 %d 位數密碼簡訊的電話號碼:"; "NoTrustedPhones" = "你的帳號沒有任何已信任的手機號碼,但兩階段認證需要信任的手機號碼。\n\n請參閱 https://support.apple.com/HT204915."; From 13715930af765c58cecb80fe240fcb1d621f403f Mon Sep 17 00:00:00 2001 From: Daniel Chick Date: Tue, 17 Oct 2023 18:14:51 -0500 Subject: [PATCH 20/86] Update InstallButton with progress view and styling from list row --- Xcodes/Backend/XcodeCommands.swift | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Xcodes/Backend/XcodeCommands.swift b/Xcodes/Backend/XcodeCommands.swift index 76e9924..9967abb 100644 --- a/Xcodes/Backend/XcodeCommands.swift +++ b/Xcodes/Backend/XcodeCommands.swift @@ -34,16 +34,26 @@ struct XcodeCommands: Commands { struct InstallButton: View { @EnvironmentObject var appState: AppState + @State private var isLoading = false + let xcode: Xcode? - + var body: some View { Button(action: install) { - Text("Install") - .help("Install") - } + if isLoading { + ProgressView() + .colorInvert() + .controlSize(.small) + } else { + Text("Install") + .textCase(.uppercase) + .help("InstallDescription") + } + }.buttonStyle(AppStoreButtonStyle(primary: false, highlighted: false)) } - + private func install() { + isLoading = true guard let xcode = xcode else { return } appState.checkMinVersionAndInstall(id: xcode.id) } From 5b1cc4a93de44bb90f7cfe48c904c26732b34660 Mon Sep 17 00:00:00 2001 From: Daniel Chick Date: Tue, 17 Oct 2023 18:15:18 -0500 Subject: [PATCH 21/86] Swap button to InstallButton --- Xcodes/Frontend/XcodeList/XcodeListViewRow.swift | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift b/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift index 555c361..4757977 100644 --- a/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift +++ b/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift @@ -110,10 +110,7 @@ struct XcodeListViewRow: View { .buttonStyle(AppStoreButtonStyle(primary: true, highlighted: selected)) .help("OpenDescription") case .notInstalled: - Button("Install") { appState.checkMinVersionAndInstall(id: xcode.id) } - .textCase(.uppercase) - .buttonStyle(AppStoreButtonStyle(primary: false, highlighted: selected)) - .help("InstallDescription") + InstallButton(xcode: xcode) case let .installing(installationStep): InstallationStepRowView( installationStep: installationStep, From 2f749deb8d51b1863d7f1eee8740b0e68d03e746 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Tue, 21 Nov 2023 23:46:23 -0600 Subject: [PATCH 22/86] cleans up project team so it builds --- Xcodes.xcodeproj/project.pbxproj | 42 ++++++++++++++++---------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 19e9e63..0ea5669 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -102,6 +102,7 @@ CAFE4AB425B7D3AF0064FE51 /* AdvancedPreferencePane.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFE4AB325B7D3AF0064FE51 /* AdvancedPreferencePane.swift */; }; CAFE4ABC25B7D54B0064FE51 /* UpdatesPreferencePane.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFE4ABB25B7D54B0064FE51 /* UpdatesPreferencePane.swift */; }; CAFFFED8259CDA5000903F81 /* XcodeListViewRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFFFED7259CDA5000903F81 /* XcodeListViewRow.swift */; }; + E689540325BE8C64000EBCEA /* DockProgress in Frameworks */ = {isa = PBXBuildFile; productRef = E689540225BE8C64000EBCEA /* DockProgress */; }; E81D7EA02805250100A205FC /* Collection+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E81D7E9F2805250100A205FC /* Collection+.swift */; }; E872EE4E2808D4F100D3DD8B /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E872EE502808D4F100D3DD8B /* Localizable.strings */; }; E87AB3C52939B65E00D72F43 /* Hardware.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87AB3C42939B65E00D72F43 /* Hardware.swift */; }; @@ -116,7 +117,6 @@ E8E98A9025D8631800EC89A0 /* InstallationStepRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFBC3FF259AC17F00E2A3D8 /* InstallationStepRowView.swift */; }; E8E98A9625D863D700EC89A0 /* InstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */; }; E8F81FC4282D8A17006CBD0F /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = E8F81FC3282D8A17006CBD0F /* Sparkle */; }; - E689540325BE8C64000EBCEA /* DockProgress in Frameworks */ = {isa = PBXBuildFile; productRef = E689540225BE8C64000EBCEA /* DockProgress */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1087,7 +1087,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CODE_SIGN_STYLE = Automatic; CREATE_INFOPLIST_SECTION_IN_BINARY = YES; - DEVELOPMENT_TEAM = PBH8V487HB; + DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "$(SRCROOT)/$(TARGET_NAME)/Info.plist"; MARKETING_VERSION = 1.0.3; @@ -1137,7 +1137,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CODE_SIGN_STYLE = Automatic; CREATE_INFOPLIST_SECTION_IN_BINARY = YES; - DEVELOPMENT_TEAM = PBH8V487HB; + DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "$(SRCROOT)/$(TARGET_NAME)/Info.plist"; MARKETING_VERSION = 1.0.3; @@ -1283,7 +1283,7 @@ COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 18; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; - DEVELOPMENT_TEAM = PBH8V487HB; + DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = Xcodes/Resources/Info.plist; @@ -1307,7 +1307,7 @@ COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 18; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; - DEVELOPMENT_TEAM = PBH8V487HB; + DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = Xcodes/Resources/Info.plist; @@ -1329,7 +1329,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = PBH8V487HB; + DEVELOPMENT_TEAM = ZU6GR6B2FY; INFOPLIST_FILE = XcodesTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -1350,7 +1350,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = PBH8V487HB; + DEVELOPMENT_TEAM = ZU6GR6B2FY; INFOPLIST_FILE = XcodesTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -1474,14 +1474,6 @@ minimumVersion = 0.6.0; }; }; - E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/sparkle-project/Sparkle"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.0.0; - }; - }; E689540125BE8C64000EBCEA /* XCRemoteSwiftPackageReference "DockProgress" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sindresorhus/DockProgress"; @@ -1490,6 +1482,14 @@ minimumVersion = 3.2.0; }; }; + E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sparkle-project/Sparkle"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.0.0; + }; + }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ @@ -1537,16 +1537,16 @@ package = CAC28186259EE27200B8AB0B /* XCRemoteSwiftPackageReference "CombineExpectations" */; productName = CombineExpectations; }; - E8F81FC3282D8A17006CBD0F /* Sparkle */ = { - isa = XCSwiftPackageProductDependency; - package = E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */; - productName = Sparkle; - }; E689540225BE8C64000EBCEA /* DockProgress */ = { isa = XCSwiftPackageProductDependency; package = E689540125BE8C64000EBCEA /* XCRemoteSwiftPackageReference "DockProgress" */; productName = DockProgress; }; + E8F81FC3282D8A17006CBD0F /* Sparkle */ = { + isa = XCSwiftPackageProductDependency; + package = E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */; + productName = Sparkle; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = CAD2E7962449574E00113D76 /* Project object */; From 19f1fd876dca72db0fff4089afc3a1749eb57843 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Tue, 21 Nov 2023 23:50:25 -0600 Subject: [PATCH 23/86] fix: settings link on Sonoma not working --- Xcodes/Frontend/XcodeList/MainToolbar.swift | 27 +++++++++++++-------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/Xcodes/Frontend/XcodeList/MainToolbar.swift b/Xcodes/Frontend/XcodeList/MainToolbar.swift index 69a48f2..e355304 100644 --- a/Xcodes/Frontend/XcodeList/MainToolbar.swift +++ b/Xcodes/Frontend/XcodeList/MainToolbar.swift @@ -86,16 +86,23 @@ struct MainToolbarModifier: ViewModifier { .keyboardShortcut(KeyboardShortcut("i", modifiers: [.command, .option])) .help("InfoDescription") - Button(action: { - if #available(macOS 13, *) { - NSApp.sendAction(Selector(("showSettingsWindow:")), to: nil, from: nil) - } else { - NSApp.sendAction(Selector(("showPreferencesWindow:")), to: nil, from: nil) - } - }, label: { - Label("Preferences", systemImage: "gearshape") - }) - .help("PreferencesDescription") + if #available(macOS 14, *) { + SettingsLink(label: { + Label("Preferences", systemImage: "gearshape") + }) + .help("PreferencesDescription") + } else { + Button(action: { + if #available(macOS 13, *) { + NSApp.sendAction(Selector(("showSettingsWindow:")), to: nil, from: nil) + } else { + NSApp.sendAction(Selector(("showPreferencesWindow:")), to: nil, from: nil) + } + }, label: { + Label("Preferences", systemImage: "gearshape") + }) + .help("PreferencesDescription") + } TextField("Search", text: $searchText) .textFieldStyle(RoundedBorderTextFieldStyle()) From 44a85d63dbc91cb422fdb930a4170c7cf3f01f7f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Nov 2023 10:43:03 +0000 Subject: [PATCH 24/86] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/appcast.yml | 4 ++-- .github/workflows/ci.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/appcast.yml b/.github/workflows/appcast.yml index 55603a3..95d4694 100644 --- a/.github/workflows/appcast.yml +++ b/.github/workflows/appcast.yml @@ -9,9 +9,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout 🛎 - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: - # If you're using actions/checkout@v3 you must set persist-credentials to false in most cases for the deployment to work correctly. + # If you're using actions/checkout@v4 you must set persist-credentials to false in most cases for the deployment to work correctly. persist-credentials: false - name: Cache 📦 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eb4d569..e0c0606 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ jobs: test: runs-on: macos-12 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Run tests env: DEVELOPER_DIR: /Applications/Xcode_14.2.app From d9917ce2c4f8ca635110b30064c6f47424c8ced6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Nov 2023 10:43:08 +0000 Subject: [PATCH 25/86] Bump ruby/setup-ruby from 1.152.0 to 1.161.0 Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.152.0 to 1.161.0. - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Commits](https://github.com/ruby/setup-ruby/compare/v1.152.0...v1.161.0) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/appcast.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appcast.yml b/.github/workflows/appcast.yml index 55603a3..009104e 100644 --- a/.github/workflows/appcast.yml +++ b/.github/workflows/appcast.yml @@ -23,7 +23,7 @@ jobs: ${{ runner.os }}-gems- - name: Setup Ruby, JRuby and TruffleRuby - uses: ruby/setup-ruby@v1.152.0 + uses: ruby/setup-ruby@v1.161.0 with: ruby-version: '2.7' From ca363e1398c957ac408905eec523226d47c25413 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Nov 2023 10:43:13 +0000 Subject: [PATCH 26/86] Bump actions/cache from 3.3.1 to 3.3.2 Bumps [actions/cache](https://github.com/actions/cache) from 3.3.1 to 3.3.2. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v3.3.1...v3.3.2) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/appcast.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appcast.yml b/.github/workflows/appcast.yml index 55603a3..a5f8bd0 100644 --- a/.github/workflows/appcast.yml +++ b/.github/workflows/appcast.yml @@ -15,7 +15,7 @@ jobs: persist-credentials: false - name: Cache 📦 - uses: actions/cache@v3.3.1 + uses: actions/cache@v3.3.2 with: path: AppCast/vendor/bundle key: ${{ runner.os }}-gems-v1.0-${{ hashFiles('AppCast/Gemfile') }} From b9dc7bf75794c0157d1fbe050463b29009b89706 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Wed, 22 Nov 2023 08:38:10 -0600 Subject: [PATCH 27/86] update runner to MacOS13, Xcode 15 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eb4d569..79fc835 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,10 +8,10 @@ on: jobs: test: - runs-on: macos-12 + runs-on: macos-13 steps: - uses: actions/checkout@v3 - name: Run tests env: - DEVELOPER_DIR: /Applications/Xcode_14.2.app + DEVELOPER_DIR: /Applications/Xcode_15.0.1.app run: xcodebuild test -scheme Xcodes From 7079e062d271c664efc1e346cba45d312896d8dc Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Thu, 12 Oct 2023 08:49:11 +0700 Subject: [PATCH 28/86] move release date view to `ReleaseDateView.swift` - I moved outside 2 lines of `.frame(maxWidth: .infinity, alignment: .leading)` because this layout job should belong to `InfoPane` - I added preview blocks for testing --- Xcodes.xcodeproj/project.pbxproj | 4 ++ Xcodes/Frontend/InfoPane/InfoPane.swift | 19 +------ .../Frontend/InfoPane/ReleaseDateView.swift | 57 +++++++++++++++++++ 3 files changed, 63 insertions(+), 17 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/ReleaseDateView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 0ea5669..d4b06bd 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 536CFDD4263C9A8000026CE0 /* XcodesSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536CFDD3263C9A8000026CE0 /* XcodesSheet.swift */; }; 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CBAB2B263DCC9100410495 /* XcodesAlert.swift */; }; 63EAA4EB259944450046AB8F /* ProgressButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EAA4EA259944450046AB8F /* ProgressButton.swift */; }; + B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; CA11E7BA2598476C00D2EE1C /* XcodeCommands.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA11E7B92598476C00D2EE1C /* XcodeCommands.swift */; }; CA2518EC25A7FF2B00F08414 /* AppStateUpdateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA2518EB25A7FF2B00F08414 /* AppStateUpdateTests.swift */; }; CA25192A25A9644800F08414 /* XcodeInstallState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA25192925A9644800F08414 /* XcodeInstallState.swift */; }; @@ -192,6 +193,7 @@ A0187D39285792D1002F46F9 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; AAB037D32839BD4700017680 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; AB4EB0DE28541FA000FF3B1D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B648F22B2810C1130096781B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; C0AE7FA4283002DC00DA63D2 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; CA11E7B92598476C00D2EE1C /* XcodeCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodeCommands.swift; sourceTree = ""; }; @@ -617,6 +619,7 @@ children = ( CAFBDC67259A308B003DCC5A /* InfoPane.swift */, E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, + B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */, ); path = InfoPane; sourceTree = ""; @@ -842,6 +845,7 @@ CA9FF8662595130600E47BAF /* View+IsHidden.swift in Sources */, CAE4248C259A68B800B8B246 /* Optional+IsNotNil.swift in Sources */, CA9FF9362595B44700E47BAF /* HelperClient.swift in Sources */, + B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */, CAA8587C25A2B37900ACF8C0 /* IsTesting.swift in Sources */, CABFA9CA2592EEEA00380FEE /* AppState+Update.swift in Sources */, CA44901F2463AD34003D8213 /* Tag.swift in Sources */, diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 3842a55..2a71240 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -55,7 +55,8 @@ struct InfoPane: View { Group{ releaseNotes(for: xcode) - releaseDate(for: xcode) + ReleaseDateView(date: xcode.releaseDate) + .frame(maxWidth: .infinity, alignment: .leading) identicalBuilds(for: xcode) compatibility(for: xcode) sdks(for: xcode) @@ -113,22 +114,6 @@ struct InfoPane: View { } } - @ViewBuilder - private func releaseDate(for xcode: Xcode) -> some View { - if let releaseDate = xcode.releaseDate { - VStack(alignment: .leading) { - Text("ReleaseDate") - .font(.headline) - .frame(maxWidth: .infinity, alignment: .leading) - Text("\(releaseDate, style: .date)") - .font(.subheadline) - .frame(maxWidth: .infinity, alignment: .leading) - } - } else { - EmptyView() - } - } - @ViewBuilder private func releaseNotes(for xcode: Xcode) -> some View { if let releaseNotesURL = xcode.releaseNotesURL { diff --git a/Xcodes/Frontend/InfoPane/ReleaseDateView.swift b/Xcodes/Frontend/InfoPane/ReleaseDateView.swift new file mode 100644 index 0000000..0695f4d --- /dev/null +++ b/Xcodes/Frontend/InfoPane/ReleaseDateView.swift @@ -0,0 +1,57 @@ +// +// ReleaseDateView.swift +// Xcodes +// +// Created by Duong Thai on 11/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI + +struct ReleaseDateView: View { + let date: Date? + + var body: some View { + if let date = date { + VStack(alignment: .leading) { + Text("ReleaseDate (old version)") + .font(.headline) + Text("\(date, style: .date)") + .font(.subheadline) + } + } else { + EmptyView() + } + } + + init(date: Date? = nil) { + self.date = date + } +} + +struct ReleaseDateView_Preview: PreviewProvider { + static var previews: some View { + WrapperView() + } +} + +private struct WrapperView: View { + @State var isNil = false + var date: Date? { isNil ? nil : Date() } + + var body: some View { + VStack { + HStack { + ReleaseDateView(date: date) + .border(.red) + } + Spacer() + Toggle(isOn: $isNil) { + Text("Is Nil?") + } + } + .animation(.default) + .frame(width: 300, height: 100) + .padding() + } +} From e56d83dbe3767ad4c0ecf2ff43b3354453faee1f Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Fri, 13 Oct 2023 13:37:41 +0700 Subject: [PATCH 29/86] move identical builds view to `IdenticalBuildView.swift` --- Xcodes.xcodeproj/project.pbxproj | 4 + .../InfoPane/IdenticalBuildView.swift | 83 +++++++++++++++++++ Xcodes/Frontend/InfoPane/InfoPane.swift | 30 +------ 3 files changed, 88 insertions(+), 29 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/IdenticalBuildView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index d4b06bd..cb19dcd 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -14,6 +14,7 @@ 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CBAB2B263DCC9100410495 /* XcodesAlert.swift */; }; 63EAA4EB259944450046AB8F /* ProgressButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EAA4EA259944450046AB8F /* ProgressButton.swift */; }; B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; + B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */; }; CA11E7BA2598476C00D2EE1C /* XcodeCommands.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA11E7B92598476C00D2EE1C /* XcodeCommands.swift */; }; CA2518EC25A7FF2B00F08414 /* AppStateUpdateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA2518EB25A7FF2B00F08414 /* AppStateUpdateTests.swift */; }; CA25192A25A9644800F08414 /* XcodeInstallState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA25192925A9644800F08414 /* XcodeInstallState.swift */; }; @@ -194,6 +195,7 @@ AAB037D32839BD4700017680 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; AB4EB0DE28541FA000FF3B1D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; + B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdenticalBuildView.swift; sourceTree = ""; }; B648F22B2810C1130096781B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; C0AE7FA4283002DC00DA63D2 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; CA11E7B92598476C00D2EE1C /* XcodeCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodeCommands.swift; sourceTree = ""; }; @@ -620,6 +622,7 @@ CAFBDC67259A308B003DCC5A /* InfoPane.swift */, E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */, + B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */, ); path = InfoPane; sourceTree = ""; @@ -891,6 +894,7 @@ E87DD6EB25D053FA00D86808 /* Progress+.swift in Sources */, CAC281CD259F97FA00B8AB0B /* ObservingProgressIndicator.swift in Sources */, CABFA9C22592EEEA00380FEE /* Publisher+Resumable.swift in Sources */, + B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */, CAFBDC68259A308B003DCC5A /* InfoPane.swift in Sources */, E87AB3C52939B65E00D72F43 /* Hardware.swift in Sources */, CAA1CB4D255A5CFD003FD669 /* SignInPhoneListView.swift in Sources */, diff --git a/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift b/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift new file mode 100644 index 0000000..3c78eb0 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift @@ -0,0 +1,83 @@ +// +// IdenticalBuildView.swift +// Xcodes +// +// Created by Duong Thai on 11/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI +import Version + +struct IdenticalBuildsView: View { + let builds: [Version] + private let isEmpty: Bool + private let accessibilityDescription: String + + var body: some View { + if isEmpty { + EmptyView() + } else { + VStack(alignment: .leading) { + HStack { + Text("IdenticalBuilds") + Image(systemName: "square.fill.on.square.fill") + .foregroundColor(.secondary) + .accessibility(hidden: true) + .help("IdenticalBuilds.help") + } + .font(.headline) + + ForEach(builds, id: \.description) { version in + Text("• \(version.appleDescription)") + .font(.subheadline) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + .accessibilityElement() + .accessibility(label: Text("IdenticalBuilds")) + .accessibility(value: Text(accessibilityDescription)) + .accessibility(hint: Text("IdenticalBuilds.help")) + } + } + + init(builds: [Version]) { + self.builds = builds + self.isEmpty = builds.isEmpty + self.accessibilityDescription = builds + .map(\.appleDescription) + .joined(separator: ", ") + } +} + +struct IdenticalBuildsView_Preview: PreviewProvider { + static var previews: some View { + WrapperView() + } +} + +private struct WrapperView: View { + @State var isEmpty = false + var builds: [Version] { + isEmpty + ? [] + : [.init(xcodeVersion: "15.0")!, + .init(xcodeVersion: "15.1")!] + } + + var body: some View { + VStack { + HStack { + IdenticalBuildsView(builds: builds) + .border(.red) + } + Spacer() + Toggle(isOn: $isEmpty) { + Text("Is Empty?") + } + } + .animation(.default) + .frame(width: 300, height: 100) + .padding() + } +} diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 2a71240..1af1f9c 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -57,7 +57,7 @@ struct InfoPane: View { releaseNotes(for: xcode) ReleaseDateView(date: xcode.releaseDate) .frame(maxWidth: .infinity, alignment: .leading) - identicalBuilds(for: xcode) + IdenticalBuildsView(builds: xcode.identicalBuilds) compatibility(for: xcode) sdks(for: xcode) compilers(for: xcode) @@ -86,34 +86,6 @@ struct InfoPane: View { } } - @ViewBuilder - private func identicalBuilds(for xcode: Xcode) -> some View { - if !xcode.identicalBuilds.isEmpty { - VStack(alignment: .leading) { - HStack { - Text("IdenticalBuilds") - Image(systemName: "square.fill.on.square.fill") - .foregroundColor(.secondary) - .accessibility(hidden: true) - .help("IdenticalBuilds.help") - } - .font(.headline) - - ForEach(xcode.identicalBuilds, id: \.description) { version in - Text("• \(version.appleDescription)") - .font(.subheadline) - } - } - .frame(maxWidth: .infinity, alignment: .leading) - .accessibilityElement() - .accessibility(label: Text("IdenticalBuilds")) - .accessibility(value: Text(xcode.identicalBuilds.map(\.appleDescription).joined(separator: ", "))) - .accessibility(hint: Text("IdenticalBuilds.help")) - } else { - EmptyView() - } - } - @ViewBuilder private func releaseNotes(for xcode: Xcode) -> some View { if let releaseNotesURL = xcode.releaseNotesURL { From 03eb166c3d085de2a4fb414887de024dc20fa89e Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Fri, 13 Oct 2023 14:43:59 +0700 Subject: [PATCH 30/86] move icon to `IconView.swift` --- Xcodes.xcodeproj/project.pbxproj | 4 ++ Xcodes/Frontend/InfoPane/IconView.swift | 64 +++++++++++++++++++++++++ Xcodes/Frontend/InfoPane/InfoPane.swift | 14 +----- 3 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/IconView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index cb19dcd..e45b976 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 63EAA4EB259944450046AB8F /* ProgressButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EAA4EA259944450046AB8F /* ProgressButton.swift */; }; B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */; }; + B0C6AD0D2AD91D7900E64698 /* IconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0C2AD91D7900E64698 /* IconView.swift */; }; CA11E7BA2598476C00D2EE1C /* XcodeCommands.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA11E7B92598476C00D2EE1C /* XcodeCommands.swift */; }; CA2518EC25A7FF2B00F08414 /* AppStateUpdateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA2518EB25A7FF2B00F08414 /* AppStateUpdateTests.swift */; }; CA25192A25A9644800F08414 /* XcodeInstallState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA25192925A9644800F08414 /* XcodeInstallState.swift */; }; @@ -196,6 +197,7 @@ AB4EB0DE28541FA000FF3B1D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdenticalBuildView.swift; sourceTree = ""; }; + B0C6AD0C2AD91D7900E64698 /* IconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconView.swift; sourceTree = ""; }; B648F22B2810C1130096781B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; C0AE7FA4283002DC00DA63D2 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; CA11E7B92598476C00D2EE1C /* XcodeCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodeCommands.swift; sourceTree = ""; }; @@ -623,6 +625,7 @@ E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */, B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */, + B0C6AD0C2AD91D7900E64698 /* IconView.swift */, ); path = InfoPane; sourceTree = ""; @@ -847,6 +850,7 @@ CABFAA492593162500380FEE /* Bundle+InfoPlistValues.swift in Sources */, CA9FF8662595130600E47BAF /* View+IsHidden.swift in Sources */, CAE4248C259A68B800B8B246 /* Optional+IsNotNil.swift in Sources */, + B0C6AD0D2AD91D7900E64698 /* IconView.swift in Sources */, CA9FF9362595B44700E47BAF /* HelperClient.swift in Sources */, B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */, CAA8587C25A2B37900ACF8C0 /* IsTesting.swift in Sources */, diff --git a/Xcodes/Frontend/InfoPane/IconView.swift b/Xcodes/Frontend/InfoPane/IconView.swift new file mode 100644 index 0000000..e7328d2 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/IconView.swift @@ -0,0 +1,64 @@ +// +// IconView.swift +// Xcodes +// +// Created by Duong Thai on 11/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI +import Path + +struct IconView: View { + let installState: XcodeInstallState + + var body: some View { + if case let .installed(path) = installState { + Image(nsImage: NSWorkspace.shared.icon(forFile: path.string)) + } else { + Image(systemName: "app.fill") + .resizable() + .frame(width: 32, height: 32) + .foregroundColor(.secondary) + } + } +} + +//#Preview { +// Group { +// IconView(path: "/Applications/Xcode.app") +// IconView() +// } +// .padding() +//} + +struct IconView_Preview: PreviewProvider { + static var previews: some View { + WrapperView() + } +} + +private struct WrapperView: View { + @State var isIcon = false + var state: XcodeInstallState { + isIcon + ? XcodeInstallState.notInstalled + : XcodeInstallState.installed(Path("/Applications/Xcode.app")!) + } + + var body: some View { + VStack { + HStack { + IconView(installState: state) + .border(.red) + } + Spacer() + Toggle(isOn: $isIcon) { + Text("Is an Icon?") + } + } + .animation(.default) + .frame(width: 300, height: 100) + .padding() + } +} diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 1af1f9c..ed91d6d 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -14,7 +14,7 @@ struct InfoPane: View { if let xcode = appState.allXcodes.first(where: { $0.id == selectedXcodeID }) { ScrollView { VStack(alignment: .leading, spacing: 16) { - icon(for: xcode) + IconView(installState: xcode.installState) .frame(maxWidth: .infinity, alignment: .center) Text(verbatim: "Xcode \(xcode.description) \(xcode.version.buildMetadataIdentifiersDisplay)") @@ -74,18 +74,6 @@ struct InfoPane: View { } } - @ViewBuilder - private func icon(for xcode: Xcode) -> some View { - if case let .installed(path) = xcode.installState { - Image(nsImage: NSWorkspace.shared.icon(forFile: path.string)) - } else { - Image(systemName: "app.fill") - .resizable() - .frame(width: 32, height: 32) - .foregroundColor(.secondary) - } - } - @ViewBuilder private func releaseNotes(for xcode: Xcode) -> some View { if let releaseNotesURL = xcode.releaseNotesURL { From f1fea6365c972e3a6d1134dc7d11a81608995dfa Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Fri, 13 Oct 2023 15:10:21 +0700 Subject: [PATCH 31/86] move release notes to `ReleaseNotesView.swift` - narrow down interfaces of some functions --- Xcodes.xcodeproj/project.pbxproj | 4 ++ Xcodes/Backend/AppState.swift | 4 +- Xcodes/Backend/XcodeCommands.swift | 7 ++- Xcodes/Frontend/InfoPane/InfoPane.swift | 24 +------ .../Frontend/InfoPane/ReleaseNotesView.swift | 62 +++++++++++++++++++ 5 files changed, 73 insertions(+), 28 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/ReleaseNotesView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index e45b976..701b465 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 536CFDD4263C9A8000026CE0 /* XcodesSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536CFDD3263C9A8000026CE0 /* XcodesSheet.swift */; }; 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CBAB2B263DCC9100410495 /* XcodesAlert.swift */; }; 63EAA4EB259944450046AB8F /* ProgressButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EAA4EA259944450046AB8F /* ProgressButton.swift */; }; + B0403CF02AD92D7B00137C09 /* ReleaseNotesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */; }; B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */; }; B0C6AD0D2AD91D7900E64698 /* IconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0C2AD91D7900E64698 /* IconView.swift */; }; @@ -195,6 +196,7 @@ A0187D39285792D1002F46F9 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; AAB037D32839BD4700017680 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; AB4EB0DE28541FA000FF3B1D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseNotesView.swift; sourceTree = ""; }; B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdenticalBuildView.swift; sourceTree = ""; }; B0C6AD0C2AD91D7900E64698 /* IconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconView.swift; sourceTree = ""; }; @@ -621,6 +623,7 @@ E8E98A9425D863B100EC89A0 /* InfoPane */ = { isa = PBXGroup; children = ( + B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */, CAFBDC67259A308B003DCC5A /* InfoPane.swift */, E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */, @@ -877,6 +880,7 @@ CA61A6E0259835580008926E /* Xcode.swift in Sources */, CAE4247F259A666100B8B246 /* MainWindow.swift in Sources */, CA452BB0259FD9770072DFA4 /* ProgressIndicator.swift in Sources */, + B0403CF02AD92D7B00137C09 /* ReleaseNotesView.swift in Sources */, CAFE4AB425B7D3AF0064FE51 /* AdvancedPreferencePane.swift in Sources */, CA9FF84E2595079F00E47BAF /* ScrollingTextView.swift in Sources */, CABFA9C12592EEEA00380FEE /* Version+.swift in Sources */, diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index 49e22de..1c92951 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -630,8 +630,8 @@ class AppState: ObservableObject { NSPasteboard.general.setString(installedXcodePath.string, forType: .string) } - func copyReleaseNote(xcode: Xcode) { - guard let url = xcode.releaseNotesURL else { return } + func copyReleaseNote(from url: URL?) { + guard let url = url else { return } NSPasteboard.general.declareTypes([.URL, .string], owner: nil) NSPasteboard.general.writeObjects([url as NSURL]) NSPasteboard.general.setString(url.absoluteString, forType: .string) diff --git a/Xcodes/Backend/XcodeCommands.swift b/Xcodes/Backend/XcodeCommands.swift index 76e9924..196e25d 100644 --- a/Xcodes/Backend/XcodeCommands.swift +++ b/Xcodes/Backend/XcodeCommands.swift @@ -173,8 +173,9 @@ struct CopyPathButton: View { } struct CopyReleaseNoteButton: View { + let url: URL? + @EnvironmentObject var appState: AppState - let xcode: Xcode? var body: some View { Button(action: copyReleaseNote) { @@ -184,8 +185,8 @@ struct CopyReleaseNoteButton: View { } private func copyReleaseNote() { - guard let xcode = xcode else { return } - appState.copyReleaseNote(xcode: xcode) + guard let url = url else { return } + appState.copyReleaseNote(from: url) } } diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index ed91d6d..293d804 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -54,7 +54,7 @@ struct InfoPane: View { Divider() Group{ - releaseNotes(for: xcode) + ReleaseNotesView(url: xcode.releaseNotesURL) ReleaseDateView(date: xcode.releaseDate) .frame(maxWidth: .infinity, alignment: .leading) IdenticalBuildsView(builds: xcode.identicalBuilds) @@ -74,28 +74,6 @@ struct InfoPane: View { } } - @ViewBuilder - private func releaseNotes(for xcode: Xcode) -> some View { - if let releaseNotesURL = xcode.releaseNotesURL { - Button(action: { openURL(releaseNotesURL) }) { - Label("ReleaseNotes", systemImage: "link") - } - .buttonStyle(LinkButtonStyle()) - .contextMenu(menuItems: { - releaseNotesMenu(for: xcode) - }) - .frame(maxWidth: .infinity, alignment: .leading) - .help("ReleaseNotes.help") - } else { - EmptyView() - } - } - - @ViewBuilder - private func releaseNotesMenu(for xcode: Xcode) -> some View { - CopyReleaseNoteButton(xcode: xcode) - } - @ViewBuilder private func compatibility(for xcode: Xcode) -> some View { if let requiredMacOSVersion = xcode.requiredMacOSVersion { diff --git a/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift b/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift new file mode 100644 index 0000000..a9aa3c1 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift @@ -0,0 +1,62 @@ +// +// ReleaseNotesView.swift +// Xcodes +// +// Created by Duong Thai on 13/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI + +struct ReleaseNotesView: View { + let url: URL? + + @SwiftUI.Environment(\.openURL) var openURL: OpenURLAction + + var body: some View { + if let url = url { + Button(action: { openURL(url) }) { + Label("ReleaseNotes", systemImage: "link") + } + .buttonStyle(LinkButtonStyle()) + .contextMenu(menuItems: { + CopyReleaseNoteButton(url: url) + }) + .frame(maxWidth: .infinity, alignment: .leading) + .help("ReleaseNotes.help") + } else { + EmptyView() + } + } +} + +struct ReleaseNotesView_Preview: PreviewProvider { + static var previews: some View { + WrapperView() + } +} + +private struct WrapperView: View { + @State var hasURL = false + var url: URL? { + hasURL + ? nil + : URL(string: "https://developer.apple.com/documentation/xcode-release-notes/xcode-12_3-release-notes/")! + } + + var body: some View { + VStack { + HStack { + ReleaseNotesView(url: url) + .border(.red) + } + Spacer() + Toggle(isOn: $hasURL) { + Text("Has URL?") + } + } + .animation(.default) + .frame(width: 300, height: 100) + .padding() + } +} From 77ca8a2571259f0f33ba8ca64ce0b9be25ce8a38 Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Fri, 13 Oct 2023 15:26:37 +0700 Subject: [PATCH 32/86] move the compatibility view to `CompatibilityView.swift` --- Xcodes.xcodeproj/project.pbxproj | 4 ++ .../Frontend/InfoPane/CompatibilityView.swift | 57 +++++++++++++++++++ Xcodes/Frontend/InfoPane/InfoPane.swift | 18 +----- 3 files changed, 62 insertions(+), 17 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/CompatibilityView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 701b465..da34e5f 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -14,6 +14,7 @@ 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CBAB2B263DCC9100410495 /* XcodesAlert.swift */; }; 63EAA4EB259944450046AB8F /* ProgressButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EAA4EA259944450046AB8F /* ProgressButton.swift */; }; B0403CF02AD92D7B00137C09 /* ReleaseNotesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */; }; + B0403CF22AD934B600137C09 /* CompatibilityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF12AD934B600137C09 /* CompatibilityView.swift */; }; B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */; }; B0C6AD0D2AD91D7900E64698 /* IconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0C2AD91D7900E64698 /* IconView.swift */; }; @@ -197,6 +198,7 @@ AAB037D32839BD4700017680 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; AB4EB0DE28541FA000FF3B1D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseNotesView.swift; sourceTree = ""; }; + B0403CF12AD934B600137C09 /* CompatibilityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompatibilityView.swift; sourceTree = ""; }; B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdenticalBuildView.swift; sourceTree = ""; }; B0C6AD0C2AD91D7900E64698 /* IconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconView.swift; sourceTree = ""; }; @@ -624,6 +626,7 @@ isa = PBXGroup; children = ( B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */, + B0403CF12AD934B600137C09 /* CompatibilityView.swift */, CAFBDC67259A308B003DCC5A /* InfoPane.swift */, E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */, @@ -875,6 +878,7 @@ CABFA9CD2592EEEA00380FEE /* Foundation.swift in Sources */, 36741BFF291E50F500A85AAE /* FileError.swift in Sources */, CA9FF8872595607900E47BAF /* InstalledXcode.swift in Sources */, + B0403CF22AD934B600137C09 /* CompatibilityView.swift in Sources */, 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */, CA42DD6E25AEA8B200BC0B0C /* Logger.swift in Sources */, CA61A6E0259835580008926E /* Xcode.swift in Sources */, diff --git a/Xcodes/Frontend/InfoPane/CompatibilityView.swift b/Xcodes/Frontend/InfoPane/CompatibilityView.swift new file mode 100644 index 0000000..9e23e35 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/CompatibilityView.swift @@ -0,0 +1,57 @@ +// +// CompatibilityView.swift +// Xcodes +// +// Created by Duong Thai on 13/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI + +struct CompatibilityView: View { + let requiredMacOSVersion: String? + + var body: some View { + if let requiredMacOSVersion = requiredMacOSVersion { + VStack(alignment: .leading) { + Text("Compatibility") + .font(.headline) + Text(String(format: localizeString("MacOSRequirement"), requiredMacOSVersion)) + .font(.subheadline) + } + } else { + EmptyView() + } + } +} + +struct CompatibilityView_Preview: PreviewProvider { + static var previews: some View { + WrapperView() + } +} + +private struct WrapperView: View { + @State var isNil = false + var requiredMacOSVersion: String? { + isNil + ? nil + : "10.15.4" + } + + var body: some View { + VStack { + HStack { + CompatibilityView(requiredMacOSVersion: requiredMacOSVersion) + .border(.red) + } + Spacer() + Toggle(isOn: $isNil) { + Text("Is Nil?") + } + } + .animation(.default) + .frame(width: 200, height: 100) + .padding() + } +} diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 293d804..26e1c47 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -58,7 +58,7 @@ struct InfoPane: View { ReleaseDateView(date: xcode.releaseDate) .frame(maxWidth: .infinity, alignment: .leading) IdenticalBuildsView(builds: xcode.identicalBuilds) - compatibility(for: xcode) + CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) sdks(for: xcode) compilers(for: xcode) } @@ -74,22 +74,6 @@ struct InfoPane: View { } } - @ViewBuilder - private func compatibility(for xcode: Xcode) -> some View { - if let requiredMacOSVersion = xcode.requiredMacOSVersion { - VStack(alignment: .leading) { - Text("Compatibility") - .font(.headline) - .frame(maxWidth: .infinity, alignment: .leading) - Text(String(format: localizeString("MacOSRequirement"), requiredMacOSVersion)) - .font(.subheadline) - .frame(maxWidth: .infinity, alignment: .leading) - } - } else { - EmptyView() - } - } - @ViewBuilder private func sdks(for xcode: Xcode) -> some View { if let sdks = xcode.sdks { From cecceea62f50a448adf2449b9385847815edafff Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Fri, 13 Oct 2023 15:31:03 +0700 Subject: [PATCH 33/86] remove `openURL` in `InfoPane` because `ReleaseNotesView` already has it --- Xcodes/Frontend/InfoPane/InfoPane.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 26e1c47..f57052f 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -8,8 +8,7 @@ import struct XCModel.Compilers struct InfoPane: View { @EnvironmentObject var appState: AppState let selectedXcodeID: Xcode.ID? - @SwiftUI.Environment(\.openURL) var openURL: OpenURLAction - + var body: some View { if let xcode = appState.allXcodes.first(where: { $0.id == selectedXcodeID }) { ScrollView { From 05f5c2cebfdc54bd8a4d16d79e6cc44846f9b8e2 Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Fri, 13 Oct 2023 15:47:30 +0700 Subject: [PATCH 34/86] rebase main --- Xcodes.xcodeproj/project.pbxproj | 4 ++ Xcodes/Frontend/InfoPane/InfoPane.swift | 75 ++++++++--------------- Xcodes/Frontend/InfoPane/SDKsView.swift | 81 +++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 49 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/SDKsView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index da34e5f..eeaa3d4 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 63EAA4EB259944450046AB8F /* ProgressButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EAA4EA259944450046AB8F /* ProgressButton.swift */; }; B0403CF02AD92D7B00137C09 /* ReleaseNotesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */; }; B0403CF22AD934B600137C09 /* CompatibilityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF12AD934B600137C09 /* CompatibilityView.swift */; }; + B0403CF42AD9381D00137C09 /* SDKsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF32AD9381D00137C09 /* SDKsView.swift */; }; B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */; }; B0C6AD0D2AD91D7900E64698 /* IconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0C2AD91D7900E64698 /* IconView.swift */; }; @@ -199,6 +200,7 @@ AB4EB0DE28541FA000FF3B1D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseNotesView.swift; sourceTree = ""; }; B0403CF12AD934B600137C09 /* CompatibilityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompatibilityView.swift; sourceTree = ""; }; + B0403CF32AD9381D00137C09 /* SDKsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDKsView.swift; sourceTree = ""; }; B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdenticalBuildView.swift; sourceTree = ""; }; B0C6AD0C2AD91D7900E64698 /* IconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconView.swift; sourceTree = ""; }; @@ -626,6 +628,7 @@ isa = PBXGroup; children = ( B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */, + B0403CF32AD9381D00137C09 /* SDKsView.swift */, B0403CF12AD934B600137C09 /* CompatibilityView.swift */, CAFBDC67259A308B003DCC5A /* InfoPane.swift */, E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, @@ -902,6 +905,7 @@ CABFAA2D2592FBFC00380FEE /* Configure.swift in Sources */, CA73510D257BFCEF00EA9CF8 /* NSAttributedString+.swift in Sources */, CAFBDB952598FE96003DCC5A /* FocusedValues.swift in Sources */, + B0403CF42AD9381D00137C09 /* SDKsView.swift in Sources */, CAC9F92D25BCDA4400B4965F /* HelperInstallState.swift in Sources */, E87DD6EB25D053FA00D86808 /* Progress+.swift in Sources */, CAC281CD259F97FA00B8AB0B /* ObservingProgressIndicator.swift in Sources */, diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index f57052f..f617165 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -2,8 +2,8 @@ import AppKit import Path import SwiftUI import Version -import struct XCModel.SDKs import struct XCModel.Compilers +import struct XCModel.SDKs struct InfoPane: View { @EnvironmentObject var appState: AppState @@ -18,12 +18,12 @@ struct InfoPane: View { Text(verbatim: "Xcode \(xcode.description) \(xcode.version.buildMetadataIdentifiersDisplay)") .font(.title) - + switch xcode.installState { case .notInstalled: InstallButton(xcode: xcode) downloadFileSize(for: xcode) - case .installing(let installationStep): + case let .installing(installationStep): InstallationStepDetailView(installationStep: installationStep) .fixedSize(horizontal: false, vertical: true) CancelInstallButton(xcode: xcode) @@ -36,32 +36,32 @@ struct InfoPane: View { .buttonStyle(PlainButtonStyle()) .help("RevealInFinder") } - + HStack { SelectButton(xcode: xcode) .disabled(xcode.selected) .help("Selected") - + OpenButton(xcode: xcode) .help("Open") - + Spacer() UninstallButton(xcode: xcode) } } - + Divider() - Group{ + Group { ReleaseNotesView(url: xcode.releaseNotesURL) ReleaseDateView(date: xcode.releaseDate) .frame(maxWidth: .infinity, alignment: .leading) IdenticalBuildsView(builds: xcode.identicalBuilds) CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) - sdks(for: xcode) + SDKsView(sdks: xcode.sdks) compilers(for: xcode) } - + Spacer() } .padding() @@ -72,34 +72,7 @@ struct InfoPane: View { .frame(minWidth: 200, maxWidth: .infinity) } } - - @ViewBuilder - private func sdks(for xcode: Xcode) -> some View { - if let sdks = xcode.sdks { - VStack(alignment: .leading) { - Text("SDKs") - .font(.headline) - .frame(maxWidth: .infinity, alignment: .leading) - - ForEach([ - ("macOS", \SDKs.macOS), - ("iOS", \.iOS), - ("watchOS", \.watchOS), - ("tvOS", \.tvOS), - ("visionOS", \.visionOS), - ], id: \.0) { row in - if let sdk = sdks[keyPath: row.1] { - Text("\(row.0): \(sdk.compactMap { $0.number }.joined(separator: ", "))") - .font(.subheadline) - .frame(maxWidth: .infinity, alignment: .leading) - } - } - } - } else { - EmptyView() - } - } - + @ViewBuilder private func compilers(for xcode: Xcode) -> some View { if let compilers = xcode.compilers { @@ -107,7 +80,7 @@ struct InfoPane: View { Text("Compilers") .font(.headline) .frame(maxWidth: .infinity, alignment: .leading) - + ForEach([ ("Swift", \Compilers.swift), ("Clang", \.clang), @@ -126,7 +99,7 @@ struct InfoPane: View { EmptyView() } } - + @ViewBuilder private func downloadFileSize(for xcode: Xcode) -> some View { // if we've downloaded it no need to show the download size @@ -143,7 +116,7 @@ struct InfoPane: View { EmptyView() } } - + @ViewBuilder private var empty: some View { Text("NoXcodeSelected") @@ -181,8 +154,8 @@ struct InfoPane_Previews: PreviewProvider { clang: .init(number: "7.3"), swift: .init(number: "5.3.2") ), - downloadFileSize: 242342424 - ) + downloadFileSize: 242_342_424 + ), ] }) .previewDisplayName("Populated, Installed, Selected") @@ -208,7 +181,8 @@ struct InfoPane_Previews: PreviewProvider { clang: .init(number: "7.3"), swift: .init(number: "5.3.2") ), - downloadFileSize: 242342424) + downloadFileSize: 242_342_424 + ), ] }) .previewDisplayName("Populated, Installed, Unselected") @@ -234,7 +208,8 @@ struct InfoPane_Previews: PreviewProvider { clang: .init(number: "7.3"), swift: .init(number: "5.3.2") ), - downloadFileSize: 242342424) + downloadFileSize: 242_342_424 + ), ] }) .previewDisplayName("Populated, Uninstalled") @@ -248,7 +223,8 @@ struct InfoPane_Previews: PreviewProvider { selected: false, icon: nil, sdks: nil, - compilers: nil) + compilers: nil + ), ] }) .previewDisplayName("Basic, installed") @@ -258,15 +234,16 @@ struct InfoPane_Previews: PreviewProvider { $0.allXcodes = [ .init( version: Version(major: 12, minor: 3, patch: 1, buildMetadataIdentifiers: ["1234A"]), - installState: .installing(.downloading(progress: configure(Progress(totalUnitCount: 100)) { $0.completedUnitCount = 40; $0.throughput = 232323232; $0.fileCompletedCount = 2323004; $0.fileTotalCount = 1193939393 })), + installState: .installing(.downloading(progress: configure(Progress(totalUnitCount: 100)) { $0.completedUnitCount = 40; $0.throughput = 232_323_232; $0.fileCompletedCount = 2_323_004; $0.fileTotalCount = 1_193_939_393 })), selected: false, icon: nil, sdks: nil, - compilers: nil) + compilers: nil + ), ] }) .previewDisplayName("Basic, installing") - + InfoPane(selectedXcodeID: nil) .environmentObject(configure(AppState()) { $0.allXcodes = [ diff --git a/Xcodes/Frontend/InfoPane/SDKsView.swift b/Xcodes/Frontend/InfoPane/SDKsView.swift new file mode 100644 index 0000000..f2d3ed9 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/SDKsView.swift @@ -0,0 +1,81 @@ +// +// SDKsView.swift +// Xcodes +// +// Created by Duong Thai on 13/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI +import struct XCModel.SDKs + +struct SDKsView: View { + let sdks: SDKs? + + var body: some View { + if let sdks = sdks { + VStack(alignment: .leading) { + Text("SDKs").font(.headline) + Text(Self.content(from: sdks)).font(.subheadline) + } + } else { + EmptyView() + } + } + + static private func content(from sdks: SDKs) -> String { + let content: String = [ + ("macOS", sdks.macOS), + ("iOS", sdks.iOS), + ("watchOS", sdks.watchOS), + ("tvOS", sdks.tvOS) + ].compactMap { // remove nil compiler + guard $0.1 != nil, // has version array + !$0.1!.isEmpty // has at least 1 version + else { return nil } + + let numbers = $0.1!.compactMap { $0.number } // remove nil number + guard !numbers.isEmpty // has at least 1 number + else { return nil } + + // description for each type of compilers + return "\($0.0): \(numbers.joined(separator: ", "))" + }.joined(separator: "\n") + + return content + } +} + +struct SDKsView_Preview: PreviewProvider { + static var previews: some View { + WrapperView() + } +} + +private struct WrapperView: View { + @State var isNil = false + var sdks: SDKs? { + isNil + ? nil + : SDKs(macOS: .init(number: "11.1"), + iOS: .init(number: "14.3"), + watchOS: .init(number: "7.3"), + tvOS: .init(number: "14.3")) + } + + var body: some View { + VStack { + HStack { + SDKsView(sdks: sdks) + .border(.red) + } + Spacer() + Toggle(isOn: $isNil) { + Text("Is Nil?") + } + } + .animation(.default) + .frame(width: 200, height: 100) + .padding() + } +} From 112829b5534d253c30c5ca896fc9a3abe0cfaf9c Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Thu, 23 Nov 2023 22:53:15 +0700 Subject: [PATCH 35/86] rebase main --- Xcodes.xcodeproj/project.pbxproj | 4 + Xcodes/Frontend/InfoPane/CompilersView.swift | 82 ++++++++++++++++++++ Xcodes/Frontend/InfoPane/InfoPane.swift | 29 +------ 3 files changed, 87 insertions(+), 28 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/CompilersView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index eeaa3d4..b108061 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -16,6 +16,7 @@ B0403CF02AD92D7B00137C09 /* ReleaseNotesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */; }; B0403CF22AD934B600137C09 /* CompatibilityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF12AD934B600137C09 /* CompatibilityView.swift */; }; B0403CF42AD9381D00137C09 /* SDKsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF32AD9381D00137C09 /* SDKsView.swift */; }; + B0403CF62AD9849E00137C09 /* CompilersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF52AD9849E00137C09 /* CompilersView.swift */; }; B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */; }; B0C6AD0D2AD91D7900E64698 /* IconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0C2AD91D7900E64698 /* IconView.swift */; }; @@ -201,6 +202,7 @@ B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseNotesView.swift; sourceTree = ""; }; B0403CF12AD934B600137C09 /* CompatibilityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompatibilityView.swift; sourceTree = ""; }; B0403CF32AD9381D00137C09 /* SDKsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDKsView.swift; sourceTree = ""; }; + B0403CF52AD9849E00137C09 /* CompilersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompilersView.swift; sourceTree = ""; }; B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdenticalBuildView.swift; sourceTree = ""; }; B0C6AD0C2AD91D7900E64698 /* IconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconView.swift; sourceTree = ""; }; @@ -629,6 +631,7 @@ children = ( B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */, B0403CF32AD9381D00137C09 /* SDKsView.swift */, + B0403CF52AD9849E00137C09 /* CompilersView.swift */, B0403CF12AD934B600137C09 /* CompatibilityView.swift */, CAFBDC67259A308B003DCC5A /* InfoPane.swift */, E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, @@ -921,6 +924,7 @@ CAE424B4259A764700B8B246 /* AppState+Install.swift in Sources */, CAE42487259A68A300B8B246 /* XcodeListCategory.swift in Sources */, CAA858C425A2BE4E00ACF8C0 /* Downloader.swift in Sources */, + B0403CF62AD9849E00137C09 /* CompilersView.swift in Sources */, E8977EA325C11E1500835F80 /* PreferencesView.swift in Sources */, CA9FF87B2595293E00E47BAF /* DataSource.swift in Sources */, CABFA9C92592EEEA00380FEE /* URLRequest+Apple.swift in Sources */, diff --git a/Xcodes/Frontend/InfoPane/CompilersView.swift b/Xcodes/Frontend/InfoPane/CompilersView.swift new file mode 100644 index 0000000..68d2f52 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/CompilersView.swift @@ -0,0 +1,82 @@ +// +// CompilersView.swift +// Xcodes +// +// Created by Duong Thai on 13/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI +import struct XCModel.Compilers + +struct CompilersView: View { + let compilers: Compilers? + + var body: some View { + if let compilers = compilers { + VStack(alignment: .leading) { + Text("Compilers").font(.headline) + Text(Self.content(from: compilers)).font(.subheadline) + } + } else { + EmptyView() + } + } + + static func content(from compilers: Compilers) -> String { + [ ("Swift", compilers.swift), + ("Clang", compilers.clang), + ("LLVM", compilers.llvm), + ("LLVM GCC", compilers.llvm_gcc), + ("GCC", compilers.gcc) + ].compactMap { // remove nil compiler + guard $0.1 != nil, // has version array + !$0.1!.isEmpty // has at least 1 version + else { return nil } + + let numbers = $0.1!.compactMap { $0.number } // remove nil number + guard !numbers.isEmpty // has at least 1 number + else { return nil } + + // description for each type of compilers + return "\($0.0): \(numbers.joined(separator: ", "))" + }.joined(separator: "\n") + } +} + +struct CompilersView_Preview: PreviewProvider { + static var previews: some View { + WrapperView() + } +} + +private struct WrapperView: View { + @State var isNil = false + var compilers: Compilers? { + isNil + ? nil + : Compilers( + gcc: .init(number: "4"), + llvm_gcc: .init(number: "213"), + llvm: .init(number: "2.3"), + clang: .init(number: "7.3"), + swift: .init(number: "5.3.2")) + } + + var body: some View { + VStack { + HStack { + CompilersView(compilers: compilers) + .border(.red) + } + Spacer() + Toggle(isOn: $isNil) { + Text("Is Nil?") + } + } + .animation(.default) + .frame(width: 200, height: 100) + .padding() + } +} + diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index f617165..5cf6eb2 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -59,7 +59,7 @@ struct InfoPane: View { IdenticalBuildsView(builds: xcode.identicalBuilds) CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) SDKsView(sdks: xcode.sdks) - compilers(for: xcode) + CompilersView(compilers: xcode.compilers) } Spacer() @@ -73,33 +73,6 @@ struct InfoPane: View { } } - @ViewBuilder - private func compilers(for xcode: Xcode) -> some View { - if let compilers = xcode.compilers { - VStack(alignment: .leading) { - Text("Compilers") - .font(.headline) - .frame(maxWidth: .infinity, alignment: .leading) - - ForEach([ - ("Swift", \Compilers.swift), - ("Clang", \.clang), - ("LLVM", \.llvm), - ("LLVM GCC", \.llvm_gcc), - ("GCC", \.gcc), - ], id: \.0) { row in - if let sdk = compilers[keyPath: row.1] { - Text("\(row.0): \(sdk.compactMap { $0.number }.joined(separator: ", "))") - .font(.subheadline) - .frame(maxWidth: .infinity, alignment: .leading) - } - } - } - } else { - EmptyView() - } - } - @ViewBuilder private func downloadFileSize(for xcode: Xcode) -> some View { // if we've downloaded it no need to show the download size From d08d2d38e4ee140de70c564dea918991722236e2 Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Fri, 13 Oct 2023 22:02:17 +0700 Subject: [PATCH 36/86] move and fix the `UnselectedView` rebase main --- Xcodes.xcodeproj/project.pbxproj | 4 ++++ Xcodes/Frontend/InfoPane/InfoPane.swift | 12 +--------- Xcodes/Frontend/InfoPane/UnselectedView.swift | 24 +++++++++++++++++++ 3 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/UnselectedView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index b108061..82ec9d9 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ B0403CF22AD934B600137C09 /* CompatibilityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF12AD934B600137C09 /* CompatibilityView.swift */; }; B0403CF42AD9381D00137C09 /* SDKsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF32AD9381D00137C09 /* SDKsView.swift */; }; B0403CF62AD9849E00137C09 /* CompilersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF52AD9849E00137C09 /* CompilersView.swift */; }; + B0403CF82AD991F800137C09 /* UnselectedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF72AD991F800137C09 /* UnselectedView.swift */; }; B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */; }; B0C6AD0D2AD91D7900E64698 /* IconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0C2AD91D7900E64698 /* IconView.swift */; }; @@ -203,6 +204,7 @@ B0403CF12AD934B600137C09 /* CompatibilityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompatibilityView.swift; sourceTree = ""; }; B0403CF32AD9381D00137C09 /* SDKsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDKsView.swift; sourceTree = ""; }; B0403CF52AD9849E00137C09 /* CompilersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompilersView.swift; sourceTree = ""; }; + B0403CF72AD991F800137C09 /* UnselectedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnselectedView.swift; sourceTree = ""; }; B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdenticalBuildView.swift; sourceTree = ""; }; B0C6AD0C2AD91D7900E64698 /* IconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconView.swift; sourceTree = ""; }; @@ -634,6 +636,7 @@ B0403CF52AD9849E00137C09 /* CompilersView.swift */, B0403CF12AD934B600137C09 /* CompatibilityView.swift */, CAFBDC67259A308B003DCC5A /* InfoPane.swift */, + B0403CF72AD991F800137C09 /* UnselectedView.swift */, E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */, B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */, @@ -915,6 +918,7 @@ CABFA9C22592EEEA00380FEE /* Publisher+Resumable.swift in Sources */, B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */, CAFBDC68259A308B003DCC5A /* InfoPane.swift in Sources */, + B0403CF82AD991F800137C09 /* UnselectedView.swift in Sources */, E87AB3C52939B65E00D72F43 /* Hardware.swift in Sources */, CAA1CB4D255A5CFD003FD669 /* SignInPhoneListView.swift in Sources */, CAFBDC6C259A3098003DCC5A /* View+Conditional.swift in Sources */, diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 5cf6eb2..9cb9abe 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -68,8 +68,7 @@ struct InfoPane: View { } .frame(minWidth: 200, maxWidth: .infinity) } else { - empty - .frame(minWidth: 200, maxWidth: .infinity) + UnselectedView() } } @@ -89,15 +88,6 @@ struct InfoPane: View { EmptyView() } } - - @ViewBuilder - private var empty: some View { - Text("NoXcodeSelected") - .font(.title) - .foregroundColor(.secondary) - .frame(maxWidth: .infinity, maxHeight: .infinity) - .padding() - } } struct InfoPane_Previews: PreviewProvider { diff --git a/Xcodes/Frontend/InfoPane/UnselectedView.swift b/Xcodes/Frontend/InfoPane/UnselectedView.swift new file mode 100644 index 0000000..4b6c2af --- /dev/null +++ b/Xcodes/Frontend/InfoPane/UnselectedView.swift @@ -0,0 +1,24 @@ +// +// UnselectedView.swift +// Xcodes +// +// Created by Duong Thai on 13/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI + +struct UnselectedView: View { + var body: some View { + Text("NoXcodeSelected") + .font(.title) + .foregroundColor(.secondary) + } +} + +struct UnselectedView_Preview: PreviewProvider { + static var previews: some View { + UnselectedView() + .padding() + } +} From d172df68e3cb8b662d2848ac73befa42458abdde Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Fri, 13 Oct 2023 23:18:55 +0700 Subject: [PATCH 37/86] move and fix the `NotInstalledStateButtonsView` --- Xcodes.xcodeproj/project.pbxproj | 4 ++ Xcodes/Frontend/InfoPane/InfoPane.swift | 6 +- .../NotInstalledStateButtonsView.swift | 68 +++++++++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/NotInstalledStateButtonsView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 82ec9d9..1198295 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ B0403CF42AD9381D00137C09 /* SDKsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF32AD9381D00137C09 /* SDKsView.swift */; }; B0403CF62AD9849E00137C09 /* CompilersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF52AD9849E00137C09 /* CompilersView.swift */; }; B0403CF82AD991F800137C09 /* UnselectedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF72AD991F800137C09 /* UnselectedView.swift */; }; + B0403CFA2AD9942A00137C09 /* NotInstalledStateButtonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF92AD9942A00137C09 /* NotInstalledStateButtonsView.swift */; }; B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */; }; B0C6AD0D2AD91D7900E64698 /* IconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0C2AD91D7900E64698 /* IconView.swift */; }; @@ -205,6 +206,7 @@ B0403CF32AD9381D00137C09 /* SDKsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDKsView.swift; sourceTree = ""; }; B0403CF52AD9849E00137C09 /* CompilersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompilersView.swift; sourceTree = ""; }; B0403CF72AD991F800137C09 /* UnselectedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnselectedView.swift; sourceTree = ""; }; + B0403CF92AD9942A00137C09 /* NotInstalledStateButtonsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotInstalledStateButtonsView.swift; sourceTree = ""; }; B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdenticalBuildView.swift; sourceTree = ""; }; B0C6AD0C2AD91D7900E64698 /* IconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconView.swift; sourceTree = ""; }; @@ -637,6 +639,7 @@ B0403CF12AD934B600137C09 /* CompatibilityView.swift */, CAFBDC67259A308B003DCC5A /* InfoPane.swift */, B0403CF72AD991F800137C09 /* UnselectedView.swift */, + B0403CF92AD9942A00137C09 /* NotInstalledStateButtonsView.swift */, E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */, B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */, @@ -925,6 +928,7 @@ CABFA9CF2592EEEA00380FEE /* Process.swift in Sources */, CAFFFED8259CDA5000903F81 /* XcodeListViewRow.swift in Sources */, CABFA9C72592EEEA00380FEE /* Entry+.swift in Sources */, + B0403CFA2AD9942A00137C09 /* NotInstalledStateButtonsView.swift in Sources */, CAE424B4259A764700B8B246 /* AppState+Install.swift in Sources */, CAE42487259A68A300B8B246 /* XcodeListCategory.swift in Sources */, CAA858C425A2BE4E00ACF8C0 /* Downloader.swift in Sources */, diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 9cb9abe..5125ab1 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -21,8 +21,10 @@ struct InfoPane: View { switch xcode.installState { case .notInstalled: - InstallButton(xcode: xcode) - downloadFileSize(for: xcode) + NotInstalledStateButtonsView( + downloadFileSizeString: xcode.downloadFileSizeString, + id: xcode.id + ) case let .installing(installationStep): InstallationStepDetailView(installationStep: installationStep) .fixedSize(horizontal: false, vertical: true) diff --git a/Xcodes/Frontend/InfoPane/NotInstalledStateButtonsView.swift b/Xcodes/Frontend/InfoPane/NotInstalledStateButtonsView.swift new file mode 100644 index 0000000..4935362 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/NotInstalledStateButtonsView.swift @@ -0,0 +1,68 @@ +// +// NotInstalledStateButtonsView.swift +// Xcodes +// +// Created by Duong Thai on 13/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI +import Version + +struct NotInstalledStateButtonsView: View { + let downloadFileSizeString: String? + let id: Version + + @EnvironmentObject var appState: AppState + + var body: some View { + VStack(alignment: .leading) { + Button { + appState.checkMinVersionAndInstall(id: id) + } label: { + Text("Install") .help("Install") + } + if let size = downloadFileSizeString { + + Text("DownloadSize") + .font(.headline) + Text(size) + .font(.subheadline) + } else { + EmptyView() + } + } + } +} + +struct NotInstalledStateButtonsView_Preview: PreviewProvider { + static var previews: some View { + WrapperView() + } +} + +private struct WrapperView: View { + @State var isSizeNil = false + + var downloadFileSizeString: String? { + isSizeNil + ? nil + : "1,19 GB" + } + + var body: some View { + VStack { + NotInstalledStateButtonsView( + downloadFileSizeString: downloadFileSizeString, + id: Version(major: 12, minor: 3, patch: 0) + ) + .border(.red) + Spacer() + Toggle(isOn: $isSizeNil) { + Text("Is Size Nil?") + } + } + .frame(width: 200, height: 100) + .padding() + } +} From 9e787f98d898b1dbf0ba6f054c7a78e3ad9f988e Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Fri, 13 Oct 2023 23:22:26 +0700 Subject: [PATCH 38/86] fix layout of `UnselectedView` --- Xcodes/Frontend/InfoPane/UnselectedView.swift | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Xcodes/Frontend/InfoPane/UnselectedView.swift b/Xcodes/Frontend/InfoPane/UnselectedView.swift index 4b6c2af..f0d5ea4 100644 --- a/Xcodes/Frontend/InfoPane/UnselectedView.swift +++ b/Xcodes/Frontend/InfoPane/UnselectedView.swift @@ -10,9 +10,13 @@ import SwiftUI struct UnselectedView: View { var body: some View { - Text("NoXcodeSelected") - .font(.title) - .foregroundColor(.secondary) + VStack { + Spacer() + Text("NoXcodeSelected") + .font(.title) + .foregroundColor(.secondary) + Spacer() + } } } From d406972e81384e8f224d812407ff61d21c3c31de Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Sat, 14 Oct 2023 00:31:20 +0700 Subject: [PATCH 39/86] move and fix the `InstalledStateButtons` --- Xcodes.xcodeproj/project.pbxproj | 12 ++- Xcodes/Backend/AppState.swift | 6 +- Xcodes/Backend/XcodeCommands.swift | 2 +- Xcodes/Frontend/InfoPane/InfoPane.swift | 25 +----- .../InfoPane/InstalledStateButtons.swift | 80 +++++++++++++++++++ ...w.swift => NotInstalledStateButtons.swift} | 6 +- 6 files changed, 98 insertions(+), 33 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/InstalledStateButtons.swift rename Xcodes/Frontend/InfoPane/{NotInstalledStateButtonsView.swift => NotInstalledStateButtons.swift} (90%) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 1198295..f0e0f6d 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -18,7 +18,8 @@ B0403CF42AD9381D00137C09 /* SDKsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF32AD9381D00137C09 /* SDKsView.swift */; }; B0403CF62AD9849E00137C09 /* CompilersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF52AD9849E00137C09 /* CompilersView.swift */; }; B0403CF82AD991F800137C09 /* UnselectedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF72AD991F800137C09 /* UnselectedView.swift */; }; - B0403CFA2AD9942A00137C09 /* NotInstalledStateButtonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF92AD9942A00137C09 /* NotInstalledStateButtonsView.swift */; }; + B0403CFA2AD9942A00137C09 /* NotInstalledStateButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF92AD9942A00137C09 /* NotInstalledStateButtons.swift */; }; + B0403CFC2AD9A6BF00137C09 /* InstalledStateButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CFB2AD9A6BF00137C09 /* InstalledStateButtons.swift */; }; B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */; }; B0C6AD0D2AD91D7900E64698 /* IconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0C2AD91D7900E64698 /* IconView.swift */; }; @@ -206,7 +207,8 @@ B0403CF32AD9381D00137C09 /* SDKsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDKsView.swift; sourceTree = ""; }; B0403CF52AD9849E00137C09 /* CompilersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompilersView.swift; sourceTree = ""; }; B0403CF72AD991F800137C09 /* UnselectedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnselectedView.swift; sourceTree = ""; }; - B0403CF92AD9942A00137C09 /* NotInstalledStateButtonsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotInstalledStateButtonsView.swift; sourceTree = ""; }; + B0403CF92AD9942A00137C09 /* NotInstalledStateButtons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotInstalledStateButtons.swift; sourceTree = ""; }; + B0403CFB2AD9A6BF00137C09 /* InstalledStateButtons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstalledStateButtons.swift; sourceTree = ""; }; B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdenticalBuildView.swift; sourceTree = ""; }; B0C6AD0C2AD91D7900E64698 /* IconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconView.swift; sourceTree = ""; }; @@ -639,7 +641,8 @@ B0403CF12AD934B600137C09 /* CompatibilityView.swift */, CAFBDC67259A308B003DCC5A /* InfoPane.swift */, B0403CF72AD991F800137C09 /* UnselectedView.swift */, - B0403CF92AD9942A00137C09 /* NotInstalledStateButtonsView.swift */, + B0403CF92AD9942A00137C09 /* NotInstalledStateButtons.swift */, + B0403CFB2AD9A6BF00137C09 /* InstalledStateButtons.swift */, E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */, B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */, @@ -888,6 +891,7 @@ CAA1CB45255A5B60003FD669 /* SignIn2FAView.swift in Sources */, CABFA9C52592EEEA00380FEE /* FileManager+.swift in Sources */, CABFA9CD2592EEEA00380FEE /* Foundation.swift in Sources */, + B0403CFC2AD9A6BF00137C09 /* InstalledStateButtons.swift in Sources */, 36741BFF291E50F500A85AAE /* FileError.swift in Sources */, CA9FF8872595607900E47BAF /* InstalledXcode.swift in Sources */, B0403CF22AD934B600137C09 /* CompatibilityView.swift in Sources */, @@ -928,7 +932,7 @@ CABFA9CF2592EEEA00380FEE /* Process.swift in Sources */, CAFFFED8259CDA5000903F81 /* XcodeListViewRow.swift in Sources */, CABFA9C72592EEEA00380FEE /* Entry+.swift in Sources */, - B0403CFA2AD9942A00137C09 /* NotInstalledStateButtonsView.swift in Sources */, + B0403CFA2AD9942A00137C09 /* NotInstalledStateButtons.swift in Sources */, CAE424B4259A764700B8B246 /* AppState+Install.swift in Sources */, CAE42487259A68A300B8B246 /* XcodeListCategory.swift in Sources */, CAA858C425A2BE4E00ACF8C0 /* Downloader.swift in Sources */, diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index 1c92951..168369f 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -541,10 +541,10 @@ class AppState: ObservableObject { ) } - func reveal(xcode: Xcode) { + func reveal(_ path: Path?) { // TODO: show error if not - guard let installedXcodePath = xcode.installedPath else { return } - NSWorkspace.shared.activateFileViewerSelecting([installedXcodePath.url]) + guard let path = path else { return } + NSWorkspace.shared.activateFileViewerSelecting([path.url]) } func reveal(path: String) { diff --git a/Xcodes/Backend/XcodeCommands.swift b/Xcodes/Backend/XcodeCommands.swift index 196e25d..6767afe 100644 --- a/Xcodes/Backend/XcodeCommands.swift +++ b/Xcodes/Backend/XcodeCommands.swift @@ -151,7 +151,7 @@ struct RevealButton: View { private func reveal() { guard let xcode = xcode else { return } - appState.reveal(xcode: xcode) + appState.reveal(xcode.installedPath) } } diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 5125ab1..e242bcd 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -21,7 +21,7 @@ struct InfoPane: View { switch xcode.installState { case .notInstalled: - NotInstalledStateButtonsView( + NotInstalledStateButtons( downloadFileSizeString: xcode.downloadFileSizeString, id: xcode.id ) @@ -29,27 +29,8 @@ struct InfoPane: View { InstallationStepDetailView(installationStep: installationStep) .fixedSize(horizontal: false, vertical: true) CancelInstallButton(xcode: xcode) - case let .installed(path): - HStack { - Text(path.string) - Button(action: { appState.reveal(xcode: xcode) }) { - Image(systemName: "arrow.right.circle.fill") - } - .buttonStyle(PlainButtonStyle()) - .help("RevealInFinder") - } - - HStack { - SelectButton(xcode: xcode) - .disabled(xcode.selected) - .help("Selected") - - OpenButton(xcode: xcode) - .help("Open") - - Spacer() - UninstallButton(xcode: xcode) - } + case .installed: + InstalledStateButtons(xcode: xcode) } Divider() diff --git a/Xcodes/Frontend/InfoPane/InstalledStateButtons.swift b/Xcodes/Frontend/InfoPane/InstalledStateButtons.swift new file mode 100644 index 0000000..de1c73c --- /dev/null +++ b/Xcodes/Frontend/InfoPane/InstalledStateButtons.swift @@ -0,0 +1,80 @@ +// +// InstallingStateButtons.swift +// Xcodes +// +// Created by Duong Thai on 13/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI +import Version +import XCModel +import Path + +struct InstalledStateButtons: View { + let xcode: Xcode + + @EnvironmentObject var appState: AppState + + var body: some View { + VStack(alignment: .leading) { + HStack { + Text(xcode.installedPath?.string ?? "") + Button(action: { appState.reveal(xcode.installedPath) }) { + Image(systemName: "arrow.right.circle.fill") + } + .buttonStyle(PlainButtonStyle()) + .help("RevealInFinder") + } + + HStack { + SelectButton(xcode: xcode) + .disabled(xcode.selected) + .help("Selected") + + OpenButton(xcode: xcode) + .help("Open") + + Spacer() + UninstallButton(xcode: xcode) + } + + } + } +} + +struct InstalledStateButtons_Preview: PreviewProvider { + static var previews: some View { + InstalledStateButtons(xcode: Self.xcode) + .environmentObject(configure(AppState()) { + $0.allXcodes = [Self.xcode] + }) + .padding() + .frame(width: 300) + } + + static private let xcode = Xcode( + version: Version(major: 12, minor: 3, patch: 0), + installState: .installed(Path("/Applications/Xcode-12.3.0.app")!), + selected: true, + icon: NSWorkspace.shared.icon(forFile: "/Applications/Xcode-12.3.0.app"), + requiredMacOSVersion: "10.15.4", + releaseNotesURL: URL(string: "https://developer.apple.com/documentation/xcode-release-notes/xcode-12_3-release-notes/")!, + releaseDate: Date(), + sdks: SDKs( + macOS: .init(number: "11.1"), + iOS: .init(number: "14.3"), + watchOS: .init(number: "7.3"), + tvOS: .init(number: "14.3") + ), + compilers: Compilers( + gcc: .init(number: "4"), + llvm_gcc: .init(number: "213"), + llvm: .init(number: "2.3"), + clang: .init(number: "7.3"), + swift: .init(number: "5.3.2") + ), + downloadFileSize: 242342424 + ) +} + diff --git a/Xcodes/Frontend/InfoPane/NotInstalledStateButtonsView.swift b/Xcodes/Frontend/InfoPane/NotInstalledStateButtons.swift similarity index 90% rename from Xcodes/Frontend/InfoPane/NotInstalledStateButtonsView.swift rename to Xcodes/Frontend/InfoPane/NotInstalledStateButtons.swift index 4935362..db81d9d 100644 --- a/Xcodes/Frontend/InfoPane/NotInstalledStateButtonsView.swift +++ b/Xcodes/Frontend/InfoPane/NotInstalledStateButtons.swift @@ -9,7 +9,7 @@ import SwiftUI import Version -struct NotInstalledStateButtonsView: View { +struct NotInstalledStateButtons: View { let downloadFileSizeString: String? let id: Version @@ -35,7 +35,7 @@ struct NotInstalledStateButtonsView: View { } } -struct NotInstalledStateButtonsView_Preview: PreviewProvider { +struct NotInstalledStateButtons_Preview: PreviewProvider { static var previews: some View { WrapperView() } @@ -52,7 +52,7 @@ private struct WrapperView: View { var body: some View { VStack { - NotInstalledStateButtonsView( + NotInstalledStateButtons( downloadFileSizeString: downloadFileSizeString, id: Version(major: 12, minor: 3, patch: 0) ) From 4e55aac679e0c9416d94af291e7621d686895438 Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Sat, 14 Oct 2023 00:49:55 +0700 Subject: [PATCH 40/86] clean up code --- .../Frontend/InfoPane/CompatibilityView.swift | 1 - Xcodes/Frontend/InfoPane/CompilersView.swift | 7 ++----- Xcodes/Frontend/InfoPane/IconView.swift | 13 +++++-------- .../InfoPane/IdenticalBuildView.swift | 8 ++------ Xcodes/Frontend/InfoPane/InfoPane.swift | 19 ------------------- .../InfoPane/InstallationStepDetailView.swift | 3 ++- .../InfoPane/InstalledStateButtons.swift | 1 - .../InfoPane/NotInstalledStateButtons.swift | 2 +- .../Frontend/InfoPane/ReleaseDateView.swift | 9 +++------ .../Frontend/InfoPane/ReleaseNotesView.swift | 6 +----- Xcodes/Frontend/InfoPane/SDKsView.swift | 6 +----- 11 files changed, 17 insertions(+), 58 deletions(-) diff --git a/Xcodes/Frontend/InfoPane/CompatibilityView.swift b/Xcodes/Frontend/InfoPane/CompatibilityView.swift index 9e23e35..9b60998 100644 --- a/Xcodes/Frontend/InfoPane/CompatibilityView.swift +++ b/Xcodes/Frontend/InfoPane/CompatibilityView.swift @@ -50,7 +50,6 @@ private struct WrapperView: View { Text("Is Nil?") } } - .animation(.default) .frame(width: 200, height: 100) .padding() } diff --git a/Xcodes/Frontend/InfoPane/CompilersView.swift b/Xcodes/Frontend/InfoPane/CompilersView.swift index 68d2f52..cfa7df0 100644 --- a/Xcodes/Frontend/InfoPane/CompilersView.swift +++ b/Xcodes/Frontend/InfoPane/CompilersView.swift @@ -65,16 +65,13 @@ private struct WrapperView: View { var body: some View { VStack { - HStack { - CompilersView(compilers: compilers) - .border(.red) - } + CompilersView(compilers: compilers) + .border(.red) Spacer() Toggle(isOn: $isNil) { Text("Is Nil?") } } - .animation(.default) .frame(width: 200, height: 100) .padding() } diff --git a/Xcodes/Frontend/InfoPane/IconView.swift b/Xcodes/Frontend/InfoPane/IconView.swift index e7328d2..f32aef5 100644 --- a/Xcodes/Frontend/InfoPane/IconView.swift +++ b/Xcodes/Frontend/InfoPane/IconView.swift @@ -42,22 +42,19 @@ private struct WrapperView: View { @State var isIcon = false var state: XcodeInstallState { isIcon - ? XcodeInstallState.notInstalled - : XcodeInstallState.installed(Path("/Applications/Xcode.app")!) + ? XcodeInstallState.installed(Path("/Applications/Xcode.app")!) + : XcodeInstallState.notInstalled } var body: some View { VStack { - HStack { - IconView(installState: state) - .border(.red) - } + IconView(installState: state) + .border(.red) Spacer() Toggle(isOn: $isIcon) { - Text("Is an Icon?") + Text("Icon?") } } - .animation(.default) .frame(width: 300, height: 100) .padding() } diff --git a/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift b/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift index 3c78eb0..ad3fcd9 100644 --- a/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift +++ b/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift @@ -33,7 +33,6 @@ struct IdenticalBuildsView: View { .font(.subheadline) } } - .frame(maxWidth: .infinity, alignment: .leading) .accessibilityElement() .accessibility(label: Text("IdenticalBuilds")) .accessibility(value: Text(accessibilityDescription)) @@ -67,16 +66,13 @@ private struct WrapperView: View { var body: some View { VStack { - HStack { - IdenticalBuildsView(builds: builds) + IdenticalBuildsView(builds: builds) .border(.red) - } Spacer() Toggle(isOn: $isEmpty) { - Text("Is Empty?") + Text("No Builds?") } } - .animation(.default) .frame(width: 300, height: 100) .padding() } diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index e242bcd..a1c6716 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -27,7 +27,6 @@ struct InfoPane: View { ) case let .installing(installationStep): InstallationStepDetailView(installationStep: installationStep) - .fixedSize(horizontal: false, vertical: true) CancelInstallButton(xcode: xcode) case .installed: InstalledStateButtons(xcode: xcode) @@ -38,7 +37,6 @@ struct InfoPane: View { Group { ReleaseNotesView(url: xcode.releaseNotesURL) ReleaseDateView(date: xcode.releaseDate) - .frame(maxWidth: .infinity, alignment: .leading) IdenticalBuildsView(builds: xcode.identicalBuilds) CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) SDKsView(sdks: xcode.sdks) @@ -54,23 +52,6 @@ struct InfoPane: View { UnselectedView() } } - - @ViewBuilder - private func downloadFileSize(for xcode: Xcode) -> some View { - // if we've downloaded it no need to show the download size - if let downloadFileSize = xcode.downloadFileSizeString, case .notInstalled = xcode.installState { - VStack(alignment: .leading) { - Text("DownloadSize") - .font(.headline) - .frame(maxWidth: .infinity, alignment: .leading) - Text("\(downloadFileSize)") - .font(.subheadline) - .frame(maxWidth: .infinity, alignment: .leading) - } - } else { - EmptyView() - } - } } struct InfoPane_Previews: PreviewProvider { diff --git a/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift b/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift index 863f204..7c16066 100644 --- a/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift +++ b/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift @@ -39,10 +39,11 @@ struct InstallDetailView_Previews: PreviewProvider { } ) ) - + InstallationStepDetailView( installationStep: .unarchiving ) } + .padding() } } diff --git a/Xcodes/Frontend/InfoPane/InstalledStateButtons.swift b/Xcodes/Frontend/InfoPane/InstalledStateButtons.swift index de1c73c..241920f 100644 --- a/Xcodes/Frontend/InfoPane/InstalledStateButtons.swift +++ b/Xcodes/Frontend/InfoPane/InstalledStateButtons.swift @@ -38,7 +38,6 @@ struct InstalledStateButtons: View { Spacer() UninstallButton(xcode: xcode) } - } } } diff --git a/Xcodes/Frontend/InfoPane/NotInstalledStateButtons.swift b/Xcodes/Frontend/InfoPane/NotInstalledStateButtons.swift index db81d9d..a0d09ef 100644 --- a/Xcodes/Frontend/InfoPane/NotInstalledStateButtons.swift +++ b/Xcodes/Frontend/InfoPane/NotInstalledStateButtons.swift @@ -22,8 +22,8 @@ struct NotInstalledStateButtons: View { } label: { Text("Install") .help("Install") } + if let size = downloadFileSizeString { - Text("DownloadSize") .font(.headline) Text(size) diff --git a/Xcodes/Frontend/InfoPane/ReleaseDateView.swift b/Xcodes/Frontend/InfoPane/ReleaseDateView.swift index 0695f4d..2c78b70 100644 --- a/Xcodes/Frontend/InfoPane/ReleaseDateView.swift +++ b/Xcodes/Frontend/InfoPane/ReleaseDateView.swift @@ -14,7 +14,7 @@ struct ReleaseDateView: View { var body: some View { if let date = date { VStack(alignment: .leading) { - Text("ReleaseDate (old version)") + Text("ReleaseDate") .font(.headline) Text("\(date, style: .date)") .font(.subheadline) @@ -41,16 +41,13 @@ private struct WrapperView: View { var body: some View { VStack { - HStack { - ReleaseDateView(date: date) - .border(.red) - } + ReleaseDateView(date: date) + .border(.red) Spacer() Toggle(isOn: $isNil) { Text("Is Nil?") } } - .animation(.default) .frame(width: 300, height: 100) .padding() } diff --git a/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift b/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift index a9aa3c1..14e86e8 100644 --- a/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift +++ b/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift @@ -46,16 +46,12 @@ private struct WrapperView: View { var body: some View { VStack { - HStack { - ReleaseNotesView(url: url) - .border(.red) - } + ReleaseNotesView(url: url).border(.red) Spacer() Toggle(isOn: $hasURL) { Text("Has URL?") } } - .animation(.default) .frame(width: 300, height: 100) .padding() } diff --git a/Xcodes/Frontend/InfoPane/SDKsView.swift b/Xcodes/Frontend/InfoPane/SDKsView.swift index f2d3ed9..5d229cb 100644 --- a/Xcodes/Frontend/InfoPane/SDKsView.swift +++ b/Xcodes/Frontend/InfoPane/SDKsView.swift @@ -65,16 +65,12 @@ private struct WrapperView: View { var body: some View { VStack { - HStack { - SDKsView(sdks: sdks) - .border(.red) - } + SDKsView(sdks: sdks).border(.red) Spacer() Toggle(isOn: $isNil) { Text("Is Nil?") } } - .animation(.default) .frame(width: 200, height: 100) .padding() } From a2379583ef78ce9ad8f9dce9ab24d8a8912d8ceb Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Sat, 14 Oct 2023 13:09:58 +0700 Subject: [PATCH 41/86] fix data dependency, preview performance and layout out of `InfoPane` - I move `UnselectedView` out to: 1. narrow data dependency 2. `InfoPane` should only care about displaying data, not whether an `Xcode` is selected --- Xcodes/Frontend/InfoPane/InfoPane.swift | 297 +++++++++++------------- Xcodes/Frontend/MainWindow.swift | 17 +- 2 files changed, 150 insertions(+), 164 deletions(-) diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index a1c6716..6b038a4 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -6,178 +6,153 @@ import struct XCModel.Compilers import struct XCModel.SDKs struct InfoPane: View { - @EnvironmentObject var appState: AppState - let selectedXcodeID: Xcode.ID? + let xcode: Xcode var body: some View { - if let xcode = appState.allXcodes.first(where: { $0.id == selectedXcodeID }) { - ScrollView { - VStack(alignment: .leading, spacing: 16) { - IconView(installState: xcode.installState) - .frame(maxWidth: .infinity, alignment: .center) + ScrollView { + VStack(alignment: .leading, spacing: 16) { + IconView(installState: xcode.installState) + .frame(maxWidth: .infinity, alignment: .center) - Text(verbatim: "Xcode \(xcode.description) \(xcode.version.buildMetadataIdentifiersDisplay)") - .font(.title) + Text(verbatim: "Xcode \(xcode.description) \(xcode.version.buildMetadataIdentifiersDisplay)") + .font(.title) - switch xcode.installState { - case .notInstalled: - NotInstalledStateButtons( - downloadFileSizeString: xcode.downloadFileSizeString, - id: xcode.id - ) - case let .installing(installationStep): - InstallationStepDetailView(installationStep: installationStep) - CancelInstallButton(xcode: xcode) - case .installed: - InstalledStateButtons(xcode: xcode) - } - - Divider() - - Group { - ReleaseNotesView(url: xcode.releaseNotesURL) - ReleaseDateView(date: xcode.releaseDate) - IdenticalBuildsView(builds: xcode.identicalBuilds) - CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) - SDKsView(sdks: xcode.sdks) - CompilersView(compilers: xcode.compilers) - } - - Spacer() + switch xcode.installState { + case .notInstalled: + NotInstalledStateButtons( + downloadFileSizeString: xcode.downloadFileSizeString, + id: xcode.id + ) + case let .installing(installationStep): + InstallationStepDetailView(installationStep: installationStep) + CancelInstallButton(xcode: xcode) + case .installed: + InstalledStateButtons(xcode: xcode) } - .padding() + + Divider() + + Group { + ReleaseNotesView(url: xcode.releaseNotesURL) + ReleaseDateView(date: xcode.releaseDate) + IdenticalBuildsView(builds: xcode.identicalBuilds) + CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) + SDKsView(sdks: xcode.sdks) + CompilersView(compilers: xcode.compilers) + } + + Spacer() } - .frame(minWidth: 200, maxWidth: .infinity) - } else { - UnselectedView() } } } struct InfoPane_Previews: PreviewProvider { static var previews: some View { - Group { - InfoPane(selectedXcodeID: Version(major: 12, minor: 3, patch: 0)) - .environmentObject(configure(AppState()) { - $0.allXcodes = [ - .init( - version: Version(major: 12, minor: 3, patch: 0), - installState: .installed(Path("/Applications/Xcode-12.3.0.app")!), - selected: true, - icon: NSWorkspace.shared.icon(forFile: "/Applications/Xcode-12.3.0.app"), - requiredMacOSVersion: "10.15.4", - releaseNotesURL: URL(string: "https://developer.apple.com/documentation/xcode-release-notes/xcode-12_3-release-notes/")!, - releaseDate: Date(), - sdks: SDKs( - macOS: .init(number: "11.1"), - iOS: .init(number: "14.3"), - watchOS: .init(number: "7.3"), - tvOS: .init(number: "14.3") - ), - compilers: Compilers( - gcc: .init(number: "4"), - llvm_gcc: .init(number: "213"), - llvm: .init(number: "2.3"), - clang: .init(number: "7.3"), - swift: .init(number: "5.3.2") - ), - downloadFileSize: 242_342_424 - ), - ] - }) - .previewDisplayName("Populated, Installed, Selected") - - InfoPane(selectedXcodeID: Version(major: 12, minor: 3, patch: 0)) - .environmentObject(configure(AppState()) { - $0.allXcodes = [ - .init( - version: Version(major: 12, minor: 3, patch: 0), - installState: .installed(Path("/Applications/Xcode-12.3.0.app")!), - selected: false, - icon: NSWorkspace.shared.icon(forFile: "/Applications/Xcode-12.3.0.app"), - sdks: SDKs( - macOS: .init(number: "11.1"), - iOS: .init(number: "14.3"), - watchOS: .init(number: "7.3"), - tvOS: .init(number: "14.3") - ), - compilers: Compilers( - gcc: .init(number: "4"), - llvm_gcc: .init(number: "213"), - llvm: .init(number: "2.3"), - clang: .init(number: "7.3"), - swift: .init(number: "5.3.2") - ), - downloadFileSize: 242_342_424 - ), - ] - }) - .previewDisplayName("Populated, Installed, Unselected") - - InfoPane(selectedXcodeID: Version(major: 12, minor: 3, patch: 0)) - .environmentObject(configure(AppState()) { - $0.allXcodes = [ - .init( - version: Version(major: 12, minor: 3, patch: 0), - installState: .notInstalled, - selected: false, - icon: nil, - sdks: SDKs( - macOS: .init(number: "11.1"), - iOS: .init(number: "14.3"), - watchOS: .init(number: "7.3"), - tvOS: .init(number: "14.3") - ), - compilers: Compilers( - gcc: .init(number: "4"), - llvm_gcc: .init(number: "213"), - llvm: .init(number: "2.3"), - clang: .init(number: "7.3"), - swift: .init(number: "5.3.2") - ), - downloadFileSize: 242_342_424 - ), - ] - }) - .previewDisplayName("Populated, Uninstalled") - - InfoPane(selectedXcodeID: Version(major: 12, minor: 3, patch: 1, buildMetadataIdentifiers: ["1234A"])) - .environmentObject(configure(AppState()) { - $0.allXcodes = [ - .init( - version: Version(major: 12, minor: 3, patch: 1, buildMetadataIdentifiers: ["1234A"]), - installState: .installed(Path("/Applications/Xcode-12.3.0.app")!), - selected: false, - icon: nil, - sdks: nil, - compilers: nil - ), - ] - }) - .previewDisplayName("Basic, installed") - - InfoPane(selectedXcodeID: Version(major: 12, minor: 3, patch: 1, buildMetadataIdentifiers: ["1234A"])) - .environmentObject(configure(AppState()) { - $0.allXcodes = [ - .init( - version: Version(major: 12, minor: 3, patch: 1, buildMetadataIdentifiers: ["1234A"]), - installState: .installing(.downloading(progress: configure(Progress(totalUnitCount: 100)) { $0.completedUnitCount = 40; $0.throughput = 232_323_232; $0.fileCompletedCount = 2_323_004; $0.fileTotalCount = 1_193_939_393 })), - selected: false, - icon: nil, - sdks: nil, - compilers: nil - ), - ] - }) - .previewDisplayName("Basic, installing") - - InfoPane(selectedXcodeID: nil) - .environmentObject(configure(AppState()) { - $0.allXcodes = [ - ] - }) - .previewDisplayName("Empty") - } - .frame(maxWidth: 300) + WrapperView() } } + +private struct WrapperView: View { + @State var name: PreviewName = .Populated_Installed_Selected + + var body: some View { + VStack { + InfoPane(xcode: xcode) + .environmentObject(configure(AppState()) { + $0.allXcodes = [xcode] + }) + .border(.red) + .frame(width: 300, height: 400) + Spacer() + Picker("Preview Name", selection: $name) { + ForEach(PreviewName.allCases) { + Text($0.rawValue).tag($0) + } + } + .pickerStyle(.inline) + } + .frame(maxWidth: .infinity) + .padding() + } + + var xcode: Xcode { xcodeDict[name]! } +} + +private enum PreviewName: String, CaseIterable, Identifiable { + case Populated_Installed_Selected + case Populated_Installed_Unselected + case Populated_Uninstalled + case Basic_Installed + case Basic_Installing + + var id: PreviewName { self } +} + +private var xcodeDict: [PreviewName: Xcode] = [ + .Populated_Installed_Selected: .init( + version: _versionNoMeta, + installState: .installed(Path(_path)!), + selected: true, + icon: NSWorkspace.shared.icon(forFile: _path), + requiredMacOSVersion: _requiredMacOSVersion, + releaseNotesURL: URL(string: "https://developer.apple.com/documentation/xcode-release-notes/xcode-12_3-release-notes/")!, + releaseDate: Date(), + sdks: _sdks, + compilers: _compilers, + downloadFileSize: _downloadFileSize + ), + .Populated_Installed_Unselected: .init( + version: _versionNoMeta, + installState: .installed(Path(_path)!), + selected: false, + icon: NSWorkspace.shared.icon(forFile: _path), + sdks: _sdks, + compilers: _compilers, + downloadFileSize: _downloadFileSize + ), + .Populated_Uninstalled: .init( + version: Version(major: 12, minor: 3, patch: 0), + installState: .notInstalled, + selected: false, + icon: nil, + sdks: _sdks, + compilers: _compilers, + downloadFileSize: _downloadFileSize + ), + .Basic_Installed: .init( + version: _versionWithMeta, + installState: .installed(Path(_path)!), + selected: false, + icon: nil, + sdks: nil, + compilers: nil + ), + .Basic_Installing: .init( + version: _versionWithMeta, + installState: .installing(.downloading(progress: configure(Progress(totalUnitCount: 100)) { $0.completedUnitCount = 40; $0.throughput = 232_323_232; $0.fileCompletedCount = 2_323_004; $0.fileTotalCount = 1_193_939_393 })), + selected: false, + icon: nil, + sdks: nil, + compilers: nil + ), +] + +private let _versionNoMeta = Version(major: 12, minor: 3, patch: 0) +private let _versionWithMeta = Version(major: 12, minor: 3, patch: 1, buildMetadataIdentifiers: ["1234A"]) +private let _path = "/Applications/Xcode-12.3.0.app" +private let _requiredMacOSVersion = "10.15.4" +private let _sdks = SDKs( + macOS: .init(number: "11.1"), + iOS: .init(number: "14.3"), + watchOS: .init(number: "7.3"), + tvOS: .init(number: "14.3") +) +private let _compilers = Compilers( + gcc: .init(number: "4"), + llvm_gcc: .init(number: "213"), + llvm: .init(number: "2.3"), + clang: .init(number: "7.3"), + swift: .init(number: "5.3.2") +) +private let _downloadFileSize: Int64 = 242_342_424 diff --git a/Xcodes/Frontend/MainWindow.swift b/Xcodes/Frontend/MainWindow.swift index fcde005..5c74ea4 100644 --- a/Xcodes/Frontend/MainWindow.swift +++ b/Xcodes/Frontend/MainWindow.swift @@ -27,8 +27,15 @@ struct MainWindow: View { } if isShowingInfoPane { - InfoPane(selectedXcodeID: selectedXcodeID) - .frame(minWidth: 300, maxWidth: .infinity) + Group { + if let xcode = xcode { + InfoPane(xcode: xcode) + } else { + UnselectedView() + } + } + .padding() + .frame(minWidth: 300, maxWidth: .infinity) } } .mainToolbar( @@ -59,7 +66,11 @@ struct MainWindow: View { // FB8954571 focusedValue(_:_:) on List row doesn't propagate value to @FocusedValue .focusedValue(\.selectedXcode, SelectedXcode(appState.allXcodes.first { $0.id == selectedXcodeID })) } - + + private var xcode: Xcode? { + appState.allXcodes.first(where: { $0.id == selectedXcodeID }) + } + private var subtitleText: Text { if let lastUpdated = lastUpdated.map(Date.init(timeIntervalSince1970:)) { return Text("\(localizeString("UpdatedAt")) \(lastUpdated, style: .date) \(lastUpdated, style: .time)") From 2f7d45c67ac5c8983abe28c7997f0f63025264dc Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Sat, 14 Oct 2023 14:18:41 +0700 Subject: [PATCH 42/86] move the control section to `InfoPaneControls`, fix the layout to make it self-contain --- Xcodes.xcodeproj/project.pbxproj | 4 ++ Xcodes/Frontend/InfoPane/InfoPane.swift | 28 ++++----- .../Frontend/InfoPane/InfoPaneControls.swift | 62 +++++++++++++++++++ 3 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/InfoPaneControls.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index f0e0f6d..c057546 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -20,6 +20,7 @@ B0403CF82AD991F800137C09 /* UnselectedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF72AD991F800137C09 /* UnselectedView.swift */; }; B0403CFA2AD9942A00137C09 /* NotInstalledStateButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF92AD9942A00137C09 /* NotInstalledStateButtons.swift */; }; B0403CFC2AD9A6BF00137C09 /* InstalledStateButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CFB2AD9A6BF00137C09 /* InstalledStateButtons.swift */; }; + B0403CFE2ADA712C00137C09 /* InfoPaneControls.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CFD2ADA712C00137C09 /* InfoPaneControls.swift */; }; B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; B0C6AD0B2AD9178E00E64698 /* IdenticalBuildView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */; }; B0C6AD0D2AD91D7900E64698 /* IconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD0C2AD91D7900E64698 /* IconView.swift */; }; @@ -209,6 +210,7 @@ B0403CF72AD991F800137C09 /* UnselectedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnselectedView.swift; sourceTree = ""; }; B0403CF92AD9942A00137C09 /* NotInstalledStateButtons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotInstalledStateButtons.swift; sourceTree = ""; }; B0403CFB2AD9A6BF00137C09 /* InstalledStateButtons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstalledStateButtons.swift; sourceTree = ""; }; + B0403CFD2ADA712C00137C09 /* InfoPaneControls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoPaneControls.swift; sourceTree = ""; }; B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdenticalBuildView.swift; sourceTree = ""; }; B0C6AD0C2AD91D7900E64698 /* IconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconView.swift; sourceTree = ""; }; @@ -640,6 +642,7 @@ B0403CF52AD9849E00137C09 /* CompilersView.swift */, B0403CF12AD934B600137C09 /* CompatibilityView.swift */, CAFBDC67259A308B003DCC5A /* InfoPane.swift */, + B0403CFD2ADA712C00137C09 /* InfoPaneControls.swift */, B0403CF72AD991F800137C09 /* UnselectedView.swift */, B0403CF92AD9942A00137C09 /* NotInstalledStateButtons.swift */, B0403CFB2AD9A6BF00137C09 /* InstalledStateButtons.swift */, @@ -895,6 +898,7 @@ 36741BFF291E50F500A85AAE /* FileError.swift in Sources */, CA9FF8872595607900E47BAF /* InstalledXcode.swift in Sources */, B0403CF22AD934B600137C09 /* CompatibilityView.swift in Sources */, + B0403CFE2ADA712C00137C09 /* InfoPaneControls.swift in Sources */, 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */, CA42DD6E25AEA8B200BC0B0C /* Logger.swift in Sources */, CA61A6E0259835580008926E /* Xcode.swift in Sources */, diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 6b038a4..a42a8f0 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -17,18 +17,7 @@ struct InfoPane: View { Text(verbatim: "Xcode \(xcode.description) \(xcode.version.buildMetadataIdentifiersDisplay)") .font(.title) - switch xcode.installState { - case .notInstalled: - NotInstalledStateButtons( - downloadFileSizeString: xcode.downloadFileSizeString, - id: xcode.id - ) - case let .installing(installationStep): - InstallationStepDetailView(installationStep: installationStep) - CancelInstallButton(xcode: xcode) - case .installed: - InstalledStateButtons(xcode: xcode) - } + InfoPaneControls(xcode: xcode) Divider() @@ -79,7 +68,7 @@ private struct WrapperView: View { var xcode: Xcode { xcodeDict[name]! } } -private enum PreviewName: String, CaseIterable, Identifiable { +enum PreviewName: String, CaseIterable, Identifiable { case Populated_Installed_Selected case Populated_Installed_Unselected case Populated_Uninstalled @@ -89,7 +78,7 @@ private enum PreviewName: String, CaseIterable, Identifiable { var id: PreviewName { self } } -private var xcodeDict: [PreviewName: Xcode] = [ +var xcodeDict: [PreviewName: Xcode] = [ .Populated_Installed_Selected: .init( version: _versionNoMeta, installState: .installed(Path(_path)!), @@ -130,7 +119,16 @@ private var xcodeDict: [PreviewName: Xcode] = [ ), .Basic_Installing: .init( version: _versionWithMeta, - installState: .installing(.downloading(progress: configure(Progress(totalUnitCount: 100)) { $0.completedUnitCount = 40; $0.throughput = 232_323_232; $0.fileCompletedCount = 2_323_004; $0.fileTotalCount = 1_193_939_393 })), + installState: .installing(.downloading( + progress: configure(Progress()) { + $0.kind = .file + $0.fileOperationKind = .downloading + $0.estimatedTimeRemaining = 123 + $0.totalUnitCount = 11_944_848_484 + $0.completedUnitCount = 848_444_920 + $0.throughput = 9_211_681 + } + )), selected: false, icon: nil, sdks: nil, diff --git a/Xcodes/Frontend/InfoPane/InfoPaneControls.swift b/Xcodes/Frontend/InfoPane/InfoPaneControls.swift new file mode 100644 index 0000000..fb88044 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/InfoPaneControls.swift @@ -0,0 +1,62 @@ +// +// InfoPaneControls.swift +// Xcodes +// +// Created by Duong Thai on 14/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI + +struct InfoPaneControls: View { + let xcode: Xcode + + var body: some View { + VStack (alignment: .leading) { + switch xcode.installState { + case .notInstalled: + NotInstalledStateButtons( + downloadFileSizeString: xcode.downloadFileSizeString, + id: xcode.id) + case .installing(let installationStep): + InstallationStepDetailView(installationStep: installationStep) + CancelInstallButton(xcode: xcode) + case .installed(_): + InstalledStateButtons(xcode: xcode) + } + } + } +} + +struct InfoPaneControls_Previews: PreviewProvider { + static var previews: some View { + WrapperView() + } +} + +private struct WrapperView: View { + @State var name: PreviewName = .Populated_Installed_Selected + + var body: some View { + VStack { + InfoPaneControls(xcode: xcode) + .environmentObject(configure(AppState()) { + $0.allXcodes = [xcode] + }) + .border(.red) + .frame(width: 300, height: 400) + Spacer() + Picker("Preview Name", selection: $name) { + ForEach(PreviewName.allCases) { + Text($0.rawValue).tag($0) + } + } + .pickerStyle(.inline) + + } + .frame(maxWidth: .infinity) + .padding() + } + + var xcode: Xcode { xcodeDict[name]! } +} From 2fdc06031c454bcbfecfc5edb89a9cdc17f038e8 Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Sat, 14 Oct 2023 15:01:00 +0700 Subject: [PATCH 43/86] fix `SDKView` logic, hide the view when the content is empty --- Xcodes/Frontend/InfoPane/SDKsView.swift | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/Xcodes/Frontend/InfoPane/SDKsView.swift b/Xcodes/Frontend/InfoPane/SDKsView.swift index 5d229cb..78b99ae 100644 --- a/Xcodes/Frontend/InfoPane/SDKsView.swift +++ b/Xcodes/Frontend/InfoPane/SDKsView.swift @@ -10,19 +10,28 @@ import SwiftUI import struct XCModel.SDKs struct SDKsView: View { - let sdks: SDKs? + let content: String var body: some View { - if let sdks = sdks { + if content.isEmpty { + EmptyView() + } else { VStack(alignment: .leading) { Text("SDKs").font(.headline) - Text(Self.content(from: sdks)).font(.subheadline) + Text(content).font(.subheadline) } - } else { - EmptyView() } } + init(sdks: SDKs?) { + guard let sdks = sdks else { + self.content = "" + return + } + let content = Self.content(from: sdks) + self.content = content + } + static private func content(from sdks: SDKs) -> String { let content: String = [ ("macOS", sdks.macOS), @@ -41,6 +50,7 @@ struct SDKsView: View { // description for each type of compilers return "\($0.0): \(numbers.joined(separator: ", "))" }.joined(separator: "\n") + .trimmingCharacters(in: .whitespaces) return content } @@ -68,7 +78,7 @@ private struct WrapperView: View { SDKsView(sdks: sdks).border(.red) Spacer() Toggle(isOn: $isNil) { - Text("Is Nil?") + Text("Empty Content?") } } .frame(width: 200, height: 100) From 6ffce23616a055889b526c676333eade182d89e2 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Thu, 23 Nov 2023 10:37:41 -0600 Subject: [PATCH 44/86] more WIP --- Xcodes.xcodeproj/project.pbxproj | 6 - .../xcshareddata/swiftpm/Package.resolved | 6 +- Xcodes/Backend/AppState+Install.swift | 7 +- Xcodes/Backend/AppState+Runtimes.swift | 137 ++++++++--------- Xcodes/Backend/Environment.swift | 141 +++++++----------- Xcodes/Backend/InstallationStep.swift | 45 ------ Xcodes/Backend/Process.swift | 2 + Xcodes/Backend/XcodeInstallState.swift | 2 +- .../InfoPane/InstallationStepDetailView.swift | 2 +- .../XcodeList/InstallationStepRowView.swift | 2 +- Xcodes/Resources/Licenses.rtf | 2 +- .../Sources/XcodesKit/Environment.swift | 7 - .../Models/Runtimes/RuntimeInstallState.swift | 34 +++++ .../Runtimes/RuntimeInstallationStep.swift | 51 +++++++ .../XcodesKit/Models/Runtimes/Runtimes.swift | 2 +- ...allState.swift => XcodeInstallState.swift} | 4 +- ...Step.swift => XcodeInstallationStep.swift} | 3 +- .../Shell/{Shell.swift => XcodesShell.swift} | 2 +- .../XcodesKit/XcodesKitEnvironment.swift | 7 + XcodesTests/AppStateTests.swift | 2 + XcodesTests/Environment+Mock.swift | 4 +- 21 files changed, 237 insertions(+), 231 deletions(-) delete mode 100644 Xcodes/Backend/InstallationStep.swift delete mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Environment.swift create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift rename Xcodes/XcodesKit/Sources/XcodesKit/Models/{InstallState.swift => XcodeInstallState.swift} (86%) rename Xcodes/XcodesKit/Sources/XcodesKit/Models/{InstallationStep.swift => XcodeInstallationStep.swift} (95%) rename Xcodes/XcodesKit/Sources/XcodesKit/Shell/{Shell.swift => XcodesShell.swift} (97%) create mode 100644 Xcodes/XcodesKit/Sources/XcodesKit/XcodesKitEnvironment.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 86eb5b4..17f8687 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -79,7 +79,6 @@ CABFAA492593162500380FEE /* Bundle+InfoPlistValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABFAA482593162500380FEE /* Bundle+InfoPlistValues.swift */; }; CAC28188259EE27200B8AB0B /* CombineExpectations in Frameworks */ = {isa = PBXBuildFile; productRef = CAC28187259EE27200B8AB0B /* CombineExpectations */; }; CAC281CD259F97FA00B8AB0B /* ObservingProgressIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC281CC259F97FA00B8AB0B /* ObservingProgressIndicator.swift */; }; - CAC281DA259F985100B8AB0B /* InstallationStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC281D9259F985100B8AB0B /* InstallationStep.swift */; }; CAC281E2259FA44600B8AB0B /* Bundle+XcodesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC281E1259FA44600B8AB0B /* Bundle+XcodesTests.swift */; }; CAC281E7259FA45A00B8AB0B /* Environment+Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC281E6259FA45A00B8AB0B /* Environment+Mock.swift */; }; CAC9F92D25BCDA4400B4965F /* HelperInstallState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC9F92C25BCDA4400B4965F /* HelperInstallState.swift */; }; @@ -269,7 +268,6 @@ CABFAA422593104F00380FEE /* AboutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutView.swift; sourceTree = ""; }; CABFAA482593162500380FEE /* Bundle+InfoPlistValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+InfoPlistValues.swift"; sourceTree = ""; }; CAC281CC259F97FA00B8AB0B /* ObservingProgressIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ObservingProgressIndicator.swift; sourceTree = ""; }; - CAC281D9259F985100B8AB0B /* InstallationStep.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstallationStep.swift; sourceTree = ""; }; CAC281E1259FA44600B8AB0B /* Bundle+XcodesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+XcodesTests.swift"; sourceTree = ""; }; CAC281E6259FA45A00B8AB0B /* Environment+Mock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Environment+Mock.swift"; sourceTree = ""; }; CAC9F92C25BCDA4400B4965F /* HelperInstallState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelperInstallState.swift; sourceTree = ""; }; @@ -482,7 +480,6 @@ CABFA9AC2592EEE900380FEE /* Foundation.swift */, CA9FF9352595B44700E47BAF /* HelperClient.swift */, CAC9F92C25BCDA4400B4965F /* HelperInstallState.swift */, - CAC281D9259F985100B8AB0B /* InstallationStep.swift */, CA9FF8862595607900E47BAF /* InstalledXcode.swift */, CAA8587B25A2B37900ACF8C0 /* IsTesting.swift */, E89342F925EDCC17007CF557 /* NotificationManager.swift */, @@ -863,7 +860,6 @@ CAFE4ABC25B7D54B0064FE51 /* UpdatesPreferencePane.swift in Sources */, CABFA9BD2592EEEA00380FEE /* Environment.swift in Sources */, CABFA9C32592EEEA00380FEE /* Downloads.swift in Sources */, - CAC281DA259F985100B8AB0B /* InstallationStep.swift in Sources */, E8CBDB8B27AE02FF00B22292 /* ExperiementsPreferencePane.swift in Sources */, E8E98A9625D863D700EC89A0 /* InstallationStepDetailView.swift in Sources */, CA378F992466567600A58CE0 /* AppState.swift in Sources */, @@ -1427,8 +1423,6 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/xcodereleases/data"; requirement = { - kind = revision; - revision = a43ad89e536d7a3da525fcc23fb182c37b756ecc; branch = main; kind = branch; }; diff --git a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 25d8d5b..a08a9b2 100644 --- a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -23,7 +23,7 @@ "package": "XcodeReleases", "repositoryURL": "https://github.com/xcodereleases/data", "state": { - "branch": null, + "branch": "main", "revision": "a43ad89e536d7a3da525fcc23fb182c37b756ecc", "version": null } @@ -69,8 +69,8 @@ "repositoryURL": "https://github.com/mxcl/Path.swift", "state": { "branch": null, - "revision": "9c6f807b0a76be0e27aecc908bc6f173400d839e", - "version": "1.4.0" + "revision": "8e355c28e9393c42e58b18c54cace2c42c98a616", + "version": "1.4.1" } }, { diff --git a/Xcodes/Backend/AppState+Install.swift b/Xcodes/Backend/AppState+Install.swift index dd8eec6..936bb6e 100644 --- a/Xcodes/Backend/AppState+Install.swift +++ b/Xcodes/Backend/AppState+Install.swift @@ -490,7 +490,7 @@ extension AppState { // MARK: - - func setInstallationStep(of version: Version, to step: InstallationStep) { + func setInstallationStep(of version: Version, to step: XcodeInstallationStep) { DispatchQueue.main.async { guard let index = self.allXcodes.firstIndex(where: { $0.version.isEquivalent(to: version) }) else { return } self.allXcodes[index].installState = .installing(step) @@ -499,14 +499,13 @@ extension AppState { Current.notificationManager.scheduleNotification(title: xcode.id.appleDescription, body: step.description, category: .normal) } } - func setInstallationStep(of runtime: DownloadableRuntime, to step: InstallationStep) { + func setInstallationStep(of runtime: DownloadableRuntime, to step: RuntimeInstallationStep) { DispatchQueue.main.async { guard let index = self.downloadableRuntimes.firstIndex(where: { $0.identifier == runtime.identifier }) else { return } self.downloadableRuntimes[index].installState = .installing(step) - // let xcode = self.allXcodes[index] - // Current.notificationManager.scheduleNotification(title: xcode.id.appleDescription, body: step.description, category: .normal) + Current.notificationManager.scheduleNotification(title: runtime.name, body: step.description, category: .normal) } } } diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift index 092accc..f8b6489 100644 --- a/Xcodes/Backend/AppState+Runtimes.swift +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -47,7 +47,12 @@ extension AppState { func downloadRuntime(runtime: DownloadableRuntime) { Task { - try? await downloadRunTimeFull(runtime: runtime) + do { + try await downloadRunTimeFull(runtime: runtime) + } + catch { + Logger.appState.error("Error downloading runtime: \(error.localizedDescription)") + } } // self.runtimePublishers[runtime.identifier] = downloadRunTimeFull(runtime: runtime) @@ -78,33 +83,20 @@ extension AppState { let downloader = Downloader(rawValue: UserDefaults.standard.string(forKey: "downloader") ?? "aria2") ?? .aria2 Logger.appState.info("Downloading \(runtime.visibleIdentifier) with \(downloader)") + let url = try await self.downloadRuntime(for: runtime, downloader: downloader, progressChanged: { [unowned self] progress in + DispatchQueue.main.async { + self.setInstallationStep(of: runtime, to: .downloading(progress: progress)) + } + }).async() - return validateADCSession(path: runtime.downloadPath) - .flatMap { _ in - // we shouldn't have to be authenticated to download runtimes - let downloader = Downloader(rawValue: UserDefaults.standard.string(forKey: "downloader") ?? "aria2") ?? .aria2 - Logger.appState.info("Downloading \(runtime.visibleIdentifier) with \(downloader)") - - return self.downloadRuntime(for: runtime, downloader: downloader, progressChanged: { [unowned self] progress in - DispatchQueue.main.async { - self.setInstallationStep(of: runtime, to: .downloading(progress: progress)) - } - }) - .map { return (runtime, $0) } - } - .flatMap { runtime, url -> AnyPublisher in - switch runtime.contentType { - case .package: - return self.installFromPackage(dmgURL: url, runtime: runtime) - case .diskImage: - return self.installFromImage(dmgURL: url) - } - } - .map { url in - // Done deleting - Logger.appState.debug("URL: \(url)") - } - .eraseToAnyPublisher() + Logger.appState.debug("Done downloading: \(url)") + //self.setInstallationStep(of: runtime, to: .downloading(progress: progress)) + switch runtime.contentType { + case .package: + try await self.installFromPackage(dmgURL: url, runtime: runtime) + case .diskImage: + try await self.installFromImage(dmgURL: url) + } } func downloadRuntime(for runtime: DownloadableRuntime, downloader: Downloader, progressChanged: @escaping (Progress) -> Void) -> AnyPublisher { @@ -142,7 +134,7 @@ extension AppState { progressChanged: progressChanged) case .urlSession: - + // TODO: Support runtime download via URL Session return Just(runtime.url) .setFailureType(to: Error.self) .eraseToAnyPublisher() @@ -171,53 +163,56 @@ extension AppState { .eraseToAnyPublisher() } - public func downloadRuntimeWithAria2(_ runtime: DownloadableRuntime, to destination: Path, aria2Path: Path, progressChanged: @escaping (Progress) -> Void) async -> URL { + + public func installFromImage(dmgURL: URL) async throws { + + try? self.runtimeService.installRuntimeImage(dmgURL: dmgURL) } - public func installFromImage(dmgURL: URL) -> AnyPublisher { - - - try? self.runtimeService.installRuntimeImage(dmgURL: dmgURL) - - - return Just(dmgURL) - .setFailureType(to: Error.self) - .eraseToAnyPublisher() - - } - - public func installFromPackage(dmgURL: URL, runtime: DownloadableRuntime) -> AnyPublisher { + public func installFromPackage(dmgURL: URL, runtime: DownloadableRuntime) async throws { Logger.appState.info("Mounting DMG") - Task { - do { - let mountedUrl = try await self.runtimeService.mountDMG(dmgUrl: dmgURL) - - // 2-Get the first path under the mounted path, should be a .pkg - let pkgPath = Path(url: mountedUrl)!.ls().first! - try Path.xcodesCaches.mkdir().setCurrentUserAsOwner() - - let expandedPkgPath = Path.xcodesCaches/runtime.identifier - //try expandedPkgPath.mkdir() - Logger.appState.info("PKG Path: \(pkgPath)") - Logger.appState.info("Expanded PKG Path: \(expandedPkgPath)") - //try? Current.files.removeItem(at: expandedPkgPath.url) - - // 5-Expand (not install) the pkg to temporary path - try await self.runtimeService.expand(pkgPath: pkgPath, expandedPkgPath: expandedPkgPath) - //try await self.runtimeService.unmountDMG(mountedURL: mountedUrl) - - } catch { - Logger.appState.error("Error installing runtime: \(error.localizedDescription)") - } - - } - - - return Just(dmgURL) - .setFailureType(to: Error.self) - .eraseToAnyPublisher() + do { + let mountedUrl = try await self.runtimeService.mountDMG(dmgUrl: dmgURL) + + // 2-Get the first path under the mounted path, should be a .pkg + let pkgPath = Path(url: mountedUrl)!.ls().first! + try Path.xcodesCaches.mkdir().setCurrentUserAsOwner() + + let expandedPkgPath = Path.xcodesCaches/runtime.identifier + //try expandedPkgPath.mkdir() + Logger.appState.info("PKG Path: \(pkgPath)") + Logger.appState.info("Expanded PKG Path: \(expandedPkgPath)") + //try? Current.files.removeItem(at: expandedPkgPath.url) + + // 5-Expand (not install) the pkg to temporary path + try await self.runtimeService.expand(pkgPath: pkgPath, expandedPkgPath: expandedPkgPath) + //try await self.runtimeService.unmountDMG(mountedURL: mountedUrl) + + } catch { + Logger.appState.error("Error installing runtime: \(error.localizedDescription)") + } + } +} + +extension AnyPublisher { + func async() async throws -> Output { + try await withCheckedThrowingContinuation { continuation in + var cancellable: AnyCancellable? + + cancellable = first() + .sink { result in + switch result { + case .finished: + break + case let .failure(error): + continuation.resume(throwing: error) + } + cancellable?.cancel() + } receiveValue: { value in + continuation.resume(with: .success(value)) + } + } } - } diff --git a/Xcodes/Backend/Environment.swift b/Xcodes/Backend/Environment.swift index 8b7da37..d84ad26 100644 --- a/Xcodes/Backend/Environment.swift +++ b/Xcodes/Backend/Environment.swift @@ -112,100 +112,73 @@ public struct Shell { return (progress, publisher) } - public var downloadWithAria2Async: (Path, URL, Path, [HTTPCookie]) async throws -> Progress = { aria2Path, url, destination, cookies in - let process = Process() - process.executableURL = aria2Path.url - process.arguments = [ - "--header=Cookie: \(cookies.map { "\($0.name)=\($0.value)" }.joined(separator: "; "))", - "--max-connection-per-server=16", - "--split=16", - "--summary-interval=1", - "--stop-with-process=\(ProcessInfo.processInfo.processIdentifier)", // if xcodes quits, stop aria2 process - "--dir=\(destination.parent.string)", - "--out=\(destination.basename())", - "--human-readable=false", // sets the output to use bytes instead of formatting - url.absoluteString, - ] - let stdOutPipe = Pipe() - process.standardOutput = stdOutPipe - let stdErrPipe = Pipe() - process.standardError = stdErrPipe - - var progress = Progress() - progress.kind = .file - progress.fileOperationKind = .downloading - - let observer = NotificationCenter.default.addObserver( - forName: .NSFileHandleDataAvailable, - object: nil, - queue: OperationQueue.main - ) { note in - guard - // This should always be the case for Notification.Name.NSFileHandleDataAvailable - let handle = note.object as? FileHandle, - handle === stdOutPipe.fileHandleForReading || handle === stdErrPipe.fileHandleForReading - else { return } - - defer { handle.waitForDataInBackgroundAndNotify() } - - let string = String(decoding: handle.availableData, as: UTF8.self) - - progress.updateFromAria2(string: string) - } - - stdOutPipe.fileHandleForReading.waitForDataInBackgroundAndNotify() - stdErrPipe.fileHandleForReading.waitForDataInBackgroundAndNotify() - - do { - - defer { - //DispatchQueue.global(qos: .default).async { - process.waitUntilExit() - - NotificationCenter.default.removeObserver(observer, name: .NSFileHandleDataAvailable, object: nil) - - guard process.terminationReason == .exit, process.terminationStatus == 0 else { - if let aria2cError = Aria2CError(exitStatus: process.terminationStatus) { - throw aria2cError - } else { - throw ProcessExecutionError(process: process, standardOutput: "", standardError: "") - } - } - return -// } - } - try process.run() - } catch { - throw error - } - - -// let publisher = Deferred { -// Future { promise in -// DispatchQueue.global(qos: .default).async { +// public var downloadWithAria2Async: (Path, URL, Path, [HTTPCookie]) async throws -> Progress = { aria2Path, url, destination, cookies in +// let process = Process() +// process.executableURL = aria2Path.url +// process.arguments = [ +// "--header=Cookie: \(cookies.map { "\($0.name)=\($0.value)" }.joined(separator: "; "))", +// "--max-connection-per-server=16", +// "--split=16", +// "--summaraasdy-interval=1", +// "--stop-with-process=\(ProcessInfo.processInfo.processIdentifier)", // if xcodes quits, stop aria2 process +// "--dir=\(destination.parent.string)", +// "--out=\(destination.basename())", +// "--human-readable=false", // sets the output to use bytes instead of formatting +// url.absoluteString, +// ] +// let stdOutPipe = Pipe() +// process.standardOutput = stdOutPipe +// let stdErrPipe = Pipe() +// process.standardError = stdErrPipe +// +// var progress = Progress() +// progress.kinasdas +// progress.fileOperationKind = .downloadingasdfasd +// +// let observer = NotificationCenter.default.addObserver( +// forName: .NSFileHandleDataAvailable, +// object: nil, +// queue: OperationQueue.main +// ) { note in +// guard +// // This should always be the case for Notification.Name.NSFileHandleDataAvailable +// let handle = note.object as? FileHandle, +// handle === stdOutPipe.fileHandleForReading || handle === stdErrPipe.fileHandleForReading +// else { return } +// +// defer { handle.waitForDataInBackgroundAndNotify() } +// +// let string = String(decoding: handle.availableData, as: UTF8.self) +// +// progress.updateFromAria2(string: string) +// } +// +// stdOutPipe.fileHandleForReading.waitForDataInBackgroundAndNotify() +// stdErrPipe.fileHandleForReading.waitForDataInBackgroundAndNotify() +// +// do { +// +// defer { +// //DispatchQueue.global(qos: .default).async { // process.waitUntilExit() -// +// // NotificationCenter.default.removeObserver(observer, name: .NSFileHandleDataAvailable, object: nil) -// +// // guard process.terminationReason == .exit, process.terminationStatus == 0 else { // if let aria2cError = Aria2CError(exitStatus: process.terminationStatus) { -// return promise(.failure(aria2cError)) +// throw aria2cError // } else { -// return promise(.failure(ProcessExecutionError(process: process, standardOutput: "", standardError: ""))) +// throw ProcessExecutionError(process: process, standardOutput: "", standardError: "") // } // } -// promise(.success(())) +// return // } // } +// try process.run() +// } catch { +// throw error // } -// .handleEvents(receiveCancel: { -// process.terminate() -// NotificationCenter.default.removeObserver(observer, name: .NSFileHandleDataAvailable, object: nil) -// }) -// .eraseToAnyPublisher() -// -// return (progress, publisher) - } +// } public var unxipExperiment: (URL) -> AnyPublisher = { url in let unxipPath = Path(url: Bundle.main.url(forAuxiliaryExecutable: "unxip")!)! diff --git a/Xcodes/Backend/InstallationStep.swift b/Xcodes/Backend/InstallationStep.swift deleted file mode 100644 index 9519cf5..0000000 --- a/Xcodes/Backend/InstallationStep.swift +++ /dev/null @@ -1,45 +0,0 @@ -//import Foundation -// -///// A numbered step -//enum InstallationStep: Equatable, CustomStringConvertible { -// case downloading(progress: Progress) -// case unarchiving -// case moving(destination: String) -// case trashingArchive -// case checkingSecurity -// case finishing -// -// var description: String { -// "(\(stepNumber)/\(stepCount)) \(message)" -// } -// -// var message: String { -// switch self { -// case .downloading: -// return localizeString("Downloading") -// case .unarchiving: -// return localizeString("Unarchiving") -// case .moving(let destination): -// return String(format: localizeString("Moving"), destination) -// case .trashingArchive: -// return localizeString("TrashingArchive") -// case .checkingSecurity: -// return localizeString("CheckingSecurity") -// case .finishing: -// return localizeString("Finishing") -// } -// } -// -// var stepNumber: Int { -// switch self { -// case .downloading: return 1 -// case .unarchiving: return 2 -// case .moving: return 3 -// case .trashingArchive: return 4 -// case .checkingSecurity: return 5 -// case .finishing: return 6 -// } -// } -// -// var stepCount: Int { 6 } -//} diff --git a/Xcodes/Backend/Process.swift b/Xcodes/Backend/Process.swift index 77935df..b3e5a64 100644 --- a/Xcodes/Backend/Process.swift +++ b/Xcodes/Backend/Process.swift @@ -4,6 +4,8 @@ import os.log import Path import XcodesKit +public typealias ProcessOutput = (status: Int32, out: String, err: String) + extension Process { @discardableResult static func run(_ executable: any Pathish, workingDirectory: URL? = nil, input: String? = nil, _ arguments: String...) -> AnyPublisher { diff --git a/Xcodes/Backend/XcodeInstallState.swift b/Xcodes/Backend/XcodeInstallState.swift index b23b75e..a289bb5 100644 --- a/Xcodes/Backend/XcodeInstallState.swift +++ b/Xcodes/Backend/XcodeInstallState.swift @@ -4,7 +4,7 @@ import XcodesKit enum XcodeInstallState: Equatable { case notInstalled - case installing(InstallationStep) + case installing(XcodeInstallationStep) case installed(Path) var notInstalled: Bool { diff --git a/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift b/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift index e10b193..1ed801a 100644 --- a/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift +++ b/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift @@ -2,7 +2,7 @@ import SwiftUI import XcodesKit struct InstallationStepDetailView: View { - let installationStep: InstallationStep + let installationStep: XcodeInstallationStep var body: some View { VStack(alignment: .leading, spacing: 0) { diff --git a/Xcodes/Frontend/XcodeList/InstallationStepRowView.swift b/Xcodes/Frontend/XcodeList/InstallationStepRowView.swift index ef716af..3bf7db5 100644 --- a/Xcodes/Frontend/XcodeList/InstallationStepRowView.swift +++ b/Xcodes/Frontend/XcodeList/InstallationStepRowView.swift @@ -2,7 +2,7 @@ import SwiftUI import XcodesKit struct InstallationStepRowView: View { - let installationStep: InstallationStep + let installationStep: XcodeInstallationStep let highlighted: Bool let cancel: () -> Void diff --git a/Xcodes/Resources/Licenses.rtf b/Xcodes/Resources/Licenses.rtf index d89a291..179cdf4 100644 --- a/Xcodes/Resources/Licenses.rtf +++ b/Xcodes/Resources/Licenses.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf2709 +{\rtf1\ansi\ansicpg1252\cocoartf2758 \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fnil\fcharset0 .SFNS-Regular;} {\colortbl;\red255\green255\blue255;} {\*\expandedcolortbl;;} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Environment.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Environment.swift deleted file mode 100644 index a988ce9..0000000 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Environment.swift +++ /dev/null @@ -1,7 +0,0 @@ -import Foundation - -public struct Environment { - public var shell = Shell() -} - -public var Current = Environment() diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift new file mode 100644 index 0000000..25bc5bc --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift @@ -0,0 +1,34 @@ +// +// RuntimeInstallState.swift +// +// +// Created by Matt Kiazyk on 2023-11-23. +// + +import Foundation +import Path + +public enum RuntimeInstallState: Equatable { + case notInstalled + case installing(RuntimeInstallationStep) + case installed(Path) + + var notInstalled: Bool { + switch self { + case .notInstalled: return true + default: return false + } + } + var installing: Bool { + switch self { + case .installing: return true + default: return false + } + } + var installed: Bool { + switch self { + case .installed: return true + default: return false + } + } +} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift new file mode 100644 index 0000000..21946a1 --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift @@ -0,0 +1,51 @@ +// +// RuntimeInstallationStep.swift +// +// +// Created by Matt Kiazyk on 2023-11-23. +// + +import Foundation + +public enum RuntimeInstallationStep: Equatable, CustomStringConvertible { + case downloading(progress: Progress) + case unarchiving + case moving(destination: String) + case trashingArchive + case checkingSecurity + case finishing + + public var description: String { + "(\(stepNumber)/\(stepCount)) \(message)" + } + + public var message: String { + switch self { + case .downloading: + return localizeString("Downloading") + case .unarchiving: + return localizeString("Unarchiving") + case .moving(let destination): + return String(format: localizeString("Moving"), destination) + case .trashingArchive: + return localizeString("TrashingArchive") + case .checkingSecurity: + return localizeString("CheckingSecurity") + case .finishing: + return localizeString("Finishing") + } + } + + public var stepNumber: Int { + switch self { + case .downloading: return 1 + case .unarchiving: return 2 + case .moving: return 3 + case .trashingArchive: return 4 + case .checkingSecurity: return 5 + case .finishing: return 6 + } + } + + public var stepCount: Int { 6 } +} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift index 2ab3362..9e9e370 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift @@ -29,7 +29,7 @@ public struct DownloadableRuntime: Codable { } // dynamically updated - not decoded - public var installState: InstallState = .notInstalled + public var installState: RuntimeInstallState = .notInstalled public var sdkBuildUpdate: String? enum CodingKeys: CodingKey { diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallState.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/XcodeInstallState.swift similarity index 86% rename from Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallState.swift rename to Xcodes/XcodesKit/Sources/XcodesKit/Models/XcodeInstallState.swift index 8aa6b1e..0f824a5 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallState.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/XcodeInstallState.swift @@ -8,9 +8,9 @@ import Foundation import Path -public enum InstallState: Equatable { +public enum XcodeInstallState: Equatable { case notInstalled - case installing(InstallationStep) + case installing(XcodeInstallationStep) case installed(Path) var notInstalled: Bool { diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallationStep.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/XcodeInstallationStep.swift similarity index 95% rename from Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallationStep.swift rename to Xcodes/XcodesKit/Sources/XcodesKit/Models/XcodeInstallationStep.swift index e33528f..8d5513d 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/InstallationStep.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/XcodeInstallationStep.swift @@ -8,7 +8,7 @@ import Foundation // A numbered step -public enum InstallationStep: Equatable, CustomStringConvertible { +public enum XcodeInstallationStep: Equatable, CustomStringConvertible { case downloading(progress: Progress) case unarchiving case moving(destination: String) @@ -50,6 +50,7 @@ public enum InstallationStep: Equatable, CustomStringConvertible { public var stepCount: Int { 6 } } + func localizeString(_ key: String, comment: String = "") -> String { if #available(macOS 12, *) { return String(localized: String.LocalizationValue(key)) diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Shell.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Shell/XcodesShell.swift similarity index 97% rename from Xcodes/XcodesKit/Sources/XcodesKit/Shell/Shell.swift rename to Xcodes/XcodesKit/Sources/XcodesKit/Shell/XcodesShell.swift index 81157d7..c5760b3 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Shell/Shell.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Shell/XcodesShell.swift @@ -1,7 +1,7 @@ import Foundation import Path -public struct Shell { +public struct XcodesShell { public var installedRuntimes: () async throws -> ProcessOutput = { try await Process.run(Path.root.usr.bin.join("xcrun"), "simctl", "runtime", "list", "-j") } diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/XcodesKitEnvironment.swift b/Xcodes/XcodesKit/Sources/XcodesKit/XcodesKitEnvironment.swift new file mode 100644 index 0000000..c6a5243 --- /dev/null +++ b/Xcodes/XcodesKit/Sources/XcodesKit/XcodesKitEnvironment.swift @@ -0,0 +1,7 @@ +import Foundation + +public struct XcodesKitEnvironment { + public var shell = XcodesShell() +} + +public var Current = XcodesKitEnvironment() diff --git a/XcodesTests/AppStateTests.swift b/XcodesTests/AppStateTests.swift index ce38607..4be9ca3 100644 --- a/XcodesTests/AppStateTests.swift +++ b/XcodesTests/AppStateTests.swift @@ -4,6 +4,8 @@ import CombineExpectations import Path import Version import XCTest +import XcodesKit + @testable import Xcodes class AppStateTests: XCTestCase { diff --git a/XcodesTests/Environment+Mock.swift b/XcodesTests/Environment+Mock.swift index 8755da5..f030d79 100644 --- a/XcodesTests/Environment+Mock.swift +++ b/XcodesTests/Environment+Mock.swift @@ -2,8 +2,8 @@ import Combine import Foundation @testable import Xcodes -extension Environment { - static var mock = Environment( +extension Xcodes.Environment { + static var mock = Xcodes.Environment( shell: .mock, files: .mock, network: .mock, From a596e5ff6c2d37742ec06b0620e120f44fca24fb Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Fri, 24 Nov 2023 00:15:41 +0700 Subject: [PATCH 45/86] refactor preview code --- Xcodes.xcodeproj/project.pbxproj | 2 +- .../Frontend/InfoPane/CompatibilityView.swift | 31 +-------- Xcodes/Frontend/InfoPane/CompilersView.swift | 43 ++++--------- Xcodes/Frontend/InfoPane/IconView.swift | 40 +++--------- .../InfoPane/IdenticalBuildView.swift | 33 +++------- Xcodes/Frontend/InfoPane/InfoPane.swift | 41 ++++-------- .../Frontend/InfoPane/InfoPaneControls.swift | 46 +++++--------- .../InfoPane/InstallationStepDetailView.swift | 43 +++++++------ .../InfoPane/InstalledStateButtons.swift | 63 +++++++++---------- .../InfoPane/NotInstalledStateButtons.swift | 36 ++--------- .../Frontend/InfoPane/ReleaseDateView.swift | 25 +------- .../Frontend/InfoPane/ReleaseNotesView.swift | 28 ++------- Xcodes/Frontend/InfoPane/SDKsView.swift | 35 +++-------- Xcodes/Frontend/InfoPane/UnselectedView.swift | 8 +-- Xcodes/XcodesApp.swift | 43 ++++++------- 15 files changed, 154 insertions(+), 363 deletions(-) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index c057546..4ce7a31 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -9,7 +9,7 @@ /* Begin PBXBuildFile section */ 36741BFD291E4FDB00A85AAE /* DownloadPreferencePane.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36741BFC291E4FDB00A85AAE /* DownloadPreferencePane.swift */; }; 36741BFF291E50F500A85AAE /* FileError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36741BFE291E50F500A85AAE /* FileError.swift */; }; - 536CFDD2263C94DE00026CE0 /* SignedInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536CFDD1263C94DE00026CE0 /* SignedInView.swift */; }; + 536CFDD2263C94DE00026CE0 /* SignedInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536CFDD1263C94DE00026CE0 /* SignedInView.swift */; }; 536CFDD4263C9A8000026CE0 /* XcodesSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536CFDD3263C9A8000026CE0 /* XcodesSheet.swift */; }; 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CBAB2B263DCC9100410495 /* XcodesAlert.swift */; }; 63EAA4EB259944450046AB8F /* ProgressButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EAA4EA259944450046AB8F /* ProgressButton.swift */; }; diff --git a/Xcodes/Frontend/InfoPane/CompatibilityView.swift b/Xcodes/Frontend/InfoPane/CompatibilityView.swift index 9b60998..2cf3b40 100644 --- a/Xcodes/Frontend/InfoPane/CompatibilityView.swift +++ b/Xcodes/Frontend/InfoPane/CompatibilityView.swift @@ -25,32 +25,7 @@ struct CompatibilityView: View { } } -struct CompatibilityView_Preview: PreviewProvider { - static var previews: some View { - WrapperView() - } -} - -private struct WrapperView: View { - @State var isNil = false - var requiredMacOSVersion: String? { - isNil - ? nil - : "10.15.4" - } - - var body: some View { - VStack { - HStack { - CompatibilityView(requiredMacOSVersion: requiredMacOSVersion) - .border(.red) - } - Spacer() - Toggle(isOn: $isNil) { - Text("Is Nil?") - } - } - .frame(width: 200, height: 100) - .padding() - } +#Preview { + CompatibilityView(requiredMacOSVersion: "10.15.4") + .padding() } diff --git a/Xcodes/Frontend/InfoPane/CompilersView.swift b/Xcodes/Frontend/InfoPane/CompilersView.swift index cfa7df0..b08458a 100644 --- a/Xcodes/Frontend/InfoPane/CompilersView.swift +++ b/Xcodes/Frontend/InfoPane/CompilersView.swift @@ -44,36 +44,15 @@ struct CompilersView: View { } } -struct CompilersView_Preview: PreviewProvider { - static var previews: some View { - WrapperView() - } +#Preview { + let compilers = Compilers( + gcc: .init(number: "4"), + llvm_gcc: .init(number: "213"), + llvm: .init(number: "2.3"), + clang: .init(number: "7.3"), + swift: .init(number: "5.3.2") + ) + + return CompilersView(compilers: compilers) + .padding() } - -private struct WrapperView: View { - @State var isNil = false - var compilers: Compilers? { - isNil - ? nil - : Compilers( - gcc: .init(number: "4"), - llvm_gcc: .init(number: "213"), - llvm: .init(number: "2.3"), - clang: .init(number: "7.3"), - swift: .init(number: "5.3.2")) - } - - var body: some View { - VStack { - CompilersView(compilers: compilers) - .border(.red) - Spacer() - Toggle(isOn: $isNil) { - Text("Is Nil?") - } - } - .frame(width: 200, height: 100) - .padding() - } -} - diff --git a/Xcodes/Frontend/InfoPane/IconView.swift b/Xcodes/Frontend/InfoPane/IconView.swift index f32aef5..c8bf32f 100644 --- a/Xcodes/Frontend/InfoPane/IconView.swift +++ b/Xcodes/Frontend/InfoPane/IconView.swift @@ -24,38 +24,14 @@ struct IconView: View { } } -//#Preview { -// Group { -// IconView(path: "/Applications/Xcode.app") -// IconView() -// } -// .padding() -//} - -struct IconView_Preview: PreviewProvider { - static var previews: some View { - WrapperView() - } +#Preview("Installed") { + IconView(installState: XcodeInstallState.installed(Path("/Applications/Xcode.app")!)) + .frame(width: 300, height: 100) + .padding() } -private struct WrapperView: View { - @State var isIcon = false - var state: XcodeInstallState { - isIcon - ? XcodeInstallState.installed(Path("/Applications/Xcode.app")!) - : XcodeInstallState.notInstalled - } - - var body: some View { - VStack { - IconView(installState: state) - .border(.red) - Spacer() - Toggle(isOn: $isIcon) { - Text("Icon?") - } - } - .frame(width: 300, height: 100) - .padding() - } +#Preview("Not Installed") { + IconView(installState: XcodeInstallState.notInstalled) + .frame(width: 300, height: 100) + .padding() } diff --git a/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift b/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift index ad3fcd9..2eac1f0 100644 --- a/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift +++ b/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift @@ -49,31 +49,14 @@ struct IdenticalBuildsView: View { } } -struct IdenticalBuildsView_Preview: PreviewProvider { - static var previews: some View { - WrapperView() - } +let builds: [Version] = [.init(xcodeVersion: "15.0")!, .init(xcodeVersion: "15.1")!] + +#Preview("Has Some Builds") { + IdenticalBuildsView(builds: builds) + .padding() } -private struct WrapperView: View { - @State var isEmpty = false - var builds: [Version] { - isEmpty - ? [] - : [.init(xcodeVersion: "15.0")!, - .init(xcodeVersion: "15.1")!] - } - - var body: some View { - VStack { - IdenticalBuildsView(builds: builds) - .border(.red) - Spacer() - Toggle(isOn: $isEmpty) { - Text("No Builds?") - } - } - .frame(width: 300, height: 100) - .padding() - } +#Preview("No Build") { + IdenticalBuildsView(builds: []) + .padding() } diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index a42a8f0..e1215c8 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -36,36 +36,21 @@ struct InfoPane: View { } } -struct InfoPane_Previews: PreviewProvider { - static var previews: some View { - WrapperView() - } -} +#Preview(PreviewName.allCases[0].rawValue) { makePreviewContent(for: 0) } +#Preview(PreviewName.allCases[1].rawValue) { makePreviewContent(for: 1) } +#Preview(PreviewName.allCases[2].rawValue) { makePreviewContent(for: 2) } +#Preview(PreviewName.allCases[3].rawValue) { makePreviewContent(for: 3) } +#Preview(PreviewName.allCases[4].rawValue) { makePreviewContent(for: 4) } -private struct WrapperView: View { - @State var name: PreviewName = .Populated_Installed_Selected +private func makePreviewContent(for index: Int) -> some View { + let name = PreviewName.allCases[index] - var body: some View { - VStack { - InfoPane(xcode: xcode) - .environmentObject(configure(AppState()) { - $0.allXcodes = [xcode] - }) - .border(.red) - .frame(width: 300, height: 400) - Spacer() - Picker("Preview Name", selection: $name) { - ForEach(PreviewName.allCases) { - Text($0.rawValue).tag($0) - } - } - .pickerStyle(.inline) - } - .frame(maxWidth: .infinity) - .padding() - } - - var xcode: Xcode { xcodeDict[name]! } + return InfoPane(xcode: xcodeDict[name]!) + .environmentObject(configure(AppState()) { + $0.allXcodes = [xcodeDict[name]!] + }) + .frame(width: 300, height: 400) + .padding() } enum PreviewName: String, CaseIterable, Identifiable { diff --git a/Xcodes/Frontend/InfoPane/InfoPaneControls.swift b/Xcodes/Frontend/InfoPane/InfoPaneControls.swift index fb88044..6034a38 100644 --- a/Xcodes/Frontend/InfoPane/InfoPaneControls.swift +++ b/Xcodes/Frontend/InfoPane/InfoPaneControls.swift @@ -28,35 +28,19 @@ struct InfoPaneControls: View { } } -struct InfoPaneControls_Previews: PreviewProvider { - static var previews: some View { - WrapperView() - } -} - -private struct WrapperView: View { - @State var name: PreviewName = .Populated_Installed_Selected - - var body: some View { - VStack { - InfoPaneControls(xcode: xcode) - .environmentObject(configure(AppState()) { - $0.allXcodes = [xcode] - }) - .border(.red) - .frame(width: 300, height: 400) - Spacer() - Picker("Preview Name", selection: $name) { - ForEach(PreviewName.allCases) { - Text($0.rawValue).tag($0) - } - } - .pickerStyle(.inline) - - } - .frame(maxWidth: .infinity) - .padding() - } - - var xcode: Xcode { xcodeDict[name]! } +#Preview(PreviewName.allCases[0].rawValue) { makePreviewContent(for: 0) } +#Preview(PreviewName.allCases[1].rawValue) { makePreviewContent(for: 1) } +#Preview(PreviewName.allCases[2].rawValue) { makePreviewContent(for: 2) } +#Preview(PreviewName.allCases[3].rawValue) { makePreviewContent(for: 3) } +#Preview(PreviewName.allCases[4].rawValue) { makePreviewContent(for: 4) } + +private func makePreviewContent(for index: Int) -> some View { + let name = PreviewName.allCases[index] + + return InfoPaneControls(xcode: xcodeDict[name]!) + .environmentObject(configure(AppState()) { + $0.allXcodes = [xcodeDict[name]!] + }) + .frame(width: 300) + .padding() } diff --git a/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift b/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift index 7c16066..f9fb7d8 100644 --- a/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift +++ b/Xcodes/Frontend/InfoPane/InstallationStepDetailView.swift @@ -24,26 +24,25 @@ struct InstallationStepDetailView: View { } } -struct InstallDetailView_Previews: PreviewProvider { - static var previews: some View { - Group { - InstallationStepDetailView( - installationStep: .downloading( - progress: configure(Progress()) { - $0.kind = .file - $0.fileOperationKind = .downloading - $0.estimatedTimeRemaining = 123 - $0.totalUnitCount = 11944848484 - $0.completedUnitCount = 848444920 - $0.throughput = 9211681 - } - ) - ) - - InstallationStepDetailView( - installationStep: .unarchiving - ) - } - .padding() - } +#Preview("Downloading") { + InstallationStepDetailView( + installationStep: .downloading( + progress: configure(Progress()) { + $0.kind = .file + $0.fileOperationKind = .downloading + $0.estimatedTimeRemaining = 123 + $0.totalUnitCount = 11944848484 + $0.completedUnitCount = 848444920 + $0.throughput = 9211681 + } + ) + ) + .padding() +} + +#Preview("Unarchiving") { + InstallationStepDetailView( + installationStep: .unarchiving + ) + .padding() } diff --git a/Xcodes/Frontend/InfoPane/InstalledStateButtons.swift b/Xcodes/Frontend/InfoPane/InstalledStateButtons.swift index 241920f..3c60224 100644 --- a/Xcodes/Frontend/InfoPane/InstalledStateButtons.swift +++ b/Xcodes/Frontend/InfoPane/InstalledStateButtons.swift @@ -42,38 +42,35 @@ struct InstalledStateButtons: View { } } -struct InstalledStateButtons_Preview: PreviewProvider { - static var previews: some View { - InstalledStateButtons(xcode: Self.xcode) - .environmentObject(configure(AppState()) { - $0.allXcodes = [Self.xcode] - }) - .padding() - .frame(width: 300) - } - - static private let xcode = Xcode( - version: Version(major: 12, minor: 3, patch: 0), - installState: .installed(Path("/Applications/Xcode-12.3.0.app")!), - selected: true, - icon: NSWorkspace.shared.icon(forFile: "/Applications/Xcode-12.3.0.app"), - requiredMacOSVersion: "10.15.4", - releaseNotesURL: URL(string: "https://developer.apple.com/documentation/xcode-release-notes/xcode-12_3-release-notes/")!, - releaseDate: Date(), - sdks: SDKs( - macOS: .init(number: "11.1"), - iOS: .init(number: "14.3"), - watchOS: .init(number: "7.3"), - tvOS: .init(number: "14.3") - ), - compilers: Compilers( - gcc: .init(number: "4"), - llvm_gcc: .init(number: "213"), - llvm: .init(number: "2.3"), - clang: .init(number: "7.3"), - swift: .init(number: "5.3.2") - ), - downloadFileSize: 242342424 - ) +#Preview { + InstalledStateButtons(xcode: xcode) + .environmentObject(configure(AppState()) { + $0.allXcodes = [xcode] + }) + .padding() + .frame(width: 300) } +private let xcode = Xcode( + version: Version(major: 12, minor: 3, patch: 0), + installState: .installed(Path("/Applications/Xcode-12.3.0.app")!), + selected: true, + icon: NSWorkspace.shared.icon(forFile: "/Applications/Xcode-12.3.0.app"), + requiredMacOSVersion: "10.15.4", + releaseNotesURL: URL(string: "https://developer.apple.com/documentation/xcode-release-notes/xcode-12_3-release-notes/")!, + releaseDate: Date(), + sdks: SDKs( + macOS: .init(number: "11.1"), + iOS: .init(number: "14.3"), + watchOS: .init(number: "7.3"), + tvOS: .init(number: "14.3") + ), + compilers: Compilers( + gcc: .init(number: "4"), + llvm_gcc: .init(number: "213"), + llvm: .init(number: "2.3"), + clang: .init(number: "7.3"), + swift: .init(number: "5.3.2") + ), + downloadFileSize: 242342424 +) diff --git a/Xcodes/Frontend/InfoPane/NotInstalledStateButtons.swift b/Xcodes/Frontend/InfoPane/NotInstalledStateButtons.swift index a0d09ef..28a187e 100644 --- a/Xcodes/Frontend/InfoPane/NotInstalledStateButtons.swift +++ b/Xcodes/Frontend/InfoPane/NotInstalledStateButtons.swift @@ -35,34 +35,10 @@ struct NotInstalledStateButtons: View { } } -struct NotInstalledStateButtons_Preview: PreviewProvider { - static var previews: some View { - WrapperView() - } -} - -private struct WrapperView: View { - @State var isSizeNil = false - - var downloadFileSizeString: String? { - isSizeNil - ? nil - : "1,19 GB" - } - - var body: some View { - VStack { - NotInstalledStateButtons( - downloadFileSizeString: downloadFileSizeString, - id: Version(major: 12, minor: 3, patch: 0) - ) - .border(.red) - Spacer() - Toggle(isOn: $isSizeNil) { - Text("Is Size Nil?") - } - } - .frame(width: 200, height: 100) - .padding() - } +#Preview { + NotInstalledStateButtons( + downloadFileSizeString: "1,19 GB", + id: Version(major: 12, minor: 3, patch: 0) + ) + .padding() } diff --git a/Xcodes/Frontend/InfoPane/ReleaseDateView.swift b/Xcodes/Frontend/InfoPane/ReleaseDateView.swift index 2c78b70..c7ee304 100644 --- a/Xcodes/Frontend/InfoPane/ReleaseDateView.swift +++ b/Xcodes/Frontend/InfoPane/ReleaseDateView.swift @@ -29,26 +29,7 @@ struct ReleaseDateView: View { } } -struct ReleaseDateView_Preview: PreviewProvider { - static var previews: some View { - WrapperView() - } -} - -private struct WrapperView: View { - @State var isNil = false - var date: Date? { isNil ? nil : Date() } - - var body: some View { - VStack { - ReleaseDateView(date: date) - .border(.red) - Spacer() - Toggle(isOn: $isNil) { - Text("Is Nil?") - } - } - .frame(width: 300, height: 100) - .padding() - } +#Preview { + ReleaseDateView(date: Date()) + .padding() } diff --git a/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift b/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift index 14e86e8..10e3638 100644 --- a/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift +++ b/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift @@ -30,29 +30,9 @@ struct ReleaseNotesView: View { } } -struct ReleaseNotesView_Preview: PreviewProvider { - static var previews: some View { - WrapperView() - } -} +#Preview { + let url = URL(string: "https://developer.apple.com/documentation/xcode-release-notes/xcode-12_3-release-notes/")! -private struct WrapperView: View { - @State var hasURL = false - var url: URL? { - hasURL - ? nil - : URL(string: "https://developer.apple.com/documentation/xcode-release-notes/xcode-12_3-release-notes/")! - } - - var body: some View { - VStack { - ReleaseNotesView(url: url).border(.red) - Spacer() - Toggle(isOn: $hasURL) { - Text("Has URL?") - } - } - .frame(width: 300, height: 100) - .padding() - } + return ReleaseNotesView(url: url) + .padding() } diff --git a/Xcodes/Frontend/InfoPane/SDKsView.swift b/Xcodes/Frontend/InfoPane/SDKsView.swift index 78b99ae..0d3552e 100644 --- a/Xcodes/Frontend/InfoPane/SDKsView.swift +++ b/Xcodes/Frontend/InfoPane/SDKsView.swift @@ -56,32 +56,13 @@ struct SDKsView: View { } } -struct SDKsView_Preview: PreviewProvider { - static var previews: some View { - WrapperView() - } -} +#Preview { + let sdks = SDKs( + macOS: .init(number: "11.1"), + iOS: .init(number: "14.3"), + watchOS: .init(number: "7.3"), + tvOS: .init(number: "14.3")) -private struct WrapperView: View { - @State var isNil = false - var sdks: SDKs? { - isNil - ? nil - : SDKs(macOS: .init(number: "11.1"), - iOS: .init(number: "14.3"), - watchOS: .init(number: "7.3"), - tvOS: .init(number: "14.3")) - } - - var body: some View { - VStack { - SDKsView(sdks: sdks).border(.red) - Spacer() - Toggle(isOn: $isNil) { - Text("Empty Content?") - } - } - .frame(width: 200, height: 100) - .padding() - } + return SDKsView(sdks: sdks) + .padding() } diff --git a/Xcodes/Frontend/InfoPane/UnselectedView.swift b/Xcodes/Frontend/InfoPane/UnselectedView.swift index f0d5ea4..f84cb06 100644 --- a/Xcodes/Frontend/InfoPane/UnselectedView.swift +++ b/Xcodes/Frontend/InfoPane/UnselectedView.swift @@ -20,9 +20,7 @@ struct UnselectedView: View { } } -struct UnselectedView_Preview: PreviewProvider { - static var previews: some View { - UnselectedView() - .padding() - } +#Preview { + UnselectedView() + .padding() } diff --git a/Xcodes/XcodesApp.swift b/Xcodes/XcodesApp.swift index 76fb1a3..e735bb8 100644 --- a/Xcodes/XcodesApp.swift +++ b/Xcodes/XcodesApp.swift @@ -9,15 +9,15 @@ struct XcodesApp: App { @SwiftUI.Environment(\.openURL) var openURL: OpenURLAction @StateObject private var appState = AppState() @StateObject private var updater = ObservableUpdater() - + var body: some Scene { WindowGroup("Xcodes") { MainWindow() .environmentObject(appState) .environmentObject(updater) - // This is intentionally used on a View, and not on a WindowGroup, + // This is intentionally used on a View, and not on a WindowGroup, // so that it's triggered when an individual window's phase changes instead of all window phases. - // When used on a View it's also invoked on launch, which doesn't occur with a WindowGroup. + // When used on a View it's also invoked on launch, which doesn't occur with a WindowGroup. // FB8954581 ScenePhase read from App doesn't return a value on launch .onChange(of: scenePhase) { newScenePhase in guard !isTesting else { return } @@ -37,7 +37,7 @@ struct XcodesApp: App { updater.checkForUpdates() } } - + CommandGroup(after: CommandGroupPlacement.newItem) { Button("Refresh") { appState.update() @@ -47,33 +47,33 @@ struct XcodesApp: App { } XcodeCommands(appState: appState) - + CommandGroup(replacing: CommandGroupPlacement.help) { Button("Menu.GitHubRepo") { let xcodesRepoURL = URL(string: "https://github.com/RobotsAndPencils/XcodesApp/")! openURL(xcodesRepoURL) } - + Divider() - + Button("Menu.ReportABug") { let bugReportURL = URL(string: "https://github.com/RobotsAndPencils/XcodesApp/issues/new?assignees=&labels=bug&template=bug_report.md&title=")! openURL(bugReportURL) } - + Button("Menu.RequestNewFeature") { let featureRequestURL = URL(string: "https://github.com/RobotsAndPencils/XcodesApp/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=")! openURL(featureRequestURL) } } } - #if os(macOS) - Settings { - PreferencesView() - .environmentObject(appState) - .environmentObject(updater) - } - #endif +#if os(macOS) + Settings { + PreferencesView() + .environmentObject(appState) + .environmentObject(updater) + } +#endif } } @@ -88,7 +88,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { $0.contentView = NSHostingView(rootView: AboutView(showAcknowledgementsWindow: showAcknowledgementsWindow)) $0.isReleasedWhenClosed = false } - + private let acknowledgementsWindow = configure(NSWindow( contentRect: .zero, styleMask: [.closable, .resizable, .miniaturizable, .titled], @@ -103,21 +103,19 @@ class AppDelegate: NSObject, NSApplicationDelegate { /// If we wanted to use only SwiftUI API to do this we could make a new WindowGroup and use openURL and handlesExternalEvents. /// WindowGroup lets the user open more than one window right now, which is a little strange for an About window. /// (It's also weird that the main Xcode list window can be opened more than once, there should only be one.) - /// To work around this, an AppDelegate holds onto a single instance of an NSWindow that is shown here. + /// To work around this, an AppDelegate holds onto a single instance of an NSWindow that is shown here. /// FB8954588 Scene / WindowGroup is missing API to limit the number of windows that can be created func showAboutWindow() { aboutWindow.center() aboutWindow.makeKeyAndOrderFront(nil) } - + func showAcknowledgementsWindow() { acknowledgementsWindow.center() acknowledgementsWindow.makeKeyAndOrderFront(nil) } - - func applicationDidFinishLaunching(_ notification: Notification) { - - } + + func applicationDidFinishLaunching(_: Notification) {} } func localizeString(_ key: String, comment: String = "") -> String { @@ -126,5 +124,4 @@ func localizeString(_ key: String, comment: String = "") -> String { } else { return NSLocalizedString(key, comment: comment) } - } From ec4dc2b3d0bc1698126b5b528983854d206cf751 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Thu, 23 Nov 2023 13:30:59 -0600 Subject: [PATCH 46/86] runtime clean up --- Xcodes.xcodeproj/project.pbxproj | 4 ++ Xcodes/Backend/AppState+Install.swift | 2 +- Xcodes/Backend/AppState+Runtimes.swift | 58 ++++++++----------- Xcodes/Backend/Environment.swift | 6 ++ Xcodes/Frontend/InfoPane/InfoPane.swift | 3 +- .../RuntimeInstallationStepDetailView.swift | 53 +++++++++++++++++ .../Models/Runtimes/RuntimeInstallState.swift | 2 +- .../Runtimes/RuntimeInstallationStep.swift | 24 ++------ .../XcodesKit/Services/RuntimeService.swift | 17 ++++-- 9 files changed, 107 insertions(+), 62 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/RuntimeInstallationStepDetailView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 17f8687..a6ac845 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -101,6 +101,7 @@ CAFFFED8259CDA5000903F81 /* XcodeListViewRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFFFED7259CDA5000903F81 /* XcodeListViewRow.swift */; }; E689540325BE8C64000EBCEA /* DockProgress in Frameworks */ = {isa = PBXBuildFile; productRef = E689540225BE8C64000EBCEA /* DockProgress */; }; E81D7EA02805250100A205FC /* Collection+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E81D7E9F2805250100A205FC /* Collection+.swift */; }; + E832EAF82B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */; }; E872EE4E2808D4F100D3DD8B /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E872EE502808D4F100D3DD8B /* Localizable.strings */; }; E87AB3C52939B65E00D72F43 /* Hardware.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87AB3C42939B65E00D72F43 /* Hardware.swift */; }; E87DD6EB25D053FA00D86808 /* Progress+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87DD6EA25D053FA00D86808 /* Progress+.swift */; }; @@ -300,6 +301,7 @@ CAFFFEEE259CEAC400903F81 /* RingProgressViewStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RingProgressViewStyle.swift; sourceTree = ""; }; E2AFDCCA28F024D000864ADD /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; E81D7E9F2805250100A205FC /* Collection+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+.swift"; sourceTree = ""; }; + E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeInstallationStepDetailView.swift; sourceTree = ""; }; E856BB73291EDD3D00DC438B /* XcodesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = XcodesKit; path = Xcodes/XcodesKit; sourceTree = ""; }; E872EE4F2808D4F100D3DD8B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; E87AB3C42939B65E00D72F43 /* Hardware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hardware.swift; sourceTree = ""; }; @@ -623,6 +625,7 @@ children = ( CAFBDC67259A308B003DCC5A /* InfoPane.swift */, E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, + E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */, ); path = InfoPane; sourceTree = ""; @@ -875,6 +878,7 @@ CA452BB0259FD9770072DFA4 /* ProgressIndicator.swift in Sources */, CAFE4AB425B7D3AF0064FE51 /* AdvancedPreferencePane.swift in Sources */, CA9FF84E2595079F00E47BAF /* ScrollingTextView.swift in Sources */, + E832EAF82B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift in Sources */, CABFA9C12592EEEA00380FEE /* Version+.swift in Sources */, E8D655C0288DD04700A139C2 /* SelectedActionType.swift in Sources */, 36741BFD291E4FDB00A85AAE /* DownloadPreferencePane.swift in Sources */, diff --git a/Xcodes/Backend/AppState+Install.swift b/Xcodes/Backend/AppState+Install.swift index 936bb6e..ae562d3 100644 --- a/Xcodes/Backend/AppState+Install.swift +++ b/Xcodes/Backend/AppState+Install.swift @@ -499,9 +499,9 @@ extension AppState { Current.notificationManager.scheduleNotification(title: xcode.id.appleDescription, body: step.description, category: .normal) } } + func setInstallationStep(of runtime: DownloadableRuntime, to step: RuntimeInstallationStep) { DispatchQueue.main.async { - guard let index = self.downloadableRuntimes.firstIndex(where: { $0.identifier == runtime.identifier }) else { return } self.downloadableRuntimes[index].installState = .installing(step) diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift index f8b6489..4c19820 100644 --- a/Xcodes/Backend/AppState+Runtimes.swift +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -49,9 +49,18 @@ extension AppState { Task { do { try await downloadRunTimeFull(runtime: runtime) + + DispatchQueue.main.async { + guard let index = self.downloadableRuntimes.firstIndex(where: { $0.identifier == runtime.identifier }) else { return } + self.downloadableRuntimes[index].installState = .installed + } } catch { Logger.appState.error("Error downloading runtime: \(error.localizedDescription)") + DispatchQueue.main.async { + self.error = error + self.presentedAlert = .generic(title: localizeString("Alert.Install.Error.Title"), message: error.legibleLocalizedDescription) + } } } @@ -83,6 +92,7 @@ extension AppState { let downloader = Downloader(rawValue: UserDefaults.standard.string(forKey: "downloader") ?? "aria2") ?? .aria2 Logger.appState.info("Downloading \(runtime.visibleIdentifier) with \(downloader)") + let url = try await self.downloadRuntime(for: runtime, downloader: downloader, progressChanged: { [unowned self] progress in DispatchQueue.main.async { self.setInstallationStep(of: runtime, to: .downloading(progress: progress)) @@ -90,15 +100,23 @@ extension AppState { }).async() Logger.appState.debug("Done downloading: \(url)") - //self.setInstallationStep(of: runtime, to: .downloading(progress: progress)) + DispatchQueue.main.async { + self.setInstallationStep(of: runtime, to: .installing) + } switch runtime.contentType { case .package: - try await self.installFromPackage(dmgURL: url, runtime: runtime) + // not supported yet (do we need to for old packages?) + throw "Installing via package not support - please install manually from \(url.description)" case .diskImage: try await self.installFromImage(dmgURL: url) + DispatchQueue.main.async { + self.setInstallationStep(of: runtime, to: .trashingArchive) + } + try Current.files.removeItem(at: url) } } + @MainActor func downloadRuntime(for runtime: DownloadableRuntime, downloader: Downloader, progressChanged: @escaping (Progress) -> Void) -> AnyPublisher { // Check to see if the dmg is in the expected path in case it was downloaded but failed to install @@ -139,9 +157,9 @@ extension AppState { .setFailureType(to: Error.self) .eraseToAnyPublisher() -// return downloadXcodeWithURLSession( -// availableXcode, -// to: destination, +// return downloadRuntimeWithURLSession( +// runtime, +// to: expectedRuntimePath, // progressChanged: progressChanged // ) } @@ -163,36 +181,8 @@ extension AppState { .eraseToAnyPublisher() } - public func installFromImage(dmgURL: URL) async throws { - - try? self.runtimeService.installRuntimeImage(dmgURL: dmgURL) - - } - - public func installFromPackage(dmgURL: URL, runtime: DownloadableRuntime) async throws { - Logger.appState.info("Mounting DMG") - - do { - let mountedUrl = try await self.runtimeService.mountDMG(dmgUrl: dmgURL) - - // 2-Get the first path under the mounted path, should be a .pkg - let pkgPath = Path(url: mountedUrl)!.ls().first! - try Path.xcodesCaches.mkdir().setCurrentUserAsOwner() - - let expandedPkgPath = Path.xcodesCaches/runtime.identifier - //try expandedPkgPath.mkdir() - Logger.appState.info("PKG Path: \(pkgPath)") - Logger.appState.info("Expanded PKG Path: \(expandedPkgPath)") - //try? Current.files.removeItem(at: expandedPkgPath.url) - - // 5-Expand (not install) the pkg to temporary path - try await self.runtimeService.expand(pkgPath: pkgPath, expandedPkgPath: expandedPkgPath) - //try await self.runtimeService.unmountDMG(mountedURL: mountedUrl) - - } catch { - Logger.appState.error("Error installing runtime: \(error.localizedDescription)") - } + try await self.runtimeService.installRuntimeImage(dmgURL: dmgURL) } } diff --git a/Xcodes/Backend/Environment.swift b/Xcodes/Backend/Environment.swift index d84ad26..3784891 100644 --- a/Xcodes/Backend/Environment.swift +++ b/Xcodes/Backend/Environment.swift @@ -240,6 +240,12 @@ public struct Files { return nil } } + + public var write: (Data, URL) throws -> Void = { try $0.write(to: $1) } + + public func write(_ data: Data, to url: URL) throws { + try write(data, url) + } } private func _installedXcodes(destination: Path) -> [InstalledXcode] { diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 625a5ae..399718d 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -288,8 +288,7 @@ struct InfoPane: View { switch runtime.installState { case .installing(let installationStep): - Text("INSTALLING") - InstallationStepDetailView(installationStep: installationStep) + RuntimeInstallationStepDetailView(installationStep: installationStep) .fixedSize(horizontal: false, vertical: true) default: EmptyView() diff --git a/Xcodes/Frontend/InfoPane/RuntimeInstallationStepDetailView.swift b/Xcodes/Frontend/InfoPane/RuntimeInstallationStepDetailView.swift new file mode 100644 index 0000000..f59f041 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/RuntimeInstallationStepDetailView.swift @@ -0,0 +1,53 @@ +// +// RuntimeInstallationStepDetailView.swift +// Xcodes +// +// Created by Matt Kiazyk on 2023-11-23. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI +import XcodesKit + +struct RuntimeInstallationStepDetailView: View { + let installationStep: RuntimeInstallationStep + + var body: some View { + VStack(alignment: .leading, spacing: 0) { + Text(String(format: localizeString("InstallationStepDescription"), installationStep.stepNumber, installationStep.stepCount, installationStep.message)) + + switch installationStep { + case let .downloading(progress): + ObservingProgressIndicator( + progress, + controlSize: .regular, + style: .bar, + showsAdditionalDescription: true + ) + + case .installing, .trashingArchive: + ProgressView() + .scaleEffect(0.5) + } + } + } +} + +#Preview("Downloading") { + RuntimeInstallationStepDetailView( + installationStep: .downloading( + progress: configure(Progress()) { + $0.kind = .file + $0.fileOperationKind = .downloading + $0.estimatedTimeRemaining = 123 + $0.totalUnitCount = 11944848484 + $0.completedUnitCount = 848444920 + $0.throughput = 9211681 + } + )) +} +#Preview("Installing") { + RuntimeInstallationStepDetailView( + installationStep: .installing + ) +} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift index 25bc5bc..84c4c8d 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift @@ -11,7 +11,7 @@ import Path public enum RuntimeInstallState: Equatable { case notInstalled case installing(RuntimeInstallationStep) - case installed(Path) + case installed var notInstalled: Bool { switch self { diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift index 21946a1..27b4e17 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift @@ -9,11 +9,8 @@ import Foundation public enum RuntimeInstallationStep: Equatable, CustomStringConvertible { case downloading(progress: Progress) - case unarchiving - case moving(destination: String) + case installing case trashingArchive - case checkingSecurity - case finishing public var description: String { "(\(stepNumber)/\(stepCount)) \(message)" @@ -23,29 +20,20 @@ public enum RuntimeInstallationStep: Equatable, CustomStringConvertible { switch self { case .downloading: return localizeString("Downloading") - case .unarchiving: - return localizeString("Unarchiving") - case .moving(let destination): - return String(format: localizeString("Moving"), destination) + case .installing: + return localizeString("Installing") case .trashingArchive: return localizeString("TrashingArchive") - case .checkingSecurity: - return localizeString("CheckingSecurity") - case .finishing: - return localizeString("Finishing") } } public var stepNumber: Int { switch self { case .downloading: return 1 - case .unarchiving: return 2 - case .moving: return 3 - case .trashingArchive: return 4 - case .checkingSecurity: return 5 - case .finishing: return 6 + case .installing: return 2 + case .trashingArchive: return 3 } } - public var stepCount: Int { 6 } + public var stepCount: Int { 3 } } diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift index c767207..5ffb33c 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift @@ -54,10 +54,8 @@ public struct RuntimeService { } } - public func installRuntimeImage(dmgURL: URL) throws { - Task { - _ = try await Current.shell.installRuntimeImage(dmgURL) - } + public func installRuntimeImage(dmgURL: URL) async throws { + _ = try await Current.shell.installRuntimeImage(dmgURL) } public func mountDMG(dmgUrl: URL) async throws -> URL { @@ -72,13 +70,20 @@ public struct RuntimeService { } public func unmountDMG(mountedURL: URL) async throws { - let url = try await Current.shell.unmountDmg(mountedURL) + _ = try await Current.shell.unmountDmg(mountedURL) } public func expand(pkgPath: Path, expandedPkgPath: Path) async throws { _ = try await Current.shell.expandPkg(pkgPath.url, expandedPkgPath.url) } - + + public func createPkg(pkgPath: Path, expandedPkgPath: Path) async throws { + _ = try await Current.shell.createPkg(pkgPath.url, expandedPkgPath.url) + } + + public func installPkg(pkgPath: Path, expandedPkgPath: Path) async throws { + _ = try await Current.shell.installPkg(pkgPath.url, expandedPkgPath.url.absoluteString) + } } extension String: Error {} From c153a93b1b5a5e21371dd58118769fe28dd186df Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Thu, 23 Nov 2023 14:41:56 -0600 Subject: [PATCH 47/86] adjustments to update runtimes --- Xcodes.xcodeproj/project.pbxproj | 6 +- Xcodes/Backend/AppState+Runtimes.swift | 2 + Xcodes/Backend/AppState.swift | 2 +- Xcodes/Frontend/InfoPane/InfoPane.swift | 12 +++- Xcodes/Frontend/InfoPane/RuntimesView.swift | 66 +++++++++++++++++++++ 5 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/RuntimesView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index b73e456..22bf2c6 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -9,7 +9,7 @@ /* Begin PBXBuildFile section */ 36741BFD291E4FDB00A85AAE /* DownloadPreferencePane.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36741BFC291E4FDB00A85AAE /* DownloadPreferencePane.swift */; }; 36741BFF291E50F500A85AAE /* FileError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36741BFE291E50F500A85AAE /* FileError.swift */; }; - 536CFDD2263C94DE00026CE0 /* SignedInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536CFDD1263C94DE00026CE0 /* SignedInView.swift */; }; + 536CFDD2263C94DE00026CE0 /* SignedInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536CFDD1263C94DE00026CE0 /* SignedInView.swift */; }; 536CFDD4263C9A8000026CE0 /* XcodesSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536CFDD3263C9A8000026CE0 /* XcodesSheet.swift */; }; 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CBAB2B263DCC9100410495 /* XcodesAlert.swift */; }; 63EAA4EB259944450046AB8F /* ProgressButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EAA4EA259944450046AB8F /* ProgressButton.swift */; }; @@ -113,6 +113,7 @@ E689540325BE8C64000EBCEA /* DockProgress in Frameworks */ = {isa = PBXBuildFile; productRef = E689540225BE8C64000EBCEA /* DockProgress */; }; E81D7EA02805250100A205FC /* Collection+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E81D7E9F2805250100A205FC /* Collection+.swift */; }; E832EAF82B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */; }; + E84CF8C12B0FEB8300ECA259 /* RuntimesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */; }; E872EE4E2808D4F100D3DD8B /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E872EE502808D4F100D3DD8B /* Localizable.strings */; }; E87AB3C52939B65E00D72F43 /* Hardware.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87AB3C42939B65E00D72F43 /* Hardware.swift */; }; E87DD6EB25D053FA00D86808 /* Progress+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87DD6EA25D053FA00D86808 /* Progress+.swift */; }; @@ -324,6 +325,7 @@ E2AFDCCA28F024D000864ADD /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; E81D7E9F2805250100A205FC /* Collection+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+.swift"; sourceTree = ""; }; E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeInstallationStepDetailView.swift; sourceTree = ""; }; + E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimesView.swift; sourceTree = ""; }; E856BB73291EDD3D00DC438B /* XcodesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = XcodesKit; path = Xcodes/XcodesKit; sourceTree = ""; }; E872EE4F2808D4F100D3DD8B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; E87AB3C42939B65E00D72F43 /* Hardware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hardware.swift; sourceTree = ""; }; @@ -659,6 +661,7 @@ B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */, B0C6AD0C2AD91D7900E64698 /* IconView.swift */, E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */, + E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */, ); path = InfoPane; sourceTree = ""; @@ -880,6 +883,7 @@ CA9FF8CF25959A9700E47BAF /* HelperXPCShared.swift in Sources */, CA735109257BF96D00EA9CF8 /* AttributedText.swift in Sources */, CAFBDC4E2599B33D003DCC5A /* MainToolbar.swift in Sources */, + E84CF8C12B0FEB8300ECA259 /* RuntimesView.swift in Sources */, CA11E7BA2598476C00D2EE1C /* XcodeCommands.swift in Sources */, CAA8589B25A2B83000ACF8C0 /* Aria2CError.swift in Sources */, 536CFDD2263C94DE00026CE0 /* SignedInView.swift in Sources */, diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift index 4c19820..be8e088 100644 --- a/Xcodes/Backend/AppState+Runtimes.swift +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -54,6 +54,8 @@ extension AppState { guard let index = self.downloadableRuntimes.firstIndex(where: { $0.identifier == runtime.identifier }) else { return } self.downloadableRuntimes[index].installState = .installed } + + updateInstalledRuntimes() } catch { Logger.appState.error("Error downloading runtime: \(error.localizedDescription)") diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index cd6b4ef..9db4dbe 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -824,7 +824,7 @@ class AppState: ObservableObject { // MARK: Runtimes func runtimeInstallPath(xcode: Xcode, runtime: DownloadableRuntime) -> Path? { - if let coreSimulatorInfo = installedRuntimes.filter({ $0.runtimeInfo.build == runtime.sdkBuildUpdate }).first { + if let coreSimulatorInfo = installedRuntimes.filter({ $0.runtimeInfo.build == runtime.simulatorVersion.buildUpdate }).first { let urlString = coreSimulatorInfo.path["relative"]! // app was not allowed to open up file:// url's so remove let fileRemovedString = urlString.replacingOccurrences(of: "file://", with: "") diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 3fcde23..d39648a 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -22,8 +22,9 @@ struct InfoPane: View { Divider() Group { - ReleaseNotesView(url: xcode.releaseNotesURL) + RuntimesView(xcode: xcode) ReleaseDateView(date: xcode.releaseDate) + ReleaseNotesView(url: xcode.releaseNotesURL) IdenticalBuildsView(builds: xcode.identicalBuilds) CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) SDKsView(sdks: xcode.sdks) @@ -44,8 +45,13 @@ struct InfoPane: View { private func makePreviewContent(for index: Int) -> some View { let name = PreviewName.allCases[index] - - }) + return InfoPane(xcode: xcodeDict[name]!) + .environmentObject(configure(AppState()) { + $0.allXcodes = [xcodeDict[name]!] + }) + .frame(width: 300, height: 400) + .padding() +} enum PreviewName: String, CaseIterable, Identifiable { case Populated_Installed_Selected diff --git a/Xcodes/Frontend/InfoPane/RuntimesView.swift b/Xcodes/Frontend/InfoPane/RuntimesView.swift new file mode 100644 index 0000000..9d9251e --- /dev/null +++ b/Xcodes/Frontend/InfoPane/RuntimesView.swift @@ -0,0 +1,66 @@ +// +// RuntimesView.swift +// Xcodes +// +// Created by Matt Kiazyk on 2023-11-23. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI + +struct RuntimesView: View { + @EnvironmentObject var appState: AppState + let xcode: Xcode + + var body: some View { + VStack(alignment: .leading) { + Text("Platforms") + .font(.headline) + .frame(maxWidth: .infinity, alignment: .leading) + + let builds = xcode.sdks?.allBuilds() + let runtimes = builds?.flatMap { sdkBuild in + appState.downloadableRuntimes.filter { + $0.sdkBuildUpdate == sdkBuild + } + } + // let runtimes = appState.getRunTimes(xcode: xcode) + + ForEach(runtimes ?? [], id: \.simulatorVersion.buildUpdate) { runtime in + VStack { + HStack { + Text("\(runtime.visibleIdentifier)") + .font(.subheadline) + Spacer() + Text(runtime.downloadFileSizeString) + .font(.subheadline) + + // it's installed if we have a path + if let path = appState.runtimeInstallPath(xcode: xcode, runtime: runtime) { + Button(action: { appState.reveal(path: path.string) }) { + Image(systemName: "arrow.right.circle.fill") + } + .buttonStyle(PlainButtonStyle()) + .help("RevealInFinder") + } else { + DownloadRuntimeButton(runtime: runtime) + } + } + switch runtime.installState { + + case .installing(let installationStep): + RuntimeInstallationStepDetailView(installationStep: installationStep) + .fixedSize(horizontal: false, vertical: true) + default: + EmptyView() + } + } + + } + } + } +} + +//#Preview { +// RuntimesView() +//} From 4649ba0c8a9cf36fe89933782afa6500c5f9f7f6 Mon Sep 17 00:00:00 2001 From: Daniel Chick Date: Sat, 25 Nov 2023 19:19:59 -0600 Subject: [PATCH 48/86] Reuse ProgressButton --- Xcodes/Backend/XcodeCommands.swift | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Xcodes/Backend/XcodeCommands.swift b/Xcodes/Backend/XcodeCommands.swift index 9967abb..5071f30 100644 --- a/Xcodes/Backend/XcodeCommands.swift +++ b/Xcodes/Backend/XcodeCommands.swift @@ -39,16 +39,12 @@ struct InstallButton: View { let xcode: Xcode? var body: some View { - Button(action: install) { - if isLoading { - ProgressView() - .colorInvert() - .controlSize(.small) - } else { - Text("Install") - .textCase(.uppercase) - .help("InstallDescription") - } + ProgressButton(isInProgress: isLoading) { + install() + } label: { + Text("Install") + .textCase(.uppercase) + .help("InstallDescription") }.buttonStyle(AppStoreButtonStyle(primary: false, highlighted: false)) } From c1836a78c40dc601a1ba3ef2f31185e1739cd368 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Fri, 1 Dec 2023 10:05:36 -0600 Subject: [PATCH 49/86] PR Cleanup. --- Xcodes/Backend/AppState+Runtimes.swift | 27 -------- Xcodes/Backend/Environment.swift | 69 +-------------------- Xcodes/Frontend/InfoPane/RuntimesView.swift | 1 - 3 files changed, 2 insertions(+), 95 deletions(-) diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift index be8e088..009279d 100644 --- a/Xcodes/Backend/AppState+Runtimes.swift +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -65,26 +65,6 @@ extension AppState { } } } - -// self.runtimePublishers[runtime.identifier] = downloadRunTimeFull(runtime: runtime) -// .receive(on: DispatchQueue.main) -// .sink( -// receiveCompletion: { [unowned self] completion in -// self.runtimePublishers[runtime.identifier] = nil -// if case let .failure(error) = completion { -// Logger.appState.error("Error downloading runtime: \(error.localizedDescription)") -//// // Prevent setting the app state error if it is an invalid session, we will present the sign in view instead -//// if error as? AuthenticationError != .invalidSession { -//// self.error = error -//// self.presentedAlert = .generic(title: localizeString("Alert.Install.Error.Title"), message: error.legibleLocalizedDescription) -//// } -//// if let index = self.allXcodes.firstIndex(where: { $0.id == id }) { -//// self.allXcodes[index].installState = .notInstalled -//// } -// } -// }, -// receiveValue: { _ in } -// ) } func downloadRunTimeFull(runtime: DownloadableRuntime) async throws { @@ -126,7 +106,6 @@ extension AppState { // use runtime.url for final with cookies // Check to see if the archive is in the expected path in case it was downloaded but failed to install -// let expectedRuntimePath = Path.xcodesApplicationSupport/"\(runtime.name).\(runtime.name.suffix(fromLast: "."))" let url = URL(string: runtime.source)! let expectedRuntimePath = Path.xcodesApplicationSupport/"\(url.lastPathComponent)" // aria2 downloads directly to the destination (instead of into /tmp first) so we need to make sure that the download isn't incomplete @@ -158,12 +137,6 @@ extension AppState { return Just(runtime.url) .setFailureType(to: Error.self) .eraseToAnyPublisher() - -// return downloadRuntimeWithURLSession( -// runtime, -// to: expectedRuntimePath, -// progressChanged: progressChanged -// ) } } } diff --git a/Xcodes/Backend/Environment.swift b/Xcodes/Backend/Environment.swift index 3784891..6d77108 100644 --- a/Xcodes/Backend/Environment.swift +++ b/Xcodes/Backend/Environment.swift @@ -111,74 +111,9 @@ public struct Shell { return (progress, publisher) } - + // TODO: Support using aria2 using AysncStream/AsyncSequence // public var downloadWithAria2Async: (Path, URL, Path, [HTTPCookie]) async throws -> Progress = { aria2Path, url, destination, cookies in -// let process = Process() -// process.executableURL = aria2Path.url -// process.arguments = [ -// "--header=Cookie: \(cookies.map { "\($0.name)=\($0.value)" }.joined(separator: "; "))", -// "--max-connection-per-server=16", -// "--split=16", -// "--summaraasdy-interval=1", -// "--stop-with-process=\(ProcessInfo.processInfo.processIdentifier)", // if xcodes quits, stop aria2 process -// "--dir=\(destination.parent.string)", -// "--out=\(destination.basename())", -// "--human-readable=false", // sets the output to use bytes instead of formatting -// url.absoluteString, -// ] -// let stdOutPipe = Pipe() -// process.standardOutput = stdOutPipe -// let stdErrPipe = Pipe() -// process.standardError = stdErrPipe -// -// var progress = Progress() -// progress.kinasdas -// progress.fileOperationKind = .downloadingasdfasd -// -// let observer = NotificationCenter.default.addObserver( -// forName: .NSFileHandleDataAvailable, -// object: nil, -// queue: OperationQueue.main -// ) { note in -// guard -// // This should always be the case for Notification.Name.NSFileHandleDataAvailable -// let handle = note.object as? FileHandle, -// handle === stdOutPipe.fileHandleForReading || handle === stdErrPipe.fileHandleForReading -// else { return } -// -// defer { handle.waitForDataInBackgroundAndNotify() } -// -// let string = String(decoding: handle.availableData, as: UTF8.self) -// -// progress.updateFromAria2(string: string) -// } -// -// stdOutPipe.fileHandleForReading.waitForDataInBackgroundAndNotify() -// stdErrPipe.fileHandleForReading.waitForDataInBackgroundAndNotify() -// -// do { -// -// defer { -// //DispatchQueue.global(qos: .default).async { -// process.waitUntilExit() -// -// NotificationCenter.default.removeObserver(observer, name: .NSFileHandleDataAvailable, object: nil) -// -// guard process.terminationReason == .exit, process.terminationStatus == 0 else { -// if let aria2cError = Aria2CError(exitStatus: process.terminationStatus) { -// throw aria2cError -// } else { -// throw ProcessExecutionError(process: process, standardOutput: "", standardError: "") -// } -// } -// return -// } -// } -// try process.run() -// } catch { -// throw error -// } -// } + public var unxipExperiment: (URL) -> AnyPublisher = { url in let unxipPath = Path(url: Bundle.main.url(forAuxiliaryExecutable: "unxip")!)! diff --git a/Xcodes/Frontend/InfoPane/RuntimesView.swift b/Xcodes/Frontend/InfoPane/RuntimesView.swift index 9d9251e..e9e894e 100644 --- a/Xcodes/Frontend/InfoPane/RuntimesView.swift +++ b/Xcodes/Frontend/InfoPane/RuntimesView.swift @@ -24,7 +24,6 @@ struct RuntimesView: View { $0.sdkBuildUpdate == sdkBuild } } - // let runtimes = appState.getRunTimes(xcode: xcode) ForEach(runtimes ?? [], id: \.simulatorVersion.buildUpdate) { runtime in VStack { From ad749c1cb05c6698800c8fd7d66975394d6f4d94 Mon Sep 17 00:00:00 2001 From: Ege Sucu Date: Mon, 27 Nov 2023 00:15:34 +0300 Subject: [PATCH 50/86] Converted Localization into String Catalog --- Xcodes.xcodeproj/project.pbxproj | 54 +- Xcodes/Resources/Localizable.xcstrings | 18312 ++++++++++++++++ Xcodes/Resources/ca.lproj/Localizable.strings | 229 - Xcodes/Resources/de.lproj/Localizable.strings | 235 - Xcodes/Resources/en.lproj/Localizable.strings | 239 - Xcodes/Resources/es.lproj/Localizable.strings | 230 - Xcodes/Resources/fi.lproj/Localizable.strings | 225 - Xcodes/Resources/fr.lproj/Localizable.strings | 230 - Xcodes/Resources/hi.lproj/Localizable.strings | 225 - Xcodes/Resources/it.lproj/Localizable.strings | 226 - Xcodes/Resources/ja.lproj/Localizable.strings | 238 - Xcodes/Resources/ko.lproj/Localizable.strings | 226 - Xcodes/Resources/nl.lproj/Localizable.strings | 230 - Xcodes/Resources/pl.lproj/Localizable.strings | 239 - .../Resources/pt-BR.lproj/Localizable.strings | 227 - Xcodes/Resources/ru.lproj/Localizable.strings | 234 - Xcodes/Resources/tr.lproj/Localizable.strings | 238 - Xcodes/Resources/uk.lproj/Localizable.strings | 225 - .../zh-Hans.lproj/Localizable.strings | 238 - .../zh-Hant.lproj/Localizable.strings | 223 - 20 files changed, 18319 insertions(+), 4204 deletions(-) create mode 100644 Xcodes/Resources/Localizable.xcstrings delete mode 100644 Xcodes/Resources/ca.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/de.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/en.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/es.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/fi.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/fr.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/hi.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/it.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/ja.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/ko.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/nl.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/pl.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/pt-BR.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/ru.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/tr.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/uk.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/zh-Hans.lproj/Localizable.strings delete mode 100644 Xcodes/Resources/zh-Hant.lproj/Localizable.strings diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 22bf2c6..6c418b8 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 536CFDD4263C9A8000026CE0 /* XcodesSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536CFDD3263C9A8000026CE0 /* XcodesSheet.swift */; }; 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CBAB2B263DCC9100410495 /* XcodesAlert.swift */; }; 63EAA4EB259944450046AB8F /* ProgressButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EAA4EA259944450046AB8F /* ProgressButton.swift */; }; + 9DD4FFCB2B13EC1800C974F1 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 9DD4FFCA2B13EC1800C974F1 /* Localizable.xcstrings */; }; B0403CF02AD92D7B00137C09 /* ReleaseNotesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */; }; B0403CF22AD934B600137C09 /* CompatibilityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF12AD934B600137C09 /* CompatibilityView.swift */; }; B0403CF42AD9381D00137C09 /* SDKsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0403CF32AD9381D00137C09 /* SDKsView.swift */; }; @@ -187,26 +188,13 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 15FAD1652811D15600B63259 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Localizable.strings; sourceTree = ""; }; - 23703D6E29EBF63500DFA346 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - 25E2FA26284769A00014A318 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; - 327DF109286ABE6B00D694D5 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; 36741BFC291E4FDB00A85AAE /* DownloadPreferencePane.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DownloadPreferencePane.swift; sourceTree = ""; }; 36741BFE291E50F500A85AAE /* FileError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileError.swift; sourceTree = ""; }; - 4A5AAA1D28118FAD00528958 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 536CFDD1263C94DE00026CE0 /* SignedInView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignedInView.swift; sourceTree = ""; }; 536CFDD3263C9A8000026CE0 /* XcodesSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodesSheet.swift; sourceTree = ""; }; 53CBAB2B263DCC9100410495 /* XcodesAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodesAlert.swift; sourceTree = ""; }; - 58F743C02810A34900EEC0F3 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - 5AA8A6102877EDAD009ECDB0 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - 5C3927ED28E4B486007B5119 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; 63EAA4EA259944450046AB8F /* ProgressButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressButton.swift; sourceTree = ""; }; - 6CA3A090282EBE72005A6E35 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; - 7CBF284E28606D2C001AA66B /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = ""; }; - 9D3C3AF7282EBE3300CB0D37 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; - A0187D39285792D1002F46F9 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - AAB037D32839BD4700017680 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; - AB4EB0DE28541FA000FF3B1D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + 9DD4FFCA2B13EC1800C974F1 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; B0403CEF2AD92D7B00137C09 /* ReleaseNotesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseNotesView.swift; sourceTree = ""; }; B0403CF12AD934B600137C09 /* CompatibilityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompatibilityView.swift; sourceTree = ""; }; B0403CF32AD9381D00137C09 /* SDKsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDKsView.swift; sourceTree = ""; }; @@ -218,8 +206,6 @@ B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdenticalBuildView.swift; sourceTree = ""; }; B0C6AD0C2AD91D7900E64698 /* IconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconView.swift; sourceTree = ""; }; - B648F22B2810C1130096781B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - C0AE7FA4283002DC00DA63D2 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; CA11E7B92598476C00D2EE1C /* XcodeCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodeCommands.swift; sourceTree = ""; }; CA2518EB25A7FF2B00F08414 /* AppStateUpdateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppStateUpdateTests.swift; sourceTree = ""; }; CA25192925A9644800F08414 /* XcodeInstallState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodeInstallState.swift; sourceTree = ""; }; @@ -322,7 +308,6 @@ CAFE4ABB25B7D54B0064FE51 /* UpdatesPreferencePane.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdatesPreferencePane.swift; sourceTree = ""; }; CAFFFED7259CDA5000903F81 /* XcodeListViewRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodeListViewRow.swift; sourceTree = ""; }; CAFFFEEE259CEAC400903F81 /* RingProgressViewStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RingProgressViewStyle.swift; sourceTree = ""; }; - E2AFDCCA28F024D000864ADD /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; E81D7E9F2805250100A205FC /* Collection+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+.swift"; sourceTree = ""; }; E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeInstallationStepDetailView.swift; sourceTree = ""; }; E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimesView.swift; sourceTree = ""; }; @@ -559,7 +544,7 @@ CAD2E7AE2449575000113D76 /* Xcodes.entitlements */, CA8FB64D256E17B100469DA5 /* XcodesTest.entitlements */, E8CBDB8627ADD92000B22292 /* unxip */, - E872EE502808D4F100D3DD8B /* Localizable.strings */, + 9DD4FFCA2B13EC1800C974F1 /* Localizable.xcstrings */, ); path = Resources; sourceTree = ""; @@ -819,8 +804,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - E872EE4E2808D4F100D3DD8B /* Localizable.strings in Resources */, CAD2E7A92449575000113D76 /* Preview Assets.xcassets in Resources */, + 9DD4FFCB2B13EC1800C974F1 /* Localizable.xcstrings in Resources */, CA9FF83F2594FBC000E47BAF /* Licenses.rtf in Resources */, CAA858DB25A3E11F00ACF8C0 /* aria2-release-1.35.0.tar.gz in Resources */, CAD2E7A62449575000113D76 /* Assets.xcassets in Resources */, @@ -1001,34 +986,6 @@ }; /* End PBXTargetDependency section */ -/* Begin PBXVariantGroup section */ - E872EE502808D4F100D3DD8B /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - E872EE4F2808D4F100D3DD8B /* en */, - 15FAD1652811D15600B63259 /* hi */, - B648F22B2810C1130096781B /* fr */, - 4A5AAA1D28118FAD00528958 /* ru */, - 58F743C02810A34900EEC0F3 /* es */, - C0AE7FA4283002DC00DA63D2 /* zh-Hans */, - 9D3C3AF7282EBE3300CB0D37 /* tr */, - AAB037D32839BD4700017680 /* ko */, - 25E2FA26284769A00014A318 /* it */, - AB4EB0DE28541FA000FF3B1D /* ja */, - 6CA3A090282EBE72005A6E35 /* zh-Hant */, - A0187D39285792D1002F46F9 /* de */, - 7CBF284E28606D2C001AA66B /* uk */, - 5AA8A6102877EDAD009ECDB0 /* fi */, - 5C3927ED28E4B486007B5119 /* ca */, - 327DF109286ABE6B00D694D5 /* pt-BR */, - E2AFDCCA28F024D000864ADD /* nl */, - 23703D6E29EBF63500DFA346 /* pl */, - ); - name = Localizable.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - /* Begin XCBuildConfiguration section */ CA8FB635256E154800469DA5 /* Test */ = { isa = XCBuildConfiguration; @@ -1082,6 +1039,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MACOSX_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -1268,6 +1226,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MACOSX_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -1325,6 +1284,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MACOSX_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings new file mode 100644 index 0000000..334c52d --- /dev/null +++ b/Xcodes/Resources/Localizable.xcstrings @@ -0,0 +1,18312 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "" : { + + }, + "%@" : { + + }, + "%@ %@ %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ %2$@ %3$@" + } + } + } + }, + "• %@" : { + + }, + "AccessDenied" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Accés denegat ⚠️\n\nSi us plau, obre les preferències de les notificacions i selecciona Xcodes si vols garantir-li l'accés." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Zugriff verweigert ⚠️\n\nBitte öffne Deine Benachrichtigungs-Einstellungen und wähle Xcodes aus, wenn Du den Zugriff erlauben möchtest." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Access Denied ⚠️\n\nPlease open your Notification Settings and select Xcodes if you wish to allow access." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Acceso Denegado ⚠️\n\nPor favor abra su Configuración de notificaciones y seleccione Xcodes si desea permitir el acceso." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Pääsy kielletty ⚠️\n\nAvaa ilmoitusasetukset ja valitse Xcodes, jos haluat sallia pääsyn." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Accès refusé ⚠️\n\nVeuillez ouvrir vos paramètres de notifications et sélectionnez Xcodes si vous souhaitez autoriser l'accès." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ प्रवेश निषेध ⚠️\n\nकृपया अपनी सूचना सेटिंग्स खोलें और यदि आप प्रवेश की अनुमति देना चाहते हैं तो Xcodes का चयन करें." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Accesso Negato ⚠️\n\nApri le Impostazioni delle Notifiche e seleziona Xcodes se desideri garantirgli accesso." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ アクセス拒否 ⚠️\n\nアクセス許可する場合は、通知設定を開き、Xcodesを選択してください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ 접근 권한이 부여되지 않았습니다 ⚠️\n\n 접근을 허용하려면 알림 설정을 열고 Xcodes를 선택하여 알림을 허용해주세요." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Toegang Geweigerd ⚠️\n\nOpen je Notificatie Instellingen en selecteer Xcodes om toegang te verlenen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Dostęp zabroniony ⚠️\n\nOtwórz ustawienia powiadomień i wybierz Xcodes, jeśli chcesz zezwolić na dostęp." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Acesso negado ⚠️\n\nPor favor, abra suas configurações de notificação e selecione Xcodes se você deseja autorizar o acesso." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Отказано в доступе ⚠️\n\nПожалуйста, откройте настройки уведомлений и выберите Xcodes, чтобы разрешить доступ." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Erişim Reddedildi ⚠️\n\nEğer bildirimler için erişim vermek istiyorsanız lütfen bildirim ayarlarını açın ve Xcodes uygulamasını seçin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Сповіщення Заборонено ⚠️\n\nВідкрийте будьласка Налаштування Сповіщень та надайте дозвіл Xcodes для отримання дозволу." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ 没有权限 ⚠️\n\n请打开您的通知偏好设置并允许Xcodes发送通知。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ 通知已停用 ⚠️\n\n如果你想要啟用通知,請打開你的通知設定並選擇 Xcodes。" + } + } + } + }, + "AccessGranted" : { + "comment" : "Notifications", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accés garantit. Rebràs notificacions d'Xcodes." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zugriff erlaubt. Du empfängst jetzt Benachrichtigungen von Xcodes." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Access Granted. You will receive notifications from Xcodes." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acceso Permitido. Recibirás notificaciones de Xcodes." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pääsy myönnetty. Saat ilmoituksia Xcodesilta." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accès autorisé. Vous recevrez des notifications de Xcodes." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रवेश करने की अनुमति है। आपको Xcodes से सूचनाएं प्राप्त होंगी।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accesso Garantito. Riceverai notifiche da Xcodes." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アクセスが許可されました。Xcodesから通知が届きます。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "접근 권한이 부여되었습니다. Xcodes에서 알림을 받게 됩니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toegang Verleend. Je krijgt notificaties van Xcodes." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dostęp przyznany. Będziesz otrzymywać powiadomienia z Xcodes." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acesso autorizado. Você receberá notificações de Xcodes." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Доступ разрешен. Вы будете получать уведомления от Xcodes." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erişim Tanımlandı. Xcodes'dan bildirimler alacaksınız." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сповіщення Дозволено. Ви будете отримувати сповіщення від Xcodes." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已授权。您将会收到Xcodes的通知。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知已啟用。你將會開始收到來自 Xcodes 的通知。" + } + } + } + }, + "Acknowledgements" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agraïments" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anerkennungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agradecimientos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunnianosoitukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remerciements" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्वीकृति" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ringraziamenti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "謝辞" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acknowledgements" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dankbetuigingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podziękowania" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menções" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Юридическая информация" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Teşekkür" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подяки" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "版权声明" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "版權宣告" + } + } + } + }, + "Active" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activa" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiv" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiivinen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version Active" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सक्रिय" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attiva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アクティブ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기본 버전으로 사용 중" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actief" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywny" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ativo" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активно" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активний" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已激活" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "啟用中" + } + } + } + }, + "Active/Select" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activar/Seleccionar" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiv/Auswählen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activar/Seleccionar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiivinen/Valitse" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activer/Sélectionner" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सक्रिय/चयन" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attivo/Seleziona" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アクティブ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기본 버전/선택" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active/Select" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywny/wybrany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ativo/Selecionar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активировать/Выбрать" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif/Seç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Акивний/Обрати" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "激活/选定" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "啟用/選取" + } + } + } + }, + "ActiveVersionDescription" : { + "comment" : "List", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aquesta és la versió activa" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dies ist die aktive Version" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This is the active version" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esta es la versión activa." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tämä on aktiivinen versio" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ceci est la version active" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "यह सक्रिय संस्करण है" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Questa è la versione attiva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アクティブなバージョン" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기본 버전으로 사용 중" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dit is de actieve versie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "To jest aktywna wersja" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Essa é a versão ativa" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Это активная версия" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu aktif sürümdür" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Це активна версія" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "这是一个已激活的版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "這是啟用中版本" + } + } + } + }, + "Advanced" : { + "comment" : "Advanced Preference Pane", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avançat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erweitert" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avanzado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisäasetukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avancé" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "उन्नत" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avanzate" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "上級者向け" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "고급" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geavanceerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaawansowane" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avançado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дополнительно" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gelişmiş" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Розширені" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "高级" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "進階" + } + } + } + }, + "Alert.CancelInstall.Message" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tot el progrés serà descartat." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jeglicher Fortschritt wird verworfen." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any progress will be discarded." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cualquier progreso será descartado." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaikki edistyminen hylätään." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toute progression sera supprimée." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "किसी भी प्रगति को छोड़ दिया जाएगा।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perderai quanto fatto finora." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インストール前の状態に戻します。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "진행된 모든 사항은 삭제됩니다" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elke voortgang zal worden weggegooid." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Postęp zostanie utracony." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo progresso será descartado." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Прогресс будет сброшен." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Herhangi bir ilerleme göz ardı edilecektir." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увесь прогрес буде скасовано." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "所有进度都将会丢失。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "所有已進行的安裝步驟將被放棄。" + } + } + } + }, + "Alert.CancelInstall.PrimaryButton" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aturar l'instal·lació" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installation anhalten" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stop Installation" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detener Instalación" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lopeta asennus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arrêter l'installation" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्थापना रोकें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ferma Installazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インストールを中止" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "설치 중지" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stop Installatie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przerwij instalację" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Interromper instalação" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Остановить установку" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yüklemeyi Durdur" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зупинити встановлення" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "终止安装" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "停止安裝" + } + } + } + }, + "Alert.CancelInstall.Title" : { + "comment" : "Cancel Install", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estàs segur que vols aturar l'instal·lació de l'Xcode %@?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bist du sicher, dass Du die Installation von Xcode %@ anhalten möchtest?" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Are you sure you want to stop the installation of Xcode %@?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Está seguro de que desea detener la instalación de Xcode %@?" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haluatko varmasti lopettaa Xcode versio %@ asennuksen?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Êtes-vous sûr de vouloir arrêter l'installation de Xcode %@ ?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "क्या आप वाकई Xcode %@ की स्थापना को रोकना चाहते हैं?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sei sicuro di voler interrompere l'installazione di Xcode %@?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ のインストールを中止してもよろしいですか?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ 설치를 중지하시겠습니까?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weet je zeker dat je de installatie van Xcode %@ wilt stoppen?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czy na pewno chcesz przerwać instalację Xcode %@?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tem certeza que deseja interromper a instalação do Xcode %@?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы уверены, что хотите остановить установку Xcode %@?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ sürümünün yüklenmesini durdurmak istediğinize emin misiniz?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Впевнені що хочете скасувати встановлення Xcode %@?" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "您确定要终止Xcode %@的安装吗?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "你確定你想要停止安裝 Xcode %@?" + } + } + } + }, + "Alert.Install.Error.Title" : { + "comment" : "Install", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incapaç d'instal·lar l'Xcode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installation von Xcode nicht möglich" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to install Xcode" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede instalar Xcode" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcoden asentaminen ei onnistu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible d'installer Xcode" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "एक्सकोड स्थापित करने में असमर्थ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non riesco a installare Xcode" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode をインストールできませんでした" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode를 설치할 수 없음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan Xcode niet installeren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można zainstalować Xcode" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível instalar o Xcode" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно установить Xcode" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode yüklenemedi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не вдалося встановити Xcode" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法安装Xcode" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法安裝 Xcode" + } + } + } + }, + "Alert.InstallArchive.Error.Title" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incapaç d'instal·lar l'Xcode comprimit" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installation des archivierten Xcodes nicht möglich" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to install archived Xcode" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede instalar el Xcode archivado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arkistoitua Xcodea ei voi asentaa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible d'installer l'archive de Xcode" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "संग्रहीत Xcode स्थापित करने में असमर्थ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non riesco a installare Xcode archiviato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode アーカイブをインストールできませんでした" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아카이브된 Xcode를 설치할 수 없음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan gearchiveerde Xcode niet installeren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można zainstalować zarchiwizowanego Xcode" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível instalar o Xcode arquivado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно установить заархивированный Xcode" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arşivlenmiş Xcode yüklenemedi." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Помилка з архівом Xcode" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法安装Xcode压缩文件" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法安裝已封存的 Xcode" + } + } + } + }, + "Alert.MinSupported.Message" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'Xcode %@ necessita MacOS %@, però tu estàs utilitzant MacOS %@, vols instal·lar-lo igualment?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ erfordert macOS %@ aber es läuft nur macOS %@. Möchtest Du es trotzdem installieren?" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ requires MacOS %@, but you are running MacOS %@, do you still want to install it?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ requiere MacOS %@, pero está ejecutando MacOS %@, ¿aún desea instalarlo?" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ vaatii macOS version %@, mutta käytät macOS versiota %@, haluatko silti asentaa sen?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ nécessite MacOS %@, mais vous utilisez MacOS %@, voulez-vous toujours l'installer ?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ को MacOS %@ की आवश्यकता है, लेकिन आप MacOS %@ चला रहे हैं, क्या आप अभी भी इसे स्थापित करना चाहते हैं?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ richiede MacOS %@, ma la tua versione di MacOS è %@, vuoi installarlo comunque?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ を使うには macOS %@ 以降が必要です。このシステムは macOS %@ ですが、インストールを続行しますか?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@는 MacOS %@이(가) 필요하지만 MacOS %@을(를) 실행 중입니다. 그래도 설치하시겠습니까?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ vereist MacOS %@, maar jouw MacOS versie is %@, wil je doorgaan met installeren?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ wymaga macOS %@, a ty masz macOS %@. Czy nadal chcesz go zainstalować?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ requere MacOS %@, mas você está rodando MacOS %@, você ainda quer instalá-lo?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ требует macOS %@, но вы используете macOS %@, вы все еще хотите установить?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ macOS %@ sürümünü gerektirir, fakat siz macOS %@ sürümünü kullanıyorsunuz, yine de indirmek istediğinize emin misiniz?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ вимагає як мінімум MacOS %@, але у вас MacOS %@, всеодно продовжити?" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@需要macOS %@及以上,但您运行的是macOS %@,仍然要安装吗?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ 需要 MacOS %@,但你正在使用 MacOS %@,你確定還要繼續安裝嗎?" + } + } + } + }, + "Alert.MinSupported.Title" : { + "comment" : "Min MacOS Supported", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "No es compleixen els requeriments mínims" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimalanforderungen nicht erfüllt" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimum requirements not met" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Requisitos mínimos no cumplidos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vähimmäisvaatimukset eivät täyty" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pré-requis minimum non satisfaits" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "न्यूनतम आवश्यकताएं पूरी नहीं हुई" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Requisiti minimi non presenti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "システム要件を満たしていません" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "최소 요건 충족되지 않음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimale vereisten niet voldaan" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Niezgodność z minimalnymi wymaganiami" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Requerimentos mínimos não satisfeitos." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Текущая macOS не соответствует минимальным требованиям" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimum gereksinimler karşılanamadı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Мінімальні вимоги не задоволені" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有达到安装所需的最低要求" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "未達最低版本要求" + } + } + } + }, + "Alert.PostInstall.Title" : { + "comment" : "Post install", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incapaç de realitzar les tasques post instal·lació" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ausführung von Post-Installationsschritten nicht möglich" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to perform post install steps" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se pueden realizar los pasos posteriores a la instalación" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asennuksen jälkeisiä vaiheita ei voi suorittaa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible d'effectuer les étapes de post-installation" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्थापना के बाद के चरण निष्पादित करने में असमर्थ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non riesco ad eseguire i comandi post installazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インストール後の作業を実行できませんでした" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "설치 후 단계를 수행할 수 없음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan post-installatie stappen niet uitvoeren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można wykonać czynności po-instalacyjnych" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível realizar os comandos de pós-instalação" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно выполнить дополнительные шаги после установки" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yükleme aşamaları çalıştırılamadı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не можливо виконати пост-інсталяційні дії" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法执行安装前置步骤" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法進行安裝後步驟" + } + } + } + }, + "Alert.PrivilegedHelper.Error.Title" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "No ha sigut possible instal·lar el servei" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installation des Helfers nicht möglich" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to install helper" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede instalar el asistente" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apuohjelmaa ei voi asentaa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible d'installer l'assistant" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "हेल्पर स्थापित करने में असमर्थ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non riesco a installare aiutante" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ヘルパーをインストールできませんでした" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "도우미를 설치할 수 없음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan helper niet installeren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można zainstalować helpera" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível instalar o ajudante" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно установить помощник" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yardımcı yüklenemedi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не вдалося встановити \"privilege helper\"" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法安装帮助程序" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法安裝輔助程式" + } + } + } + }, + "Alert.PrivilegedHelper.Message" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'Xcodes utilitza, a part, un servei que executa tasques com a root. Aquestes tasques son coses que requereixin la comanda sudo a la línia de comandes, incloent-hi les tasques al finalitzar l'instal·lació i canviar les versions d'Xcode seleccionades utilitzant xcode-select.\n\nEl sistema operatiu et demanarà la teva contrassenya per poder-lo instal·lar." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes verwendet einen separaten privilegierten Helfer, um Aufgaben als root zu erledigen. Das sind Dinge, die sudo in der Kommandozeile erfordern würden, einschließlich Post-Installationsschritte sowie das Umstellen von Xcode-Versionen mit xcode-select.\n\nUm ihn zu installieren, erfolgt eine Aufforderung zur Eingabe des Passworts für Dein macOS-Benutzerkonto." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes uses a separate privileged helper to perform tasks as root. These are things that would require sudo on the command line, including post-install steps and switching Xcode versions with xcode-select.\n\nYou'll be prompted for your macOS account password to install it." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes utiliza un Asistente Privilegiado independiente para realizar tareas como root. Estas son cosas que requerirían sudo en la línea de comando, incluidos los pasos posteriores a la instalación y el cambio de versiones de Xcode con xcode-select.\n\nSe le pedirá la contraseña de su cuenta de macOS para instalarlo." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes käyttää erillistä etuoikeutettua avustajaa tehtävien suorittamiseen pääkäyttäjänä. Nämä ovat asioita, jotka edellyttävät sudo komentoa komentorivillä, mukaan lukien asennuksen jälkeiset vaiheet ja Xcode-versioiden vaihtaminen xcode-selectillä.\n\nSinua pyydetään antamaan macOS-tilisi salasana sen asentamista varten." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes utilise un assistant privilégié distinct pour effectuer des tâches en tant que root. Ce sont des tâches qui nécessiteraient sudo sur la ligne de commande, y compris les étapes de post-installation et le changement de version de Xcode avec xcode-select.\n\nVous serez invité à saisir le mot de passe de votre compte macOS pour l'installer." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes कार्यों को रूट के रूप में करने के लिए एक अलग विशेषाधिकार प्राप्त सहायक का उपयोग करता है। ये ऐसी चीजें हैं जिनके लिए कमांड लाइन पर sudo की आवश्यकता होगी, जिसमें पोस्ट-इंस्टॉल चरण और xcode-select के साथ Xcode संस्करण स्विच करना शामिल है।\n\nआपको इसे स्थापित करने के लिए अपने macOS खाता पासवर्ड के लिए संकेत दिया जाएगा।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes usa un aiutante privilegiato per svolgere dei compiti come root. Si tratta di comandi che normalmente richiederebbero sudo da linea di comando, incluse fasi di post-install e modificare la versione di Xcode con xcode-select.\n\nTi verrà richiesta la password del tuo account di macOS per installarlo." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodesは、Rootとしてタスクを実行するために、別の権限のあるヘルパーを使用します。インストール後の手順や xcode-select による Xcode のバージョン切り替えなど、コマンドラインで sudo を必要とするものです。\n\nインストールには、macOS アカウントのパスワードの入力が必要です。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes는 별도의 권한을 가진 도우미를 사용하여 작업을 루트로서 수행합니다. 설치 후 단계와 xcode-select로 Xcode 버전을 전환하는 것과 같이 커맨드 라인에서 sudo가 필요한 작업이 이에 해당합니다.\n\n설치하려면 macOS 계정 암호를 입력하라는 메시지가 표시됩니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes gebruikt een separate privilged helper om taken uit te voeren als root. Dit zijn operaties die een sudo vereisen op de command line, inclusief post-installatie stappen en het wijzigen van Xcode versies met xcode-select.\n\nJe zult worden gevraagd om je macOS account wachtwoord om deze te installeren." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes używa oddzielnego helpera z uprawnieniami, aby wykonywać zadania jako root. Są to rzeczy, które wymagałyby sudo w wierszu poleceń, w tym kroki po instalacji i przełączanie wersji Xcode z xcode-select.\n\nBędziesz proszony o podanie hasła do konta macOS, aby go zainstalować." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes usa um ajudante privilegiado separado para realizar tarefas como root (raíz). São tarefas onde seria necessário permissão de super usuário (sudo) na linha de comando, incluindo comandos de pós-instalação e trocar versões de Xcode com xcode-select.\n\nVocê deverá inserir sua senha do macOS para instalá-lo." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes использует отдельный привилегированный помощник для выполнения задач от имени root-пользователя. Это команды, которые потребуют sudo в командной строке, включая шаги после установки и переключение версий Xcode с помощью xcode-select.\n\nВам будет предложено указать пароль от вашей учетной записи macOS для его установки." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes, root görevlerini yerine getirmek için bir Ayrıcalıklı yardımcı aracı kullanır. Bunlar komut satırındaki sudo gerektiren, yükleme sonrası adımlarını sağlayan ve Xcode sürümü değiştiren xcode-select gibi komutlardan ibarettir.\n\nBunu yüklemek için macOS hesap şifrenizi girmeniz istenecektir." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes використовує спеціальний \"privilege helper\" щоб запускати задачі як суперюзер. Це включає наприклад sudo в терміналі, та кроки після інсталяції або перемикання версії Xcode за допомогою xcode-select.\n\nЗараз буде запит на ваш пароль від Мак щоб встановити цей хелпер." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes使用一个独立的提权帮助程序来以root身份执行任务。就是那些需要在命令行中用sudo执行的命令。包括安装前置步骤以及用xcode-select切换Xcode版本。\n\n您需要提供当前用户的密码来安装它。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes 使用一個分開的權限輔助程式以使用 root 身份執行特定工作。這些工作包含了通常需要在命令列使用 sudo 的指令,包含安裝後步驟以及使用 xcode-select 選擇 Xcode 版本。\n\n安裝時,你將會被詢問你的 macOS 帳號密碼。" + } + } + } + }, + "Alert.PrivilegedHelper.Title" : { + "comment" : "Privileged Helper", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servei privilegiat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privilegierter Helfer" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privileged Helper" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asistente Privilegiado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etuoikeutettu auttaja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Assistant Privilégié" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "विशेषाधिकार प्राप्त सहायक" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aiutante Privilegiato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "権限のあるヘルパー" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "권한을 가진 도우미 (Privileged Helper)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privileged Helper" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helper z uprawnieniami" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajudante privilegiado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Привилегированный помощник" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayrıcalıklı Yardımcı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privileged Helper" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "提权帮助程序" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "權限輔助程式" + } + } + } + }, + "Alert.Select.Error.Title" : { + "comment" : "Active/Select", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incapaç de seleccionar l'Xcode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Auswahl von Xcode nicht möglich" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to select Xcode" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede seleccionar el Xcode" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodea ei voi valita" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de sélectionner Xcode" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "एक्सकोड का चयन करने में असमर्थ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non riesco a selezionare Xcode" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode をアクティブにすることができませんでした" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode를 선택할 수 없음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan Xcode niet selecteren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można wybrać Xcode" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível selecionar Xcode" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно выбрать Xcode" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode seçilemedi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не вдалося вибрати Xcode" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法选定Xcode版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法選擇 Xcode" + } + } + } + }, + "Alert.SymLink.Message" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'Xcode.app existeix i no és un enllaç simbòlic" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app existiert und ist kein symbolischer Link" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app exists and is not a symbolic link" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app existe y no es un enlace simbólico" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app on olemassa, eikä se ole symbolinen linkki" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app existe et n'est pas un lien symbolique" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app मौजूद है और एक प्रतीकात्मक लिंक नहीं है" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app esiste e non è un link simbolico" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.appが存在し、シンボリックリンクではありません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app이 존재하며 심볼릭 링크가 아닙니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app bestaat en is geen symbolic link" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app istnieje i nie jest linkiem symbolicznym" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app existe e não é um link simbólico" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app существует и не является символической ссылкой" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app zaten var ve bir sembolik link değil" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app вже існує, і це не символічна ссилка" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app已存在且不是软连接" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app 已經存在,但並不是一個 Symlink" + } + } + } + }, + "Alert.SymLink.Title" : { + "comment" : "Symbolic Links", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incapaç de crear un enllaç simbòlic" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erstellung des symbolischen Links nicht möglich" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to create symbolic Link" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede crear un enlace simbólico" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Symbolista linkkiä ei voi luoda" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de créer un lien symbolique" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रतीकात्मक लिंक बनाने में असमर्थ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non riesco a creare il link simbolico" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "シンボリックリンクを作成できませんでした" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "심볼릭 링크를 생성할 수 없음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan geen symbolic link maken" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można utworzyć linku symbolicznego" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível criar link simbólico" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно создать символическую ссылку" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uygulama sembolik linki oluşturulamadı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не вдалося створити символічну ссилку" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法创建软链接" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法建立 Symlink" + } + } + } + }, + "Alert.Uninstall.Error.Message.FileNotFound" : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datei \"%@\" konnte nicht gefunden werden." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Could not find file \"%@\"." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ファイル \"%@\" が見つかりませんでした。" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie znaleziono pliku \"%@\"." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "\"%@\" dosyası bulunamadı." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法找到文件\"%@\"." + } + } + } + }, + "Alert.Uninstall.Error.Title" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incapaç de desinstal·lar l'Xcode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Deinstallation von Xcode ist nicht möglich" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to uninstall Xcode" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede desinstalar Xcode" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode-asennuksen poistaminen ei onnistu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de désinstaller Xcode" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode की स्थापना रद्द करने में असमर्थ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non riesco a disinstallare Xcode" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode をアンインストールできませんでした" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode를 제거할 수 없음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan Xcode niet deinstalleren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można odinstalować Xcode" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível desinstalar o Xcode" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно удалить Xcode" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode Kaldırılamadı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не можливо видалити Xcode" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法卸载Xcode" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法解除安裝 Xcode" + } + } + } + }, + "Alert.Uninstall.Message" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Es mourà a la paperera, però no es buidarà." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Anwendung wird in den Papierkorb verschoben, dieser wird aber nicht geleert." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "It will be moved to the Trash, but won't be emptied." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se moverá a la Papelera, pero no se vaciará." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se siirretään roskakoriin, mutta sitä ei tyhjennetä." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes sera déplacé vers la corbeille, mais la corbeille ne sera pas vidée." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "इसे ट्रैश में ले जाया जाएगा, लेकिन खाली नहीं किया जाएगा।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sarà spostato nel cestino, ma non svuotato." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ゴミ箱に移動されますが、ゴミ箱を自動的に空にすることはありません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "휴지통으로 이동되지만 비워지지는 않습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Het zal worden verplaatst naar de Prullenbak, maar deze zal niet geleegd worden." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zostanie przeniesiony do kosza, ale nie zostanie opróżniony." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Será movido para a lixeira, mas não será esvaziada." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Файлы будут перемещены в корзину, но не будут очищены из неё автоматически." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uygulama Çöp Kutusuna taşınacaktır, fakat silinmeyecektir." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode буде просто переміщено до Кошика, без очищення." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "它会被移动到废纸篓,但废纸篓不会清空。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "它將會被移到垃圾桶,但不會被清除。" + } + } + } + }, + "Alert.Uninstall.Title" : { + "comment" : "Uninstall", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desinstal·lar l'Xcode %@?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ deinstallieren?" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uninstall Xcode %@?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desinstalar Xcode %@?" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista Xcode %@?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Désinstaller Xcode %@ ?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ की स्थापना रद्द करें?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disinstalla Xcode %@?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ をアンインストールしてもよろしいですか?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@을 제거하시겠습니까?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ deinstalleren?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odinstalować Xcode %@?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desinstalar Xcode %@?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить Xcode %@?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ sürümünü Kaldır?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити Xcode %@?" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "要卸载Xcode %@吗?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "解除安裝 Xcode %@?" + } + } + } + }, + "Alert.Update.Error.Title" : { + "comment" : "Update", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incapaç d'actualitzar l'Xcode seleccionat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Update des ausgewählten Xcodes nicht möglich" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to update selected Xcode" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede actualizar el Xcode seleccionado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valittua Xcodea ei voi päivittää" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de mettre à jour la version de Xcode sélectionnée" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "चयनित Xcode को अपडेट करने में असमर्थ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non riesco ad aggiornare Xcode selezionato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode の一覧をアップデートできませんでした" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택된 Xcode를 업데이트할 수 없음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan geselecteerde Xcode niet updaten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można zaktualizować wybranej wersji Xcode" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível atualizar o Xcode selecionado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно обновить выбранный Xcode" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seçili Xcode güncellenemedi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не вдалося оновити обраний Xcode" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法更新选定的Xcode版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法更新已選擇的 Xcode" + } + } + } + }, + "All" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tot" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaikki" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tout" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सभी" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tutti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すべて" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전체" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alles" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wszystkie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Все" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tümü" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Всі" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "全部" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "全部" + } + } + } + }, + "Apple Silicon" : { + + }, + "AppleID" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple-ID:" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Identifiant Apple :" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple ID:" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple ID:" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "AppleID:" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple ID:" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple ID:" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple ID:" + } + } + } + }, + "AppUpdates" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualitzacions d'Xcodes.app" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app-Updates" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app Updates" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app Actualizaciones" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app päivitykset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mises à Jour de Xcodes.app" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app अपडेट" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app Aggiornamenti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.appの更新" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app 업데이트" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app Updates" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualizacje Xcodes.app" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atualizações de Xcodes.app" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обновления Xcodes.app" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app Güncellemeleri" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Оновлення Xcodes.app" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app更新" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app 更新" + } + } + } + }, + "AutomaticallyCreateSymbolicLink" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crea automàticament un link simbòlic a Xcode.app" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Symbolischen Link zur Xcode.app automatisch erstellen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatically create symbolic link to Xcode.app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crear automáticamente enlace simbólico a Xcode.app" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Luo automaattisesti symbolinen linkki Xcode.appiin" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Créer automatiquement un lien symbolique vers Xcode.app" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app के लिए स्वचालित रूप से प्रतीकात्मक लिंक बनाएं" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crea Automaticamente link simbolico a Xcodes.app" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.appへのシンボリックリンクの自動生成" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app에 대한 심볼릭 링크 자동 생성" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Creëer automatisch een symbolic link naar Xcode.app" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatycznie twórz symboliczne połączenie do Xcode.app" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Criar link simbólico para o Xcode.app automaticamente" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Автоматически создавать символическую ссылку к Xcode.app" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes.app'in sembolik linkini otomatik oluştur." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Автоматично створювати символічну ссилку Xcode.app" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自动创建名为Xcode.app的软连接" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "自動建立 Symlink 至 Xcode.app" + } + } + } + }, + "AutomaticallyCreateSymbolicLinkDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quan s'activa/selecciona una versió d'Xcode, prova de crear un enllaç simbòlic dins el directori d'instal·lació" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beim Umstellen einer Xcode-Version auf Aktiv/Ausgewählt versuchen einen symbolischen Link namens Xcode.app im Installationsverzeichnis zu erstellen." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "When making an Xcode version Active/Selected, try and create a symbolic link named Xcode.app in the installation directory" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Al activar/seleccionar una versión de Xcode, intentará crear un enlace simbólico llamado Xcode.app en el directorio de instalación." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kun teet Xcode-versiosta aktiivisen/valitun, yritä luoda symbolinen linkki nimeltä Xcode.app asennushakemistoon" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lorsque vous activez/sélectionnez une version de Xcode, essayez de créer un lien symbolique nommé Xcode.app dans le répertoire d'installation" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode संस्करण को सक्रिय/चयनित बनाते समय, स्थापना निर्देशिका में Xcode.app नामक एक प्रतीकात्मक लिंक बनाने का प्रयास करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando rendi una versione di Xcode Attiva/Selezionata, prova a fare un link simbolico chiamato nella directory di installazione." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodeのバージョンをアクティブにする時、インストール先でXcode.appのシンボリックリンクの作成を試みます。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode 버전을 기본 버전(활성)/선택됨 상태로 만들 때 설치 디렉토리에 Xcode.app이라는 심볼릭 링크를 만들어 보세요." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bij het actief maken/selecteren van een Xcode versie, probeer een symbolic link genaamd Xcode.app te maken in de installatie map" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przy ustawianiu Xcode jako aktywny/wybrany, próbuj automatycznie stworzyć symboliczne połączenie o nazwie Xcode.app w katalogu instalacji." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando ativar/selecionar uma versão do Xcode, tentar criar um link simbólico chamado Xcode.app no diretório de instalação" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Когда вы делаете версию Xcode активной/выбранной, будет выполнена попытка создать символическую ссылку с именем Xcode.app в директории установки" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bir Xcode sürümünü Aktif/Seç yaparken Xcode.app ismindeki uygulamanın sembolik linkini yükleme klasörüne otomatik oluşturmayı dene" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обираючи Акивний Xcode, спробувати створити символічну ссилку Xcode.app що вказує на обрану версію. Ссилка буде розміщена у папці інсталяції Xcode" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当激活/选定某个Xcode版本时,尝试在安装目录创建一个名为Xcode.app的软链接。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "當你選擇/啟用一個 Xcode 版本,自動建立一個名為 Xcode.app 的 Symlink 到該版本的安裝目錄" + } + } + } + }, + "AutomaticInstallNewVersion" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instal·lar automàticament noves versions d'Xcode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neue Versionen von Xcode automatisch installieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatically install new versions of Xcode" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instalar automáticamente versions de Xcode" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asenna uudet Xcode versiot automaattisesti" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installer automatiquement les nouvelles versions de Xcode" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode के नए संस्करण स्वचालित रूप से स्थापित करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installa automaticamente nuove versioni di Xcode" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "新しい Xcode バージョンを自動的にインストールする" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "새 Xcode 버전 자동으로 설치" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installeer nieuwe versies van Xcode automatisch" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatycznie instaluj nowe wersje Xcode" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instalar novas versões do Xcode automaticamente" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Автоматически устанавливать новые версии Xcode" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode'un yeni versiyonlarını otomatik yükle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Автоматично встановлювати нові версії Xcode" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自动安装最新的Xcode版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "自動安裝新版本的 Xcode" + } + } + } + }, + "Beta" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "बीटा" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ベータ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "베타" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Бета" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "测试版" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "測試版" + } + } + } + }, + "BetaOnly" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Només Beta" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nur Beta" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beta only" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Solo Beta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vain beta versiot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seulement les versions bêtas" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "केवल बीटा" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Solo Beta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ベータ版のみ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "베타만" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alleen beta" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tylko beta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Somente beta" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Только бета" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yalnızca Beta" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "лише Beta" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "只显示测试版" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "只看測試版" + } + } + } + }, + "Cancel" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbrechen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Peruuta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuler" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "रद्द करे" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annulla" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "キャンセル" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "취소" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuleren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anuluj" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отмена" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İptal Et" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Відміна" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消" + } + } + } + }, + "Change" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Canviar" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ändern" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambiar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaihda" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Changer" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "परिवर्तन" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambia" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "変更" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "변경" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wijzig" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmień" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alterar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изменить" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Değiştir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Змінити" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "变更" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "變更" + } + } + } + }, + "CheckForAppUpdates" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cercar actualitzacions automàticament" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatisch auf App-Updates prüfen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatically check for app updates" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar automáticamente actualizaciones" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tarkista päivitykset automaattisesti" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifier automatiquement les mises à jour de l'application" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ऐप अपडेट के लिए स्वचालित रूप से जांचें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controlla automaticamente per aggiornamenti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アプリのアップデートを自動で確認する" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "업데이트 자동 확인" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatisch controleren op app updates" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatycznie sprawdzaj aktualizacje aplikacji" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificar atualizações do app automaticamente" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Автоматически проверять наличие обновлений" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uygulama güncellemelerini otomatik kontrol et" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Автоматично перевіряти наявність оновлень." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自动检查更新" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "自動檢查更新項目" + } + } + } + }, + "CheckingSecurity" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificació de seguretat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sicherheitsprüfung" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Security verification" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificación de seguridad" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Turvallisuustarkastus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérification de sécurité" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सुरक्षा सत्यापन" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifica di sicurezza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "セキュリティを検証しています" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "보안 확인" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beveiliging verificatie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weryfikacja zabezpieczeń" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificação de segurança" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверка безопасности" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Güvenlik doğrulaması" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перевірка безпеки" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在检查安全性" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "安全驗證中" + } + } + } + }, + "CheckNow" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Revisar ara" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jetzt prüfen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check Now" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Revisarlo Ahora" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tarkista nyt" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifier Maintenant" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अभी जाँचें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controlla Ora" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今すぐ確認" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지금 확인하기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu Controleren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sprawdź teraz" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificar agora" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверить сейчас" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontrol Et" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перевірити зараз" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "现在检查" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "立即檢查" + } + } + } + }, + "Close" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tancar" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerrar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sulje" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fermer" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "बंद करे" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chiudi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "閉じる" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "닫기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluiten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zamknij" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fechar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Закрыть" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapat" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Закрити" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "關閉" + } + } + } + }, + "Compatibility" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compatibilitat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kompatibilität" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compatibilidad" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yhteensopivuus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compatibilité" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनुकूलता" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compatibilità" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "互換性" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "호환성" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compatibiliteit" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kompatybilność" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compatibilidade" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Совместимость" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uyumluluk" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сумісність" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "兼容性" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "相容性" + } + } + } + }, + "Compilers" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compiladors" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compiler" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compiladores" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kääntäjät" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compilateurs" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "संकलनकर्ता" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compilatore" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "コンパイラ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "컴파일러" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compilers" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kompilatory" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compiladores" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Компиляторы" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Derleyiciler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Компілятори" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "编译器" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "編譯器" + } + } + } + }, + "Continue" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuar" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fortfahren" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jatka" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuer" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "जारी रखें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continua" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "続ける" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계속하기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doorgaan" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontynuuj" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Продолжить" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Devam Et" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Продовжити" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "继续" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "繼續" + } + } + } + }, + "CopyPath" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiar la ruta" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pfad kopieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copy Path" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiar Ruta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopioi polku" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copier le chemin d'accès" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पथ की कॉपी करे" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copia Percorso" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスをコピー" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "경로 복사하기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopieer Pad" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopiuj ścieżkę" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiar caminho" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Копировать путь" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yolu Kopyala" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скопіювати шлях" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "复制文件位置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "拷貝路徑" + } + } + } + }, + "CopyReleaseNoteURL" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiar l'URL" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL kopieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copy URL" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiar URL" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copier l'URL" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL कॉपी करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copia URL" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "URLをコピー" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL 복사" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopieer URL" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopiuj adres URL" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Копировать URL" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL'yi kopyala" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "复制 URL" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "複製 URL" + } + } + } + }, + "CreateSymLink" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crear un Symlink com a Xcode.app" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Symlink als Xcode.app erstellen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create Symlink as Xcode.app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crear Symlink como Xcode.app" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Luo Symlink nimellä Xcode.app" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Créer un Symlink pour Xcode-Beta.app" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app के रूप में सिमलिंक बनाएं" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crea Symlink come Xcode.app" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.appとしてシンボリックリンクを作成" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app과 같은 Symlink 만들기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Creëer Symlink als Xcode.app" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utwórz Symlink jako Xcode.app" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Criar Symlink como Xcode.app" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Создать символическую ссылку к Xcode.app" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode.app olarak sembolik link yarat" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Створити символічну ссилку як Xcode.app" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "以Xcode.app创建软链接" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "製作 Xcode-Beta.app 的 Symlink" + } + } + } + }, + "CreateSymLinkBeta" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Symlink als Xcode-Beta.app erstellen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create Symlink as Xcode-Beta.app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crear Symlink como Xcode-Beta.app" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Luo Symlink nimellä Xcode-Beta.app" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode-Beta.app के रूप में सिमलिंक बनाएं" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crea Symlink come Xcode-Beta.app" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode-Beta.appとしてシンボリックリンクを作成" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode-Beta.app과 같은 Symlink 만들기" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utwórz Symlink jako Xcode-Beta.app" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Создать символическую ссылку к Xcode-Beta.app" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode-Beta.app olarak sembolik link yarat" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Створити символічну ссилку як Xcode-Beta.app" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "以Xcode-Beta.app创建软链接" + } + } + } + }, + "DataSource" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Font de dades" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datenquelle" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data Source" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fuente de datos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tietolähde" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Source de Données" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "डेटा स्रोत" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sorgente Dati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "データソース" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "데이터 소스" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Databron" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Źródło danych" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fonte de dados" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Источник данных" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Veri Kaynağı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Джерело інформації" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "数据源" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "資料來源" + } + } + } + }, + "DataSourceDescription" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "La font de dades d'Apple rebusca dins la pàgina web de desenvolupadors d'Apple. Això farà que sempre mostri les últimes versions disponibles, però també és una opció més inestable.\n\nXcode Releases es una llista no oficial de les versions d'Xcode. Està formada per dades ben composades, conté informació extra que no està disponible llegint les dades oficials d'Apple i és menys probable que es trenqui si Apple decideix redissenyar el seu portal de desenvolupadors." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Apple-Datenquelle liest die Apple Developer-Website aus. Sie zeigt immer die neuesten Releases an, die verfügbar sind, ist allerdings etwas instabiler.\n\nXcode Releases ist eine inoffizielle Liste von Xcode-Veröffentlichungen. Sie wird als formatierte Daten bereitgestellt, enthält Extrainformationen die nicht ohne weiteres von Apple erhältlich sind und ist mit höherer Wahrscheinlichkeit weiter verfügbar, sollte Apple seine Entwickler-Website neu gestalten." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The Apple data source scrapes the Apple Developer website. It will always show the latest releases that are available, but is more fragile.\n\nXcode Releases is an unofficial list of Xcode releases. It's provided as well-formed data, contains extra information that is not readily available from Apple, and is less likely to break if Apple redesigns their developer website." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La fuente de datos de Apple la extrae de el sitio web de Apple Developer. Siempre mostrará los últimos lanzamientos disponibles, pero es más frágil.\n\nXcode Releases es una lista no oficial de lanzamientos de Xcode. Se proporciona como datos bien estructurados, contiene información adicional que no está disponible fácilmente en Apple y es menos probable que se rompa si Apple rediseña su sitio web para desarrolladores." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Applen tietolähde kaappaa Apple Developer -sivuston. Se näyttää aina uusimmat saatavilla olevat julkaisut, mutta se on herkempi hajoamiselle.\n\nXcode Releases on epävirallinen luettelo Xcode-julkaisuista. Se toimitetaan hyvin muotoiltuina tietoina, sisältää lisätietoa, jota ei ole helposti saatavilla Applelta, ja se ei todennäköisesti hajoa, jos Apple suunnittelee uudelleen kehittäjäsivustonsa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La source de données Apple analyse le site Web de développeurs d'Apple. Elle contient les dernières versions disponibles, mais est plus fragile.\n\nXcode Releases est une liste non officielle des versions de Xcode. Elle contient des informations supplémentaires qui ne sont pas facilement disponibles auprès d'Apple et est moins susceptible de se briser si Apple refait son site Web de développeurs." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple डेटा स्रोत Apple डेवलपर वेबसाइट को स्क्रैप करता है। यह हमेशा नवीनतम रिलीज दिखाएगा जो उपलब्ध हैं, लेकिन अधिक नाजुक है।\n\nXcode Releases Xcode रिलीज़ की एक अनौपचारिक सूची है। यह सुव्यवस्थित डेटा के रूप में प्रदान किया जाता है, इसमें अतिरिक्त जानकारी होती है जो Apple से आसानी से उपलब्ध नहीं होती है, और यदि Apple अपनी डेवलपर वेबसाइट को फिर से डिज़ाइन करता है तो इसके टूटने की संभावना कम होती है।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La sorgente dati Apple controlla il sito sviluppatori Apple. Mostra sempre le ultime versioni disponibili, ma è più fragile. Xcode Releases è una lista non ufficiale di versioni di Xcode. E' disponibile con un formato ben strutturato, contiene più in formazioni che non vengono rilasciate da Apple ed è più difficile che smetta di funzionare se Apple ristruttura il suo sito sviluppatori." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appleのデータソースは、Apple Developerのウェブサイトをスクレイピングしています。常に最新のリリースが表示されますが、比較的壊れやすくなっています。\n\nXcode Releasesは、非公式なXcodeのリリース一覧です。この一覧は整形されたデータとして提供されます。Appleからは簡単に入手できない特別な情報を含んでおり、AppleがDeveloper ウェブサイトを再設計しても壊れにくくなっています。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple 데이터 소스는 Apple Developer 웹사이트를 스크랩합니다. Apple Developer에는 항상 사용 가능한 최신 출시 버전이 표시되지만 취약한 면이 있습니다.\n\nXcode Releases는 비공식적인 Xcode 출시 버전 목록입니다. Xcode Releases에서는 정리된 데이터를 제공하며, Apple에서 쉽게 구할 수 없는 정보를 포함하며 Apple이 Apple Developer를 재설계할 경우에도 안전할 수 있습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De Apple databron scraped de Apple Developer website. Dit zal altijd de laatste nieuwe versies tonen die beschikbaar zijn, maar is meer foutgevoelig.\n\nXcode Releases is een onofficiële lijst van Xcode releases. Deze lijst wordt gepresenteerd als gevalideerde data en bevat extra informatie die niet beschikbaar is vanuit Apple. Deze databron is minder foutgevoelig en niet afhankelijk van wanneer Apple de developer website aanpast." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Źródło danych Apple przeszukuje stronę internetową Apple Developer. Zawsze wyświetla najnowsze dostępne wydania, ale jest bardziej podatne na problemy.\n\nXcode Releases to nieoficjalna lista wydań Xcode. Udostępnia ona dobrze sformatowane dane, zawiera dodatkowe informacje, które nie są łatwo dostępne w Apple, i jest mniej podatna na problemy, gdy Apple zmienia swoją stronę dla deweloperów." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "A fonte de dados da Apple copia o site Apple Developer. Sempre mostrará os lançamentos mais recentes que estão disponíveis, porém é mais frágil.\n\nLançamentos do Xcode (Xcode Releases) é uma lista de lançamentos do Xcode não-oficial. É provido como dado formatado, contem informação extra que não está prontamente disponível pela Apple, e é menos provável que quebre se a Apple redesenhar o seu site de desenvolvedores." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Источник данных Apple применяет технологию \"веб-скрейпинга\" к веб-сайту Apple для разработчиков. Он всегда показывает последние доступные выпуски, но является менее стабильным источником данных.\n\nXcode Releases — это неофициальный список выпусков Xcode. Он предоставляется в виде удобно структурированных данных, содержит дополнительную информацию, которую не всегда можно получить от Apple и который с меньшей вероятностью перестанет работать, если Apple изменит дизайн своего веб-сайта для разработчиков." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple veri kaynağı Apple'ın geliştirici sitesini inceliyor. Uygun olan en son sürümleri gösterir, ama biraz daha hassastır.\n\nXcode Releases, Xcode sürümlerinin bulunduğu resmi olmayan bir listedir. Data düzenli bir formata sahip bilgileri barındırır, Apple tarafında olmayan ek bilgileri içerir ve Apple'ın ileride sitesini değiştireceği için bozabileceği bir kaynak değildir." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple – cканування порталу Apple Developer у пошуку доступних версій Xcode. Створюючи список усих нових релізів, але це не завжи спрацьовує.\n\nXcode Releases – це не офіційний список релізів Xcode. Він являє собою відформатований список, що також має додаткову інформацію не завжди доступну напряму з сайту Apple, і менш ймовірно що він зламається якщо Apple випустить редизайн Developer Portal" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple数据源是从Apple开发者网站爬取的。它会及时反应最新版本,但较为脆弱。\n\nXcode Releases是一个非官方的Xcode版本列表。它提供了良好格式化的数据,包含了不便从Apple直接获得的附加信息,且更不容易在Apple开发者网站无法访问时出现问题。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple 資料來源是擷取 Apple 開發者網站而來,永遠會顯示最新的可用版本,但比較容易出錯。\n\nXcode Releases 是一個非官方的 Xcodes 發行版本列表。這個來源提供格式良好的資料,包含了 Apple 開發者網站上未列出的額外資訊並且即使 Apple 決定重新設計他們的開發者網站也比較不容易出錯。" + } + } + } + }, + "DigitCodeDescription" : { + "comment" : "SMS/2FA", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix el codi de %d dígits d'un dels teus dispositius de confiança:" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib den %d-stelligen Code von einem Deiner Vertrauensgeräte ein:" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter the %d digit code from one of your trusted devices:" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingrese el código de %d dígitos de uno de sus dispositivos de confianza:" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anna %d numeroinen koodi jostakin luotetusta laitteesta:" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisissez le code à %d chiffres de l'un de vos appareils de confiance :" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने किसी विश्वसनीय डिवाइस से %d अंक कोड दर्ज करें:" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci il codice di %d cifre in uno dei tuo dispositivi registrati:" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "信頼できるデバイスから、%d桁のコードを入力してください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "신뢰할 수 있는 장치 중 하나에서 %d 자리 코드를 입력하세요." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer de %d code in van een van je vertrouwde apparaten:" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź %d-cyfrowy kod z jednego ze swoich zaufanych urządzeń:" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insira o código de %d dígitos de um de seus dispositivos confiáveis:" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите %d цифровой код с одного из ваших доверенных устройств:" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Güvenilir cihazından aldığın %d rakamlı kodu gir:" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть %d-значний код з одного з довірених пристроїв:" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入从信任的设备接收到的%d位代码:" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "請輸入顯示在你其中一個信任裝置中的 %d 位數密碼:" + } + } + } + }, + "Downloader" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Descàrrega" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloader" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Descargador" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloader" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Téléchargeur" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "डाउनलोडर" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scaricatore" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンローダ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로더" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloader" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pobieranie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Baixador" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Загрузчик" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yükleyici" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завантажувач" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "下载器" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下載器" + } + } + } + }, + "DownloaderDescription" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 utilitza fins a 16 connexions simultànies per a descarregar l'Xcode 3-5x vegades més de pressa que URLSesson. A més de l'executable, està empaquestat amb el seu codi font dins Xcodes per complir amb la llicència GPLv2.\n\nURLSession is la opció per defecte de l'API d'Apple per a fer crides URL." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 verwendet bis zu 16 Verbindungen, um Xcode 3-5x schneller als URLSession herunterzuladen. Es ist zusammen mit seinem Quellcode in Xcode enthalten, um seiner GPLv2-Lizenz nachzukommen.\n\nURLSession ist Apples Standard-API für URL-Requests." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 uses up to 16 connections to download Xcode 3-5x faster than URLSession. It's bundled as an executable along with its source code within Xcodes to comply with its GPLv2 license.\n\nURLSession is the default Apple API for making URL requests." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 usa hasta 16 conexiones para descargar Xcode de 3 a 5 veces más rápido que URLSession. Se incluye como un ejecutable junto con su código fuente dentro de Xcodes para cumplir con su licencia GPLv2.\n\nURLSession es la API predeterminada de Apple para realizar solicitudes de URL." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 käyttää jopa 16 yhteyttä ladatakseen Xcoden 3–5 kertaa nopeammin kuin URLSession. Se on niputettu suoritettavaksi tiedostoksi ja sen lähdekoodiin Xcodesissa GPLv2-lisenssin noudattamiseksi.\n\nURLSession on Applen oletussovellusliittymä URL-pyyntöjen tekemiseen.." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 utilise jusqu'à 16 connexions pour télécharger Xcode de 3 à 5 fois plus rapidement que URLSession. aria2 est fourni sous forme d'exécutable avec son code source dans Xcodes pour se conformer à sa licence GPLv2.\n\nURLSession est l'API d'Apple utilisée par défaut pour effectuer des requêtes d'URL." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 URLSession की तुलना में Xcode 3-5x तेजी से डाउनलोड करने के लिए 16 कनेक्शन तक का उपयोग करता है। इसे अपने GPLv2 लाइसेंस का अनुपालन करने के लिए Xcodes के भीतर अपने स्रोत कोड के साथ एक निष्पादन योग्य के रूप में बंडल किया गया है।\n\nURL अनुरोध करने के लिए URLSession डिफ़ॉल्ट Apple API है।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 usa fino a 16 connessioni per scaricar Xcode da 3 a 5 volte più veloce di URLSession. E' incluso come eseguibile assieme ai suoi sogenti dentro Xcodes per rispettare la sua licenza GPLv2. \n\nURLSession è l'API di default di Apple per fare richieste a URL remote." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 は、最大16個の接続を使用して、Xcode を URLSession の3-5 倍のスピードでダウンロードします。GPLv2 ライセンスに準拠するため、Xcodes 内にソースコードと一緒に実行ファイルとしてバンドルされています。\n\nURLSession は、URLリクエストを行うための Apple のデフォルト API です。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2는 최대 16 개의 연결을 사용하여 URLSession보다 3~5배 더 빠르게 Xcode를 다운로드합니다. GPLv2 라이센스를 준수하기 위해 Xcodes 내 소스 코드와 함께 실행 파일 번들로 제공됩니다.\n\nURLSession은 URL 요청을 만들기 위한 기본 Apple API입니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 gebruikt tot 16 verbindingen om Xcode 3-5x sneller te downloaden dan met URLSession. Het is gebundeld als een executable samen met de broncode binnen Xcodes om te voldoen aan de GPLv2 licentie.\n\nURLSession is de standaard Apple API voor het maken van URL verzoeken." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 używa do pobierania do 16 połączeń, co pozwala na pobieranie Xcode 3-5x szybciej niż URLSession. Jest on dostarczany jako plik wykonywalny wraz ze swoim kodem źródłowym w ramach Xcodes w celu przestrzegania jego licencji GPLv2.\n\nURLSession to domyślne API Apple do tworzenia żądań URL." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 usa até 16 conexões para baixar o Xcode 3-5x mais rápido que URLSession. Está empacotado como um executável junto com o seu código fonte dentro do Xcodes para conformar com a licensa GPLv2.\n\nURLSession é a API padrão da Apple para performar requisições URL." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 использует до 16 подключений для загрузки Xcode в 3-5 раз быстрее, чем URLSession. Он поставляется в виде исполняемого файла вместе с исходным кодом в Xcodes, чтобы соответствовать лицензии GPLv2.\n\nURLSession — это API Apple по умолчанию для выполнения запросов по сети." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 16ya kadar bağlantı kullanarak Xcode'u URLSession'a göre 3-5 kat daha hızlı indirir. Çalıştırılabilir bir dosya olarak Bundle'a dahildir ve kaynak dosyaları GPLv2 lisansıyla uyumlu olması açısından Xcode içerisinde yer alır.\n\nURLSession Apple'ın URL istekleri oluşturmak için sunduğu varsayılan API'dır." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 може використовувати до 16 з'єднань, завантажуючи Xcode у 3-5 разів швидше ніж URLSession. Вона поставляється у вигляді бінарника та коду, відповідно до вимог її GPLv2 ліцензії.\n\nURLSession – це завантажувач по замовчуванню від Apple" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2使用最高16线程,能提供3至5倍的下载速度。它与它的源代码被一同打包在Xcodes中以符合GPLv2授权。\n\nURLSession是用于发起URL请求的默认Apple API。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "aria2 相較 URLSession 可以同時使用最多 16 條連線以 3 ~ 5 倍的速度下載 Xcode。Xcodes 包含了執行檔與其原始碼以遵循他的 GPLv2 授權合約。\n\nURLSession 是系統內建用來發送 URL 連線請求的 Apple API。" + } + } + } + }, + "Downloading" : { + "comment" : "Installation Steps", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Descarregant" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Herunterladen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloading" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Descargando" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ladataan" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Téléchargement" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "डाउनलोड" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scaricando" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロードしています" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드 중" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloaden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pobieranie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Baixando" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скачивание" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndiriliyor" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скачування" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在下载" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下載中" + } + } + } + }, + "DownloadingError" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cap informació de la descàrrega trobada" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Download-Informationen gefunden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No download information found" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se encontró información de descarga" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lataustietoja ei löytynyt" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune information de téléchargement trouvée" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोई डाउनलोड जानकारी नहीं मिली" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non trovo informazioni sul download" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロードに関する情報が見つかりませんでした。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드 정보를 찾을 수 없음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen download informatie gevonden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie znaleziono informacji o pobieraniu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhuma informação de download encontrada" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Информация о загрузке не найдена" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndirme bilgisi bulunamadı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не знайдено інформації для закачування" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有找到下载信息" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到下載相關資訊" + } + } + } + }, + "DownloadingPercentDescription" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Descarregant: %d%% completat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Download: %d%% vollständig" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloading: %d%% complete" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Descargando: %d%% completado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lataa: %d%% valmis" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Téléchargement : %d%% téléchargé" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "डाउनलोड: %d%% पूर्ण" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Download: %d%% completato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロード中: %d%%" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드 중: %d%% 완료" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloaden: %d%% compleet" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pobieranie: %d%% ukończone" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Baixando: %d%% finalizado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скачивание: %d% завершено" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndirme: %d%% tamamlandı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Закачка: %d%% готово" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在下载:已完成%d%%" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下載中:已完成 %d%%" + } + } + } + }, + "Downloads" : { + "comment" : "Download Preference Pane", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloads" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Descargas" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lataukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Téléchargements" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "डाउनलोड" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloads" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロード" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pobieranie" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Загрузки" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndirilenler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завантаження" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "下载" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下載" + } + } + } + }, + "DownloadSize" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamany de descàrrega" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Download-Größe" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Download Size" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamaño de descarga" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Latauskoko" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Taille de téléchargement" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "डाउनलोड आकार" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dimensione Download" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サイズ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드 크기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Download Grootte" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wielkość pobierania" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamanho do download" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Размер загрузки" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndirme Boyutu" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Розмір завантаження" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "下载文件大小" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下載大小" + } + } + } + }, + "EnableNotifications" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activar les notificacions" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungen einschalten" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enable Notifications" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permitir notificaciones" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salli ilmoitukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activer les Notifications" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सूचनाएँ सक्षम करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abilita Notifiche" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知を有効にする" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알림 활성화" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificaties Inschakelen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Włącz powiadomienia" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ativar notificações" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включить уведомления" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildirimleri Etkinleştir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увімкнути Сповіщення" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用通知" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "啟用通知" + } + } + } + }, + "EnterDigitCodeDescription" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix el codi de %d dígits enviat a %@: " + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib den %1$d-stelligen Code ein der an '%2$@' gesendet wurde." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter the %1$d digit code sent to %2$@: " + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingrese el código de dígito %1$d enviado a %2$@: " + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anna %1$d numeroinen koodi, joka lähetettiin osoitteeseen %2$@: " + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrez le code à %1$d chiffres envoyé à %2$@ : " + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ को भेजा गया %1$d अंक कोड दर्ज करें: " + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci il codice di %d cifre inviato a %@: " + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$d桁のコードを%2$@に送信したので入力してください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@(으)로 전송된 %1$d 자리 코드를 입력하세요." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer de %1$d code in die is verstuurd naar %2$@: " + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź %1$d-cyfrowy kod wysłany do %2$@: " + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insira o código de %1$d dígitos enviado para %2$@: " + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите %1$d цифровой код, отправленный на %2$@: " + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ kaynağından gönderilen %1$d rakamlı kodu gir: " + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть %1$d-значний код відправлений на %2$@:" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入%1$d位代码,已发送到%2$@:" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "請輸入 %1$d 位數密碼,已傳送至 %2$@: " + } + } + } + }, + "example@icloud.com" : { + + }, + "Experiments" : { + "comment" : "Experiment Preference Pane", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experiments" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experimente" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experimentos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokeilut" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Expérimentations" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "परीक्षण" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sperimentale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "試験的な機能" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "실험실" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experimenten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksperymenty" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experiments" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Эксперименты" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deneyler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Експерименти" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "实验性功能" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "實驗" + } + } + } + }, + "FasterUnxip" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip més ràpid" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schnellerer Unxip" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Faster Unxip" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip más rápido" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nopeampi Unxip" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip Plus Rapide" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "तेज़ अनज़िप" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip veloce" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "高速な Unxip" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "더 빠른 Unxip" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Snellere Unxip" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Szybsze Unxip" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip mais rápido" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Быстрый Unxip" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Daha Hızlı Unxip" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Швидкий Unxip" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "更快的xip解压" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "更快的 Unxip" + } + } + } + }, + "FasterUnxipDescription" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gràcies a @_saagarjha, aquest experiment pot incrementar la velocitat de l'unxip en un 70% en alguns sistemes.\n\nMés informació sobre com s'aconsegueix pot ser consultada en el seu repositori - https://github.com/saagarjha/unxip" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dank an @_saagarjha, dieses Experiment kann die Unxipping-Geschwindigkeit bis zu 70% auf einigen Systemen beschleunigen.\n\nMehr Informationen wie dies erreicht wird sind über das Unxip-Repo erhältlich - https://github.com/saagarjha/unxip" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thanks to @_saagarjha, this experiment can increase unxipping speed by up to 70% for some systems.\n\nMore information on how this is accomplished can be seen on the unxip repo - https://github.com/saagarjha/unxip" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gracias a @_saagarjha, este experimento puede aumentar la velocidad de liberación hasta en un 70 % para algunos sistemas.\n\nPuede ver más información sobre cómo se logra esto en el repositorio de unxip: https://github.com/saagarjha/unxip" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "@_saagarjhan ansiosta tämä kokeilu voi nostaa purkamisnopeutta jopa 70 % joissakin järjestelmissä.\n\nLisätietoja siitä, miten tämä tehdään, on unxip-repossa - https://github.com/saagarjha/unxip" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Grâce à @_saagarjha, cette expérimentation peut augmenter jusqu'à 70% la vitesse de décompression pour certains systèmes.\n\nPour plus d'informations sur la façon dont cela est accompli, consultez le dépôt GitHub unxip - https://github.com/saagarjha/unxip" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "@_saagarjha के लिए धन्यवाद, यह प्रयोग कुछ प्रणालियों के लिए 70% तक की गति को बढ़ा सकता है।\n\nइसे कैसे पूरा किया जाता है, इस बारे में अधिक जानकारी अनएक्सआईपी रेपो पर देखी जा सकती है - https://github.com/saagarjha/unxip" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Grazie a @_saagarjha, questa versione sperimentale può incrementare la velocità di unxipping fino al 70% in certi sistemi.\n\nMaggiori informazioni su come questo è possibile sono disponibili nel repository unxip - https://github.com/saagarjha/unxip" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "@_saagarjha さんの方法で、一部のシステムで Unxip の速度が最大70%向上します。\n\n方法の詳細については、 unxipのリポジトリ (https://github.com/saagarjha/unxip)をご覧ください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "@_saagarjha님 덕분에 이 실험 기능을 이용하면 일부 시스템에서 압축 해제 속도를 최대 70%까지 향상시킬 수 있습니다.\n\n이를 수행하는 방법에 대한 자세한 내용은 unxip 저장소 (https://github.com/saagarjha/unxip)에서 확인할 수 있습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dankzij @_saagarjha, kan met dit experiment het uitpakken van Xcode tot 70% sneller gaan op sommige systemen.\n\nMeer informatie over hoe dit mogelijk wordt gemaakt kan worden gevonden op de unxip repo - https://github.com/saagarjha/unxip" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dzięki @_saagarjha, wersja eksperymentalna może zwiększyć prędkość rozpakowywania o nawet 70% dla niektórych systemów.\n\nWięcej informacji na temat tego, jak to jest osiągane, można znaleźć w repozytorium unxip - https://github.com/saagarjha/unxip" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Graças à @_saagarjha, esse experimento pode acelerar o unxip em até 70% para algum sistemas.\n\nMais informações sobre como isso ocorre pode ser encontrada no repositório do unxip - https://github.com/saagarjha/unxip" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Благодаря @_saagarjha этот эксперимент может увеличить скорость распаковки до 70% на некоторых системах.\n\nДополнительную информацию о том, как достигается такой результат, можно прочесть в репозитории unxip — https://github.com/saagarjha/unxip. " + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "@_saagarjha sayesinde bu deney bazı sistemlerde unxip sürecini %70'e kadar hızlandırabilir.\n\nBu işlemin nasıl yapıldığına dair ayrıntılara unxip repo .- https://github.com/saagarjha/unxip adresinden bakabilirsiniz" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завдяки @_saagarjha, цей експеримент може пришвидшити розпаковку майже на 70%. Подробиці про unxip тут – https://github.com/saagarjha/unxip" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "感谢@_saagarjha,此实验性功能可在部分系统上将xip解压速度提高70%。\n\n请从此仓库获取关于其实现细节的信息:https://github.com/saagarjha/unxip" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "感謝 @_saagarjha 的努力,這個試驗版本可以在某些系統上加快 70% 的解壓縮速度。\n\n更多關於這項成就是如何達成的資訊,請參閱 unxip 的 repo - https://github.com/saagarjha/unxip" + } + } + } + }, + "Filter" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtre" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filter" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtro" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suodata" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtre" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "फ़िल्टर" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "フィルタ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "필터" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filter" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtr" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtrar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Фильтр" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtre" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Фільтр" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "过滤" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "過濾" + } + } + } + }, + "FilterAvailableDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtrar versions disponibles" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verfügbare Versionen filtern" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filter available versions" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtrar versiones disponibles" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suodata saatavilla olevat versiot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtrer les versions disponibles" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपलब्ध संस्करणों को फ़िल्टर करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtra versioni disponibili" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "利用可能なバージョンのフィルタを適用する" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이용 가능한 버전만 보기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filter beschikbare versies" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtruj dostępne wersje" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtrar versões disponíveis" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отфильтровать доступные версии" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uygun sürümleri filtrele" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Фільтрувати доступні версії" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "过滤可用版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示可用的版本" + } + } + } + }, + "FilterInstalledDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtrar versions instal·lades" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installierte Versionen filtern" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filter installed versions" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtrar versiones instaladas" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suodata asennetut versiot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtrer les versions installées" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्थापित संस्करणों को फ़िल्टर करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtra versioni installate" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インストール済みバージョンのフィルタを適用する" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "설치한 버전만 보기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filter geïnstalleerde versies" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtruj zainstalowane wersje" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filtrar versões instaladas" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отфильтровать установленные версии" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yüklü sürümleri filtrele" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Фільтрувати встановлені версії" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "过滤已安装版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示已安裝的版本" + } + } + } + }, + "Finishing" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acabant" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abschließen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finishing" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finalizando" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viimeistellään" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finition" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "परिष्करण" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completando" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "終了しています" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "마무리하는 중" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finishing" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kończenie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finalizando" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завершение" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamamlanıyor" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завершення" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在完成" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "收尾中" + } + } + } + }, + "General" : { + "comment" : "General Preference Pane", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "General" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Allgemein" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "General" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yleisasetukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Général" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सामान्य" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Generale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "一般" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "일반" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algemeen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ogólne" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustes" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Общее" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Genel" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Основне" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "通用" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "一般" + } + } + } + }, + "GithubRepo" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repositori de GitHub" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub-Repo" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub Repo" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub Repositorio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub Repo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dépôt GitHub" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub रेपो" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub Repo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub 저장소" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub Repo" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repozytorium GitHub" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repositório GitHub" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Репозиторий GitHub" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub Repo" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub репозиторій" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub仓库" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub Repo" + } + } + } + }, + "HelperClient.error" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incapaç de comunicar-se amb el servei privilegiat." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kommunikation mit privilegiertem Helfer nicht möglich." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to communicate with privileged helper." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede comunicar con el Asistente privilegiado." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ei pysty kommunikoimaan etuoikeutetun avustajan kanssa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de communiquer avec l'assistant privilégié." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "विशेषाधिकार प्राप्त सहायक के साथ संवाद करने में असमर्थ।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non riesco a comunicare con l'aiutante privilegiato." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "権限のあるヘルパーと通信できません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "권한을 가진 도우미 (Privileged helper)와의 통신할 수 없습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan niet communiceren met de privileged helper." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można komunikować się z helperem z uprawnieniami." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível se comunicar com o ajudante." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно установить связь с привилегированным помощником." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yardımcı araç ile iletişim kurulamadı." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Помилка з'єднання з \"privileged helper\"." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法与提权帮助程序通信。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法與權限輔助程式溝通。" + } + } + } + }, + "HelperInstalled" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "El servei està instal·lat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helfer ist installiert" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helper is installed" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El Asistente está instalado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apulainen on asennettu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'assistant est installé" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सहायक स्थापित है" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aiutante è installato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インストール済み" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "도우미 설치됨" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helper is geïnstalleerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helper jest zainstalowany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajudante está instalado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Помощник установлен" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yardımcı yüklendi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helper встановлено" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "帮助程序已安装" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "輔助程式已安裝" + } + } + } + }, + "HelperNotInstalled" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "El servei no està instal·lat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helfer ist nicht installiert" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helper is not installed" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El Asistente no está instalado." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apulaista ei ole asennettu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'assistant n'est pas installé" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सहायक स्थापित नहीं है" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aiutante non è installato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "未インストール" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "도우미 설치되지 않음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helper is niet geïnstalleerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helper nie jest zainstalowany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajudante não está instalado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Помощник не установлен" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yardımcı yüklenmedi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helper не встановлено" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "帮助程序未安装" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "輔助程式尚未安裝" + } + } + } + }, + "Hidden" : { + + }, + "IdenticalBuilds" : { + "comment" : "Info Pane", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Builds idèntiques" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Identische Builds" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Identical Builds" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compilaciones Idénticas" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Identtiset rakenteet" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versions identiques" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Identical Builds" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Build Identiche" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ビルドの同一性" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "동일한 빌드" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Identieke Builds" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Takie same wersje" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Builds idênticos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Идентичные выпуски" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benzer Yapılar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ідентичні Білди" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "重复版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "相同的建置版本" + } + } + } + }, + "IdenticalBuilds.help" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "A vegades alguna versió provisional i algna versió definitiva son exactament iguals. L'Xcodes mostrarà automàticament aquestes versions conjuntament." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manchmal sind Prerelease- and Release-Version der exakt gleich Build. Xcodes zeigt diese beiden Versionen automatisch zusammen an." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sometimes a prerelease and release version are the exact same build. Xcodes will automatically display these versions together." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "A veces, una versión preliminar y una versión de lanzamiento tienen exactamente la misma compilación. Xcodes mostrará automáticamente estas versiones juntas." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Joskus esijulkaisu ja julkaisuversio ovat täsmälleen sama rakenne. Xcodes näyttää nämä versiot automaattisesti yhdessä." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parfois, la version préliminaire et la version finale sont exactement la même version. Xcodes affichera automatiquement ces versions ensemble." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कभी-कभी एक पूर्व-रिलीज़ और रिलीज़ संस्करण एक ही बिल्ड होते हैं। Xcodes स्वचालित रूप से इन संस्करणों को एक साथ प्रदर्शित करेगा।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "A volte una versione di prerelease e release sono esattamente la stessa build. Xcodes mostrerà automatiamente queste versioni assieme." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プレリリース版とリリース版が全く同じビルドであることがあります。Xcodesはこれらのバージョンを自動的に一緒に表示します。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "가끔 사전 출시 (prerelease) 버전과 출시 버전이 완전히 동일한 빌드인 경우가 있습니다. Xcodes는 자동으로 이 버전들을 함께 표시합니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Soms zijn een prerelease en release versie exact hetzelfde. Xcodes toont deze versies automatisch samen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czasami wersja przedpremierowa i wydana są dokładnie takie same. Xcodes automatycznie wyświetla te wersje razem." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "As vezes, uma versão pré-lançamento e uma versão de lançamento são exatemente o mesmo build. Xcodes mostrará essas versões juntas automaticamente." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Иногда предварительная и релизная версии представляют собой один и тот же выпуск. Xcodes автоматически отображает эти версии вместе." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : " Bazen prerelase ve release sürümleri aynı yapı üzerindedir. Xcodes bu sürümleri birarada gösterecektir." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Буває що prerelease та release насправді ідентичні (то й же Build). У такому разі Xcodes будуть показувати обидві версії разом" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "有时预发布版本会与正式版使用相同的Build号。Xcodes会自动将这些版本显示为一个。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "有時候預先發行版與正式版的建制版本號會相同,Xcodes 會自動將這些版本整理在一起。" + } + } + } + }, + "IncludePreRelease" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incloure versions provisionals/beta" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prerelease-/Beta-Versionen einschließen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Include prerelease/beta versions" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incluir versiones preliminares/beta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisällytä esijulkaisu/beta versiot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inclure les versions préliminaires/bêta" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पूर्व-रिलीज़/बीटा संस्करण शामिल करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Includi versioni prerelease/beta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プレリリース版 / ベータ版を含む" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사전 출시/베타 버전 포함" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prerelease/beta versies toestaan" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dołącz wersje beta/wstępne" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incluir versōes pré-lançamento/beta" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включить предварительные/бета-версии" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prerelease/beta sürümlerini dahil et" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Також встановлювати prerelease/beta версії" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "包含预发布/测试版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "包含預先發行及測試版" + } + } + } + }, + "Info" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informació" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Info" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Info" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tietoja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informations" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "जानकारी" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Info" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "情報" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "정보" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Info" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informacje" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informação" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Информация" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bilgi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Info" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "信息" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "資訊" + } + } + } + }, + "InfoDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar o ocultar el panell d'informació" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Info-Panel anzeigen oder verbergen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show or hide the info pane" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar u ocultar el panel de información" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Näytä tai piilota tietoruutu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afficher ou masquer le volet d'informations" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "जानकारी फलक दिखाएँ या छिपाएँ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostra o nascondi pannello informazioni" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "情報パネルの切り替え" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "정보창 표시 또는 숨기기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show or hide the info pane" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokaż lub ukryj okno informacji" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar ou esconder o painel de informações" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показать или скрыть информационную панель" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bilgi panelini göster ya da gizle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показати або сховати панель інформації" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "显示或隐藏信息面板" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示或隱藏資訊面板" + } + } + } + }, + "Install" : { + "comment" : "Common", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instal·lar" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installieren" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instalar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asenna" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installer" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्थापित करे" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インストール" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "설치" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installeren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zainstaluj" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instalar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Установить" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yükle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Встановити" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "安装" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "安裝" + } + } + } + }, + "INSTALL" : { + + }, + "InstallationError.CodesignVerifyFailed" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'Xcode descarregat ha fallat en la verificació de la signatura de seguretat amb el següent missatge:\n%@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die heruntergeladene Version von Xcode hat die Code-Signing-Prüfung nicht bestanden, mit folgendem Hinweis:\n%@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The downloaded Xcode failed code signing verification with the following output:\n%@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El Xcode descargado falló en la verificación de firma de código con el siguiente resultado:\n%@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ladattu Xcode versio epäonnistui koodin allekirjoitusvahvistuksessa seuraavalla lähdöllä:\n%@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La vérification de signature de code du Xcode téléchargé a échoué avec le résultat suivant :\n%@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "डाउनलोड किया गया Xcode निम्नलिखित आउटपुट के साथ कोड हस्ताक्षर सत्यापन में विफल रहा:\n%@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode scaricato ha fallito le verifiche di firma con il seguente errore:\n%@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロードしたXcodeは、以下の出力で署名の検証に失敗しました。\n%@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드한 Xcode가 다음과 같이 코드 서명 확인에 실패했습니다.\n%@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De gedownloade Xcode is mislukt voor verificatie van code-ondertekening met de volgende melding:\n%@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pobrany Xcode nie przeszedł weryfikacji sygnatury kodu z wynikiem:\n%@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O Xcode baixado falhou a verificação de assinatura de código (code signing) com a seguinte saída:\n%@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Загруженный Xcode не прошел проверку подписи сертификата со следующим выводом:\n%@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndirilmiş Xcode imza onayı işleminde şu hatayı verdi:\n%@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Викачаний Xcode не зміг пройти перевірку коду підпису (code signing verification) з наступним повідомленням:\n%@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法验证下载的Xcode版本的代码签名,并输出如下:\n%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下載的 Xcode 由於以下原因無法驗證 Codesign 簽章\n%@" + } + } + } + }, + "InstallationError.DamagedXIP" : { + "comment" : "InstallationErrors", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'arxiu \"%@\" està malmès i no es pot expandir." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das Archiv \"%@\" ist beschädigt und kann nicht entpackt werden." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The archive \"%@\" is damaged and can't be expanded." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El archivo \"%@\" está dañado y no se puede expandir." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arkisto \"%@\" on vaurioitunut, eikä sitä voi laajentaa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'archive \"%@\" est endommagée et ne peut pas être décompressée." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "संग्रह \"%@\" क्षतिग्रस्त है और इसे विस्तारित नहीं किया जा सकता है।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'archivio \"%@\" è danneggiato e non può essere espanso." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このアーカイブ \"%@\" は破損していて展開できません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아카이브 \"%@\"이(가) 손상되어 확장할 수 없습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Het archief \"%@\" is beschadigd en kan niet worden uitgepakt." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Archiwum \"%@\" jest uszkodzone i nie może zostać rozpakowane." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O arquivamento \"%@\" está danificado e não pode ser expandido." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Архив \"%@\" поврежден и не может быть расширен." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "\"%@\" arşivi hasar görmüş ve açılamıyor." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Архів \"%@\" пошкожено і не можливо розпакувати." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "此压缩文件“%@”已损坏且无法解压。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "壓縮檔 \"%@\" 已經損壞並無法解壓縮。" + } + } + } + }, + "InstallationError.FailedSecurityAssessment" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'Xcode %@ ha fallat l'avaluació de seguretat amb el següent missatge:\n%@\nEs manté instal·lat a %@ Si desitges continuar de totes maneres." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Sicherheitsprüfung für Xcode %@ ist mit folgender Meldung gescheitert:\n%@\nXcode bleibt unter %@ installiert, für den Fall, dass es dennoch verwendet werden soll." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ failed its security assessment with the following output:\n%@\nIt remains installed at %@ if you wish to use it anyways." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ falló su evaluación de seguridad con el siguiente resultado:\n%@\nPermanece instalado en %@ si desea usarlo de todos modos." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode versio %@ epäonnistui turvallisuusarvioinnissaan seuraavalla lähdöllä:\n%@\nSe pysyy asennettuna osoitteeseen %@, jos haluat käyttää sitä joka tapauksessa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ a échoué à son évaluation de sécurité avec le résultat suivant :\n%@\nXcode reste installé à %@ si vous souhaitez l'utiliser quand même." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ निम्नलिखित आउटपुट के साथ अपने सुरक्षा मूल्यांकन में विफल रहा:\n%@\nयदि आप किसी भी तरह इसका उपयोग करना चाहते हैं तो यह %@ पर स्थापित रहता है।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ ha fallito i check di sicurezza con il seguente errore:\n%@\nRimane installato in %@ se vuoi usarlo comunque." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ は、以下の出力でセキュリティ評価に失敗しました。\n%@\nそれでも使用したい場合は、%@にインストールされたままになっています。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@이(가) 다음과 같이 보안 평가에 실패했습니다.\n%@\n그래도 사용하려는 경우 %@에 설치된 상태로 유지됩니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De Xcode %@ veiligheidsbeoordeling was onsuccesvol en gaf de volgende melding:\n%@\nXcode blijft geïnstalleerd op %@ als je deze toch wilt gebruiken." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ nie przeszedł testu bezpieczeństwa z następującym wynikiem:\n%@\nPozostaje zainstalowany w %@, jeśli mimo to chcesz go używać." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ falhou suas checagens de segurança com a seguinte saída:\n%@\nAinda está instalado em %@ se você deseja usar ainda assim." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ не прошел оценку безопасности со следующим выводом:\n%@\nОн остается установленным в %@, если вы все равно хотите его использовать." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ güvenlik görevlerini gerçekleştirirken şu hatayı verdi:\n%@\nYine de devam etmek isterseniz uygulama %@ konumunda bulunmaya devam ediyor." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode провалив перевірку безпеки (security assessment) з наступним повідомленням:\n%@\nВін залишиться установлений в %@ якщо ви все ж наважитесь його використовувати." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@无法完成安全评估,并输出如下:\n%@\n但它依然被安装到了%@如果您依然想使用它的话。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "由於以下原因無法安全驗證 Xcode %@:\n%@\n如果你執意使用,該版本仍然安裝於 %@。" + } + } + } + }, + "InstallationError.FailedToMoveXcodeToApplications" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "No s'ha pogut moure l'Xcode al directori %@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das Bewegen von Xcode in das %@-Verzeichnis ist nicht möglich." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Failed to move Xcode to the %@ directory." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se pudo mover Xcode al directorio %@." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcoden siirtäminen hakemistoon %@ epäonnistui." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de déplacer Xcode vers le répertoire %@." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode को %@ निर्देशिका में ले जाने में विफल।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non sono riuscito a spostare Xcode nella directory %@ ." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode を %@ に移動できませんでした。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode를 %@ 디렉토리로 이동하지 못했습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Het is mislukt om Xcode te verplaatsen naar de %@ map." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie udało się przenieść Xcode do katalogu %@." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falha ao mover Xcode para o diretório: %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не удалось переместить Xcode в директорию %@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ klasörüne taşınamadı." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Помилка при переміщенні Xcode в %@." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法将Xcode移动到目录%@。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法將 Xcode 移動至 %@ 目錄。" + } + } + } + }, + "InstallationError.InvalidVersion" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ no és un número de versió vàlid." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ist keine gültige Versionsnummer." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is not a valid version number." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ no es un número de versión válido." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ei ole kelvollinen versionumero." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ n'est pas un numéro de version valide." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ मान्य संस्करण संख्या नहीं है।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ non è una versione valida." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ は有効なバージョン番号ではありません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@은(는) 유효한 버전 번호가 아닙니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is geen geldig versie nummer." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ nie jest prawidłowym numerem wersji." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ não é uma versão válida." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ не является допустимым номером версии." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ geçerli bir sürüm numarası değil." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ не є вірним номером версії." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@不是一个正确的版本。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 不是個正確的版本號碼。" + } + } + } + }, + "InstallationError.MissingSudoerPassword" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falta la contrassenya. Si us plau, torna-ho a intentar." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort fehlt. Bitte erneut versuchen." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Missing password. Please try again." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falta la contraseña. Inténtalo de nuevo." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salasana puuttuu. Yritä uudelleen." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mot de passe manquant. Veuillez réessayer." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड अनुपलब्ध है। कृपया पुन: प्रयास करें।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manca la password. Prova di nuovo." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードが見つかりません。もう一度お試しください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호가 입력되지 않았습니다. 다시 시도해 주세요." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wachtwoord ontbreekt. Probeer het opnieuw." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak hasła. Spróbuj ponownie." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Faltando senha. Por favor, tente novamente." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отсутствует пароль. Повторите попытку." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksik şifre. Lütfen tekrar deneyin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не вистачає sudo паролю. Спробуйте ще раз." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "缺少密码。请再试一次。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到密碼,請再試一次。" + } + } + } + }, + "InstallationError.MissingUsernameOrPassword" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falta l'usuari o la contrassenya. Si us plau, torna-ho a intentar." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benutzername oder ein Passwort fehlt. Bitte erneut versuchen." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Missing username or a password. Please try again." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falta el nombre de usuario o una contraseña. Inténtalo de nuevo." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Käyttäjätunnus tai salasana puuttuu. Yritä uudelleen." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom d'utilisateur ou mot de passe manquant. Veuillez réessayer." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपयोगकर्ता नाम या पासवर्ड गुम है। कृपया पुन: प्रयास करें।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mancano username o password. Prova di nuovo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ユーザ名またはパスワードが見つかりません。もう一度お試しください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용자 이름 또는 비밀번호가 입력되지 않았습니다. 다시 시도해 주세요." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ontbrekende gebruikersnaam of wachtwoord. Probeer het opnieuw." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak nazwy użytkownika lub hasła. Spróbuj ponownie." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Faltando usuário ou senha. Por favor, tente novamente." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отсутствует имя пользователя или пароль. Пожалуйста, попробуйте еще раз." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksik kullanıcı adı veya şifre. Lütfen tekrar deneyin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не вистачає юзернейму чи паролю. Спробуйте ще раз." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "缺少用户名或密码。请再试一次。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到使用者名稱或是密碼,請再試一次。" + } + } + } + }, + "InstallationError.NoNonPrereleaseVersionAvailable" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cap versió que no sigui provisional disponible." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Nicht-Prerelease-Versionen verfügbar." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No non-prerelease versions available." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hay versiones que no sean preliminares disponibles." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Julkaisua edeltäviä versioita ei ole saatavilla." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune version non préliminaire disponible." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोई गैर-पूर्व-रिलीज़ संस्करण उपलब्ध नहीं है।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non sono disponibili versioni non-prerelease." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プレリリース以外の利用可能なバージョンがありません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사전 출시 버전 이외에 사용 가능한 버전이 없습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen niet-prerelease versies beschikbaar." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak wersji nie-przedpremierowych." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhuma versão não-pré-lançamento disponível." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нет доступных не предварительных версий." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prerelease olmayan sürümler yok." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Немає доступних релізних версій." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有非预发布版以外的其他可用版本。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "目前沒有可用的非預先發行版本。" + } + } + } + }, + "InstallationError.NoPrereleaseVersionAvailable" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cap versió provisional disponible." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Prerelease-Versions verfügbar." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No prerelease versions available." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hay versiones preliminares disponibles." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esijulkaisuversioita ei saatavilla." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune version préliminaire disponible." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोई पूर्व-रिलीज़ संस्करण उपलब्ध नहीं है।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non sono disponibili versioni prerelease." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "利用可能なプレリリースバージョンがありません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용 가능한 사전 출시 버전이 없습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen prerelease versies beschikbaar." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak wersji przedpremierowych." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhuma versão de pré-lançamento disponível." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Предварительные версии недоступны." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prerelease sürümleri yok." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Немає доступного пререлізу." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有可用的预发布版本。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "目前沒有可用的預先發行版本。" + } + } + } + }, + "InstallationError.NotEnoughFreeSpaceToExpandArchive" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'arxiu \"%@\" no es pot expandir perquè el volum actual no té suficient espai lliure.\n\nAllibera més espai disponible per a poder expandir l'arxiu i llavors torna a instal·lar l'Xcode %@ des d'on ho havia deixat." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das Archiv \"%@\" kann nicht entpackt werden, da auf dem aktuellen Volume nicht genügend freier Speicherplatz verfügbar ist.\n\nBitte stelle mehr Platz zur Verfügung, um das Archiv zu entpacken und installiere danach Xcode %@ erneut, um die Installation von dort zu beginnen wo sie beendet wurde." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The archive \"%@\" can’t be expanded because the current volume doesn’t have enough free space.\n\nMake more space available to expand the archive and then install Xcode %@ again to start installation from where it left off." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El archivo \"%@\" no se puede expandir porque el volumen/disco actual no tiene suficiente espacio libre.\n\nHaga más espacio disponible para expandir el archivo y luego instale Xcode %@ nuevamente para comenzar la instalación desde donde lo dejó." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arkistoa \"%@\" ei voi laajentaa, koska nykyisessä taltiossa ei ole tarpeeksi vapaata tilaa.\n\nAnna lisää tilaa arkiston laajentamiseksi ja asenna sitten Xcode versio %@ uudelleen aloittaaksesi asennuksen siitä, mihin se jäi." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'archive \"%@\" ne peut pas être décompressée car le volume actuel n'a pas assez d'espace libre.\n\nLibérez plus d'espace pour décompresser l'archive, puis réinstallez Xcode %@ pour démarrer l'installation là où elle s'est arrêtée." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "संग्रह \"%@\" का विस्तार नहीं किया जा सकता क्योंकि वर्तमान वॉल्यूम में पर्याप्त रिक्त स्थान नहीं है.\n\nसंग्रह का विस्तार करने के लिए अधिक स्थान उपलब्ध कराएं और फिर Xcode %@ को फिर से स्थापित करें ताकि स्थापना वहीं से शुरू की जा सके जहां से इसे छोड़ा था।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'archivio \"%@\" non può essere espanso perché non c'è abbastanza spazio libero nel volume.\n\nAumenta lo spazio disponibile per poter espandere l'archivio e poi installa Xcode %@ nuovamente per riprendere da dove era arrivato." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このボリュームの空き容量が不足しているため、アーカイブ \"%@\" を展開できません。\n\n空き容量を増やしてから Xcode %@ のインストールをもう一度お試しください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "현재 볼륨에 여유 공간이 충분하지 않기 때문에 아카이브 \"%@\"을(를) 확장할 수 없습니다.\n\n아카이브를 확장하기 위해 더 많은 공간을 확보한 다음 Xcode %@을(를) 다시 설치하여 중단된 위치에서 설치를 시작하세요." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Het archief \"%@\" kan niet worden uitgepakt omdat het huidige volume niet voldoende vrije schijf ruimte heeft.\n\nMaak meer ruimte beschikbaar om het archief uit te pakken en installeer dan Xcode %@ opnieuw om de installatie voort te zetten." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można rozpakować archiwum \"%@\", ponieważ wolumin nie ma wystarczającej ilości wolnego miejsca.\n\nZrób więcej miejsca, aby rozpakować archiwum, a następnie zainstaluj ponownie Xcode %@, aby kontynuować instalację od miejsca, w którym została wstrzymana." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O arquivamento \"%@\" não pode ser expandido porquê o volume atual não possui espaço disponível o suficiente.\n\nLibere espaço para expandir o arquivamento e então instale o Xcode %@ novamente para iniciar uma instalação de onde você parou." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Архив \"%@\" не может быть расширен, поскольку в текущем жестком диске недостаточно свободного места.\n\nОсвободите больше места для расширения архива, а затем снова установите Xcode %@, чтобы начать установку с того места, где он остановился." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "\"%@\" arşivi açılamıyor çünkü diskte yeterli alan bulunmuyor.\n\nArşivi açmak için daha fazla alan aç ve ondan sonra kaldığın yerden devam ederek Xcode %@ sürümünü tekrar kur." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Архів \"%@\" не можливо розпакувати, так як бракує місця.\n\nПочистіть файлове сховище щоб вистачило місця на розпаковку Архіву, та спробуйте встановити Xcode %@ знову." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "此压缩文件“%@”无法解压因为当前宗卷没有足够的可用空间。\n\n请空出更多空间并再次安装Xcode %@以从失败处继续。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "壓縮檔 \"%@\" 由於缺乏足夠的磁碟空間,無法解壓縮。\n\n請清空更多磁碟空間以確保可以解壓縮該檔案,然後再重新安裝 Xcode %@ 一次。安裝步驟將會從上次停住的地方繼續。" + } + } + } + }, + "InstallationError.PostInstallStepsNotPerformed.Installed" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'instal·lació ha finalitzat, però algunes tasques post instal·lació no s'han executat de manera automàtica. S'executaran la primera vegada que obris l'Xcode %@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Installation ist abgeschlossen, allerdings wurden einige Post-Installationsschritte nicht automatisch ausgeführt. Diese werden beim ersten Start von Xcode %@ ausgeführt." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installation was completed, but some post-install steps weren't performed automatically. These will be performed when you first launch Xcode %@." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La instalación se completó, pero algunos pasos posteriores a la instalación no se realizaron automáticamente. Estos se realizarán cuando inicie Xcode por primera vez %@." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asennus valmistui, mutta joitain asennuksen jälkeisiä vaiheita ei suoritettu automaattisesti. Nämä suoritetaan, kun käynnistät Xcoden version %@." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'installation est terminée, mais certaines étapes de post-installation n'ont pas été effectuées automatiquement. Celles-ci seront exécutées lors du premier lancement de Xcode %@." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्थापना पूर्ण हो गई थी, लेकिन कुछ पोस्ट-इंस्टॉलेशन चरण स्वचालित रूप से निष्पादित नहीं किए गए थे। ये तब किए जाएंगे जब आप पहली बार Xcode %@ लॉन्च करेंगे।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'installazione è completata, ma alcuni comandi di post installazione non sono partiti automaticamente. Verranno lanciati quando aprirai Xcode %@ per la prima volta." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インストールは完了しましたが、いくつかのインストール後のタスクが自動的に実行されませんでした。このタスクは Xcode %@ を初回起動した際に実行されます。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "설치가 완료되었지만 일부 설치 후 단계가 자동으로 수행되지 않았습니다. 이는 Xcode %@를 처음 실행할 때 수행됩니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De installatie is voltooid, maar sommige post-installatie taken zijn niet uitgevoerd. Deze taken zullen worden uitgevoerd wanneer je Xcode %@ voor het eerst start." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instalacja została zakończona, ale niektóre kroki po instalacji nie zostały wykonane automatycznie. Zostaną one wykonane przy pierwszym uruchomieniu Xcode %@." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "A instalação foi completada, mas alguns passos de pós-instalação não puderam ser performados automaticamente. Estes serão performados quando você rodar o Xcode %@ pela primeira vez." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Установка завершена, но некоторые шаги после установки не были выполнены автоматически. Они будут выполнены при первом запуске Xcode %@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndirme tamamlandı, fakat bazı indirme sonrası aşamaları tamamlanamadı. Bunlar Xcode %@ uygulamasını ilk açtığınızda gerçekleşecek." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Установку завершено. Але деякі post-install кроки не виконано автоматично. Ці кроки буде виконано коли ви вперше запустите Xcode %@." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "安装已完成,但一些前置步骤没有被自动执行。它们将会在您第一次运行Xcode %@时执行。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "安裝已經完成,但有些安裝後步驟沒有自動執行。這些步驟在你第一次啟動 Xcode %@ 的時候會自動執行。" + } + } + } + }, + "InstallationError.PostInstallStepsNotPerformed.NotInstalled" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'instal·lació ha finalitzat, però algunes tasques post instal·lació no s'han executat de manera automàtica. L'Xcodes executa aquestes tasques amb el servei privilegiat, que sembla que no està instal·lat. El pots instal·lar des de les Preferències > Avançat.\n\nAquestes tasques s'executaran la primera vegada que obris l'Xcode %@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Installation ist abgeschlossen, allerdings wurden einige Post-Installationsschritte nicht automatisch ausgeführt. Xcodes führt diese Schritte mittels eines privilegierten Helfers aus, welcher aber nicht installiert zu sein scheint. Er kann über Einstellungen > Erweitert installiert werden. Diese Schritte werden beim ersten Start von Xcode %@ ausgeführt." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installation was completed, but some post-install steps weren't performed automatically. Xcodes performs these steps with a privileged helper, which appears to not be installed. You can install it from Preferences > Advanced.\n\nThese steps will be performed when you first launch Xcode %@." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La instalación se completó, pero algunos pasos posteriores a la instalación no se realizaron automáticamente. Xcodes realiza estos pasos con un asistente privilegiado, que parece no estar instalado. Puede instalarlo desde Preferencias > Avanzado.\n\nEstos pasos se realizarán cuando inicie Xcode por primera vez %@." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asennus valmistui, mutta joitain asennuksen jälkeisiä vaiheita ei suoritettu automaattisesti. Xcodes suorittaa nämä vaiheet etuoikeutetulla avustajalla, jota ei näytä olevan asennettuna. Voit asentaa sen kohdasta Asetukset > Lisäasetukset.\n\nNämä vaiheet suoritetaan, kun käynnistät Xcode version %@ ensimmäisen kerran.." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'installation est terminée, mais certaines étapes de post-installation n'ont pas été effectuées automatiquement. Xcodes effectue ces étapes avec un assistant privilégié, qui ne semble pas être installé. Vous pouvez l'installer depuis Préférences > Avancé.\n\nCes étapes seront effectuées lors du premier lancement de Xcode %@." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्थापना पूर्ण हो गई थी, लेकिन कुछ पोस्ट-इंस्टॉलेशन चरण स्वचालित रूप से निष्पादित नहीं किए गए थे। Xcodes इन चरणों को एक विशेषाधिकार प्राप्त सहायक के साथ निष्पादित करता है, जो स्थापित नहीं प्रतीत होता है। आप इसे Preferences > Advanced(वरीयताएँ> उन्नत) से स्थापित कर सकते हैं।\n\nजब आप पहली बार Xcode %@ लॉन्च करेंगे तो ये चरण निष्पादित किए जाएंगे।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'installazione è completata, ma alcuni comandi di post installazione non sono partiti automaticamente. Xcodes lancia questi comandi con un aiutante privilegiato, che sembra non essere installato. Puoi instlalarlo da Preferenze > Avanzate.\n\nVerranno lanciati quando aprirai Xcode %@ per la prima volta." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インストールは完了しましたが、いくつかのインストール後作業が自動的に実行されませんでした。Xcodes は権限のあるヘルパーを使ってタスクを実行しますが、ヘルパーがインストールされていません。環境設定 > 上級者向け でインストールできます。\n\nこのタスクは Xcode %@ を初回起動した際に実行されます。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "설치가 완료되었지만 일부 설치 후 단계가 자동으로 수행되지 않았습니다. Xcodes는 설치되지 않은 것으로 보이는 권한을 가진 도우미 (Privileged helper)를 사용하여 이러한 단계를 수행합니다. 권한을 가진 도우미는 환경설정 > 고급에서 설치할 수 있습니다.\n\n이 단계는 Xcode %@를 처음 실행할 때 수행됩니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De installatie is voltooid, maar sommige post-installatie taken zijn niet uitgevoerd. Xcodes voert deze taken uit door middel van de privileged helper, maar deze lijkt niet te zijn geïnstalleerd. Je kunt deze installeren vanaf Voorkeuren > Geavanceerd.\n\nDeze taken zullen worden uitgevoerd wanneer je Xcode %@ voor het eerst start." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instalacja została zakończona, ale niektóre kroki po instalacji nie zostały wykonane automatycznie. Xcodes wykonuje te kroki z pomocą helpera z uprawnieniami, który nie jest zainstalowany. Możesz go zainstalować w Ustawienia > Zaawansowane.\n\nTe kroki zostaną wykonane przy pierwszym uruchomieniu Xcode %@." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "A instalação foi completada, mas alguns passos de pós-instalação não puderam ser performados automaticamente. Xcodes performa estes passos com o ajudante privilegiado, que aparentemente não está instalado. Você pode instalá-lo em Preferências > Avançado.\n\nEstes passos serão performados quando você rodar o Xcode %@ pela primeira vez." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Установка была завершена, но некоторые шаги после установки не были выполнены автоматически. Xcodes выполняет эти шаги с привилегированным помощником, который, похоже, не установлен. Вы можете установить его из Настройки > Дополнительно.\n\nЭти шаги будут выполнены при первом запуске Xcode %@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndirme tamamlandı, fakat bazı indirme sonrası aşamaları otomatik tamamlanamadı. Xcodes bu aşamaları bir ayrıcalıklı yardımcı aracı ile gerçekleştirir, ama bu araç yüklenmemiş gözüküyor. Yüklemek için Tercihler > Gelişmiş yolunu kullanabilirsiniz. \n\nBunlar Xcode %@ uygulamasını ilk açtığınızda gerçekleşecek." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Установку завершено. Але деякі post-install кроки не виконано автоматично. Xcodes виконує цю роботу за допомогою \"privileged helper\", який схоже що не встановлено. Ви можете встановити його за доромогою Налаштування > Додатково.\n\nЦі кроки буде виконано коли ви вперше запустите Xcode %@." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "安装已完成,但一些前置步骤没有被自动执行。Xcodes使用一个提权帮助程序来执行这些步骤,但帮助程序似乎没有被安装。您可以从 偏好设置 > 高级 中安装。\n\n这些步骤将会在您第一次运行Xcode %@时执行。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "安裝已經完成,但有些安裝後步驟沒有自動執行。 Xcodes 需要權限輔助程式來執行這些步驟,但該程式尚未被安裝。你可以在 偏好設定 > 進階中安裝它。\n\n這些步驟在你第一次啟動 Xcode %@ 的時候會自動執行。" + } + } + } + }, + "InstallationError.UnavailableVersion" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "No s'ha trobat la versió %@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kann Version %@ nicht finden." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Could not find version %@." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se pudo encontrar la versión %@." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versiota %@ ei löytynyt." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de trouver la version %@." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "संस्करण %@ नहीं मिल सका।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non trovo la versione %@." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "バージョン %@ が見つかりません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 버전을 찾을 수 없습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan versie %@ niet vinden." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można znaleźć wersji %@." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível encontrar versão %@." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не удалось найти версию %@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ sürümü bulunamadı." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не можу знайти версію %@." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法找到版本%@。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到版本 %@。" + } + } + } + }, + "InstallationError.UnexpectedCodeSigningIdentity" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "The downloaded Xcode doesn't have the expected code signing identity.\nGot:\n%@\n%@\nExpected:\n%@\n%@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die heruntergeladene Version von Xcode hat nicht die erwartete Code-Signing-Identity.\nErhalten:\n%@\n%@\nErwartet:\n%@\n%@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The downloaded Xcode doesn't have the expected code signing identity.\nGot:\n%@\n%@\nExpected:\n%@\n%@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El Xcode descargado no tiene la identidad de firma de código esperada.\nObtuvo:\n%@\n%@\nEsperado:\n%@\n%@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ladatulla Xcodella ei ole odotettua koodin allekirjoitusidentiteettiä.\nSaatu:\n%@\n%@\nOletettu:\n%@\n%@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le Xcode téléchargé n'a pas l'identité de signature de code attendue.\nReçue :\n%@\n%@\nAttendue :\n%@\n%@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "डाउनलोड किए गए Xcode में अपेक्षित कोड हस्ताक्षर पहचान नहीं है।\nमिला:\n%@\n%@अपेक्षित:\n%@\n%@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode scaricato non ha l'identità di firma corretta.\nGot:\n%@\n%@Ci aspettiamo:\n%@\n%@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロードしたXcodeに想定された署名IDがありません。\nGot:\n%@\n%@\nExpected:\n%@\n%@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드한 Xcode에 예상된 코드 서명 ID가 없습니다.\n받은 값:\n%@\n%@\n예상된 값:\n%@\n%@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De gedownloade Xcode heeft niet de verwachte code-ondertekeningsidentiteit.\nVerkregen:\n%@\n%@\nVerwacht:\n%@\n%@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pobrany Xcode nie ma oczekiwanej sygnatury kodu.\nOtrzymano:\n%@\n%@\nOczekiwano:\n%@\n%@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O Xcode baixado não possui a identidade de assinatura de código esperada.\nPossui:\n%@\n%@\nEsperada:\n%@\n%@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Загруженный Xcode не имеет ожидаемого идентификатора подписи сертификата.\nПолучено:\n%@\n%@\nОжидается:\n%@\n%@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndirilmiş Xcode beklenilen imza kimliğine sahip değil.\nEldeki:\n%@\n%@\nBeklenen:\n%@\n%@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Викачаний Xcode має неочікуваний код підпису (code signing identity).\nМає:\n%@\n%@\nОчікується:\n%@\n%@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "下载的Xcode版本不包含期望的代码签名身份。\n读取到:\n%@\n%@\n期望是:\n%@\n%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下載的 Xcode 含有未預期的簽章。\n簽章人:\n%@\n%@\n預期的簽章人:\n%@\n%@" + } + } + } + }, + "InstallationError.UnsupportedFileFormat" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'Xcodes no soporta (encara) instal·lar l'Xcode amb el format %@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes unterstützt (bislang) nicht die Installation von Xcode per %@-Dateiformat." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes doesn't (yet) support installing Xcode from the %@ file format." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes no admite (todavía) la instalación de Xcode desde el formato de archivo %@." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes ei (vielä) tue Xcoden asentamista %@ tiedostomuodosta." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes ne supporte pas (encore) l'installation de Xcode à partir du format de fichier %@." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes (अभी तक) % @ फ़ाइल स्वरूप से Xcode स्थापित करने का समर्थन नहीं करता है।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes non supporta (per ora) l'installazione di Xcode dal formato %@ ." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes は %@ 形式でのインストールには(まだ)対応していません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes는 (아직) %@ 파일 형식에서 Xcode 설치를 지원하지 않습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes heeft (nog) geen ondersteuning om Xcode te installeren vanaf het %@ bestandsformaat." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes nie obsługuje (jeszcze) instalowania Xcode z formatu %@." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes (ainda) não suporta instalação de Xcode no formato de arquivo %@." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes (пока) не поддерживает установку Xcode из формата файла %@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes henüz Xcodu %@ dosya formatında yüklemeye (henüz) izin vermiyor." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode (поки що) не підтримує свою установку у %@ форматі." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes尚未支持从%@格式安装。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes 目前尚未支援由 %@ 檔案格式安裝 Xcode。" + } + } + } + }, + "InstallationError.VersionAlreadyInstalled" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ja està instal·lada a %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ist bereits installiert unter %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is already installed at %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ya está instalado en %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ on jo asennettu osoitteeseen %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ est déjà installé à %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ पहले से ही %@ पर संस्थापित है" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ è già installato in %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ は既に %@ にインストールされています。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@은(는) 이미 %@에 설치되어 있습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is al geïnstalleerd op %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ jest już zainstalowany w %@." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ já está instalada em %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ уже установлен в %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ zaten %@ konumunda yüklü." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ вже встановлено в %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@已经被安装到%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 已經安裝於 %@" + } + } + } + }, + "InstallationError.VersionNotInstalled" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ no està instal·lada." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ist nicht installiert." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is not installed." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ no esta instalada." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ei ole asennettu." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ n'est pas installé." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ स्थापित नहीं किया गया।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ non è installato." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ がインストールされていません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@이(가) 설치되지 않았습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is niet geïnstalleerd." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ nie jest zainstalowany." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ não está instalada." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ не установлен." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ yüklenmedi." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ не встановлено." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@没有被安装。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 沒有被安裝。" + } + } + } + }, + "InstallationStepDescription" : { + "comment" : "So if changing order, make sure the positional specficier is retained. ex: \"%3$@: Step %1$d of %2$d\"", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pas %1$d de %2$d: %3$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schritt %1$d von %2$d: %3$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Step %1$d of %2$d: %3$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paso %1$d de %2$d: %3$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaihe %1$d / %2$d: %3$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Étape %1$d sur %2$d : %3$@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$d का स्टेप %1$d: %3$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passo %1$d di %2$d: %3$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ステップ %1$d / %2$d: %3$@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$d / %2$d 단계: %3$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stap %1$d van %2$d: %3$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Krok %1$d z %2$d: %3$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passo %1$d de %2$d: %3$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Шаг %1$d из %2$d: %3$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adım %1$d/%2$d: %3$@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Крок %1$d з %2$d: %3$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "第%1$d步,共%2$d步:%3$@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "步驟 %1$d 之 %2$d:%3$@" + } + } + } + }, + "InstallDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instal·lar aquesta versió" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese Version installieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Install this version" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instalar esta versión" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asenna tämä versio" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installer cette version" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "इस संस्करण को स्थापित करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installa questa versione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このバージョンをインストール" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 버전 설치하기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installeer deze versie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zainstaluj tę wersję" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instalar esta versão" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Установить эту версию" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu sürümü indir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Встановити цю версію" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "安装此版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "安裝這個版本" + } + } + } + }, + "InstallDirectory" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Directori d'instal·lació" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installationsverzeichnis" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Install Directory" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Directorio de instalación" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インストール先" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installatie Map" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Katalog instalacji" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Путь для установки" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yükleme Klasörü" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "安装目录" + } + } + } + }, + "InstallHelper" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instal·lar el servei" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helfer installieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Install helper" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instalar Asistente" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asenna apulainen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installer l'assistant'" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सहायक स्थापित करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installa aiutante" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ヘルパーのインストール" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "도우미 설치" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installeer helper" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zainstaluj helpera" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instalar ajudante" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Установить помощника" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yardımcıyı yükle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Встановити Install helper" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "安装帮助程序" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "安裝輔助程式" + } + } + } + }, + "InstallPathDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'Xcodes busca i instal·la en un sol directori. Per defecte (recomanat) utilitza la carpeta /Applications. Qualsevol canvi d'aquest directory pot provocar que altres aplicatius/serveis deixin de funcionar." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes sucht and installiert in ein einzelnes Verzeichnis. Standard (und empfohlen beizubehalten) ist /Programme. Änderungen am Speicherort von Xcode können dazu führen, dass andere Apps/Dienste aufhören zu funktionieren. " + } + }, + "en" : { + "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. " + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodesは1つのディレクトリを検索し、そこにインストールします。デフォルト (推奨) は /Applications です。Xcodeの格納場所を変更すると、他のアプリケーションやサービスが動作しなくなる可能性があります。" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes zoekt en installeert naar een enkele map. Standaard (en aanbevolen) is om dit in te stellen op /Applications. Wijzigingen die gemaakt worden in waar Xcode is opgeslagen kan resulteren in niet werkende apps/services. " + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes wyszukuje i instaluje w jednym katalogu. Domyślnie (i zalecane) jest to /Applications. Wszelkie zmiany w miejscu przechowywania Xcode mogą spowodować, że inne aplikacje/usługi przestaną działać." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes использует единый путь для поиска и установки выпусков Xcode. По умолчанию, рекомендуется оставить /Applications. Любые изменения в то, где находится Xcode, могут привести к тому, что другие приложения/сервисы могут перестать работать. " + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes bir klasörü arayıp oraya yükler. Varsayılan(ve önerilen) yöntem /Uygulamalar klasöründe tutmaktır. Xcode'un bulunduğu ortamdaki herhangi bir değişiklik başka bir uygulamanın/servisin çalışmasını durdurabilir." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes会在一个目录中检索及安装。默认(推荐)保持/Applications。任何对Xcode存储位置的变更都可能会导致其他App或服务停止工作。" + } + } + } + }, + "LastChecked" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Última consulta: %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Letzte Prüfung: %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Last checked: %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Última comprobación: %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viimeksi tarkistettu: %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dernière vérification : %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पिछली बार चेक किया गया: %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultimo controllo: %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "前回の確認: %@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "마지막 확인 시점: %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laatste controle: %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ostatnio sprawdzono: %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultima vez verificado: %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Последняя проверка: %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Son kontrol: %@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перевірено в останнє: %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "上次检查时间:%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "上一次檢查: %@" + } + } + } + }, + "License" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Llicència" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lizenz" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Licencia" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisenssi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Licence" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "लाइसेंस" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Licenza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ライセンス" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "라이센스" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Licentie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Licencja" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Licensa" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Лицензия" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisans" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ліцензія" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "许可协议" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "軟體許可證" + } + } + } + }, + "LocalCachePath" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ruta de la memòria cau local" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lokaler Cache-Pfad" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Local Cache Path" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ruta de caché local" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paikallisen välimuistin polku" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cache Local" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्थानीय कैश पथ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Percorso Cache Locale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ローカルキャッシュパス" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로컬 캐시 경로" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lokaal Cache Pad" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Katalog cache" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Caminho de caches local" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Путь к локальному кешу" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lokal Önbellek Konumu" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Локальний Кеш" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "本地缓存位置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "本機快取路徑" + } + } + } + }, + "LocalCachePathDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'Xcodes guarda a la memòria cau les versions d'Xcode disponibles i hi descarrega temporalment les noves versions" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes speichert verfügbare Xcode-Versionen zwischen und lädt neue Versionen temporär in ein Verzeichnis." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes caches available Xcode versions and temporary downloads new versions to a directory" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes almacena en caché versiones de Xcode disponibles y descargas temporalmente las nuevas versiones en un directorio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes tallentaa saatavilla olevat Xcode-versiot välimuistiin ja lataa tilapäisesti uudet versiot hakemistoon" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes met en cache les versions de Xcode disponibles et télécharge temporairement les nouvelles versions dans le répertoire de cache local" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes उपलब्ध Xcode संस्करणों को कैश करता है और एक निर्देशिका में अस्थायी रूप से नए संस्करण डाउनलोड करता है" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes fa la cache delle versioni di Xcode disponibili e download temporanei in una directory." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodesは、利用可能なXcodeのバージョンをキャッシュし、新しいバージョンをディレクトリに一時的にダウンロードします。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes는 사용 가능한 Xcode 버전을 캐시하고 임시로 디렉토리에 새 버전을 다운로드 합니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes cached beschikbare Xcode versies en download tijdelijk nieuwe versies naar een map" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes przechowuje w cache dostępne wersje Xcode oraz tymczasowo pobiera nowe pliki do tego katalogu." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes faz caches de versões disponíveis do Xcode e baixa temporariamente estas novas versões para um diretório." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes кеширует доступные версии Xcode и временно загружает новые версии в указанную директорию" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes, uygun Xcode sürümlerini ve geçici yeni indirilenleri bir klasörde önbelleğe alır" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сюди зберігаються тимчасові закачки встановлюваних версій Xcode" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes会缓存可用的Xcode版本并暂时下载新版本到一个目录。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes 會快取可用的 Xcode 版本並將新版本暫存下載至這個目錄" + } + } + } + }, + "Login" : { + "comment" : "ToolBar", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inici de sessió" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar Sesión" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu sisään" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connexion" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "लॉग इन करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ログイン" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그인" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Логин" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Giriş" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple ID" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入" + } + } + } + }, + "LoginDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrir l'inici de sessió" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login öffnen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open Login" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir Inicio de Sesión" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avaa kirjautuminen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ouvrir une connexion" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "लॉगिन खोलें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apri Login" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ログイン画面を開く" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그인 창 열기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open Inloggen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otwórz okno logowania" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir login" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Открыть окно логина" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Giriş Yap" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показати Apple ID" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "打开登录窗口" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "打開登入" + } + } + } + }, + "MacOSRequirement" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "És necessari macOS %@ o posterior" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erfordert macOS %@ oder neuer" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Requires macOS %@ or later" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Requiere macOS %@ o posterior" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaatii macOS version %@ tai myöhemmän" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nécessite macOS %@ ou une version ultérieure" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS %@ या बाद के संस्करण की आवश्यकता है" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Richiede macOS %@ o successivo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS %@ 以降" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS %@ 또는 이후 버전" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vereist macOS %@ of hoger" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wymaga systemu macOS %@ lub nowszego" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Necessário macOS %@ ou mais recente" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Требуется macOS %@ или новее" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS %@ veya sonrasını gerektirir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Потрібен macOS %@ чи новіший" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "需要macOS %@及以上" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "需要 macOS %@ 或以上版本" + } + } + } + }, + "MakeActive" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fer-la activa" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Make active" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activarlo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivoi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activer" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सक्रिय बनाएँ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rendi attiva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アクティブにする" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기본 버전으로 만들기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maak actief" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ustaw jako aktywny" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ativar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активировать" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etkinleştir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зробити активним" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "激活" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "啟用" + } + } + } + }, + "MakeActiveVersionDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fer aquesta versió activa" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dies zur aktiven Version machen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Make this the active version" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haz que esta sea la versión activa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tee tästä aktiivinen versio" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activer" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "इसे सक्रिय संस्करण बनाएं" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rendi questa versione attiva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アクティブなバージョンにする" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기본 버전으로 만들기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maak dit de actieve versie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ustaw jako aktywną wersję" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ativar esta versão" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сделать эту версию активной" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu sürümü aktif et" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зробити цю версію активною" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "激活此版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "啟用這個版本" + } + } + } + }, + "Menu.About" : { + "comment" : "Menu", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobre Xcodes" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Über Xcodes" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "About Xcodes" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acerca de Xcodes" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tietoa Xcodesista" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "À propos de Xcodes" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "एक्सकोड के बारे में" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informazioni di Xcodes" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodesについて" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes 정보" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Over Xcodes" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "O Xcodes" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobre Xcodes" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "О Xcodes" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes Hakkında" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Про Xcodes" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关于Xcodes" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "關於 Xcodes" + } + } + } + }, + "Menu.Acknowledgements" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agraïments d'Xcodes" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes Anerkennungen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes Acknowledgements" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes Agradecimientos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes kunnianosoitukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remerciements Xcodes" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes स्वीकृति" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ringraziamenti di Xcodes" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "謝辞" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes 법적고지" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes Dankbetuigingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podziękowania Xcodes" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menções de Xcodes" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Юридическая информация Xcodes" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes Teşekkür" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подяки" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes版权声明" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes 版權宣告" + } + } + } + }, + "Menu.CheckForUpdates" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca actualitzacions..." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prüfe auf Updates..." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check for Updates..." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar Actualizaciones..." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tarkasta uusia päivityksiä..." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifier les mises à jour..." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अद्यतनों के लिए जाँच करें..." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controllo aggiornamenti..." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アップデートを確認…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "업데이트 확인..." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controleren op Updates..." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sprawdź aktualizacje..." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificar atualizações..." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверить наличие обновлений..." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Güncellemeleri Denetle..." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перевірити Оновлення..." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "检查更新…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "檢查更新版本⋯" + } + } + } + }, + "Menu.GitHubRepo" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repositori de Github d'Xcodes" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub-Repo" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub Repo" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub Repositorio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub Repo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dépôt GitHub Xcodes" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub रेपो" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes Repository di Github" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub 저장소" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub Repo" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repozytorium Xcodes na GitHubie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repositório Xcodes no GitHub" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub-репозиторий Xcodes" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub Repo" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub Repo" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub仓库" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes GitHub Repo" + } + } + } + }, + "Menu.ReportABug" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informa d'un error" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bug melden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Report a Bug" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reportar un fallo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilmoita bugi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Signaler un Bogue" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "किसी बग की रिपोर्ट करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segnala un Bug" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "不具合の報告" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "버그 제보하기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bug Rapporteren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zgłoś błąd" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reportar um bug" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сообщить об ошибке" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bir Sorun Bildir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Повідомити про помилку" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "反馈问题" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "回報錯誤" + } + } + } + }, + "Menu.RequestNewFeature" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Demana una nova funcionalitat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neues Feature anfordern" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Request a New Feature" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Solicitar una nueva función" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pyydä uutta ominaisuutta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Demander une Nouvelle Fonctionnalité" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "किसी नई सुविधा का अनुरोध करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Richiedi una nuova Feature" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "機能のリクエスト" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "새로운 기능 요청하기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieuwe Feature Aanvragen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poproś o nową funkcję" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Requerir uma nova funcionalidade" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Запросить новую функцию" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yeni Özellik Talep Et" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Запит на нову Фічу" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "建议新功能" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "請求新功能" + } + } + } + }, + "Moving" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Movent a %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "In %@ bewegen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moving to %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moviendo a %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siirretään kohteeseen %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déplacement vers %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ पर जा रहा है" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sposto in %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ に移動しています" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@(으)로 이동 중" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verplaatsen naar %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przenoszenie do %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Movendo para %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перемещение в %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ Konumuna Taşınıyor" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Переміщення до %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在移动到%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "移動至 %@" + } + } + } + }, + "Never" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mai" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Never" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nunca" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ei koskaan" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jamais" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कभी नहीं" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mai" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "なし" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인하지 않음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nooit" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nigdy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nunca" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Никогда" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Daha Yeni" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ніколи" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "从未检查" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "從未使用" + } + } + } + }, + "Next" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Següent" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nächstes" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siguiente" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seuraava" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suivant" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अगला" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avanti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "次へ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Volgende" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dalej" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Próximo" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Далее" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sonraki" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Далі" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "下一步" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下一步" + } + } + } + }, + "Not Hidden" : { + + }, + "Notification.FinishedInstalling" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "S'ha acabat d'instal·lar" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installation beendet" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finished installing" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminado de instalar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asennus valmis" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installation terminée" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्थापना समाप्त हो गई" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ho terminato l'installazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インストールを完了しました" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "설치 완료" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installatie voltooid" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zakończono instalację" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instalação finalizada" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завершена установка" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndirme tamamlandı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Встановлено" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "安装完成" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已經完成安裝" + } + } + } + }, + "Notification.NewVersionAvailable" : { + "comment" : "Notifications", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nova versió disponible" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neue Version verfügbar" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "New version is available" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Una nueva versión está disponible" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uusi versio on saatavilla" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Une nouvelle version est disponible" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "नया संस्करण उपलब्ध है" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Una nuova versione è disponibile" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "新しいバージョンが利用可能です" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "새 버전을 사용할 수 있습니다" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieuwe versie beschikbaar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dostępna jest nowa wersja" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nova versão disponível" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Доступна новая версия" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yeni sürüm mevcut" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Доступна нова версія" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "新版本可用" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "有新的版本可用" + } + } + } + }, + "Notification.NewXcodeVersion.Body" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hi ha noves versions de l'Xcode disponibles per a descarregar." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neue Xcode-Versionen stehen zum Download bereit." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "New Xcode versions are available to download." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuevas versiones de Xcode están disponibles para descargar." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uusia Xcode-versioita on ladattavissa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "De nouvelles versions de Xcode sont disponibles au téléchargement." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "नए Xcode संस्करण डाउनलोड करने के लिए उपलब्ध हैं।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuove versioni di Xcode disponibili per il download." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "新しいバージョンがダウンロードできます。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "새로운 Xcode 버전을 다운로드 할 수 있습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieuwe Xcode versies zijn beschikbaar om te downloaden." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dostępne są nowe wersje Xcode do pobrania." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Novas versões do Xcode estão disponíveis para baixar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Новые версии Xcode доступны для скачивания." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yeni Xcode sürümleri indirmek için mevcut." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нові версії Xcode доступні до завантаження." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "新的Xcode版本已经可以下载。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "新的 Xcode 版本已經可以下載了" + } + } + } + }, + "Notification.NewXcodeVersion.Title" : { + "comment" : "Notifications", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Noves versions d'Xcode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neue Xcode-Versionen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "New Xcode versions" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuevas versiones de Xcode" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uudet Xcode-versiot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nouvelles versions de Xcode" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "नए Xcode संस्करण" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuove versioni di Xcode" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "新しいXcodeのバージョン" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "새 Xcode 버전" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieuwe Xcode versies" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nowe wersje Xcode" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Novas versões do Xcode" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Новые версии Xcode" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yeni Xcode sürümü" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нові версії Xcode" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "新Xcode版本可用" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "新的 Xcode 版本" + } + } + } + }, + "Notifications" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificacions" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificaciones" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilmoitukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifications" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सूचनाएँ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifiche" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알림" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificaties" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Powiadomienia" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificações" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уведомления" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildirimler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сповіщення" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知" + } + } + } + }, + "NotificationSettings" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferències de notificacions" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungs-Einstellungen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notification Settings" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuración de las notificaciones" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilmoitusasetukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paramètres de Notification" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सूचना सेटिंग्स" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impostazioni delle Notifiche" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知設定" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알림 설정" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificatie Instellingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ustawienia powiadomień" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurações de notificação" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройки уведомлений" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildirim Ayarları" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Налаштування Сповіщень" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知设置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知偏好設定" + } + } + } + }, + "NoTrustedPhones" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "El teu compte no té cap número de confiança, però se'n necessita un per a l'autenticació de dos factors.\n\nVeure https://support.apple.com/en-ca/HT204915." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dein Account verfügt über keine vertrauenswürdigen Telefonnummern, diese sind aber für Zwei-Faktor-Authentifizierung erforderlich.\n\nInformationen dazu unter https://support.apple.com/HT204915." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Your account doesn't have any trusted phone numbers, but they're required for two-factor authentication.\n\nSee https://support.apple.com/HT204915." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Su cuenta no tiene números de teléfono de confianza, pero son necesarios para la autenticación de dos factores.\n\nVer https://support.apple.com/HT204915." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tililläsi ei ole luotettuja puhelinnumeroita, mutta ne vaaditaan kaksivaiheiseen todentamiseen.\n\nKatso https://support.apple.com/HT204915." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Votre compte n'a aucun numéro de téléphone de confiance, mais ils sont requis pour l'authentification à deux facteurs.\n\nVoir https://support.apple.com/HT204915." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपके खाते में कोई विश्वसनीय फ़ोन नंबर नहीं है, लेकिन वे दो-कारक प्रमाणीकरण के लिए आवश्यक हैं।\n\nhttps://support.apple.com/HT204915 देखें।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il tuo account non ha dispositivi registrati, ma è richiesto dall'autenticazione a due fattori.\nVedi https://support.apple.com/HT204915." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このアカウントに2要素認証に利用する、信頼できる電話番号がありません。\n\n詳しくはこちらをご確認ください。https://support.apple.com/HT204915" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정에 신뢰할 수 있는 전화번호가 없지만 이중 인증(2FA)에 필요합니다.\n\nhttps://support.apple.com/HT204915를 참조하세요." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je account heeft geen vertrouwde telefoonnummers, dit is nodig voor two-factor authenticatie.\n\nZie https://support.apple.com/HT204915." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twoje konto nie ma żadnych zaufanych numerów telefonów, ale są one wymagane do autoryzacji dwuskładnikowej.\n\nZobacz https://support.apple.com/HT204915." + } + }, + "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." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "В вашем аккаунтe нет доверенных телефонных номеров, но они необходимы для двухфакторной аутентификации.\n\nСм. https://support.apple.com/HT204915." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesabına tanımlı güvenli bir telefon numarası yok, fakat iki aşamalı doğrulama için gerekmektedir.\n\nDaha fazlası için https://support.apple.com/HT204915 adresine bakın." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ваш аккаунт не має перевіреного телефонного номеру, що вимагається для двофакторної авторизації.\n\nДивіться https://support.apple.com/HT204915." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "您的账户没有任何信任的手机号,但这是两步验证所必须的。\n\n请参阅 https://support.apple.com/HT204915。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "你的帳號沒有任何已信任的手機號碼,但兩階段認證需要信任的手機號碼。\n\n請參閱 https://support.apple.com/HT204915." + } + } + } + }, + "NoXcodeSelected" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cap Xcode seleccionat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kein Xcode ausgewählt" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Xcode Selected" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se ha seleccionado un Xcode" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode versiota ei ole valittuna" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucun Xcode Sélectionné" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोई Xcode चयनित नहीं" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessun Xcode selezionato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodeが選択されていません" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택된 Xcode 없음" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen Xcode Geselecteerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie wybrano Xcode" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum Xcode selecionado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode не выбран" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode Sürümü Seçilmedi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не обрано Xcode" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有选定的Xcode版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "沒有已選取的 Xcode" + } + } + } + }, + "OK" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "D'acord" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aceptar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ok" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "好" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "好" + } + } + } + }, + "OnSelect" : { + + }, + "OnSelectDoNothing" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mantenir el nom Xcode-X.X.X.app" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name beibehalten als Xcode-X.X.X.app" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keep name as Xcode-X.X.X.app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mantener el nombre como Xcode-X.X.X.app" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ne rien faire" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "名前をXcode-X.X.X.appのまま維持する" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Behoud naam als Xcode-X.X.X.app" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zachowaj nazwę jako Xcode-X.X.X.app" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manter nome como Xcode-X.X.X.app" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сохранять формат имени Xcode-X.X.X.app" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uygulama ismini Xcode-X.X.X.app gibi tut." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保持名称为Xcode-X.X.X.app" + } + } + } + }, + "OnSelectDoNothingDescription" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Al seleccionar aquesta opció es mantindrà el nom amb la versió, p.e. Xcode-13.4.1.app" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bei Auswahl wird der Name mit Version beibehalten, z. B. Xcode-13.4.1.app" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "On select, will keep the name as the version eg. Xcode-13.4.1.app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Al seleccionar, mantener el nombre como la versión p.ej. Xcode-13.4.1.app" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "選択時、バージョン付きの名前を維持します。例) Xcode-13.4.1.app" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wanneer ingeschakeld, zal de bestandsnaam altijd het versienummer bevatten. Bijvoorbeeld Xcode-13.4.1.app" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Po wybraniu, nazwa pozostanie w formacie z numerem wersji, np. Xcode-13.4.1.app" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Если выбрано, формат имени будет содержать версию, прим. Xcode-13.4.1.app" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seçildiğinde, ismi Xcode-13.4.1.app örneğindeki gibi tutar." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "选中时,将会保持各版本的名称。例如Xcode-13.4.1.app。" + } + } + } + }, + "OnSelectRenameXcode" : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Immer in Xcode.app umbenennen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Always rename to Xcode.app" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toujours renommer en Xcode.app" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "名前を常にXcode.appに変更する" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Altijd hernoemen naar Xcode.app" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zawsze zmieniaj nazwę na Xcode.app" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sempre renomear para Xcode.app" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Всегда переименовывать в Xcode.app" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Her zaman Xcode.app şeklinde ismi değiştir" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "总是重命名为Xcode.app" + } + } + } + }, + "OnSelectRenameXcodeDescription" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Al seleccionar aquesta opció, s'intentarà canviar el nom de la versió activa d'Xcode a Xcode.app; canviant així també el nom de l'antiga Xcode.app a el nom amb versió." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bei Auswahl wird versucht das aktive Xcode in Xcode.app umzubenennen. Die vorherige Xcode.app wird dazu in den Versionsnamen umbenannt." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "On select, will automatically try and rename the active Xcode to Xcode.app, renaming the previous Xcode.app to the version name." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "À la sélection, toujours essayer de renommer la version active de Xcode en Xcode.app, en renommant l'ancienne Xcode.app avec le nom de version." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "選択時、自動的にアクティブなXcodeをXcode.appに、以前のXcode.appをバージョン付きの名前に変更します。" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wanneer ingeschakeld, zal automatisch de actieve Xcode hernoemd worden naar Xcode.app, de vorige Xcode.app zal hernoemd worden naar de desbetreffende versie." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Po wybraniu, automatycznie zmienia aktywną wersję Xcode na Xcode.app, a poprzednie Xcode.app zostanie zmienione na nazwę wersji." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ao selecionar, tentar renomear o Xcode ativo para Xcode.app, renomeando o Xcode.app anterior para um nome com a versão." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Если выбрано, будет выполнена попытка переименовать активный Xcode в Xcode.app, а предыдущий Xcode.app в формат имени с версией." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seçildiğinde, aktif olan Xcode'u Xcode.app olarak isimlendirmeye çalışır ve eski Xcode ismine sürüm ismi ekler." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "选中时,会自动尝试重命名活跃的Xcode为Xcode.app,将之前的Xcode.app重命名为包含版本的名称。" + } + } + } + }, + "Open" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrir" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öffnen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avaa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ouvrir" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "खोलना" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apri" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "開く" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "열기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otwórz" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Открыть" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Запустити" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "打开" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "打開" + } + } + } + }, + "OPEN" : { + + }, + "Open In Rosetta" : { + + }, + "OpenDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrir aquesta versió" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese Version öffnen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open this version" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir esta versión" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avaa tämä versio" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ouvrir cette version" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "इस संस्करण को खोलें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apri questa versione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このバージョンを開く" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 버전 열기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open deze versie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otwórz tę wersję" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir essa versão" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Открыть эту версию" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu sürümü aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Запустити цю версію" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "打开此版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "打開這個版本" + } + } + } + }, + "Password" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Contrassenya:" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort:" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password:" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Contraseña:" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salasana:" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mot de passe :" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड:" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password:" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワード:" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호:" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wachtwoord:" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hasło:" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senha:" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пароль:" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifre:" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пароль:" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "密码:" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "密碼:" + } + } + } + }, + "Perform post-install steps" : { + + }, + "Preferences" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferències" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einstellungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferencias" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asetukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Préférences" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्राथमिकताएँ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferenze" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "環境設定" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "환경설정" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorkeuren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ustawienia" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferências" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hастройки" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercihler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Налаштування" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "偏好设置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "偏好設定" + } + } + } + }, + "PreferencesDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrir les preferències" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einstellungen öffnen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open Preferences" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir Preferencias" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avaa asetukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ouvrir les Préférences" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्राथमिकताएँ खोलें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apri Preferenze" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "環境設定を開く" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "환경설정 열기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open Voorkeuren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otwórz ustawienia" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir preferências" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Открыть настройки" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercihleri Aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Відкрити Налаштування" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "打开偏好设置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "打開偏好設定" + } + } + } + }, + "PrivilegedHelper" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servei Privilegiat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privilegierter Helfer" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privileged Helper" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asistente privilegiado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etuoikeutettu auttaja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Assistant Privilégié" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "विशेषाधिकार प्राप्त सहायक" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aiutante Privilegiato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "権限のあるヘルパー" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "권한을 가진 도우미 (Privileged Helper)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privileged Helper" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Helper z uprawnieniami" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajudante privilegiado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Привилегированный помощник" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayrıcalıklı Yardımcı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privileged Helper" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "提权帮助程序" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "權限輔助程式" + } + } + } + }, + "PrivilegedHelperDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'Xcodes utilitza, a part, un servei que executa tasques com a root. Aquestes tasques son coses que requereixin la comanda sudo a la línia de comandes, incloent-hi les tasques al finalitzar l'instal·lació i canviar les versions d'Xcode seleccionades utilitzant xcode-select.\n\nEl sistema operatiu et demanarà la teva contrassenya per poder-lo instal·lar." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes verwendet einen separaten privilegierten Helfer, um Aufgaben als root zu erledigen. Das sind Dinge, die sudo in der Kommandozeile erfordern würden, einschließlich Post-Installationsschritte sowie das Umstellen von Xcode-Versionen mit xcode-select.\n\nUm ihn zu installieren, erfolgt eine Aufforderung zur Eingabe des Passworts für Dein macOS-Benutzerkonto." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes uses a separate privileged helper to perform tasks as root. These are things that would require sudo on the command line, including post-install steps and switching Xcode versions with xcode-select.\n\nYou'll be prompted for your macOS account password to install it." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes utiliza un asistente privilegiado independiente para realizar tareas como root. Estas son cosas que requerirían sudo en la línea de comandos, incluidos los pasos posteriores a la instalación y el cambio de versiones de Xcode con xcode-select.\n\nSe le pedirá la contraseña de su cuenta de macOS para instalarlo." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes käyttää erillistä etuoikeutettua avustajaa tehtävien suorittamiseen pääkäyttäjänä. Nämä ovat asioita, jotka edellyttävät sudo komentoa komentorivillä, mukaan lukien asennuksen jälkeiset vaiheet ja Xcode-versioiden vaihtaminen xcode-selectillä.\n\nSinua pyydetään antamaan macOS-tilisi salasana sen asentamiseksi." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes utilise un assistant privilégié distinct pour effectuer des tâches en tant que root. Ce sont des tâches qui nécessiteraient sudo sur la ligne de commande, y compris les étapes de post-installation et le changement de version de Xcode avec xcode-select.\n\nVous serez invité à saisir le mot de passe de votre compte macOS pour l'installer." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes कार्यों को रूट के रूप में करने के लिए एक अलग विशेषाधिकार प्राप्त सहायक का उपयोग करता है। ये ऐसी चीजें हैं जिनके लिए कमांड लाइन पर sudo की आवश्यकता होगी, जिसमें पोस्ट-इंस्टॉल चरण और xcode-select के साथ Xcode संस्करण स्विच करना शामिल है।\n\nइसे इंस्टॉल करने के लिए आपको अपने macOS अकाउंट पासवर्ड के लिए कहा जाएगा।" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes usa un aiutante privilegiato per svolgere dei compiti come root. Si tratta di comandi che normalmente richiederebbero sudo da linea di comando, incluse fasi di post-install e modificare la versione di Xcode con xcode-select.\n\nTi verrà richiesta la password del tuo account di macOS per installarlo." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodesは、rootとしてタスクを実行するために、別の権限のあるヘルパーを使用します。インストール後の手順や xcode-select による Xcode のバージョン切り替えなど、コマンドラインで sudo を必要とするものです。\n\nインストールには、macOS アカウントのパスワードの入力が必要です。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes는 별도의 권한을 가진 도우미를 사용하여 작업을 루트로서 수행합니다. 설치 후 단계와 xcode-select로 Xcode 버전을 전환하는 것과 같이 커맨드 라인에서 sudo가 필요한 작업이 이에 해당합니다.\n\n설치하려면 macOS 계정 암호를 입력하라는 메시지가 표시됩니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes gebruikt een separate privilged helper om taken uit te voeren als root. Dit zijn operaties die een sudo vereisen op de command line, inclusief post-installatie stappen en het wijzigen van Xcode versies met xcode-select.\n\nJe zult worden gevraagd om je macOS account wachtwoord om deze te installeren." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes używa oddzielnego helpera z uprawnieniami do wykonywania zadań jako root. Są to rzeczy, które wymagałyby użycia komendy sudo w wierszu poleceń, w tym kroki po instalacji oraz przełączanie wersji Xcode za pomocą xcode-select.\n\nZostaniesz poproszony o podanie hasła do swojego konta macOS, aby go zainstalować." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes usa um ajudante privilegiado separado para performar atividades como raiz. São atividades que iriam requerir sudo na linha de comando, incluindo passos pós-instalação e trocar versões do Xcode com xcode-select.\n\nVocê será pedido para instalá-lo na sua conta do macOS." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes использует отдельный привилегированный помощник для выполнения задач от имени root-пользователя. Это команды, которые потребуют sudo в командной строке, включая шаги после установки и переключение версий Xcode с помощью xcode-select.\n\nВам будет предложено указать пароль от вашей учетной записи macOS для его установки." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes, root görevlerini yerine getirmek için bir Ayrıcalıklı yardımcı aracı kullanır. Bunlar komut satırındaki sudo gerektiren, yükleme sonrası adımlarını sağlayan ve Xcode sürümü değiştiren xcode-select gibi komutlardan ibarettir.\n\nBunu yüklemek için macOS hesap şifrenizi girmeniz istenecektir." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes використовує спеціальний \"privilege helper\" щоб запускати задачі як суперюзер. Це включає наприклад sudo в терміналі, та кроки після інсталяції або перемикання версії Xcode за допомогою xcode-select.\n\nБуде запит на ваш пароль від Мак щоб встановити цей хелпер." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes使用一个独立的提权帮助程序来以root身份执行任务。就是那些需要在命令行中用sudo执行的命令。包括一些安装前置步骤以及用xcode-select切换Xcode版本。\n\n您需要提供当前用户的密码来安装它。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes 使用一個分開的權限輔助程式以使用 root 身份執行特定工作。這些工作包含了通常需要在命令列使用 sudo 的指令,包含安裝後步驟以及使用 xcode-select 選擇 Xcode 版本。\n\n安裝時,你將會被詢問你的 macOS 帳號密碼。" + } + } + } + }, + "Refresh" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualitzar" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualisieren" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Refrescar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Päivitä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualiser" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ताज़ा करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ricarica" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "再読み込み" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "갱신" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verversen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odśwież" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atualizar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обновить" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yenile" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Оновити" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "刷新" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "更新" + } + } + } + }, + "RefreshDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualitzar la llista d'Xcode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode-Liste aktualisieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Refresh Xcode List" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Refrescar lista de Xcodes" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Päivitä Xcode lista" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualiser la liste des Xcode" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode सूची ताज़ा करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ricarica Lista Xcode" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodeの一覧を再度取得する" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode 목록 갱신" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ververs Xcode Lijst" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odśwież listę Xcode" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atualizar lista de Xcode" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обновить список Xcode" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode Listesini Yenile" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Оновити список Xcode" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "刷新Xcode列表" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "更新 Xcode 版本列表" + } + } + } + }, + "Release" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versió" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liberado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Julkaisuversio" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "रिलीज़" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rilasci" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リリース" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "출시 버전" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stabilne" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pелиз" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kararlı Sürüm" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正式版" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "正式版" + } + } + } + }, + "ReleaseDate" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data de la versió" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release-Datum" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release Date" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fecha de lanzamiento" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Julkaisupäivä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Date de Sortie" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "रिलीज़ दिनांक" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data di Rilascio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リリース日" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "출시일" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release Datum" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data wydania" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data de lançamento" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дата выпуска" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yayınlanma Tarihi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дата релізу" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "发布日期" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "發行日期" + } + } + } + }, + "ReleaseNotes" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notes de la versió" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release-Notes" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release Notes" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notas del lanzamiento" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Julkaisutiedot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notes de Mise à Jour" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "रिलीज नोट्स" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Note di Rilascio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リリースノート" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "릴리즈 노트" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release Notes" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notatki wydania" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notas de lançamento" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Примечания к выпуску" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yayınlanma Notları" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Деталі релізу" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "更新说明" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "版本附註" + } + } + } + }, + "ReleaseNotes.help" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Veure les notes de la versió" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release-Notes anzeigen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "View Release Notes" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ver Notas del Lanzamiento" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lue julkaisutiedot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Consulter les Notes de Mise á Jour" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "रिलीज़ नोट्स देखें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vedi Note di Rilascio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リリースノートを表示" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "릴리즈 노트 보기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toon Release Notes" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyświetl notatki wydania" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visualizar notas de lançamento" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Просмотреть примечания к выпуску" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yayınlanma Notlarını Görüntüle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Переглянути деталі релізу" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "查看更新说明" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "檢視版本附註" + } + } + } + }, + "ReleaseOnly" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Només versions oficials" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nur Release" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Release only" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Solo Liberados" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vain julkaisuversiot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seulement le versions finales" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "केवल रिलीज़ करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Solo Rilasci" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リリース版のみ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "출시 버전만" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alleen release" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tylko stabilne" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Somente release" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Только релиз" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yalnızca Kararlı Sürüm" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "лише Release" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "只显示正式版" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "只看正式版" + } + } + } + }, + "Required" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Requerida" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erforderlich" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Requerido" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaaditaan" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Requis" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आवश्यक" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obbligatorio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "必須" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "필수 입력" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vereist" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wymagane" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrigatório" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обязательно" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gerekli" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вимагається" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "必填" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "必要" + } + } + } + }, + "RevealInFinder" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrir al Finder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Im Finder anzeigen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reveal in Finder" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar en el Finder" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Näytä finderissa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ouvrir dans le Finder" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "खोजक में प्रकट करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostra in Finder" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finderに表示" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finder에서 보기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toon in Finder" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokaż w Finderze" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir no Finder" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показать в Finder" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finder'da Görüntüle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показати у Finder" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在访达中显示" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示於 Finder" + } + } + } + }, + "SDKs" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDK" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDK" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDK" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDK" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + } + } + }, + "Search" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cercar..." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suchen ..." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Search..." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar..." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etsi..." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechercher..." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "खोज..." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca..." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "検索…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "검색하기..." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zoeken..." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Szukaj..." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Procurar..." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Поиск..." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ara..." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пошук..." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "搜索…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "搜尋⋯" + } + } + } + }, + "SearchDescription" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Llistat de cerca" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suchliste" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Search list" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lista de búsqueda" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hakulista" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liste de recherche" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "खोज सूची" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lista Ricerca" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "一覧の検索" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "목록 검색하기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zoek lijst" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przeszukaj listę" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lista de procura" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Поиск по списку" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arama listesi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Список знайденого" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "搜索列表" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "搜尋列表" + } + } + } + }, + "Select" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleccionar" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Auswählen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleccionar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valitse" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sélectionner" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "चयन करे" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleziona" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アクティブにする" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecteer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybierz" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecionar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выбрать" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обрати" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "选定" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "選取" + } + } + } + }, + "Selected" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleccionat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ausgewählt" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleccionado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valittu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sélectionné" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "चयनित" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selezionato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アクティブ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택됨" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geselecteerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybrany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecionado(s)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выбрано" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seçili" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обрано" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已选定" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已選取" + } + } + } + }, + "SelectTrustedPhone" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecciona un número de mòbil de confiança on rebre el codi de %d dígits a través d'SMS:" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wähle eine vertrauenswürdige Telefonnummer aus, um einen %d-stelligen Code via SMS zum empfangen:" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Select a trusted phone number to receive a %d digit code via SMS:" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecciona un número de teléfono de confianza para recibir un código de %d dígitos por SMS:" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valitse luotettu puhelinnumero saadaksesi %d numeroisen koodin tekstiviestinä:" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sélectionnez le numéro de téléphone de confiance pour recevoir un code à %d chiffres par SMS :" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS के द्वारा %d अंक कोड प्राप्त करने के लिए विश्वसनीय फ़ोन नंबर चुनें:" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleziona un numero di telefono registrato per ricevere il codice di %d cifre via SMS:" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "信頼できる電話番号を選択し、%d桁のコードをSMSで受信します。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS를 통해 %d 자리 코드를 수신하려면 신뢰할 수 있는 전화번호를 선택하세요." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecteer een vertrouwd telefoonnumer on een %d code te ontvangen via SMS:" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybierz zaufany numer telefonu, aby otrzymać %d-cyfrowy kod przez SMS:" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecione um número de telefone confiável para receber um código de %d dígitos via SMS:" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выберите доверенный номер телефона для получения %d цифрового кода по SMS:" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%d rakamlı kodu SMS olarak almak için güvenilir telefon numarasını seç:" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Виберіть довірений номер телефону щоб отримати %d-значний код в СМС:" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请选择一个信任的手机号来从短信接收%d位代码:" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "請輸入一個你想用來接收 %d 位數密碼簡訊的電話號碼:" + } + } + } + }, + "SendSMS" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar SMS" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS senden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send SMS" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar SMS" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetä tekstiviesti" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer un SMS" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS भेजें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manda SMS" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS を送信" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS 보내기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verstuur SMS" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślij SMS" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar SMS" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отправить SMS" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Gönder" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Надіслати СМС" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "发送短信" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "傳送簡訊" + } + } + } + }, + "ShowOpenInRosetta" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show Open In Rosetta option" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rosettaで開くオプションを表示する" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokaż opcję Otwórz w Rosetta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar opçao abrir com Rosetta" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rosetta ile açma seçeneğini göster" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "显示“在Rosetta中打开”选项" + } + } + } + }, + "ShowOpenInRosettaDescription" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open in Rosetta option will show where other \"Open\" functions are available. Note: This will only show for Apple Silicon machines." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rosettaで開くオプションは \"開く\" 機能が利用できる場所に表示されます。注意: これはApple Siliconマシンにのみ表示されます。" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opcja Otwórz w Rosetta będzie wyświetlana, gdy dostępne są inne funkcje \"Otwórz\". Uwaga: Będzie to działać tylko na urządzeniach z Apple Silicon." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opção de abrir com o Rosetta será mostrar onde outras opções \"Abrir\" estão disponíveis. Nota: Isso só será mostrado pra máquinas Apple Silicon." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rosetta ile açma opsiyonu diğer uygun \"Açma\" fonksiyonlarını gösterecektir. Not: Bu sadece Apple Silikon makinelerinde gözükecektir." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "“在Rosetta中打开”将会在有其他“打开”方式可用时显示。注:此选项只会在Apple Silicon设备上显示。" + } + } + } + }, + "SignIn" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessió" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign In" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar Sesión" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu sisään" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connecter" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन इन करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サインイン" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그인하기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Giriş Yap" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Логін" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入" + } + } + } + }, + "SignInWithApple" : { + "comment" : "SignIn", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió amb el teu Apple ID." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Deiner Apple-ID anmelden." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with your Apple ID." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sesión con tu ID de Apple." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu sisään Apple ID:lläsi." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connectez-vous avec votre identifiant Apple." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपनी Apple ID से साइन इन करें." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entra con il tuo Apple ID." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple IDでサインインしてください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple ID로 로그인하세요." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log in met je Apple ID." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się przy użyciu Apple ID." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com o seu Apple ID." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти со своим Apple ID." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple ID ile Giriş Yap." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вхід з вашим Apple ID." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用您的Apple ID登录。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入您的Apple ID" + } + } + } + }, + "SignOut" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tancar sessió" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abmelden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign Out" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerrar Sesión" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu ulos" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déconnecter" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन आउट करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esci" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サインアウト" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그아웃" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uitloggen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyloguj się" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sair" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выход" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oturumu Kapat" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Логаут" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "登出" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "登出" + } + } + } + }, + "StopInstallation" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aturar l'instal·lació" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installation stoppen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stop installation" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detener Instalación" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lopeta asennus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arrêter l'installation" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्थापना रोकें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ferma istallazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インストールを中止" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "설치 중지" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stop installatie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przerwij instalację" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Interromper instalação" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Остановить установку" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İndirmeyi durdur" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зупинити встановлення" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "停止安装" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "停止安裝" + } + } + } + }, + "TrashingArchive" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Movent l'arxiu comprimit a la paperera" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Archiv in den Papierkorb bewegen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moving archive to the Trash" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover archivo a la Papelera" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siirretään arkistoa roskakoriin" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déplacement de l'archive vers la corbeille" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "संग्रह को ट्रैश में ले जाया जा रहा है" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sposto archivio nel Cestino" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アーカイブをゴミ箱に移動しています" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아카이브를 휴지통으로 이동" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bezig met archief naar Prullenbak verplaatsen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przenoszenie archiwum do kosza" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Movendo arquivo para a lixeira" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перемещение архива в корзину" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arşiv Çöp Kutusuna taşınıyor" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалення архіву" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在将压缩文件移动到废纸篓" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "移動封存檔到垃圾桶" + } + } + } + }, + "Unarchiving" : { + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Descomprimint (pot trigar una estona)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entpacken (Dies kann etwas dauern)" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unarchiving (This can take a while)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desarchivando (esto puede llevar un tiempo)" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poistetaan arkistointi (tämä voi kestää hetken)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Décompression (cela peut prendre un certain temps)" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unarchiving (इसमें कुछ समय लग सकता है)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Espandendo (Potrà metterci un po')" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アーカイブを展開しています (時間がかかることがあります)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "언아카이빙 중 (시간이 좀 걸릴 수 있습니다)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dearchiveren (Dit kan even duren)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rozpakowywanie (To może chwilę potrwać)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desarquivando (Pode demorar um pouco)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Разархивирование (это может занять некоторое время)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arşivden Çıkarılıyor (Bu biraz sürebilir)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Розпаковка (Може бути довго)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在解压(这将需要一些时间)" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "解壓縮中 (可能需要一點時間)" + } + } + } + }, + "Uninstall" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desinstal·lar" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deinstallieren" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desinstalar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Désinstaller" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "असंस्थापित करे" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disinstalla" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アンインストール" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "제거" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deinstalleren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odinstaluj" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desinstalar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaldır" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "卸载" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "解除安裝" + } + } + } + }, + "UnxipExperiment" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experiment d'Unxip" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip-Experiment" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip Experiment" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experimento Unxip" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip Kokeilu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Expérimentation Unxip" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनज़िप प्रयोग" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip Sperimentale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip Experiment" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip 실험" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip Experiment" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksperyment Unxip" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experimento Unxip" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Экспериментальный Unxip" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tecrübeyi çıkart" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Експеримент Unxip" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip Experiment" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip 試驗" + } + } + } + }, + "UpdatedAt" : { + "comment" : "MainWindow", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualitzat el" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualisiert am" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Updated at" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualizado en" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Päivitetty ajankohtana" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mis à jour le " + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पर अपडेट किया गया" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiorna a" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "前回の更新:" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "마지막 업데이트 시점" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bijgewerkt op" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaktualizowano o" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atualizado em" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обновлено в" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Güncellenme Zamanı:" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Оновлено о" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "更新于" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "上一次檢查:" + } + } + } + }, + "Updates" : { + "comment" : "Updates Preference Pane", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualitzacions" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Updates" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualizaciones" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Päivitysasetukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mise à jour" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपडेट" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiornamenti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アップデート" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "업데이트" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Updates" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualizacje" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atualizações" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обновления" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Güncellemeler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Оновлення" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "更新" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "更新" + } + } + } + }, + "UseUnxipExperiment" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quan es fa l'unxip, utilitza l'experiment" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beim Unxipping, Experiment verwenden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "When unxipping, use experiment" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Al descomprimir, usar experimento" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kun purat xip-tiedoston, käytä kokeiluversiota" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lors de la décompression Unxip, utiliser l'expérimentation" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनज़िपिंग करते समय, प्रयोग का उपयोग करें" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando fai unxipping, usa sperimentale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "試験的な Unxip の実装を使う" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "unxipping 시 실험 기능 사용" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bij unxipping, gebruik expiriment" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podczas rozpakowywania, użyj wersji eksperymentalnej" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando performar unxipping, use experiment" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "При выполнении unxip будет использован экспериментальный функционал" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unxip yaparken dene" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Під час розпаковки Unxip використовувати експериментальний метод." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用实验性功能解压xip" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "解壓縮 (Unxip) 時,使用這個試驗版本" + } + } + } + }, + "Versions" : { + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versions" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versionen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versiones" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versiot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versions" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "संस्करण" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versioni" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "バージョン" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "버전" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versies" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wersje" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versões" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Версии" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sürümler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Версії" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "版本" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "版本" + } + } + } + }, + "VersionWithBuild" : { + "comment" : "About", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versió %@ (%@)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version %@ (%@)" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version %@ (%@)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versión %@ (%@)" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versio %@ (%@)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version %@ (%@)" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "संस्करण %@ (%@)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versione %@ (%@)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "バージョン %@ (%@)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "버전 %@ (%@)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versie %@ (%@)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wersja %@ (%@)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versão %@ (%@)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Версия %@ (%@)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sürüm %@ (%@)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Версія %@ (%@)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "版本%@ (%@)" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "版本 %@ (%@)" + } + } + } + }, + "WWDC.Message" : { + "comment" : "WWDC", + "extractionState" : "manual", + "localizations" : { + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Feliç WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Hyvää WWDC tapahtumaa %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Wesołego WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Feliz WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Счастливого WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 WWDC %@ haftanız kutlu olsun! 👨🏽‍💻🧑🏻‍💻" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Веселого WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻" + } + } + } + }, + "Xcode" : { + + }, + "Xcodes" : { + + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Xcodes/Resources/ca.lproj/Localizable.strings b/Xcodes/Resources/ca.lproj/Localizable.strings deleted file mode 100644 index 1958baa..0000000 --- a/Xcodes/Resources/ca.lproj/Localizable.strings +++ /dev/null @@ -1,229 +0,0 @@ -// Menu -"Menu.About" = "Sobre Xcodes"; -"Menu.CheckForUpdates" = "Cerca actualitzacions..."; -"Menu.Acknowledgements" = "Agraïments d'Xcodes"; -"Menu.GitHubRepo" = "Repositori de Github d'Xcodes"; -"Menu.ReportABug" = "Informa d'un error"; -"Menu.RequestNewFeature" = "Demana una nova funcionalitat"; - -// Common -"Install" = "Instal·lar"; -"InstallDescription" = "Instal·lar aquesta versió"; -"RevealInFinder" = "Obrir al Finder"; -"Active" = "Activa"; -"MakeActive" = "Fer-la activa"; -"Open" = "Obrir"; -"OpenDescription" = "Obrir aquesta versió"; -"CopyPath" = "Copiar la ruta"; -"CreateSymLink" = "Crear un Symlink com a Xcode.app"; -"Uninstall" = "Desinstal·lar"; -"Selected" = "Seleccionat"; -"Select" = "Seleccionar"; -"Cancel" = "Cancelar"; -"Next" = "Següent"; -"Continue" = "Continuar"; -"Close" = "Tancar"; -"OK" = "D'acord"; - -// Info Pane -"IdenticalBuilds" = "Builds idèntiques"; -"IdenticalBuilds.help" = "A vegades alguna versió provisional i algna versió definitiva son exactament iguals. L'Xcodes mostrarà automàticament aquestes versions conjuntament."; - -"ReleaseDate" = "Data de la versió"; -"ReleaseNotes" = "Notes de la versió"; -"ReleaseNotes.help" = "Veure les notes de la versió"; -"CopyReleaseNoteURL" = "Copiar l'URL"; -"Compatibility" = "Compatibilitat"; -"MacOSRequirement" = "És necessari macOS %@ o posterior"; -"SDKs" = "SDKs"; -"Compilers" = "Compiladors"; -"DownloadSize" = "Tamany de descàrrega"; -"NoXcodeSelected" = "Cap Xcode seleccionat"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Pas %1$d de %2$d: %3$@"; -"DownloadingPercentDescription" = "Descarregant: %d%% completat"; -"StopInstallation" = "Aturar l'instal·lació"; -"DownloadingError" = "Cap informació de la descàrrega trobada"; - -// About -"VersionWithBuild" = "Versió %@ (%@)"; -"GithubRepo" = "Repositori de GitHub"; -"Acknowledgements" = "Agraïments"; -"UnxipExperiment" = "Experiment d'Unxip"; -"License" = "Llicència"; - -// General Preference Pane -"General" = "General"; -"AppleID" = "Apple ID"; -"SignIn" = "Iniciar sessió"; -"Notifications" = "Notificacions"; - -// Updates Preference Pane -"Updates" = "Actualitzacions"; -"Versions" = "Versions"; -"AutomaticInstallNewVersion" = "Instal·lar automàticament noves versions d'Xcode"; -"IncludePreRelease" = "Incloure versions provisionals/beta"; -"AppUpdates" = "Actualitzacions d'Xcodes.app"; -"CheckForAppUpdates" = "Cercar actualitzacions automàticament"; -"CheckNow" = "Revisar ara"; -"LastChecked" = "Última consulta: %@"; -"Never" = "Mai"; - -// Advanced Preference Pane -"Advanced" = "Avançat"; -"LocalCachePath" = "Ruta de la memòria cau local"; -"LocalCachePathDescription" = "L'Xcodes guarda a la memòria cau les versions d'Xcode disponibles i hi descarrega temporalment les noves versions"; -"Change" = "Canviar"; -"Active/Select" = "Activar/Seleccionar"; -"InstallDirectory" = "Directori d'instal·lació"; -"InstallPathDescription" = "L'Xcodes busca i instal·la en un sol directori. Per defecte (recomanat) utilitza la carpeta /Applications. Qualsevol canvi d'aquest directory pot provocar que altres aplicatius/serveis deixin de funcionar."; - -"OnSelectDoNothing" = "Mantenir el nom Xcode-X.X.X.app"; -"OnSelectDoNothingDescription" = "Al seleccionar aquesta opció es mantindrà el nom amb la versió, p.e. Xcode-13.4.1.app"; -"AutomaticallyCreateSymbolicLink" = "Crea automàticament un link simbòlic a Xcode.app"; -"AutomaticallyCreateSymbolicLinkDescription" = "Quan s'activa/selecciona una versió d'Xcode, prova de crear un enllaç simbòlic dins el directori d'instal·lació"; -"OnSelectRenameXcodeDescription" = "Al seleccionar aquesta opció, s'intentarà canviar el nom de la versió activa d'Xcode a Xcode.app; canviant així també el nom de l'antiga Xcode.app a el nom amb versió."; - -"DataSource" = "Font de dades"; -"DataSourceDescription" = "La font de dades d'Apple rebusca dins la pàgina web de desenvolupadors d'Apple. Això farà que sempre mostri les últimes versions disponibles, però també és una opció més inestable.\n\nXcode Releases es una llista no oficial de les versions d'Xcode. Està formada per dades ben composades, conté informació extra que no està disponible llegint les dades oficials d'Apple i és menys probable que es trenqui si Apple decideix redissenyar el seu portal de desenvolupadors."; -"Downloader" = "Descàrrega"; -"DownloaderDescription" = "aria2 utilitza fins a 16 connexions simultànies per a descarregar l'Xcode 3-5x vegades més de pressa que URLSesson. A més de l'executable, està empaquestat amb el seu codi font dins Xcodes per complir amb la llicència GPLv2.\n\nURLSession is la opció per defecte de l'API d'Apple per a fer crides URL."; -"PrivilegedHelper" = "Servei Privilegiat"; -"PrivilegedHelperDescription" = "L'Xcodes utilitza, a part, un servei que executa tasques com a root. Aquestes tasques son coses que requereixin la comanda sudo a la línia de comandes, incloent-hi les tasques al finalitzar l'instal·lació i canviar les versions d'Xcode seleccionades utilitzant xcode-select.\n\nEl sistema operatiu et demanarà la teva contrassenya per poder-lo instal·lar."; -"HelperInstalled" = "El servei està instal·lat"; -"HelperNotInstalled" = "El servei no està instal·lat"; -"InstallHelper" = "Instal·lar el servei"; - -// Experiment Preference Pane -"Experiments" = "Experiments"; -"FasterUnxip" = "Unxip més ràpid"; -"UseUnxipExperiment" = "Quan es fa l'unxip, utilitza l'experiment"; -"FasterUnxipDescription" = "Gràcies a @_saagarjha, aquest experiment pot incrementar la velocitat de l'unxip en un 70% en alguns sistemes.\n\nMés informació sobre com s'aconsegueix pot ser consultada en el seu repositori - https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "Accés garantit. Rebràs notificacions d'Xcodes."; -"AccessDenied" = "⚠️ Accés denegat ⚠️\n\nSi us plau, obre les preferències de les notificacions i selecciona Xcodes si vols garantir-li l'accés."; -"NotificationSettings" = "Preferències de notificacions"; -"EnableNotifications" = "Activar les notificacions"; - -// SignIn -"SignInWithApple" = "Inicia sessió amb el teu Apple ID."; -"AppleID" = "AppleID:"; -"Password" = "Contrassenya:"; -"Required" = "Requerida"; -"SignOut" = "Tancar sessió"; - -// SMS/2FA -"DigitCodeDescription" = "Introdueix el codi de %d dígits d'un dels teus dispositius de confiança:"; -"SendSMS" = "Enviar SMS"; -"EnterDigitCodeDescription" = "Introdueix el codi de %d dígits enviat a %@: "; -"SelectTrustedPhone" = "Selecciona un número de mòbil de confiança on rebre el codi de %d dígits a través d'SMS:"; -"NoTrustedPhones" = "El teu compte no té cap número de confiança, però se'n necessita un per a l'autenticació de dos factors.\n\nVeure https://support.apple.com/en-ca/HT204915."; - -// MainWindow -"UpdatedAt" = "Actualitzat el"; - -// ToolBar -"Login" = "Inici de sessió"; -"LoginDescription" = "Obrir l'inici de sessió"; -"Refresh" = "Actualitzar"; -"RefreshDescription" = "Actualitzar la llista d'Xcode"; -"All" = "Tot"; -"Release" = "Versió"; -"ReleaseOnly" = "Només versions oficials"; -"Beta" = "Beta"; -"BetaOnly" = "Només Beta"; -"Filter" = "Filtre"; -"FilterAvailableDescription" = "Filtrar versions disponibles"; -"FilterInstalledDescription" = "Filtrar versions instal·lades"; -"Info" = "Informació"; -"InfoDescription" = "Mostrar o ocultar el panell d'informació"; -"Preferences" = "Preferències"; -"PreferencesDescription" = "Obrir les preferències"; -"Search" = "Cercar..."; -"SearchDescription" = "Llistat de cerca"; - -// List -"ActiveVersionDescription" = "Aquesta és la versió activa"; -"MakeActiveVersionDescription" = "Fer aquesta versió activa"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Desinstal·lar l'Xcode %@?"; -"Alert.Uninstall.Message" = "Es mourà a la paperera, però no es buidarà."; -"Alert.Uninstall.Error.Title" = "Incapaç de desinstal·lar l'Xcode"; - -// Cancel Install -"Alert.CancelInstall.Title" = "Estàs segur que vols aturar l'instal·lació de l'Xcode %@?"; -"Alert.CancelInstall.Message" = "Tot el progrés serà descartat."; -"Alert.CancelInstall.PrimaryButton" = "Aturar l'instal·lació"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Servei privilegiat"; -"Alert.PrivilegedHelper.Message" = "L'Xcodes utilitza, a part, un servei que executa tasques com a root. Aquestes tasques son coses que requereixin la comanda sudo a la línia de comandes, incloent-hi les tasques al finalitzar l'instal·lació i canviar les versions d'Xcode seleccionades utilitzant xcode-select.\n\nEl sistema operatiu et demanarà la teva contrassenya per poder-lo instal·lar."; -"Alert.PrivilegedHelper.Error.Title" = "No ha sigut possible instal·lar el servei"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "No es compleixen els requeriments mínims"; -"Alert.MinSupported.Message" = "L'Xcode %@ necessita MacOS %@, però tu estàs utilitzant MacOS %@, vols instal·lar-lo igualment?"; - -// Install -"Alert.Install.Error.Title" = "Incapaç d'instal·lar l'Xcode"; -"Alert.InstallArchive.Error.Title" = "Incapaç d'instal·lar l'Xcode comprimit"; - -// Update -"Alert.Update.Error.Title" = "Incapaç d'actualitzar l'Xcode seleccionat"; - -// Active/Select -"Alert.Select.Error.Title" = "Incapaç de seleccionar l'Xcode"; - -// Symbolic Links -"Alert.SymLink.Title" = "Incapaç de crear un enllaç simbòlic"; -"Alert.SymLink.Message" = "L'Xcode.app existeix i no és un enllaç simbòlic"; - -// Post install -"Alert.PostInstall.Title" = "Incapaç de realitzar les tasques post instal·lació"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "L'arxiu \"%@\" està malmès i no es pot expandir."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "L'arxiu \"%@\" no es pot expandir perquè el volum actual no té suficient espai lliure.\n\nAllibera més espai disponible per a poder expandir l'arxiu i llavors torna a instal·lar l'Xcode %@ des d'on ho havia deixat."; -"InstallationError.FailedToMoveXcodeToApplications" = "No s'ha pogut moure l'Xcode al directori %@."; -"InstallationError.FailedSecurityAssessment" = "L'Xcode %@ ha fallat l'avaluació de seguretat amb el següent missatge:\n%@\nEs manté instal·lat a %@ Si desitges continuar de totes maneres."; -"InstallationError.CodesignVerifyFailed" = "L'Xcode descarregat ha fallat en la verificació de la signatura de seguretat amb el següent missatge:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "The downloaded Xcode doesn't have the expected code signing identity.\nGot:\n%@\n%@\nExpected:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "L'Xcodes no soporta (encara) instal·lar l'Xcode amb el format %@."; -"InstallationError.MissingSudoerPassword" = "Falta la contrassenya. Si us plau, torna-ho a intentar."; -"InstallationError.UnavailableVersion" = "No s'ha trobat la versió %@."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "Cap versió que no sigui provisional disponible."; -"InstallationError.NoPrereleaseVersionAvailable" = "Cap versió provisional disponible."; -"InstallationError.MissingUsernameOrPassword" = "Falta l'usuari o la contrassenya. Si us plau, torna-ho a intentar."; -"InstallationError.VersionAlreadyInstalled" = "%@ ja està instal·lada a %@"; -"InstallationError.InvalidVersion" = "%@ no és un número de versió vàlid."; -"InstallationError.VersionNotInstalled" = "%@ no està instal·lada."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "L'instal·lació ha finalitzat, però algunes tasques post instal·lació no s'han executat de manera automàtica. S'executaran la primera vegada que obris l'Xcode %@."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "L'instal·lació ha finalitzat, però algunes tasques post instal·lació no s'han executat de manera automàtica. L'Xcodes executa aquestes tasques amb el servei privilegiat, que sembla que no està instal·lat. El pots instal·lar des de les Preferències > Avançat.\n\nAquestes tasques s'executaran la primera vegada que obris l'Xcode %@."; - -// Installation Steps -"Downloading" = "Descarregant"; -"Unarchiving" = "Descomprimint (pot trigar una estona)"; -"Moving" = "Movent a %@"; -"TrashingArchive" = "Movent l'arxiu comprimit a la paperera"; -"CheckingSecurity" = "Verificació de seguretat"; -"Finishing" = "Acabant"; - -// Notifications -"Notification.NewVersionAvailable" = "Nova versió disponible"; -"Notification.FinishedInstalling" = "S'ha acabat d'instal·lar"; - - -"HelperClient.error" = "Incapaç de comunicar-se amb el servei privilegiat."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Noves versions d'Xcode"; -"Notification.NewXcodeVersion.Body" = "Hi ha noves versions de l'Xcode disponibles per a descarregar."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Feliç WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/de.lproj/Localizable.strings b/Xcodes/Resources/de.lproj/Localizable.strings deleted file mode 100644 index 1a812a3..0000000 --- a/Xcodes/Resources/de.lproj/Localizable.strings +++ /dev/null @@ -1,235 +0,0 @@ -// Menu -"Menu.About" = "Über Xcodes"; -"Menu.CheckForUpdates" = "Prüfe auf Updates..."; -"Menu.Acknowledgements" = "Xcodes Anerkennungen"; -"Menu.GitHubRepo" = "Xcodes GitHub-Repo"; -"Menu.ReportABug" = "Bug melden"; -"Menu.RequestNewFeature" = "Neues Feature anfordern"; - -// Common -"Install" = "Installieren"; -"InstallDescription" = "Diese Version installieren"; -"RevealInFinder" = "Im Finder anzeigen"; -"Active" = "Aktiv"; -"MakeActive" = "Aktivieren"; -"Open" = "Öffnen"; -"OpenDescription" = "Diese Version öffnen"; -"CopyPath" = "Pfad kopieren"; -"CreateSymLink" = "Symlink als Xcode.app erstellen"; -"CreateSymLinkBeta" = "Symlink als Xcode-Beta.app erstellen"; -"Uninstall" = "Deinstallieren"; -"Selected" = "Ausgewählt"; -"Select" = "Auswählen"; -"Cancel" = "Abbrechen"; -"Next" = "Nächstes"; -"Continue" = "Fortfahren"; -"Close" = "Schließen"; -"OK" = "OK"; - -// Info Pane -"IdenticalBuilds" = "Identische Builds"; -"IdenticalBuilds.help" = "Manchmal sind Prerelease- and Release-Version der exakt gleich Build. Xcodes zeigt diese beiden Versionen automatisch zusammen an."; - -"ReleaseDate" = "Release-Datum"; -"ReleaseNotes" = "Release-Notes"; -"ReleaseNotes.help" = "Release-Notes anzeigen"; -"CopyReleaseNoteURL" = "URL kopieren"; -"Compatibility" = "Kompatibilität"; -"MacOSRequirement" = "Erfordert macOS %@ oder neuer"; -"SDKs" = "SDKs"; -"Compilers" = "Compiler"; -"DownloadSize" = "Download-Größe"; -"NoXcodeSelected" = "Kein Xcode ausgewählt"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Schritt %1$d von %2$d: %3$@"; -"DownloadingPercentDescription" = "Download: %d%% vollständig"; -"StopInstallation" = "Installation stoppen"; -"DownloadingError" = "Keine Download-Informationen gefunden"; - -// About -"VersionWithBuild" = "Version %@ (%@)"; -"GithubRepo" = "GitHub-Repo"; -"Acknowledgements" = "Anerkennungen"; -"UnxipExperiment" = "Unxip-Experiment"; -"License" = "Lizenz"; - -// General Preference Pane -"General" = "Allgemein"; -"AppleID" = "Apple-ID"; -"SignIn" = "Anmelden"; -"Notifications" = "Benachrichtigungen"; - -// Updates Preference Pane -"Updates" = "Updates"; -"Versions" = "Versionen"; -"AutomaticInstallNewVersion" = "Neue Versionen von Xcode automatisch installieren"; -"IncludePreRelease" = "Prerelease-/Beta-Versionen einschließen"; -"AppUpdates" = "Xcodes.app-Updates"; -"CheckForAppUpdates" = "Automatisch auf App-Updates prüfen"; -"CheckNow" = "Jetzt prüfen"; -"LastChecked" = "Letzte Prüfung: %@"; -"Never" = "Nie"; - -// Download Preference Pane -"Downloads" = "Downloads"; -"DataSource" = "Datenquelle"; -"DataSourceDescription" = "Die Apple-Datenquelle liest die Apple Developer-Website aus. Sie zeigt immer die neuesten Releases an, die verfügbar sind, ist allerdings etwas instabiler.\n\nXcode Releases ist eine inoffizielle Liste von Xcode-Veröffentlichungen. Sie wird als formatierte Daten bereitgestellt, enthält Extrainformationen die nicht ohne weiteres von Apple erhältlich sind und ist mit höherer Wahrscheinlichkeit weiter verfügbar, sollte Apple seine Entwickler-Website neu gestalten."; -"Downloader" = "Downloader"; -"DownloaderDescription" = "aria2 verwendet bis zu 16 Verbindungen, um Xcode 3-5x schneller als URLSession herunterzuladen. Es ist zusammen mit seinem Quellcode in Xcode enthalten, um seiner GPLv2-Lizenz nachzukommen.\n\nURLSession ist Apples Standard-API für URL-Requests."; - -// Advanced Preference Pane -"Advanced" = "Erweitert"; -"LocalCachePath" = "Lokaler Cache-Pfad"; -"LocalCachePathDescription" = "Xcodes speichert verfügbare Xcode-Versionen zwischen und lädt neue Versionen temporär in ein Verzeichnis."; -"Change" = "Ändern"; -"Active/Select" = "Aktiv/Auswählen"; -"InstallDirectory" = "Installationsverzeichnis"; -"InstallPathDescription" = "Xcodes sucht and installiert in ein einzelnes Verzeichnis. Standard (und empfohlen beizubehalten) ist /Programme. Änderungen am Speicherort von Xcode können dazu führen, dass andere Apps/Dienste aufhören zu funktionieren. "; - -"OnSelectDoNothing" = "Name beibehalten als Xcode-X.X.X.app"; -"OnSelectDoNothingDescription" = "Bei Auswahl wird der Name mit Version beibehalten, z. B. Xcode-13.4.1.app"; -"AutomaticallyCreateSymbolicLink" = "Symbolischen Link zur Xcode.app automatisch erstellen"; -"AutomaticallyCreateSymbolicLinkDescription" = "Beim Umstellen einer Xcode-Version auf Aktiv/Ausgewählt versuchen einen symbolischen Link namens Xcode.app im Installationsverzeichnis zu erstellen."; -"OnSelectRenameXcode" = "Immer in Xcode.app umbenennen"; -"OnSelectRenameXcodeDescription" = "Bei Auswahl wird versucht das aktive Xcode in Xcode.app umzubenennen. Die vorherige Xcode.app wird dazu in den Versionsnamen umbenannt."; - -"PrivilegedHelper" = "Privilegierter Helfer"; -"PrivilegedHelperDescription" = "Xcodes verwendet einen separaten privilegierten Helfer, um Aufgaben als root zu erledigen. Das sind Dinge, die sudo in der Kommandozeile erfordern würden, einschließlich Post-Installationsschritte sowie das Umstellen von Xcode-Versionen mit xcode-select.\n\nUm ihn zu installieren, erfolgt eine Aufforderung zur Eingabe des Passworts für Dein macOS-Benutzerkonto."; -"HelperInstalled" = "Helfer ist installiert"; -"HelperNotInstalled" = "Helfer ist nicht installiert"; -"InstallHelper" = "Helfer installieren"; - -// Experiment Preference Pane -"Experiments" = "Experimente"; -"FasterUnxip" = "Schnellerer Unxip"; -"UseUnxipExperiment" = "Beim Unxipping, Experiment verwenden"; -"FasterUnxipDescription" = "Dank an @_saagarjha, dieses Experiment kann die Unxipping-Geschwindigkeit bis zu 70% auf einigen Systemen beschleunigen.\n\nMehr Informationen wie dies erreicht wird sind über das Unxip-Repo erhältlich - https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "Zugriff erlaubt. Du empfängst jetzt Benachrichtigungen von Xcodes."; -"AccessDenied" = "⚠️ Zugriff verweigert ⚠️\n\nBitte öffne Deine Benachrichtigungs-Einstellungen und wähle Xcodes aus, wenn Du den Zugriff erlauben möchtest."; -"NotificationSettings" = "Benachrichtigungs-Einstellungen"; -"EnableNotifications" = "Benachrichtigungen einschalten"; - -// SignIn -"SignInWithApple" = "Mit Deiner Apple-ID anmelden."; -"AppleID" = "Apple-ID:"; -"Password" = "Passwort:"; -"Required" = "Erforderlich"; -"SignOut" = "Abmelden"; - -// SMS/2FA -"DigitCodeDescription" = "Gib den %d-stelligen Code von einem Deiner Vertrauensgeräte ein:"; -"SendSMS" = "SMS senden"; -"EnterDigitCodeDescription" = "Gib den %1$d-stelligen Code ein der an '%2$@' gesendet wurde."; -"SelectTrustedPhone" = "Wähle eine vertrauenswürdige Telefonnummer aus, um einen %d-stelligen Code via SMS zum empfangen:"; -"NoTrustedPhones" = "Dein Account verfügt über keine vertrauenswürdigen Telefonnummern, diese sind aber für Zwei-Faktor-Authentifizierung erforderlich.\n\nInformationen dazu unter https://support.apple.com/HT204915."; - -// MainWindow -"UpdatedAt" = "Aktualisiert am"; - -// ToolBar -"Login" = "Login"; -"LoginDescription" = "Login öffnen"; -"Refresh" = "Aktualisieren"; -"RefreshDescription" = "Xcode-Liste aktualisieren"; -"All" = "Alle"; -"Release" = "Release"; -"ReleaseOnly" = "Nur Release"; -"Beta" = "Beta"; -"BetaOnly" = "Nur Beta"; -"Filter" = "Filter"; -"FilterAvailableDescription" = "Verfügbare Versionen filtern"; -"FilterInstalledDescription" = "Installierte Versionen filtern"; -"Info" = "Info"; -"InfoDescription" = "Info-Panel anzeigen oder verbergen"; -"Preferences" = "Einstellungen"; -"PreferencesDescription" = "Einstellungen öffnen"; -"Search" = "Suchen ..."; -"SearchDescription" = "Suchliste"; - -// List -"ActiveVersionDescription" = "Dies ist die aktive Version"; -"MakeActiveVersionDescription" = "Dies zur aktiven Version machen"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Xcode %@ deinstallieren?"; -"Alert.Uninstall.Message" = "Die Anwendung wird in den Papierkorb verschoben, dieser wird aber nicht geleert."; -"Alert.Uninstall.Error.Title" = "Die Deinstallation von Xcode ist nicht möglich"; -"Alert.Uninstall.Error.Message.FileNotFound" = "Datei \"%@\" konnte nicht gefunden werden."; - -// Cancel Install -"Alert.CancelInstall.Title" = "Bist du sicher, dass Du die Installation von Xcode %@ anhalten möchtest?"; -"Alert.CancelInstall.Message" = "Jeglicher Fortschritt wird verworfen."; -"Alert.CancelInstall.PrimaryButton" = "Installation anhalten"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Privilegierter Helfer"; -"Alert.PrivilegedHelper.Message" = "Xcodes verwendet einen separaten privilegierten Helfer, um Aufgaben als root zu erledigen. Das sind Dinge, die sudo in der Kommandozeile erfordern würden, einschließlich Post-Installationsschritte sowie das Umstellen von Xcode-Versionen mit xcode-select.\n\nUm ihn zu installieren, erfolgt eine Aufforderung zur Eingabe des Passworts für Dein macOS-Benutzerkonto."; -"Alert.PrivilegedHelper.Error.Title" = "Installation des Helfers nicht möglich"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Minimalanforderungen nicht erfüllt"; -"Alert.MinSupported.Message" = "Xcode %@ erfordert macOS %@ aber es läuft nur macOS %@. Möchtest Du es trotzdem installieren?"; - -// Install -"Alert.Install.Error.Title" = "Installation von Xcode nicht möglich"; -"Alert.InstallArchive.Error.Title" = "Installation des archivierten Xcodes nicht möglich"; - -// Update -"Alert.Update.Error.Title" = "Update des ausgewählten Xcodes nicht möglich"; - -// Active/Select -"Alert.Select.Error.Title" = "Auswahl von Xcode nicht möglich"; - -// Symbolic Links -"Alert.SymLink.Title" = "Erstellung des symbolischen Links nicht möglich"; -"Alert.SymLink.Message" = "Xcode.app existiert und ist kein symbolischer Link"; - -// Post install -"Alert.PostInstall.Title" = "Ausführung von Post-Installationsschritten nicht möglich"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "Das Archiv \"%@\" ist beschädigt und kann nicht entpackt werden."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "Das Archiv \"%@\" kann nicht entpackt werden, da auf dem aktuellen Volume nicht genügend freier Speicherplatz verfügbar ist.\n\nBitte stelle mehr Platz zur Verfügung, um das Archiv zu entpacken und installiere danach Xcode %@ erneut, um die Installation von dort zu beginnen wo sie beendet wurde."; -"InstallationError.FailedToMoveXcodeToApplications" = "Das Bewegen von Xcode in das %@-Verzeichnis ist nicht möglich."; -"InstallationError.FailedSecurityAssessment" = "Die Sicherheitsprüfung für Xcode %@ ist mit folgender Meldung gescheitert:\n%@\nXcode bleibt unter %@ installiert, für den Fall, dass es dennoch verwendet werden soll."; -"InstallationError.CodesignVerifyFailed" = "Die heruntergeladene Version von Xcode hat die Code-Signing-Prüfung nicht bestanden, mit folgendem Hinweis:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "Die heruntergeladene Version von Xcode hat nicht die erwartete Code-Signing-Identity.\nErhalten:\n%@\n%@\nErwartet:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes unterstützt (bislang) nicht die Installation von Xcode per %@-Dateiformat."; -"InstallationError.MissingSudoerPassword" = "Passwort fehlt. Bitte erneut versuchen."; -"InstallationError.UnavailableVersion" = "Kann Version %@ nicht finden."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "Keine Nicht-Prerelease-Versionen verfügbar."; -"InstallationError.NoPrereleaseVersionAvailable" = "Keine Prerelease-Versions verfügbar."; -"InstallationError.MissingUsernameOrPassword" = "Benutzername oder ein Passwort fehlt. Bitte erneut versuchen."; -"InstallationError.VersionAlreadyInstalled" = "%@ ist bereits installiert unter %@"; -"InstallationError.InvalidVersion" = "%@ ist keine gültige Versionsnummer."; -"InstallationError.VersionNotInstalled" = "%@ ist nicht installiert."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "Die Installation ist abgeschlossen, allerdings wurden einige Post-Installationsschritte nicht automatisch ausgeführt. Diese werden beim ersten Start von Xcode %@ ausgeführt."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "Die Installation ist abgeschlossen, allerdings wurden einige Post-Installationsschritte nicht automatisch ausgeführt. Xcodes führt diese Schritte mittels eines privilegierten Helfers aus, welcher aber nicht installiert zu sein scheint. Er kann über Einstellungen > Erweitert installiert werden. Diese Schritte werden beim ersten Start von Xcode %@ ausgeführt."; - -// Installation Steps -"Downloading" = "Herunterladen"; -"Unarchiving" = "Entpacken (Dies kann etwas dauern)"; -"Moving" = "In %@ bewegen"; -"TrashingArchive" = "Archiv in den Papierkorb bewegen"; -"CheckingSecurity" = "Sicherheitsprüfung"; -"Finishing" = "Abschließen"; - -// Notifications -"Notification.NewVersionAvailable" = "Neue Version verfügbar"; -"Notification.FinishedInstalling" = "Installation beendet"; - - -"HelperClient.error" = "Kommunikation mit privilegiertem Helfer nicht möglich."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Neue Xcode-Versionen"; -"Notification.NewXcodeVersion.Body" = "Neue Xcode-Versionen stehen zum Download bereit."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/en.lproj/Localizable.strings b/Xcodes/Resources/en.lproj/Localizable.strings deleted file mode 100644 index 66b4ace..0000000 --- a/Xcodes/Resources/en.lproj/Localizable.strings +++ /dev/null @@ -1,239 +0,0 @@ -// Menu -"Menu.About" = "About Xcodes"; -"Menu.CheckForUpdates" = "Check for Updates..."; -"Menu.Acknowledgements" = "Xcodes Acknowledgements"; -"Menu.GitHubRepo" = "Xcodes GitHub Repo"; -"Menu.ReportABug" = "Report a Bug"; -"Menu.RequestNewFeature" = "Request a New Feature"; - -// Common -"Install" = "Install"; -"InstallDescription" = "Install this version"; -"RevealInFinder" = "Reveal in Finder"; -"Active" = "Active"; -"MakeActive" = "Make active"; -"Open" = "Open"; -"OpenDescription" = "Open this version"; -"CopyPath" = "Copy Path"; -"CreateSymLink" = "Create Symlink as Xcode.app"; -"CreateSymLinkBeta" = "Create Symlink as Xcode-Beta.app"; -"Uninstall" = "Uninstall"; -"Selected" = "Selected"; -"Select" = "Select"; -"Cancel" = "Cancel"; -"Next" = "Next"; -"Continue" = "Continue"; -"Close" = "Close"; -"OK" = "OK"; - -// Info Pane -"IdenticalBuilds" = "Identical Builds"; -"IdenticalBuilds.help" = "Sometimes a prerelease and release version are the exact same build. Xcodes will automatically display these versions together."; - -"ReleaseDate" = "Release Date"; -"ReleaseNotes" = "Release Notes"; -"ReleaseNotes.help" = "View Release Notes"; -"CopyReleaseNoteURL" = "Copy URL"; -"Compatibility" = "Compatibility"; -"MacOSRequirement" = "Requires macOS %@ or later"; -"SDKs" = "SDKs"; -"Compilers" = "Compilers"; -"DownloadSize" = "Download Size"; -"NoXcodeSelected" = "No Xcode Selected"; -"Platforms" = "Platforms"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Step %1$d of %2$d: %3$@"; -"DownloadingPercentDescription" = "Downloading: %d%% complete"; -"StopInstallation" = "Stop installation"; -"DownloadingError" = "No download information found"; - -// About -"VersionWithBuild" = "Version %@ (%@)"; -"GithubRepo" = "GitHub Repo"; -"Acknowledgements" = "Acknowledgements"; -"UnxipExperiment" = "Unxip Experiment"; -"License" = "License"; - -// General Preference Pane -"General" = "General"; -"AppleID" = "Apple ID"; -"SignIn" = "Sign In"; -"Notifications" = "Notifications"; - -// Updates Preference Pane -"Updates" = "Updates"; -"Versions" = "Versions"; -"AutomaticInstallNewVersion" = "Automatically install new versions of Xcode"; -"IncludePreRelease" = "Include prerelease/beta versions"; -"AppUpdates" = "Xcodes.app Updates"; -"CheckForAppUpdates" = "Automatically check for app updates"; -"CheckNow" = "Check Now"; -"LastChecked" = "Last checked: %@"; -"Never" = "Never"; - -// Download Preference Pane -"Downloads" = "Downloads"; -"DataSource" = "Data Source"; -"DataSourceDescription" = "The Apple data source scrapes the Apple Developer website. It will always show the latest releases that are available, but is more fragile.\n\nXcode Releases is an unofficial list of Xcode releases. It's provided as well-formed data, contains extra information that is not readily available from Apple, and is less likely to break if Apple redesigns their developer website."; -"Downloader" = "Downloader"; -"DownloaderDescription" = "aria2 uses up to 16 connections to download Xcode 3-5x faster than URLSession. It's bundled as an executable along with its source code within Xcodes to comply with its GPLv2 license.\n\nURLSession is the default Apple API for making URL requests."; - -// Advanced Preference Pane -"Advanced" = "Advanced"; -"LocalCachePath" = "Local Cache Path"; -"LocalCachePathDescription" = "Xcodes caches available Xcode versions and temporary downloads new versions to a directory"; -"Change" = "Change"; -"Active/Select" = "Active/Select"; -"InstallDirectory" = "Install Directory"; -"InstallPathDescription" = "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. "; - -"OnSelectDoNothing" = "Keep name as Xcode-X.X.X.app"; -"OnSelectDoNothingDescription" = "On select, will keep the name as the version eg. Xcode-13.4.1.app"; -"AutomaticallyCreateSymbolicLink" = "Automatically create symbolic link to Xcode.app"; -"AutomaticallyCreateSymbolicLinkDescription" = "When making an Xcode version Active/Selected, try and create a symbolic link named Xcode.app in the installation directory"; -"OnSelectRenameXcode" = "Always rename to Xcode.app"; -"OnSelectRenameXcodeDescription" = "On select, will automatically try and rename the active Xcode to Xcode.app, renaming the previous Xcode.app to the version name."; - -"PrivilegedHelper" = "Privileged Helper"; -"PrivilegedHelperDescription" = "Xcodes uses a separate privileged helper to perform tasks as root. These are things that would require sudo on the command line, including post-install steps and switching Xcode versions with xcode-select.\n\nYou'll be prompted for your macOS account password to install it."; -"HelperInstalled" = "Helper is installed"; -"HelperNotInstalled" = "Helper is not installed"; -"InstallHelper" = "Install helper"; - -"ShowOpenInRosetta" = "Show Open In Rosetta option"; -"ShowOpenInRosettaDescription" = "Open in Rosetta option will show where other \"Open\" functions are available. Note: This will only show for Apple Silicon machines."; - -// Experiment Preference Pane -"Experiments" = "Experiments"; -"FasterUnxip" = "Faster Unxip"; -"UseUnxipExperiment" = "When unxipping, use experiment"; -"FasterUnxipDescription" = "Thanks to @_saagarjha, this experiment can increase unxipping speed by up to 70% for some systems.\n\nMore information on how this is accomplished can be seen on the unxip repo - https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "Access Granted. You will receive notifications from Xcodes."; -"AccessDenied" = "⚠️ Access Denied ⚠️\n\nPlease open your Notification Settings and select Xcodes if you wish to allow access."; -"NotificationSettings" = "Notification Settings"; -"EnableNotifications" = "Enable Notifications"; - -// SignIn -"SignInWithApple" = "Sign in with your Apple ID."; -"AppleID" = "AppleID:"; -"Password" = "Password:"; -"Required" = "Required"; -"SignOut" = "Sign Out"; - -// SMS/2FA -"DigitCodeDescription" = "Enter the %d digit code from one of your trusted devices:"; -"SendSMS" = "Send SMS"; -"EnterDigitCodeDescription" = "Enter the %1$d digit code sent to %2$@: "; -"SelectTrustedPhone" = "Select a trusted phone number to receive a %d digit code via SMS:"; -"NoTrustedPhones" = "Your account doesn't have any trusted phone numbers, but they're required for two-factor authentication.\n\nSee https://support.apple.com/HT204915."; - -// MainWindow -"UpdatedAt" = "Updated at"; - -// ToolBar -"Login" = "Login"; -"LoginDescription" = "Open Login"; -"Refresh" = "Refresh"; -"RefreshDescription" = "Refresh Xcode List"; -"All" = "All"; -"Release" = "Release"; -"ReleaseOnly" = "Release only"; -"Beta" = "Beta"; -"BetaOnly" = "Beta only"; -"Filter" = "Filter"; -"FilterAvailableDescription" = "Filter available versions"; -"FilterInstalledDescription" = "Filter installed versions"; -"Info" = "Info"; -"InfoDescription" = "Show or hide the info pane"; -"Preferences" = "Preferences"; -"PreferencesDescription" = "Open Preferences"; -"Search" = "Search..."; -"SearchDescription" = "Search list"; - -// List -"ActiveVersionDescription" = "This is the active version"; -"MakeActiveVersionDescription" = "Make this the active version"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Uninstall Xcode %@?"; -"Alert.Uninstall.Message" = "It will be moved to the Trash, but won't be emptied."; -"Alert.Uninstall.Error.Title" = "Unable to uninstall Xcode"; -"Alert.Uninstall.Error.Message.FileNotFound" = "Could not find file \"%@\"."; - -// Cancel Install -"Alert.CancelInstall.Title" = "Are you sure you want to stop the installation of Xcode %@?"; -"Alert.CancelInstall.Message" = "Any progress will be discarded."; -"Alert.CancelInstall.PrimaryButton" = "Stop Installation"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Privileged Helper"; -"Alert.PrivilegedHelper.Message" = "Xcodes uses a separate privileged helper to perform tasks as root. These are things that would require sudo on the command line, including post-install steps and switching Xcode versions with xcode-select.\n\nYou'll be prompted for your macOS account password to install it."; -"Alert.PrivilegedHelper.Error.Title" = "Unable to install helper"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Minimum requirements not met"; -"Alert.MinSupported.Message" = "Xcode %@ requires MacOS %@, but you are running MacOS %@, do you still want to install it?"; - -// Install -"Alert.Install.Error.Title" = "Unable to install Xcode"; -"Alert.InstallArchive.Error.Title" = "Unable to install archived Xcode"; - -// Update -"Alert.Update.Error.Title" = "Unable to update selected Xcode"; - -// Active/Select -"Alert.Select.Error.Title" = "Unable to select Xcode"; - -// Symbolic Links -"Alert.SymLink.Title" = "Unable to create symbolic Link"; -"Alert.SymLink.Message" = "Xcode.app exists and is not a symbolic link"; - -// Post install -"Alert.PostInstall.Title" = "Unable to perform post install steps"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "The archive \"%@\" is damaged and can't be expanded."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "The archive \"%@\" can’t be expanded because the current volume doesn’t have enough free space.\n\nMake more space available to expand the archive and then install Xcode %@ again to start installation from where it left off."; -"InstallationError.FailedToMoveXcodeToApplications" = "Failed to move Xcode to the %@ directory."; -"InstallationError.FailedSecurityAssessment" = "Xcode %@ failed its security assessment with the following output:\n%@\nIt remains installed at %@ if you wish to use it anyways."; -"InstallationError.CodesignVerifyFailed" = "The downloaded Xcode failed code signing verification with the following output:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "The downloaded Xcode doesn't have the expected code signing identity.\nGot:\n%@\n%@\nExpected:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes doesn't (yet) support installing Xcode from the %@ file format."; -"InstallationError.MissingSudoerPassword" = "Missing password. Please try again."; -"InstallationError.UnavailableVersion" = "Could not find version %@."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "No non-prerelease versions available."; -"InstallationError.NoPrereleaseVersionAvailable" = "No prerelease versions available."; -"InstallationError.MissingUsernameOrPassword" = "Missing username or a password. Please try again."; -"InstallationError.VersionAlreadyInstalled" = "%@ is already installed at %@"; -"InstallationError.InvalidVersion" = "%@ is not a valid version number."; -"InstallationError.VersionNotInstalled" = "%@ is not installed."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "Installation was completed, but some post-install steps weren't performed automatically. These will be performed when you first launch Xcode %@."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "Installation was completed, but some post-install steps weren't performed automatically. Xcodes performs these steps with a privileged helper, which appears to not be installed. You can install it from Preferences > Advanced.\n\nThese steps will be performed when you first launch Xcode %@."; - -// Installation Steps -"Downloading" = "Downloading"; -"Unarchiving" = "Unarchiving (This can take a while)"; -"Moving" = "Moving to %@"; -"TrashingArchive" = "Moving archive to the Trash"; -"CheckingSecurity" = "Security verification"; -"Finishing" = "Finishing"; - -// Notifications -"Notification.NewVersionAvailable" = "New version is available"; -"Notification.FinishedInstalling" = "Finished installing"; - - -"HelperClient.error" = "Unable to communicate with privileged helper."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "New Xcode versions"; -"Notification.NewXcodeVersion.Body" = "New Xcode versions are available to download."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/es.lproj/Localizable.strings b/Xcodes/Resources/es.lproj/Localizable.strings deleted file mode 100644 index 0cce216..0000000 --- a/Xcodes/Resources/es.lproj/Localizable.strings +++ /dev/null @@ -1,230 +0,0 @@ -// Menu -"Menu.About" = "Acerca de Xcodes"; -"Menu.CheckForUpdates" = "Buscar Actualizaciones..."; -"Menu.Acknowledgements" = "Xcodes Agradecimientos"; -"Menu.GitHubRepo" = "Xcodes GitHub Repositorio"; -"Menu.ReportABug" = "Reportar un fallo"; -"Menu.RequestNewFeature" = "Solicitar una nueva función"; - -// Common -"Install" = "Instalar"; -"InstallDescription" = "Instalar esta versión"; -"RevealInFinder" = "Mostrar en el Finder"; -"Active" = "Activo"; -"MakeActive" = "Activarlo"; -"Open" = "Abrir"; -"OpenDescription" = "Abrir esta versión"; -"CopyPath" = "Copiar Ruta"; -"CreateSymLink" = "Crear Symlink como Xcode.app"; -"CreateSymLinkBeta" = "Crear Symlink como Xcode-Beta.app"; -"Uninstall" = "Desinstalar"; -"Selected" = "Seleccionado"; -"Select" = "Seleccionar"; -"Cancel" = "Cancelar"; -"Next" = "Siguiente"; -"Continue" = "Continuar"; -"Close" = "Cerrar"; -"OK" = "Aceptar"; - -// Info Pane -"IdenticalBuilds" = "Compilaciones Idénticas"; -"IdenticalBuilds.help" = "A veces, una versión preliminar y una versión de lanzamiento tienen exactamente la misma compilación. Xcodes mostrará automáticamente estas versiones juntas."; - -"ReleaseDate" = "Fecha de lanzamiento"; -"ReleaseNotes" = "Notas del lanzamiento"; -"ReleaseNotes.help" = "Ver Notas del Lanzamiento"; -"CopyReleaseNoteURL" = "Copiar URL"; -"Compatibility" = "Compatibilidad"; -"MacOSRequirement" = "Requiere macOS %@ o posterior"; -"SDKs" = "SDKs"; -"Compilers" = "Compiladores"; -"DownloadSize" = "Tamaño de descarga"; -"NoXcodeSelected" = "No se ha seleccionado un Xcode"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Paso %1$d de %2$d: %3$@"; -"DownloadingPercentDescription" = "Descargando: %d%% completado"; -"StopInstallation" = "Detener Instalación"; -"DownloadingError" = "No se encontró información de descarga"; - -// About -"VersionWithBuild" = "Versión %@ (%@)"; -"GithubRepo" = "GitHub Repositorio"; -"Acknowledgements" = "Agradecimientos"; -"UnxipExperiment" = "Experimento Unxip"; -"License" = "Licencia"; - -// General Preference Pane -"General" = "General"; -"AppleID" = "Apple ID"; -"SignIn" = "Iniciar Sesión"; -"Notifications" = "Notificaciones"; - -// Updates Preference Pane -"Updates" = "Actualizaciones"; -"Versions" = "Versiones"; -"AutomaticInstallNewVersion" = "Instalar automáticamente versions de Xcode"; -"IncludePreRelease" = "Incluir versiones preliminares/beta"; -"AppUpdates" = "Xcodes.app Actualizaciones"; -"CheckForAppUpdates" = "Buscar automáticamente actualizaciones"; -"CheckNow" = "Revisarlo Ahora"; -"LastChecked" = "Última comprobación: %@"; -"Never" = "Nunca"; - -// Download Preference Pane -"Downloads" = "Descargas"; -"DataSource" = "Fuente de datos"; -"DataSourceDescription" = "La fuente de datos de Apple la extrae de el sitio web de Apple Developer. Siempre mostrará los últimos lanzamientos disponibles, pero es más frágil.\n\nXcode Releases es una lista no oficial de lanzamientos de Xcode. Se proporciona como datos bien estructurados, contiene información adicional que no está disponible fácilmente en Apple y es menos probable que se rompa si Apple rediseña su sitio web para desarrolladores."; -"Downloader" = "Descargador"; -"DownloaderDescription" = "aria2 usa hasta 16 conexiones para descargar Xcode de 3 a 5 veces más rápido que URLSession. Se incluye como un ejecutable junto con su código fuente dentro de Xcodes para cumplir con su licencia GPLv2.\n\nURLSession es la API predeterminada de Apple para realizar solicitudes de URL."; - -// Advanced Preference Pane -"Advanced" = "Avanzado"; -"LocalCachePath" = "Ruta de caché local"; -"LocalCachePathDescription" = "Xcodes almacena en caché versiones de Xcode disponibles y descargas temporalmente las nuevas versiones en un directorio"; -"Change" = "Cambiar"; -"Active/Select" = "Activar/Seleccionar"; -"InstallDirectory" = "Directorio de instalación"; - -"OnSelectDoNothing" = "Mantener el nombre como Xcode-X.X.X.app"; -"OnSelectDoNothingDescription" = "Al seleccionar, mantener el nombre como la versión p.ej. Xcode-13.4.1.app"; -"AutomaticallyCreateSymbolicLink" = "Crear automáticamente enlace simbólico a Xcode.app"; -"AutomaticallyCreateSymbolicLinkDescription" = "Al activar/seleccionar una versión de Xcode, intentará crear un enlace simbólico llamado Xcode.app en el directorio de instalación."; -"PrivilegedHelper" = "Asistente privilegiado"; -"PrivilegedHelperDescription" = "Xcodes utiliza un asistente privilegiado independiente para realizar tareas como root. Estas son cosas que requerirían sudo en la línea de comandos, incluidos los pasos posteriores a la instalación y el cambio de versiones de Xcode con xcode-select.\n\nSe le pedirá la contraseña de su cuenta de macOS para instalarlo."; -"HelperInstalled" = "El Asistente está instalado"; -"HelperNotInstalled" = "El Asistente no está instalado."; -"InstallHelper" = "Instalar Asistente"; - -// Experiment Preference Pane -"Experiments" = "Experimentos"; -"FasterUnxip" = "Unxip más rápido"; -"UseUnxipExperiment" = "Al descomprimir, usar experimento"; -"FasterUnxipDescription" = "Gracias a @_saagarjha, este experimento puede aumentar la velocidad de liberación hasta en un 70 % para algunos sistemas.\n\nPuede ver más información sobre cómo se logra esto en el repositorio de unxip: https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "Acceso Permitido. Recibirás notificaciones de Xcodes."; -"AccessDenied" = "⚠️ Acceso Denegado ⚠️\n\nPor favor abra su Configuración de notificaciones y seleccione Xcodes si desea permitir el acceso."; -"NotificationSettings" = "Configuración de las notificaciones"; -"EnableNotifications" = "Permitir notificaciones"; - -// SignIn -"SignInWithApple" = "Inicia sesión con tu ID de Apple."; -"AppleID" = "AppleID:"; -"Password" = "Contraseña:"; -"Required" = "Requerido"; -"SignOut" = "Cerrar Sesión"; - -// SMS/2FA -"DigitCodeDescription" = "Ingrese el código de %d dígitos de uno de sus dispositivos de confianza:"; -"SendSMS" = "Enviar SMS"; -"EnterDigitCodeDescription" = "Ingrese el código de dígito %1$d enviado a %2$@: "; -"SelectTrustedPhone" = "Selecciona un número de teléfono de confianza para recibir un código de %d dígitos por SMS:"; -"NoTrustedPhones" = "Su cuenta no tiene números de teléfono de confianza, pero son necesarios para la autenticación de dos factores.\n\nVer https://support.apple.com/HT204915."; - -// MainWindow -"UpdatedAt" = "Actualizado en"; - -// ToolBar -"Login" = "Iniciar Sesión"; -"LoginDescription" = "Abrir Inicio de Sesión"; -"Refresh" = "Refrescar"; -"RefreshDescription" = "Refrescar lista de Xcodes"; -"All" = "Todos"; -"Release" = "Liberado"; -"ReleaseOnly" = "Solo Liberados"; -"Beta" = "Beta"; -"BetaOnly" = "Solo Beta"; -"Filter" = "Filtro"; -"FilterAvailableDescription" = "Filtrar versiones disponibles"; -"FilterInstalledDescription" = "Filtrar versiones instaladas"; -"Info" = "Info"; -"InfoDescription" = "Mostrar u ocultar el panel de información"; -"Preferences" = "Preferencias"; -"PreferencesDescription" = "Abrir Preferencias"; -"Search" = "Buscar..."; -"SearchDescription" = "Lista de búsqueda"; - -// List -"ActiveVersionDescription" = "Esta es la versión activa."; -"MakeActiveVersionDescription" = "Haz que esta sea la versión activa"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Desinstalar Xcode %@?"; -"Alert.Uninstall.Message" = "Se moverá a la Papelera, pero no se vaciará."; -"Alert.Uninstall.Error.Title" = "No se puede desinstalar Xcode"; - -// Cancel Install -"Alert.CancelInstall.Title" = "¿Está seguro de que desea detener la instalación de Xcode %@?"; -"Alert.CancelInstall.Message" = "Cualquier progreso será descartado."; -"Alert.CancelInstall.PrimaryButton" = "Detener Instalación"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Asistente Privilegiado"; -"Alert.PrivilegedHelper.Message" = "Xcodes utiliza un Asistente Privilegiado independiente para realizar tareas como root. Estas son cosas que requerirían sudo en la línea de comando, incluidos los pasos posteriores a la instalación y el cambio de versiones de Xcode con xcode-select.\n\nSe le pedirá la contraseña de su cuenta de macOS para instalarlo."; -"Alert.PrivilegedHelper.Error.Title" = "No se puede instalar el asistente"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Requisitos mínimos no cumplidos"; -"Alert.MinSupported.Message" = "Xcode %@ requiere MacOS %@, pero está ejecutando MacOS %@, ¿aún desea instalarlo?"; - -// Install -"Alert.Install.Error.Title" = "No se puede instalar Xcode"; -"Alert.InstallArchive.Error.Title" = "No se puede instalar el Xcode archivado"; - -// Update -"Alert.Update.Error.Title" = "No se puede actualizar el Xcode seleccionado"; - -// Active/Select -"Alert.Select.Error.Title" = "No se puede seleccionar el Xcode"; - -// Symbolic Links -"Alert.SymLink.Title" = "No se puede crear un enlace simbólico"; -"Alert.SymLink.Message" = "Xcode.app existe y no es un enlace simbólico"; - -// Post install -"Alert.PostInstall.Title" = "No se pueden realizar los pasos posteriores a la instalación"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "El archivo \"%@\" está dañado y no se puede expandir."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "El archivo \"%@\" no se puede expandir porque el volumen/disco actual no tiene suficiente espacio libre.\n\nHaga más espacio disponible para expandir el archivo y luego instale Xcode %@ nuevamente para comenzar la instalación desde donde lo dejó."; -"InstallationError.FailedToMoveXcodeToApplications" = "No se pudo mover Xcode al directorio %@."; -"InstallationError.FailedSecurityAssessment" = "Xcode %@ falló su evaluación de seguridad con el siguiente resultado:\n%@\nPermanece instalado en %@ si desea usarlo de todos modos."; -"InstallationError.CodesignVerifyFailed" = "El Xcode descargado falló en la verificación de firma de código con el siguiente resultado:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "El Xcode descargado no tiene la identidad de firma de código esperada.\nObtuvo:\n%@\n%@\nEsperado:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes no admite (todavía) la instalación de Xcode desde el formato de archivo %@."; -"InstallationError.MissingSudoerPassword" = "Falta la contraseña. Inténtalo de nuevo."; -"InstallationError.UnavailableVersion" = "No se pudo encontrar la versión %@."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "No hay versiones que no sean preliminares disponibles."; -"InstallationError.NoPrereleaseVersionAvailable" = "No hay versiones preliminares disponibles."; -"InstallationError.MissingUsernameOrPassword" = "Falta el nombre de usuario o una contraseña. Inténtalo de nuevo."; -"InstallationError.VersionAlreadyInstalled" = "%@ ya está instalado en %@"; -"InstallationError.InvalidVersion" = "%@ no es un número de versión válido."; -"InstallationError.VersionNotInstalled" = "%@ no esta instalada."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "La instalación se completó, pero algunos pasos posteriores a la instalación no se realizaron automáticamente. Estos se realizarán cuando inicie Xcode por primera vez %@."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "La instalación se completó, pero algunos pasos posteriores a la instalación no se realizaron automáticamente. Xcodes realiza estos pasos con un asistente privilegiado, que parece no estar instalado. Puede instalarlo desde Preferencias > Avanzado.\n\nEstos pasos se realizarán cuando inicie Xcode por primera vez %@."; - -// Installation Steps -"Downloading" = "Descargando"; -"Unarchiving" = "Desarchivando (esto puede llevar un tiempo)"; -"Moving" = "Moviendo a %@"; -"TrashingArchive" = "Mover archivo a la Papelera"; -"CheckingSecurity" = "Verificación de seguridad"; -"Finishing" = "Finalizando"; - -// Notifications -"Notification.NewVersionAvailable" = "Una nueva versión está disponible"; -"Notification.FinishedInstalling" = "Terminado de instalar"; - - -"HelperClient.error" = "No se puede comunicar con el Asistente privilegiado."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Nuevas versiones de Xcode"; -"Notification.NewXcodeVersion.Body" = "Nuevas versiones de Xcode están disponibles para descargar."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/fi.lproj/Localizable.strings b/Xcodes/Resources/fi.lproj/Localizable.strings deleted file mode 100644 index b7fd612..0000000 --- a/Xcodes/Resources/fi.lproj/Localizable.strings +++ /dev/null @@ -1,225 +0,0 @@ -// Menu -"Menu.About" = "Tietoa Xcodesista"; -"Menu.CheckForUpdates" = "Tarkasta uusia päivityksiä..."; -"Menu.Acknowledgements" = "Xcodes kunnianosoitukset"; -"Menu.GitHubRepo" = "Xcodes GitHub Repo"; -"Menu.ReportABug" = "Ilmoita bugi"; -"Menu.RequestNewFeature" = "Pyydä uutta ominaisuutta"; - -// Common -"Install" = "Asenna"; -"InstallDescription" = "Asenna tämä versio"; -"RevealInFinder" = "Näytä finderissa"; -"Active" = "Aktiivinen"; -"MakeActive" = "Aktivoi"; -"Open" = "Avaa"; -"OpenDescription" = "Avaa tämä versio"; -"CopyPath" = "Kopioi polku"; -"CreateSymLink" = "Luo Symlink nimellä Xcode.app"; -"CreateSymLinkBeta" = "Luo Symlink nimellä Xcode-Beta.app"; -"Uninstall" = "Poista"; -"Selected" = "Valittu"; -"Select" = "Valitse"; -"Cancel" = "Peruuta"; -"Next" = "Seuraava"; -"Continue" = "Jatka"; -"Close" = "Sulje"; -"OK" = "Ok"; - -// Info Pane -"IdenticalBuilds" = "Identtiset rakenteet"; -"IdenticalBuilds.help" = "Joskus esijulkaisu ja julkaisuversio ovat täsmälleen sama rakenne. Xcodes näyttää nämä versiot automaattisesti yhdessä."; - -"ReleaseDate" = "Julkaisupäivä"; -"ReleaseNotes" = "Julkaisutiedot"; -"ReleaseNotes.help" = "Lue julkaisutiedot"; -"Compatibility" = "Yhteensopivuus"; -"MacOSRequirement" = "Vaatii macOS version %@ tai myöhemmän"; -"SDKs" = "SDKs"; -"Compilers" = "Kääntäjät"; -"DownloadSize" = "Latauskoko"; -"NoXcodeSelected" = "Xcode versiota ei ole valittuna"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Vaihe %1$d / %2$d: %3$@"; -"DownloadingPercentDescription" = "Lataa: %d%% valmis"; -"StopInstallation" = "Lopeta asennus"; -"DownloadingError" = "Lataustietoja ei löytynyt"; - -// About -"VersionWithBuild" = "Versio %@ (%@)"; -"GithubRepo" = "GitHub Repo"; -"Acknowledgements" = "Kunnianosoitukset"; -"UnxipExperiment" = "Unxip Kokeilu"; -"License" = "Lisenssi"; - -// General Preference Pane -"General" = "Yleisasetukset"; -"AppleID" = "Apple ID"; -"SignIn" = "Kirjaudu sisään"; -"Notifications" = "Ilmoitukset"; - -// Updates Preference Pane -"Updates" = "Päivitysasetukset"; -"Versions" = "Versiot"; -"AutomaticInstallNewVersion" = "Asenna uudet Xcode versiot automaattisesti"; -"IncludePreRelease" = "Sisällytä esijulkaisu/beta versiot"; -"AppUpdates" = "Xcodes.app päivitykset"; -"CheckForAppUpdates" = "Tarkista päivitykset automaattisesti"; -"CheckNow" = "Tarkista nyt"; -"LastChecked" = "Viimeksi tarkistettu: %@"; -"Never" = "Ei koskaan"; - -// Download Preference Pane -"Downloads" = "Lataukset"; -"DataSource" = "Tietolähde"; -"DataSourceDescription" = "Applen tietolähde kaappaa Apple Developer -sivuston. Se näyttää aina uusimmat saatavilla olevat julkaisut, mutta se on herkempi hajoamiselle.\n\nXcode Releases on epävirallinen luettelo Xcode-julkaisuista. Se toimitetaan hyvin muotoiltuina tietoina, sisältää lisätietoa, jota ei ole helposti saatavilla Applelta, ja se ei todennäköisesti hajoa, jos Apple suunnittelee uudelleen kehittäjäsivustonsa."; -"Downloader" = "Downloader"; -"DownloaderDescription" = "aria2 käyttää jopa 16 yhteyttä ladatakseen Xcoden 3–5 kertaa nopeammin kuin URLSession. Se on niputettu suoritettavaksi tiedostoksi ja sen lähdekoodiin Xcodesissa GPLv2-lisenssin noudattamiseksi.\n\nURLSession on Applen oletussovellusliittymä URL-pyyntöjen tekemiseen.."; - -// Advanced Preference Pane -"Advanced" = "Lisäasetukset"; -"LocalCachePath" = "Paikallisen välimuistin polku"; -"LocalCachePathDescription" = "Xcodes tallentaa saatavilla olevat Xcode-versiot välimuistiin ja lataa tilapäisesti uudet versiot hakemistoon"; -"Change" = "Vaihda"; -"Active/Select" = "Aktiivinen/Valitse"; -"AutomaticallyCreateSymbolicLink" = "Luo automaattisesti symbolinen linkki Xcode.appiin"; -"AutomaticallyCreateSymbolicLinkDescription" = "Kun teet Xcode-versiosta aktiivisen/valitun, yritä luoda symbolinen linkki nimeltä Xcode.app asennushakemistoon"; -"PrivilegedHelper" = "Etuoikeutettu auttaja"; -"PrivilegedHelperDescription" = "Xcodes käyttää erillistä etuoikeutettua avustajaa tehtävien suorittamiseen pääkäyttäjänä. Nämä ovat asioita, jotka edellyttävät sudo komentoa komentorivillä, mukaan lukien asennuksen jälkeiset vaiheet ja Xcode-versioiden vaihtaminen xcode-selectillä.\n\nSinua pyydetään antamaan macOS-tilisi salasana sen asentamiseksi."; -"HelperInstalled" = "Apulainen on asennettu"; -"HelperNotInstalled" = "Apulaista ei ole asennettu"; -"InstallHelper" = "Asenna apulainen"; - -// Experiment Preference Pane -"Experiments" = "Kokeilut"; -"FasterUnxip" = "Nopeampi Unxip"; -"UseUnxipExperiment" = "Kun purat xip-tiedoston, käytä kokeiluversiota"; -"FasterUnxipDescription" = "@_saagarjhan ansiosta tämä kokeilu voi nostaa purkamisnopeutta jopa 70 % joissakin järjestelmissä.\n\nLisätietoja siitä, miten tämä tehdään, on unxip-repossa - https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "Pääsy myönnetty. Saat ilmoituksia Xcodesilta."; -"AccessDenied" = "⚠️ Pääsy kielletty ⚠️\n\nAvaa ilmoitusasetukset ja valitse Xcodes, jos haluat sallia pääsyn."; -"NotificationSettings" = "Ilmoitusasetukset"; -"EnableNotifications" = "Salli ilmoitukset"; - -// SignIn -"SignInWithApple" = "Kirjaudu sisään Apple ID:lläsi."; -"AppleID" = "AppleID:"; -"Password" = "Salasana:"; -"Required" = "Vaaditaan"; -"SignOut" = "Kirjaudu ulos"; - -// SMS/2FA -"DigitCodeDescription" = "Anna %d numeroinen koodi jostakin luotetusta laitteesta:"; -"SendSMS" = "Lähetä tekstiviesti"; -"EnterDigitCodeDescription" = "Anna %1$d numeroinen koodi, joka lähetettiin osoitteeseen %2$@: "; -"SelectTrustedPhone" = "Valitse luotettu puhelinnumero saadaksesi %d numeroisen koodin tekstiviestinä:"; -"NoTrustedPhones" = "Tililläsi ei ole luotettuja puhelinnumeroita, mutta ne vaaditaan kaksivaiheiseen todentamiseen.\n\nKatso https://support.apple.com/HT204915."; - -// MainWindow -"UpdatedAt" = "Päivitetty ajankohtana"; - -// ToolBar -"Login" = "Kirjaudu sisään"; -"LoginDescription" = "Avaa kirjautuminen"; -"Refresh" = "Päivitä"; -"RefreshDescription" = "Päivitä Xcode lista"; -"All" = "Kaikki"; -"Release" = "Julkaisuversio"; -"ReleaseOnly" = "Vain julkaisuversiot"; -"Beta" = "Beta"; -"BetaOnly" = "Vain beta versiot"; -"Filter" = "Suodata"; -"FilterAvailableDescription" = "Suodata saatavilla olevat versiot"; -"FilterInstalledDescription" = "Suodata asennetut versiot"; -"Info" = "Tietoja"; -"InfoDescription" = "Näytä tai piilota tietoruutu"; -"Preferences" = "Asetukset"; -"PreferencesDescription" = "Avaa asetukset"; -"Search" = "Etsi..."; -"SearchDescription" = "Hakulista"; - -// List -"ActiveVersionDescription" = "Tämä on aktiivinen versio"; -"MakeActiveVersionDescription" = "Tee tästä aktiivinen versio"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Poista Xcode %@?"; -"Alert.Uninstall.Message" = "Se siirretään roskakoriin, mutta sitä ei tyhjennetä."; -"Alert.Uninstall.Error.Title" = "Xcode-asennuksen poistaminen ei onnistu"; - -// Cancel Install -"Alert.CancelInstall.Title" = "Haluatko varmasti lopettaa Xcode versio %@ asennuksen?"; -"Alert.CancelInstall.Message" = "Kaikki edistyminen hylätään."; -"Alert.CancelInstall.PrimaryButton" = "Lopeta asennus"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Etuoikeutettu auttaja"; -"Alert.PrivilegedHelper.Message" = "Xcodes käyttää erillistä etuoikeutettua avustajaa tehtävien suorittamiseen pääkäyttäjänä. Nämä ovat asioita, jotka edellyttävät sudo komentoa komentorivillä, mukaan lukien asennuksen jälkeiset vaiheet ja Xcode-versioiden vaihtaminen xcode-selectillä.\n\nSinua pyydetään antamaan macOS-tilisi salasana sen asentamista varten."; -"Alert.PrivilegedHelper.Error.Title" = "Apuohjelmaa ei voi asentaa"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Vähimmäisvaatimukset eivät täyty"; -"Alert.MinSupported.Message" = "Xcode %@ vaatii macOS version %@, mutta käytät macOS versiota %@, haluatko silti asentaa sen?"; - -// Install -"Alert.Install.Error.Title" = "Xcoden asentaminen ei onnistu"; -"Alert.InstallArchive.Error.Title" = "Arkistoitua Xcodea ei voi asentaa"; - -// Update -"Alert.Update.Error.Title" = "Valittua Xcodea ei voi päivittää"; - -// Active/Select -"Alert.Select.Error.Title" = "Xcodea ei voi valita"; - -// Symbolic Links -"Alert.SymLink.Title" = "Symbolista linkkiä ei voi luoda"; -"Alert.SymLink.Message" = "Xcode.app on olemassa, eikä se ole symbolinen linkki"; - -// Post install -"Alert.PostInstall.Title" = "Asennuksen jälkeisiä vaiheita ei voi suorittaa"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "Arkisto \"%@\" on vaurioitunut, eikä sitä voi laajentaa."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "Arkistoa \"%@\" ei voi laajentaa, koska nykyisessä taltiossa ei ole tarpeeksi vapaata tilaa.\n\nAnna lisää tilaa arkiston laajentamiseksi ja asenna sitten Xcode versio %@ uudelleen aloittaaksesi asennuksen siitä, mihin se jäi."; -"InstallationError.FailedToMoveXcodeToApplications" = "Xcoden siirtäminen hakemistoon %@ epäonnistui."; -"InstallationError.FailedSecurityAssessment" = "Xcode versio %@ epäonnistui turvallisuusarvioinnissaan seuraavalla lähdöllä:\n%@\nSe pysyy asennettuna osoitteeseen %@, jos haluat käyttää sitä joka tapauksessa."; -"InstallationError.CodesignVerifyFailed" = "Ladattu Xcode versio epäonnistui koodin allekirjoitusvahvistuksessa seuraavalla lähdöllä:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "Ladatulla Xcodella ei ole odotettua koodin allekirjoitusidentiteettiä.\nSaatu:\n%@\n%@\nOletettu:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes ei (vielä) tue Xcoden asentamista %@ tiedostomuodosta."; -"InstallationError.MissingSudoerPassword" = "Salasana puuttuu. Yritä uudelleen."; -"InstallationError.UnavailableVersion" = "Versiota %@ ei löytynyt."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "Julkaisua edeltäviä versioita ei ole saatavilla."; -"InstallationError.NoPrereleaseVersionAvailable" = "Esijulkaisuversioita ei saatavilla."; -"InstallationError.MissingUsernameOrPassword" = "Käyttäjätunnus tai salasana puuttuu. Yritä uudelleen."; -"InstallationError.VersionAlreadyInstalled" = "%@ on jo asennettu osoitteeseen %@"; -"InstallationError.InvalidVersion" = "%@ ei ole kelvollinen versionumero."; -"InstallationError.VersionNotInstalled" = "%@ ei ole asennettu."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "Asennus valmistui, mutta joitain asennuksen jälkeisiä vaiheita ei suoritettu automaattisesti. Nämä suoritetaan, kun käynnistät Xcoden version %@."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "Asennus valmistui, mutta joitain asennuksen jälkeisiä vaiheita ei suoritettu automaattisesti. Xcodes suorittaa nämä vaiheet etuoikeutetulla avustajalla, jota ei näytä olevan asennettuna. Voit asentaa sen kohdasta Asetukset > Lisäasetukset.\n\nNämä vaiheet suoritetaan, kun käynnistät Xcode version %@ ensimmäisen kerran.."; - -// Installation Steps -"Downloading" = "Ladataan"; -"Unarchiving" = "Poistetaan arkistointi (tämä voi kestää hetken)"; -"Moving" = "Siirretään kohteeseen %@"; -"TrashingArchive" = "Siirretään arkistoa roskakoriin"; -"CheckingSecurity" = "Turvallisuustarkastus"; -"Finishing" = "Viimeistellään"; - -// Notifications -"Notification.NewVersionAvailable" = "Uusi versio on saatavilla"; -"Notification.FinishedInstalling" = "Asennus valmis"; - - -"HelperClient.error" = "Ei pysty kommunikoimaan etuoikeutetun avustajan kanssa."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Uudet Xcode-versiot"; -"Notification.NewXcodeVersion.Body" = "Uusia Xcode-versioita on ladattavissa."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Hyvää WWDC tapahtumaa %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/fr.lproj/Localizable.strings b/Xcodes/Resources/fr.lproj/Localizable.strings deleted file mode 100644 index 254d933..0000000 --- a/Xcodes/Resources/fr.lproj/Localizable.strings +++ /dev/null @@ -1,230 +0,0 @@ -// Menu -"Menu.About" = "À propos de Xcodes"; -"Menu.CheckForUpdates" = "Vérifier les mises à jour..."; -"Menu.Acknowledgements" = "Remerciements Xcodes"; -"Menu.GitHubRepo" = "Dépôt GitHub Xcodes"; -"Menu.ReportABug" = "Signaler un Bogue"; -"Menu.RequestNewFeature" = "Demander une Nouvelle Fonctionnalité"; - -// Common -"Install" = "Installer"; -"InstallDescription" = "Installer cette version"; -"RevealInFinder" = "Ouvrir dans le Finder"; -"CopyReleaseNoteURL" = "Copier l'URL"; -"Active" = "Version Active"; -"MakeActive" = "Activer"; -"Open" = "Ouvrir"; -"OpenDescription" = "Ouvrir cette version"; -"CopyPath" = "Copier le chemin d'accès"; -"CreateSymLink" = "Créer un Symlink pour Xcode.app"; -"CreateSymLink" = "Créer un Symlink pour Xcode-Beta.app"; -"Uninstall" = "Désinstaller"; -"Selected" = "Sélectionné"; -"Select" = "Sélectionner"; -"Cancel" = "Annuler"; -"Next" = "Suivant"; -"Continue" = "Continuer"; -"Close" = "Fermer"; -"OK" = "OK"; - -// Info Pane -"IdenticalBuilds" = "Versions identiques"; -"IdenticalBuilds.help" = "Parfois, la version préliminaire et la version finale sont exactement la même version. Xcodes affichera automatiquement ces versions ensemble."; - -"ReleaseDate" = "Date de Sortie"; -"ReleaseNotes" = "Notes de Mise à Jour"; -"ReleaseNotes.help" = "Consulter les Notes de Mise á Jour"; -"Compatibility" = "Compatibilité"; -"MacOSRequirement" = "Nécessite macOS %@ ou une version ultérieure"; -"SDKs" = "SDKs"; -"Compilers" = "Compilateurs"; -"DownloadSize" = "Taille de téléchargement"; -"NoXcodeSelected" = "Aucun Xcode Sélectionné"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Étape %1$d sur %2$d : %3$@"; -"DownloadingPercentDescription" = "Téléchargement : %d%% téléchargé"; -"StopInstallation" = "Arrêter l'installation"; -"DownloadingError" = "Aucune information de téléchargement trouvée"; - -// About -"VersionWithBuild" = "Version %@ (%@)"; -"GithubRepo" = "Dépôt GitHub"; -"Acknowledgements" = "Remerciements"; -"UnxipExperiment" = "Expérimentation Unxip"; -"License" = "Licence"; - -// General Preference Pane -"General" = "Général"; -"AppleID" = "Identifiant Apple"; -"SignIn" = "Connecter"; -"Notifications" = "Notifications"; - -// Updates Preference Pane -"Updates" = "Mise à jour"; -"Versions" = "Versions"; -"AutomaticInstallNewVersion" = "Installer automatiquement les nouvelles versions de Xcode"; -"IncludePreRelease" = "Inclure les versions préliminaires/bêta"; -"AppUpdates" = "Mises à Jour de Xcodes.app"; -"CheckForAppUpdates" = "Vérifier automatiquement les mises à jour de l'application"; -"CheckNow" = "Vérifier Maintenant"; -"LastChecked" = "Dernière vérification : %@"; -"Never" = "Jamais"; - -// Download Preference Pane -"Downloads" = "Téléchargements"; -"DataSource" = "Source de Données"; -"DataSourceDescription" = "La source de données Apple analyse le site Web de développeurs d'Apple. Elle contient les dernières versions disponibles, mais est plus fragile.\n\nXcode Releases est une liste non officielle des versions de Xcode. Elle contient des informations supplémentaires qui ne sont pas facilement disponibles auprès d'Apple et est moins susceptible de se briser si Apple refait son site Web de développeurs."; -"Downloader" = "Téléchargeur"; -"DownloaderDescription" = "aria2 utilise jusqu'à 16 connexions pour télécharger Xcode de 3 à 5 fois plus rapidement que URLSession. aria2 est fourni sous forme d'exécutable avec son code source dans Xcodes pour se conformer à sa licence GPLv2.\n\nURLSession est l'API d'Apple utilisée par défaut pour effectuer des requêtes d'URL."; - -// Advanced Preference Pane -"Advanced" = "Avancé"; -"LocalCachePath" = "Cache Local"; -"LocalCachePathDescription" = "Xcodes met en cache les versions de Xcode disponibles et télécharge temporairement les nouvelles versions dans le répertoire de cache local"; -"Change" = "Changer"; -"Active/Select" = "Activer/Sélectionner"; -"AutomaticallyCreateSymbolicLink" = "Créer automatiquement un lien symbolique vers Xcode.app"; -"AutomaticallyCreateSymbolicLinkDescription" = "Lorsque vous activez/sélectionnez une version de Xcode, essayez de créer un lien symbolique nommé Xcode.app dans le répertoire d'installation"; -"OnSelectDoNothing" = "Ne rien faire"; -"OnSelectRenameXcode" = "Toujours renommer en Xcode.app"; -"OnSelectRenameXcodeDescription" = "À la sélection, toujours essayer de renommer la version active de Xcode en Xcode.app, en renommant l'ancienne Xcode.app avec le nom de version."; - -"PrivilegedHelper" = "Assistant Privilégié"; -"PrivilegedHelperDescription" = "Xcodes utilise un assistant privilégié distinct pour effectuer des tâches en tant que root. Ce sont des tâches qui nécessiteraient sudo sur la ligne de commande, y compris les étapes de post-installation et le changement de version de Xcode avec xcode-select.\n\nVous serez invité à saisir le mot de passe de votre compte macOS pour l'installer."; -"HelperInstalled" = "L'assistant est installé"; -"HelperNotInstalled" = "L'assistant n'est pas installé"; -"InstallHelper" = "Installer l'assistant'"; - -// Experiment Preference Pane -"Experiments" = "Expérimentations"; -"FasterUnxip" = "Unxip Plus Rapide"; -"UseUnxipExperiment" = "Lors de la décompression Unxip, utiliser l'expérimentation"; -"FasterUnxipDescription" = "Grâce à @_saagarjha, cette expérimentation peut augmenter jusqu'à 70% la vitesse de décompression pour certains systèmes.\n\nPour plus d'informations sur la façon dont cela est accompli, consultez le dépôt GitHub unxip - https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "Accès autorisé. Vous recevrez des notifications de Xcodes."; -"AccessDenied" = "⚠️ Accès refusé ⚠️\n\nVeuillez ouvrir vos paramètres de notifications et sélectionnez Xcodes si vous souhaitez autoriser l'accès."; -"NotificationSettings" = "Paramètres de Notification"; -"EnableNotifications" = "Activer les Notifications"; - -// SignIn -"SignInWithApple" = "Connectez-vous avec votre identifiant Apple."; -"AppleID" = "Identifiant Apple :"; -"Password" = "Mot de passe :"; -"Required" = "Requis"; -"SignOut" = "Déconnecter"; - -// SMS/2FA -"DigitCodeDescription" = "Saisissez le code à %d chiffres de l'un de vos appareils de confiance :"; -"SendSMS" = "Envoyer un SMS"; -"EnterDigitCodeDescription" = "Entrez le code à %1$d chiffres envoyé à %2$@ : "; -"SelectTrustedPhone" = "Sélectionnez le numéro de téléphone de confiance pour recevoir un code à %d chiffres par SMS :"; -"NoTrustedPhones" = "Votre compte n'a aucun numéro de téléphone de confiance, mais ils sont requis pour l'authentification à deux facteurs.\n\nVoir https://support.apple.com/HT204915."; - -// MainWindow -"UpdatedAt" = "Mis à jour le "; - -// ToolBar -"Login" = "Connexion"; -"LoginDescription" = "Ouvrir une connexion"; -"Refresh" = "Actualiser"; -"RefreshDescription" = "Actualiser la liste des Xcode"; -"All" = "Tout"; -"Release" = "Version"; -"ReleaseOnly" = "Seulement le versions finales"; -"Beta" = "Beta"; -"BetaOnly" = "Seulement les versions bêtas"; -"Filter" = "Filtre"; -"FilterAvailableDescription" = "Filtrer les versions disponibles"; -"FilterInstalledDescription" = "Filtrer les versions installées"; -"Info" = "Informations"; -"InfoDescription" = "Afficher ou masquer le volet d'informations"; -"Preferences" = "Préférences"; -"PreferencesDescription" = "Ouvrir les Préférences"; -"Search" = "Rechercher..."; -"SearchDescription" = "Liste de recherche"; - -// List -"ActiveVersionDescription" = "Ceci est la version active"; -"MakeActiveVersionDescription" = "Activer"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Désinstaller Xcode %@ ?"; -"Alert.Uninstall.Message" = "Xcodes sera déplacé vers la corbeille, mais la corbeille ne sera pas vidée."; -"Alert.Uninstall.Error.Title" = "Impossible de désinstaller Xcode"; - -// Cancel Install -"Alert.CancelInstall.Title" = "Êtes-vous sûr de vouloir arrêter l'installation de Xcode %@ ?"; -"Alert.CancelInstall.Message" = "Toute progression sera supprimée."; -"Alert.CancelInstall.PrimaryButton" = "Arrêter l'installation"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Assistant Privilégié"; -"Alert.PrivilegedHelper.Message" = "Xcodes utilise un assistant privilégié distinct pour effectuer des tâches en tant que root. Ce sont des tâches qui nécessiteraient sudo sur la ligne de commande, y compris les étapes de post-installation et le changement de version de Xcode avec xcode-select.\n\nVous serez invité à saisir le mot de passe de votre compte macOS pour l'installer."; -"Alert.PrivilegedHelper.Error.Title" = "Impossible d'installer l'assistant"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Pré-requis minimum non satisfaits"; -"Alert.MinSupported.Message" = "Xcode %@ nécessite MacOS %@, mais vous utilisez MacOS %@, voulez-vous toujours l'installer ?"; - -// Install -"Alert.Install.Error.Title" = "Impossible d'installer Xcode"; -"Alert.InstallArchive.Error.Title" = "Impossible d'installer l'archive de Xcode"; - -// Update -"Alert.Update.Error.Title" = "Impossible de mettre à jour la version de Xcode sélectionnée"; - -// Active/Select -"Alert.Select.Error.Title" = "Impossible de sélectionner Xcode"; - -// Symbolic Links -"Alert.SymLink.Title" = "Impossible de créer un lien symbolique"; -"Alert.SymLink.Message" = "Xcode.app existe et n'est pas un lien symbolique"; - -// Post install -"Alert.PostInstall.Title" = "Impossible d'effectuer les étapes de post-installation"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "L'archive \"%@\" est endommagée et ne peut pas être décompressée."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "L'archive \"%@\" ne peut pas être décompressée car le volume actuel n'a pas assez d'espace libre.\n\nLibérez plus d'espace pour décompresser l'archive, puis réinstallez Xcode %@ pour démarrer l'installation là où elle s'est arrêtée."; -"InstallationError.FailedToMoveXcodeToApplications" = "Impossible de déplacer Xcode vers le répertoire %@."; -"InstallationError.FailedSecurityAssessment" = "Xcode %@ a échoué à son évaluation de sécurité avec le résultat suivant :\n%@\nXcode reste installé à %@ si vous souhaitez l'utiliser quand même."; -"InstallationError.CodesignVerifyFailed" = "La vérification de signature de code du Xcode téléchargé a échoué avec le résultat suivant :\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "Le Xcode téléchargé n'a pas l'identité de signature de code attendue.\nReçue :\n%@\n%@\nAttendue :\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes ne supporte pas (encore) l'installation de Xcode à partir du format de fichier %@."; -"InstallationError.MissingSudoerPassword" = "Mot de passe manquant. Veuillez réessayer."; -"InstallationError.UnavailableVersion" = "Impossible de trouver la version %@."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "Aucune version non préliminaire disponible."; -"InstallationError.NoPrereleaseVersionAvailable" = "Aucune version préliminaire disponible."; -"InstallationError.MissingUsernameOrPassword" = "Nom d'utilisateur ou mot de passe manquant. Veuillez réessayer."; -"InstallationError.VersionAlreadyInstalled" = "%@ est déjà installé à %@"; -"InstallationError.InvalidVersion" = "%@ n'est pas un numéro de version valide."; -"InstallationError.VersionNotInstalled" = "%@ n'est pas installé."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "L'installation est terminée, mais certaines étapes de post-installation n'ont pas été effectuées automatiquement. Celles-ci seront exécutées lors du premier lancement de Xcode %@."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "L'installation est terminée, mais certaines étapes de post-installation n'ont pas été effectuées automatiquement. Xcodes effectue ces étapes avec un assistant privilégié, qui ne semble pas être installé. Vous pouvez l'installer depuis Préférences > Avancé.\n\nCes étapes seront effectuées lors du premier lancement de Xcode %@."; - -// Installation Steps -"Downloading" = "Téléchargement"; -"Unarchiving" = "Décompression (cela peut prendre un certain temps)"; -"Moving" = "Déplacement vers %@"; -"TrashingArchive" = "Déplacement de l'archive vers la corbeille"; -"CheckingSecurity" = "Vérification de sécurité"; -"Finishing" = "Finition"; - -// Notifications -"Notification.NewVersionAvailable" = "Une nouvelle version est disponible"; -"Notification.FinishedInstalling" = "Installation terminée"; - - -"HelperClient.error" = "Impossible de communiquer avec l'assistant privilégié."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Nouvelles versions de Xcode"; -"Notification.NewXcodeVersion.Body" = "De nouvelles versions de Xcode sont disponibles au téléchargement."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/hi.lproj/Localizable.strings b/Xcodes/Resources/hi.lproj/Localizable.strings deleted file mode 100644 index 8a0e682..0000000 --- a/Xcodes/Resources/hi.lproj/Localizable.strings +++ /dev/null @@ -1,225 +0,0 @@ -// Menu -"Menu.About" = "एक्सकोड के बारे में"; -"Menu.CheckForUpdates" = "अद्यतनों के लिए जाँच करें..."; -"Menu.Acknowledgements" = "Xcodes स्वीकृति"; -"Menu.GitHubRepo" = "Xcodes GitHub रेपो"; -"Menu.ReportABug" = "किसी बग की रिपोर्ट करें"; -"Menu.RequestNewFeature" = "किसी नई सुविधा का अनुरोध करें"; - -// Common -"Install" = "स्थापित करे"; -"InstallDescription" = "इस संस्करण को स्थापित करें"; -"RevealInFinder" = "खोजक में प्रकट करें"; -"Active" = "सक्रिय"; -"MakeActive" = "सक्रिय बनाएँ"; -"Open" = "खोलना"; -"OpenDescription" = "इस संस्करण को खोलें"; -"CopyPath" = "पथ की कॉपी करे"; -"CreateSymLink" = "Xcode.app के रूप में सिमलिंक बनाएं"; -"CreateSymLinkBeta" = "Xcode-Beta.app के रूप में सिमलिंक बनाएं"; -"Uninstall" = "असंस्थापित करे"; -"Selected" = "चयनित"; -"Select" = "चयन करे"; -"Cancel" = "रद्द करे"; -"Next" = "अगला"; -"Continue" = "जारी रखें"; -"Close" = "बंद करे"; - -// Info Pane -"IdenticalBuilds" = "Identical Builds"; -"IdenticalBuilds.help" = "कभी-कभी एक पूर्व-रिलीज़ और रिलीज़ संस्करण एक ही बिल्ड होते हैं। Xcodes स्वचालित रूप से इन संस्करणों को एक साथ प्रदर्शित करेगा।"; - -"ReleaseDate" = "रिलीज़ दिनांक"; -"ReleaseNotes" = "रिलीज नोट्स"; -"ReleaseNotes.help" = "रिलीज़ नोट्स देखें"; -"CopyReleaseNoteURL" = "URL कॉपी करें"; -"Compatibility" = "अनुकूलता"; -"MacOSRequirement" = "macOS %@ या बाद के संस्करण की आवश्यकता है"; -"SDKs" = "SDKs"; -"Compilers" = "संकलनकर्ता"; -"DownloadSize" = "डाउनलोड आकार"; -"NoXcodeSelected" = "कोई Xcode चयनित नहीं"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "%2$d का स्टेप %1$d: %3$@"; -"DownloadingPercentDescription" = "डाउनलोड: %d%% पूर्ण"; -"StopInstallation" = "स्थापना रोकें"; -"DownloadingError" = "कोई डाउनलोड जानकारी नहीं मिली"; - -// About -"VersionWithBuild" = "संस्करण %@ (%@)"; -"GithubRepo" = "GitHub रेपो"; -"Acknowledgements" = "स्वीकृति"; -"UnxipExperiment" = "अनज़िप प्रयोग"; -"License" = "लाइसेंस"; - -// General Preference Pane -"General" = "सामान्य"; -"AppleID" = "Apple ID"; -"SignIn" = "साइन इन करें"; -"Notifications" = "सूचनाएँ"; - -// Updates Preference Pane -"Updates" = "अपडेट"; -"Versions" = "संस्करण"; -"AutomaticInstallNewVersion" = "Xcode के नए संस्करण स्वचालित रूप से स्थापित करें"; -"IncludePreRelease" = "पूर्व-रिलीज़/बीटा संस्करण शामिल करें"; -"AppUpdates" = "Xcodes.app अपडेट"; -"CheckForAppUpdates" = "ऐप अपडेट के लिए स्वचालित रूप से जांचें"; -"CheckNow" = "अभी जाँचें"; -"LastChecked" = "पिछली बार चेक किया गया: %@"; -"Never" = "कभी नहीं"; - -// Download Preference Pane -"Downloads" = "डाउनलोड"; -"DataSource" = "डेटा स्रोत"; -"DataSourceDescription" = "Apple डेटा स्रोत Apple डेवलपर वेबसाइट को स्क्रैप करता है। यह हमेशा नवीनतम रिलीज दिखाएगा जो उपलब्ध हैं, लेकिन अधिक नाजुक है।\n\nXcode Releases Xcode रिलीज़ की एक अनौपचारिक सूची है। यह सुव्यवस्थित डेटा के रूप में प्रदान किया जाता है, इसमें अतिरिक्त जानकारी होती है जो Apple से आसानी से उपलब्ध नहीं होती है, और यदि Apple अपनी डेवलपर वेबसाइट को फिर से डिज़ाइन करता है तो इसके टूटने की संभावना कम होती है।"; -"Downloader" = "डाउनलोडर"; -"DownloaderDescription" = "aria2 URLSession की तुलना में Xcode 3-5x तेजी से डाउनलोड करने के लिए 16 कनेक्शन तक का उपयोग करता है। इसे अपने GPLv2 लाइसेंस का अनुपालन करने के लिए Xcodes के भीतर अपने स्रोत कोड के साथ एक निष्पादन योग्य के रूप में बंडल किया गया है।\n\nURL अनुरोध करने के लिए URLSession डिफ़ॉल्ट Apple API है।"; - -// Advanced Preference Pane -"Advanced" = "उन्नत"; -"LocalCachePath" = "स्थानीय कैश पथ"; -"LocalCachePathDescription" = "Xcodes उपलब्ध Xcode संस्करणों को कैश करता है और एक निर्देशिका में अस्थायी रूप से नए संस्करण डाउनलोड करता है"; -"Change" = "परिवर्तन"; -"Active/Select" = "सक्रिय/चयन"; -"AutomaticallyCreateSymbolicLink" = "Xcode.app के लिए स्वचालित रूप से प्रतीकात्मक लिंक बनाएं"; -"AutomaticallyCreateSymbolicLinkDescription" = "Xcode संस्करण को सक्रिय/चयनित बनाते समय, स्थापना निर्देशिका में Xcode.app नामक एक प्रतीकात्मक लिंक बनाने का प्रयास करें"; -"PrivilegedHelper" = "विशेषाधिकार प्राप्त सहायक"; -"PrivilegedHelperDescription" = "Xcodes कार्यों को रूट के रूप में करने के लिए एक अलग विशेषाधिकार प्राप्त सहायक का उपयोग करता है। ये ऐसी चीजें हैं जिनके लिए कमांड लाइन पर sudo की आवश्यकता होगी, जिसमें पोस्ट-इंस्टॉल चरण और xcode-select के साथ Xcode संस्करण स्विच करना शामिल है।\n\nइसे इंस्टॉल करने के लिए आपको अपने macOS अकाउंट पासवर्ड के लिए कहा जाएगा।"; -"HelperInstalled" = "सहायक स्थापित है"; -"HelperNotInstalled" = "सहायक स्थापित नहीं है"; -"InstallHelper" = "सहायक स्थापित करें"; - -// Experiment Preference Pane -"Experiments" = "परीक्षण"; -"FasterUnxip" = "तेज़ अनज़िप"; -"UseUnxipExperiment" = "अनज़िपिंग करते समय, प्रयोग का उपयोग करें"; -"FasterUnxipDescription" = "@_saagarjha के लिए धन्यवाद, यह प्रयोग कुछ प्रणालियों के लिए 70% तक की गति को बढ़ा सकता है।\n\nइसे कैसे पूरा किया जाता है, इस बारे में अधिक जानकारी अनएक्सआईपी रेपो पर देखी जा सकती है - https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "प्रवेश करने की अनुमति है। आपको Xcodes से सूचनाएं प्राप्त होंगी।"; -"AccessDenied" = "⚠️ प्रवेश निषेध ⚠️\n\nकृपया अपनी सूचना सेटिंग्स खोलें और यदि आप प्रवेश की अनुमति देना चाहते हैं तो Xcodes का चयन करें."; -"NotificationSettings" = "सूचना सेटिंग्स"; -"EnableNotifications" = "सूचनाएँ सक्षम करें"; - -// SignIn -"SignInWithApple" = "अपनी Apple ID से साइन इन करें."; -"AppleID" = "AppleID:"; -"Password" = "पासवर्ड:"; -"Required" = "आवश्यक"; -"SignOut" = "साइन आउट करें"; - -// SMS/2FA -"DigitCodeDescription" = "अपने किसी विश्वसनीय डिवाइस से %d अंक कोड दर्ज करें:"; -"SendSMS" = "SMS भेजें"; -"EnterDigitCodeDescription" = "%2$@ को भेजा गया %1$d अंक कोड दर्ज करें: "; -"SelectTrustedPhone" = "SMS के द्वारा %d अंक कोड प्राप्त करने के लिए विश्वसनीय फ़ोन नंबर चुनें:"; -"NoTrustedPhones" = "आपके खाते में कोई विश्वसनीय फ़ोन नंबर नहीं है, लेकिन वे दो-कारक प्रमाणीकरण के लिए आवश्यक हैं।\n\nhttps://support.apple.com/HT204915 देखें।"; - -// MainWindow -"UpdatedAt" = "पर अपडेट किया गया"; - -// ToolBar -"Login" = "लॉग इन करें"; -"LoginDescription" = "लॉगिन खोलें"; -"Refresh" = "ताज़ा करें"; -"RefreshDescription" = "Xcode सूची ताज़ा करें"; -"All" = "सभी"; -"Release" = "रिलीज़"; -"ReleaseOnly" = "केवल रिलीज़ करें"; -"Beta" = "बीटा"; -"BetaOnly" = "केवल बीटा"; -"Filter" = "फ़िल्टर"; -"FilterAvailableDescription" = "उपलब्ध संस्करणों को फ़िल्टर करें"; -"FilterInstalledDescription" = "स्थापित संस्करणों को फ़िल्टर करें"; -"Info" = "जानकारी"; -"InfoDescription" = "जानकारी फलक दिखाएँ या छिपाएँ"; -"Preferences" = "प्राथमिकताएँ"; -"PreferencesDescription" = "प्राथमिकताएँ खोलें"; -"Search" = "खोज..."; -"SearchDescription" = "खोज सूची"; - -// List -"ActiveVersionDescription" = "यह सक्रिय संस्करण है"; -"MakeActiveVersionDescription" = "इसे सक्रिय संस्करण बनाएं"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Xcode %@ की स्थापना रद्द करें?"; -"Alert.Uninstall.Message" = "इसे ट्रैश में ले जाया जाएगा, लेकिन खाली नहीं किया जाएगा।"; -"Alert.Uninstall.Error.Title" = "Xcode की स्थापना रद्द करने में असमर्थ"; - -// Cancel Install -"Alert.CancelInstall.Title" = "क्या आप वाकई Xcode %@ की स्थापना को रोकना चाहते हैं?"; -"Alert.CancelInstall.Message" = "किसी भी प्रगति को छोड़ दिया जाएगा।"; -"Alert.CancelInstall.PrimaryButton" = "स्थापना रोकें"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "विशेषाधिकार प्राप्त सहायक"; -"Alert.PrivilegedHelper.Message" = "Xcodes कार्यों को रूट के रूप में करने के लिए एक अलग विशेषाधिकार प्राप्त सहायक का उपयोग करता है। ये ऐसी चीजें हैं जिनके लिए कमांड लाइन पर sudo की आवश्यकता होगी, जिसमें पोस्ट-इंस्टॉल चरण और xcode-select के साथ Xcode संस्करण स्विच करना शामिल है।\n\nआपको इसे स्थापित करने के लिए अपने macOS खाता पासवर्ड के लिए संकेत दिया जाएगा।"; -"Alert.PrivilegedHelper.Error.Title" = "हेल्पर स्थापित करने में असमर्थ"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "न्यूनतम आवश्यकताएं पूरी नहीं हुई"; -"Alert.MinSupported.Message" = "Xcode %@ को MacOS %@ की आवश्यकता है, लेकिन आप MacOS %@ चला रहे हैं, क्या आप अभी भी इसे स्थापित करना चाहते हैं?"; - -// Install -"Alert.Install.Error.Title" = "एक्सकोड स्थापित करने में असमर्थ"; -"Alert.InstallArchive.Error.Title" = "संग्रहीत Xcode स्थापित करने में असमर्थ"; - -// Update -"Alert.Update.Error.Title" = "चयनित Xcode को अपडेट करने में असमर्थ"; - -// Active/Select -"Alert.Select.Error.Title" = "एक्सकोड का चयन करने में असमर्थ"; - -// Symbolic Links -"Alert.SymLink.Title" = "प्रतीकात्मक लिंक बनाने में असमर्थ"; -"Alert.SymLink.Message" = "Xcode.app मौजूद है और एक प्रतीकात्मक लिंक नहीं है"; - -// Post install -"Alert.PostInstall.Title" = "स्थापना के बाद के चरण निष्पादित करने में असमर्थ"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "संग्रह \"%@\" क्षतिग्रस्त है और इसे विस्तारित नहीं किया जा सकता है।"; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "संग्रह \"%@\" का विस्तार नहीं किया जा सकता क्योंकि वर्तमान वॉल्यूम में पर्याप्त रिक्त स्थान नहीं है.\n\nसंग्रह का विस्तार करने के लिए अधिक स्थान उपलब्ध कराएं और फिर Xcode %@ को फिर से स्थापित करें ताकि स्थापना वहीं से शुरू की जा सके जहां से इसे छोड़ा था।"; -"InstallationError.FailedToMoveXcodeToApplications" = "Xcode को %@ निर्देशिका में ले जाने में विफल।"; -"InstallationError.FailedSecurityAssessment" = "Xcode %@ निम्नलिखित आउटपुट के साथ अपने सुरक्षा मूल्यांकन में विफल रहा:\n%@\nयदि आप किसी भी तरह इसका उपयोग करना चाहते हैं तो यह %@ पर स्थापित रहता है।"; -"InstallationError.CodesignVerifyFailed" = "डाउनलोड किया गया Xcode निम्नलिखित आउटपुट के साथ कोड हस्ताक्षर सत्यापन में विफल रहा:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "डाउनलोड किए गए Xcode में अपेक्षित कोड हस्ताक्षर पहचान नहीं है।\nमिला:\n%@\n%@\अपेक्षित:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes (अभी तक) % @ फ़ाइल स्वरूप से Xcode स्थापित करने का समर्थन नहीं करता है।"; -"InstallationError.MissingSudoerPassword" = "पासवर्ड अनुपलब्ध है। कृपया पुन: प्रयास करें।"; -"InstallationError.UnavailableVersion" = "संस्करण %@ नहीं मिल सका।"; -"InstallationError.NoNonPrereleaseVersionAvailable" = "कोई गैर-पूर्व-रिलीज़ संस्करण उपलब्ध नहीं है।"; -"InstallationError.NoPrereleaseVersionAvailable" = "कोई पूर्व-रिलीज़ संस्करण उपलब्ध नहीं है।"; -"InstallationError.MissingUsernameOrPassword" = "उपयोगकर्ता नाम या पासवर्ड गुम है। कृपया पुन: प्रयास करें।"; -"InstallationError.VersionAlreadyInstalled" = "%@ पहले से ही %@ पर संस्थापित है"; -"InstallationError.InvalidVersion" = "%@ मान्य संस्करण संख्या नहीं है।"; -"InstallationError.VersionNotInstalled" = "%@ स्थापित नहीं किया गया।"; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "स्थापना पूर्ण हो गई थी, लेकिन कुछ पोस्ट-इंस्टॉलेशन चरण स्वचालित रूप से निष्पादित नहीं किए गए थे। ये तब किए जाएंगे जब आप पहली बार Xcode %@ लॉन्च करेंगे।"; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "स्थापना पूर्ण हो गई थी, लेकिन कुछ पोस्ट-इंस्टॉलेशन चरण स्वचालित रूप से निष्पादित नहीं किए गए थे। Xcodes इन चरणों को एक विशेषाधिकार प्राप्त सहायक के साथ निष्पादित करता है, जो स्थापित नहीं प्रतीत होता है। आप इसे Preferences > Advanced(वरीयताएँ> उन्नत) से स्थापित कर सकते हैं।\n\nजब आप पहली बार Xcode %@ लॉन्च करेंगे तो ये चरण निष्पादित किए जाएंगे।"; - -// Installation Steps -"Downloading" = "डाउनलोड"; -"Unarchiving" = "Unarchiving (इसमें कुछ समय लग सकता है)"; -"Moving" = "%@ पर जा रहा है"; -"TrashingArchive" = "संग्रह को ट्रैश में ले जाया जा रहा है"; -"CheckingSecurity" = "सुरक्षा सत्यापन"; -"Finishing" = "परिष्करण"; - -// Notifications -"Notification.NewVersionAvailable" = "नया संस्करण उपलब्ध है"; -"Notification.FinishedInstalling" = "स्थापना समाप्त हो गई"; - - -"HelperClient.error" = "विशेषाधिकार प्राप्त सहायक के साथ संवाद करने में असमर्थ।"; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "नए Xcode संस्करण"; -"Notification.NewXcodeVersion.Body" = "नए Xcode संस्करण डाउनलोड करने के लिए उपलब्ध हैं।"; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/it.lproj/Localizable.strings b/Xcodes/Resources/it.lproj/Localizable.strings deleted file mode 100644 index e8af7a2..0000000 --- a/Xcodes/Resources/it.lproj/Localizable.strings +++ /dev/null @@ -1,226 +0,0 @@ -// Menu -"Menu.About" = "Informazioni di Xcodes"; -"Menu.CheckForUpdates" = "Controllo aggiornamenti..."; -"Menu.Acknowledgements" = "Ringraziamenti di Xcodes"; -"Menu.GitHubRepo" = "Xcodes Repository di Github"; -"Menu.ReportABug" = "Segnala un Bug"; -"Menu.RequestNewFeature" = "Richiedi una nuova Feature"; - -// Common -"Install" = "Installa"; -"InstallDescription" = "Installa questa versione"; -"RevealInFinder" = "Mostra in Finder"; -"Active" = "Attiva"; -"MakeActive" = "Rendi attiva"; -"Open" = "Apri"; -"OpenDescription" = "Apri questa versione"; -"CopyPath" = "Copia Percorso"; -"CreateSymLink" = "Crea Symlink come Xcode.app"; -"CreateSymLinkBeta" = "Crea Symlink come Xcode-Beta.app"; -"Uninstall" = "Disinstalla"; -"Selected" = "Selezionato"; -"Select" = "Seleziona"; -"Cancel" = "Annulla"; -"Next" = "Avanti"; -"Continue" = "Continua"; -"Close" = "Chiudi"; -"OK" = "OK"; - -// Info Pane -"IdenticalBuilds" = "Build Identiche"; -"IdenticalBuilds.help" = "A volte una versione di prerelease e release sono esattamente la stessa build. Xcodes mostrerà automatiamente queste versioni assieme."; - -"ReleaseDate" = "Data di Rilascio"; -"ReleaseNotes" = "Note di Rilascio"; -"ReleaseNotes.help" = "Vedi Note di Rilascio"; -"CopyReleaseNoteURL" = "Copia URL"; -"Compatibility" = "Compatibilità"; -"MacOSRequirement" = "Richiede macOS %@ o successivo"; -"SDKs" = "SDKs"; -"Compilers" = "Compilatore"; -"DownloadSize" = "Dimensione Download"; -"NoXcodeSelected" = "Nessun Xcode selezionato"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Passo %1$d di %2$d: %3$@"; -"DownloadingPercentDescription" = "Download: %d%% completato"; -"StopInstallation" = "Ferma istallazione"; -"DownloadingError" = "Non trovo informazioni sul download"; - -// About -"VersionWithBuild" = "Versione %@ (%@)"; -"GithubRepo" = "GitHub Repo"; -"Acknowledgements" = "Ringraziamenti"; -"UnxipExperiment" = "Unxip Sperimentale"; -"License" = "Licenza"; - -// General Preference Pane -"General" = "Generale"; -"AppleID" = "Apple ID"; -"SignIn" = "Entra"; -"Notifications" = "Notifiche"; - -// Updates Preference Pane -"Updates" = "Aggiornamenti"; -"Versions" = "Versioni"; -"AutomaticInstallNewVersion" = "Installa automaticamente nuove versioni di Xcode"; -"IncludePreRelease" = "Includi versioni prerelease/beta"; -"AppUpdates" = "Xcodes.app Aggiornamenti"; -"CheckForAppUpdates" = "Controlla automaticamente per aggiornamenti"; -"CheckNow" = "Controlla Ora"; -"LastChecked" = "Ultimo controllo: %@"; -"Never" = "Mai"; - -// Download Preference Pane -"Downloads" = "Downloads"; -"DataSource" = "Sorgente Dati"; -"DataSourceDescription" = "La sorgente dati Apple controlla il sito sviluppatori Apple. Mostra sempre le ultime versioni disponibili, ma è più fragile. Xcode Releases è una lista non ufficiale di versioni di Xcode. E' disponibile con un formato ben strutturato, contiene più in formazioni che non vengono rilasciate da Apple ed è più difficile che smetta di funzionare se Apple ristruttura il suo sito sviluppatori."; -"Downloader" = "Scaricatore"; -"DownloaderDescription" = "aria2 usa fino a 16 connessioni per scaricar Xcode da 3 a 5 volte più veloce di URLSession. E' incluso come eseguibile assieme ai suoi sogenti dentro Xcodes per rispettare la sua licenza GPLv2. \n\nURLSession è l'API di default di Apple per fare richieste a URL remote."; - -// Advanced Preference Pane -"Advanced" = "Avanzate"; -"LocalCachePath" = "Percorso Cache Locale"; -"LocalCachePathDescription" = "Xcodes fa la cache delle versioni di Xcode disponibili e download temporanei in una directory."; -"Change" = "Cambia"; -"Active/Select" = "Attivo/Seleziona"; -"AutomaticallyCreateSymbolicLink" = "Crea Automaticamente link simbolico a Xcodes.app"; -"AutomaticallyCreateSymbolicLinkDescription" = "Quando rendi una versione di Xcode Attiva/Selezionata, prova a fare un link simbolico chiamato nella directory di installazione."; -"PrivilegedHelper" = "Aiutante Privilegiato"; -"PrivilegedHelperDescription" = "Xcodes usa un aiutante privilegiato per svolgere dei compiti come root. Si tratta di comandi che normalmente richiederebbero sudo da linea di comando, incluse fasi di post-install e modificare la versione di Xcode con xcode-select.\n\nTi verrà richiesta la password del tuo account di macOS per installarlo."; -"HelperInstalled" = "Aiutante è installato"; -"HelperNotInstalled" = "Aiutante non è installato"; -"InstallHelper" = "Installa aiutante"; - -// Experiment Preference Pane -"Experiments" = "Sperimentale"; -"FasterUnxip" = "Unxip veloce"; -"UseUnxipExperiment" = "Quando fai unxipping, usa sperimentale"; -"FasterUnxipDescription" = "Grazie a @_saagarjha, questa versione sperimentale può incrementare la velocità di unxipping fino al 70% in certi sistemi.\n\nMaggiori informazioni su come questo è possibile sono disponibili nel repository unxip - https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "Accesso Garantito. Riceverai notifiche da Xcodes."; -"AccessDenied" = "⚠️ Accesso Negato ⚠️\n\nApri le Impostazioni delle Notifiche e seleziona Xcodes se desideri garantirgli accesso."; -"NotificationSettings" = "Impostazioni delle Notifiche"; -"EnableNotifications" = "Abilita Notifiche"; - -// SignIn -"SignInWithApple" = "Entra con il tuo Apple ID."; -"AppleID" = "AppleID:"; -"Password" = "Password:"; -"Required" = "Obbligatorio"; -"SignOut" = "Esci"; - -// SMS/2FA -"DigitCodeDescription" = "Inserisci il codice di %d cifre in uno dei tuo dispositivi registrati:"; -"SendSMS" = "Manda SMS"; -"EnterDigitCodeDescription" = "Inserisci il codice di %d cifre inviato a %@: "; -"SelectTrustedPhone" = "Seleziona un numero di telefono registrato per ricevere il codice di %d cifre via SMS:"; -"NoTrustedPhones" = "Il tuo account non ha dispositivi registrati, ma è richiesto dall'autenticazione a due fattori.\n\Vedi https://support.apple.com/HT204915."; - -// MainWindow -"UpdatedAt" = "Aggiorna a"; - -// ToolBar -"Login" = "Login"; -"LoginDescription" = "Apri Login"; -"Refresh" = "Ricarica"; -"RefreshDescription" = "Ricarica Lista Xcode"; -"All" = "Tutti"; -"Release" = "Rilasci"; -"ReleaseOnly" = "Solo Rilasci"; -"Beta" = "Beta"; -"BetaOnly" = "Solo Beta"; -"Filter" = "Filtra"; -"FilterAvailableDescription" = "Filtra versioni disponibili"; -"FilterInstalledDescription" = "Filtra versioni installate"; -"Info" = "Info"; -"InfoDescription" = "Mostra o nascondi pannello informazioni"; -"Preferences" = "Preferenze"; -"PreferencesDescription" = "Apri Preferenze"; -"Search" = "Cerca..."; -"SearchDescription" = "Lista Ricerca"; - -// List -"ActiveVersionDescription" = "Questa è la versione attiva"; -"MakeActiveVersionDescription" = "Rendi questa versione attiva"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Disinstalla Xcode %@?"; -"Alert.Uninstall.Message" = "Sarà spostato nel cestino, ma non svuotato."; -"Alert.Uninstall.Error.Title" = "Non riesco a disinstallare Xcode"; - -// Cancel Install -"Alert.CancelInstall.Title" = "Sei sicuro di voler interrompere l'installazione di Xcode %@?"; -"Alert.CancelInstall.Message" = "Perderai quanto fatto finora."; -"Alert.CancelInstall.PrimaryButton" = "Ferma Installazione"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Aiutante Privilegiato"; -"Alert.PrivilegedHelper.Message" = "Xcodes usa un aiutante privilegiato per svolgere dei compiti come root. Si tratta di comandi che normalmente richiederebbero sudo da linea di comando, incluse fasi di post-install e modificare la versione di Xcode con xcode-select.\n\nTi verrà richiesta la password del tuo account di macOS per installarlo."; -"Alert.PrivilegedHelper.Error.Title" = "Non riesco a installare aiutante"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Requisiti minimi non presenti"; -"Alert.MinSupported.Message" = "Xcode %@ richiede MacOS %@, ma la tua versione di MacOS è %@, vuoi installarlo comunque?"; - -// Install -"Alert.Install.Error.Title" = "Non riesco a installare Xcode"; -"Alert.InstallArchive.Error.Title" = "Non riesco a installare Xcode archiviato"; - -// Update -"Alert.Update.Error.Title" = "Non riesco ad aggiornare Xcode selezionato"; - -// Active/Select -"Alert.Select.Error.Title" = "Non riesco a selezionare Xcode"; - -// Symbolic Links -"Alert.SymLink.Title" = "Non riesco a creare il link simbolico"; -"Alert.SymLink.Message" = "Xcode.app esiste e non è un link simbolico"; - -// Post install -"Alert.PostInstall.Title" = "Non riesco ad eseguire i comandi post installazione"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "L'archivio \"%@\" è danneggiato e non può essere espanso."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "L'archivio \"%@\" non può essere espanso perché non c'è abbastanza spazio libero nel volume.\n\nAumenta lo spazio disponibile per poter espandere l'archivio e poi installa Xcode %@ nuovamente per riprendere da dove era arrivato."; -"InstallationError.FailedToMoveXcodeToApplications" = "Non sono riuscito a spostare Xcode nella directory %@ ."; -"InstallationError.FailedSecurityAssessment" = "Xcode %@ ha fallito i check di sicurezza con il seguente errore:\n%@\nRimane installato in %@ se vuoi usarlo comunque."; -"InstallationError.CodesignVerifyFailed" = "Xcode scaricato ha fallito le verifiche di firma con il seguente errore:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "Xcode scaricato non ha l'identità di firma corretta.\nGot:\n%@\n%@\Ci aspettiamo:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes non supporta (per ora) l'installazione di Xcode dal formato %@ ."; -"InstallationError.MissingSudoerPassword" = "Manca la password. Prova di nuovo."; -"InstallationError.UnavailableVersion" = "Non trovo la versione %@."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "Non sono disponibili versioni non-prerelease."; -"InstallationError.NoPrereleaseVersionAvailable" = "Non sono disponibili versioni prerelease."; -"InstallationError.MissingUsernameOrPassword" = "Mancano username o password. Prova di nuovo"; -"InstallationError.VersionAlreadyInstalled" = "%@ è già installato in %@"; -"InstallationError.InvalidVersion" = "%@ non è una versione valida."; -"InstallationError.VersionNotInstalled" = "%@ non è installato."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "L'installazione è completata, ma alcuni comandi di post installazione non sono partiti automaticamente. Verranno lanciati quando aprirai Xcode %@ per la prima volta."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "L'installazione è completata, ma alcuni comandi di post installazione non sono partiti automaticamente. Xcodes lancia questi comandi con un aiutante privilegiato, che sembra non essere installato. Puoi instlalarlo da Preferenze > Avanzate.\n\nVerranno lanciati quando aprirai Xcode %@ per la prima volta."; - -// Installation Steps -"Downloading" = "Scaricando"; -"Unarchiving" = "Espandendo (Potrà metterci un po')"; -"Moving" = "Sposto in %@"; -"TrashingArchive" = "Sposto archivio nel Cestino"; -"CheckingSecurity" = "Verifica di sicurezza"; -"Finishing" = "Completando"; - -// Notifications -"Notification.NewVersionAvailable" = "Una nuova versione è disponibile"; -"Notification.FinishedInstalling" = "Ho terminato l'installazione"; - - -"HelperClient.error" = "Non riesco a comunicare con l'aiutante privilegiato."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Nuove versioni di Xcode"; -"Notification.NewXcodeVersion.Body" = "Nuove versioni di Xcode disponibili per il download."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/ja.lproj/Localizable.strings b/Xcodes/Resources/ja.lproj/Localizable.strings deleted file mode 100644 index 2be065e..0000000 --- a/Xcodes/Resources/ja.lproj/Localizable.strings +++ /dev/null @@ -1,238 +0,0 @@ -// Menu -"Menu.About" = "Xcodesについて"; -"Menu.CheckForUpdates" = "アップデートを確認…"; -"Menu.Acknowledgements" = "謝辞"; -"Menu.GitHubRepo" = "GitHub"; -"Menu.ReportABug" = "不具合の報告"; -"Menu.RequestNewFeature" = "機能のリクエスト"; - -// Common -"Install" = "インストール"; -"InstallDescription" = "このバージョンをインストール"; -"RevealInFinder" = "Finderに表示"; -"Active" = "アクティブ"; -"MakeActive" = "アクティブにする"; -"Open" = "開く"; -"OpenDescription" = "このバージョンを開く"; -"CopyPath" = "パスをコピー"; -"CreateSymLink" = "Xcode.appとしてシンボリックリンクを作成"; -"CreateSymLinkBeta" = "Xcode-Beta.appとしてシンボリックリンクを作成"; -"Uninstall" = "アンインストール"; -"Selected" = "アクティブ"; -"Select" = "アクティブにする"; -"Cancel" = "キャンセル"; -"Next" = "次へ"; -"Continue" = "続ける"; -"Close" = "閉じる"; -"OK" = "OK"; - -// Info Pane -"IdenticalBuilds" = "ビルドの同一性"; -"IdenticalBuilds.help" = "プレリリース版とリリース版が全く同じビルドであることがあります。Xcodesはこれらのバージョンを自動的に一緒に表示します。"; - -"ReleaseDate" = "リリース日"; -"ReleaseNotes" = "リリースノート"; -"ReleaseNotes.help" = "リリースノートを表示"; -"CopyReleaseNoteURL" = "URLをコピー"; -"Compatibility" = "互換性"; -"MacOSRequirement" = "macOS %@ 以降"; -"SDKs" = "SDK"; -"Compilers" = "コンパイラ"; -"DownloadSize" = "サイズ"; -"NoXcodeSelected" = "Xcodeが選択されていません"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "ステップ %1$d / %2$d: %3$@"; -"DownloadingPercentDescription" = "ダウンロード中: %d%%"; -"StopInstallation" = "インストールを中止"; -"DownloadingError" = "ダウンロードに関する情報が見つかりませんでした。"; - -// About -"VersionWithBuild" = "バージョン %@ (%@)"; -"GithubRepo" = "GitHub"; -"Acknowledgements" = "謝辞"; -"UnxipExperiment" = "Unxip Experiment"; -"License" = "ライセンス"; - -// General Preference Pane -"General" = "一般"; -"AppleID" = "Apple ID"; -"SignIn" = "サインイン"; -"Notifications" = "通知"; - -// Updates Preference Pane -"Updates" = "アップデート"; -"Versions" = "バージョン"; -"AutomaticInstallNewVersion" = "新しい Xcode バージョンを自動的にインストールする"; -"IncludePreRelease" = "プレリリース版 / ベータ版を含む"; -"AppUpdates" = "Xcodes.appの更新"; -"CheckForAppUpdates" = "アプリのアップデートを自動で確認する"; -"CheckNow" = "今すぐ確認"; -"LastChecked" = "前回の確認: %@"; -"Never" = "なし"; - -// Download Preference Pane -"Downloads" = "ダウンロード"; -"DataSource" = "データソース"; -"DataSourceDescription" = "Appleのデータソースは、Apple Developerのウェブサイトをスクレイピングしています。常に最新のリリースが表示されますが、比較的壊れやすくなっています。\n\nXcode Releasesは、非公式なXcodeのリリース一覧です。この一覧は整形されたデータとして提供されます。Appleからは簡単に入手できない特別な情報を含んでおり、AppleがDeveloper ウェブサイトを再設計しても壊れにくくなっています。"; -"Downloader" = "ダウンローダ"; -"DownloaderDescription" = "aria2 は、最大16個の接続を使用して、Xcode を URLSession の3-5 倍のスピードでダウンロードします。GPLv2 ライセンスに準拠するため、Xcodes 内にソースコードと一緒に実行ファイルとしてバンドルされています。\n\nURLSession は、URLリクエストを行うための Apple のデフォルト API です。"; - -// Advanced Preference Pane -"Advanced" = "上級者向け"; -"LocalCachePath" = "ローカルキャッシュパス"; -"LocalCachePathDescription" = "Xcodesは、利用可能なXcodeのバージョンをキャッシュし、新しいバージョンをディレクトリに一時的にダウンロードします。"; -"Change" = "変更"; -"Active/Select" = "アクティブ"; -"InstallDirectory" = "インストール先"; -"InstallPathDescription" = "Xcodesは1つのディレクトリを検索し、そこにインストールします。デフォルト (推奨) は /Applications です。Xcodeの格納場所を変更すると、他のアプリケーションやサービスが動作しなくなる可能性があります。"; - -"OnSelectDoNothing" = "名前をXcode-X.X.X.appのまま維持する"; -"OnSelectDoNothingDescription" = "選択時、バージョン付きの名前を維持します。例) Xcode-13.4.1.app"; -"AutomaticallyCreateSymbolicLink" = "Xcode.appへのシンボリックリンクの自動生成"; -"AutomaticallyCreateSymbolicLinkDescription" = "Xcodeのバージョンをアクティブにする時、インストール先でXcode.appのシンボリックリンクの作成を試みます。"; -"OnSelectRenameXcode" = "名前を常にXcode.appに変更する"; -"OnSelectRenameXcodeDescription" = "選択時、自動的にアクティブなXcodeをXcode.appに、以前のXcode.appをバージョン付きの名前に変更します。"; - -"PrivilegedHelper" = "権限のあるヘルパー"; -"PrivilegedHelperDescription" = "Xcodesは、rootとしてタスクを実行するために、別の権限のあるヘルパーを使用します。インストール後の手順や xcode-select による Xcode のバージョン切り替えなど、コマンドラインで sudo を必要とするものです。\n\nインストールには、macOS アカウントのパスワードの入力が必要です。"; -"HelperInstalled" = "インストール済み"; -"HelperNotInstalled" = "未インストール"; -"InstallHelper" = "ヘルパーのインストール"; - -"ShowOpenInRosetta" = "Rosettaで開くオプションを表示する"; -"ShowOpenInRosettaDescription" = "Rosettaで開くオプションは \"開く\" 機能が利用できる場所に表示されます。注意: これはApple Siliconマシンにのみ表示されます。"; - -// Experiment Preference Pane -"Experiments" = "試験的な機能"; -"FasterUnxip" = "高速な Unxip"; -"UseUnxipExperiment" = "試験的な Unxip の実装を使う"; -"FasterUnxipDescription" = "@_saagarjha さんの方法で、一部のシステムで Unxip の速度が最大70%向上します。\n\n方法の詳細については、 unxipのリポジトリ (https://github.com/saagarjha/unxip)をご覧ください。"; - -// Notifications -"AccessGranted" = "アクセスが許可されました。Xcodesから通知が届きます。"; -"AccessDenied" = "⚠️ アクセス拒否 ⚠️\n\nアクセス許可する場合は、通知設定を開き、Xcodesを選択してください。"; -"NotificationSettings" = "通知設定"; -"EnableNotifications" = "通知を有効にする"; - -// SignIn -"SignInWithApple" = "Apple IDでサインインしてください。"; -"AppleID" = "Apple ID:"; -"Password" = "パスワード:"; -"Required" = "必須"; -"SignOut" = "サインアウト"; - -// SMS/2FA -"DigitCodeDescription" = "信頼できるデバイスから、%d桁のコードを入力してください。"; -"SendSMS" = "SMS を送信"; -"EnterDigitCodeDescription" = "%1$d桁のコードを%2$@に送信したので入力してください。"; -"SelectTrustedPhone" = "信頼できる電話番号を選択し、%d桁のコードをSMSで受信します。"; -"NoTrustedPhones" = "このアカウントに2要素認証に利用する、信頼できる電話番号がありません。\n\n詳しくはこちらをご確認ください。https://support.apple.com/HT204915"; - -// MainWindow -"UpdatedAt" = "前回の更新:"; - -// ToolBar -"Login" = "ログイン"; -"LoginDescription" = "ログイン画面を開く"; -"Refresh" = "再読み込み"; -"RefreshDescription" = "Xcodeの一覧を再度取得する"; -"All" = "すべて"; -"Release" = "リリース"; -"ReleaseOnly" = "リリース版のみ"; -"Beta" = "ベータ"; -"BetaOnly" = "ベータ版のみ"; -"Filter" = "フィルタ"; -"FilterAvailableDescription" = "利用可能なバージョンのフィルタを適用する"; -"FilterInstalledDescription" = "インストール済みバージョンのフィルタを適用する"; -"Info" = "情報"; -"InfoDescription" = "情報パネルの切り替え"; -"Preferences" = "環境設定"; -"PreferencesDescription" = "環境設定を開く"; -"Search" = "検索…"; -"SearchDescription" = "一覧の検索"; - -// List -"ActiveVersionDescription" = "アクティブなバージョン"; -"MakeActiveVersionDescription" = "アクティブなバージョンにする"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Xcode %@ をアンインストールしてもよろしいですか?"; -"Alert.Uninstall.Message" = "ゴミ箱に移動されますが、ゴミ箱を自動的に空にすることはありません。"; -"Alert.Uninstall.Error.Title" = "Xcode をアンインストールできませんでした"; -"Alert.Uninstall.Error.Message.FileNotFound" = "ファイル \"%@\" が見つかりませんでした。"; - -// Cancel Install -"Alert.CancelInstall.Title" = "Xcode %@ のインストールを中止してもよろしいですか?"; -"Alert.CancelInstall.Message" = "インストール前の状態に戻します。"; -"Alert.CancelInstall.PrimaryButton" = "インストールを中止"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "権限のあるヘルパー"; -"Alert.PrivilegedHelper.Message" = "Xcodesは、Rootとしてタスクを実行するために、別の権限のあるヘルパーを使用します。インストール後の手順や xcode-select による Xcode のバージョン切り替えなど、コマンドラインで sudo を必要とするものです。\n\nインストールには、macOS アカウントのパスワードの入力が必要です。"; -"Alert.PrivilegedHelper.Error.Title" = "ヘルパーをインストールできませんでした"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "システム要件を満たしていません"; -"Alert.MinSupported.Message" = "Xcode %@ を使うには macOS %@ 以降が必要です。このシステムは macOS %@ ですが、インストールを続行しますか?"; - -// Install -"Alert.Install.Error.Title" = "Xcode をインストールできませんでした"; -"Alert.InstallArchive.Error.Title" = "Xcode アーカイブをインストールできませんでした"; - -// Update -"Alert.Update.Error.Title" = "Xcode の一覧をアップデートできませんでした"; - -// Active/Select -"Alert.Select.Error.Title" = "Xcode をアクティブにすることができませんでした"; - -// Symbolic Links -"Alert.SymLink.Title" = "シンボリックリンクを作成できませんでした"; -"Alert.SymLink.Message" = "Xcode.appが存在し、シンボリックリンクではありません。"; - -// Post install -"Alert.PostInstall.Title" = "インストール後の作業を実行できませんでした"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "このアーカイブ \"%@\" は破損していて展開できません。"; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "このボリュームの空き容量が不足しているため、アーカイブ \"%@\" を展開できません。\n\n空き容量を増やしてから Xcode %@ のインストールをもう一度お試しください。"; -"InstallationError.FailedToMoveXcodeToApplications" = "Xcode を %@ に移動できませんでした。"; -"InstallationError.FailedSecurityAssessment" = "Xcode %@ は、以下の出力でセキュリティ評価に失敗しました。\n%@\nそれでも使用したい場合は、%@にインストールされたままになっています。"; -"InstallationError.CodesignVerifyFailed" = "ダウンロードしたXcodeは、以下の出力で署名の検証に失敗しました。\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "ダウンロードしたXcodeに想定された署名IDがありません。\nGot:\n%@\n%@\nExpected:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes は %@ 形式でのインストールには(まだ)対応していません。"; -"InstallationError.MissingSudoerPassword" = "パスワードが見つかりません。もう一度お試しください。"; -"InstallationError.UnavailableVersion" = "バージョン %@ が見つかりません。"; -"InstallationError.NoNonPrereleaseVersionAvailable" = "プレリリース以外の利用可能なバージョンがありません。"; -"InstallationError.NoPrereleaseVersionAvailable" = "利用可能なプレリリースバージョンがありません。"; -"InstallationError.MissingUsernameOrPassword" = "ユーザ名またはパスワードが見つかりません。もう一度お試しください。"; -"InstallationError.VersionAlreadyInstalled" = "%@ は既に %@ にインストールされています。"; -"InstallationError.InvalidVersion" = "%@ は有効なバージョン番号ではありません。"; -"InstallationError.VersionNotInstalled" = "%@ がインストールされていません。"; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "インストールは完了しましたが、いくつかのインストール後のタスクが自動的に実行されませんでした。このタスクは Xcode %@ を初回起動した際に実行されます。"; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "インストールは完了しましたが、いくつかのインストール後作業が自動的に実行されませんでした。Xcodes は権限のあるヘルパーを使ってタスクを実行しますが、ヘルパーがインストールされていません。環境設定 > 上級者向け でインストールできます。\n\nこのタスクは Xcode %@ を初回起動した際に実行されます。"; - -// Installation Steps -"Downloading" = "ダウンロードしています"; -"Unarchiving" = "アーカイブを展開しています (時間がかかることがあります)"; -"Moving" = "%@ に移動しています"; -"TrashingArchive" = "アーカイブをゴミ箱に移動しています"; -"CheckingSecurity" = "セキュリティを検証しています"; -"Finishing" = "終了しています"; - -// Notifications -"Notification.NewVersionAvailable" = "新しいバージョンが利用可能です"; -"Notification.FinishedInstalling" = "インストールを完了しました"; - - -"HelperClient.error" = "権限のあるヘルパーと通信できません。"; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "新しいXcodeのバージョン"; -"Notification.NewXcodeVersion.Body" = "新しいバージョンがダウンロードできます。"; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/ko.lproj/Localizable.strings b/Xcodes/Resources/ko.lproj/Localizable.strings deleted file mode 100644 index 7f5653e..0000000 --- a/Xcodes/Resources/ko.lproj/Localizable.strings +++ /dev/null @@ -1,226 +0,0 @@ -// Menu -"Menu.About" = "Xcodes 정보"; -"Menu.CheckForUpdates" = "업데이트 확인..."; -"Menu.Acknowledgements" = "Xcodes 법적고지"; -"Menu.GitHubRepo" = "Xcodes GitHub 저장소"; -"Menu.ReportABug" = "버그 제보하기"; -"Menu.RequestNewFeature" = "새로운 기능 요청하기"; - -// Common -"Install" = "설치"; -"InstallDescription" = "이 버전 설치하기"; -"RevealInFinder" = "Finder에서 보기"; -"Active" = "기본 버전으로 사용 중"; -"MakeActive" = "기본 버전으로 만들기"; -"Open" = "열기"; -"OpenDescription" = "이 버전 열기"; -"CopyPath" = "경로 복사하기"; -"CreateSymLink" = "Xcode.app과 같은 Symlink 만들기"; -"CreateSymLinkBeta" = "Xcode-Beta.app과 같은 Symlink 만들기"; -"Uninstall" = "제거"; -"Selected" = "선택됨"; -"Select" = "선택"; -"Cancel" = "취소"; -"Next" = "다음"; -"Continue" = "계속하기"; -"Close" = "닫기"; -"OK" = "확인"; - -// Info Pane -"IdenticalBuilds" = "동일한 빌드"; -"IdenticalBuilds.help" = "가끔 사전 출시 (prerelease) 버전과 출시 버전이 완전히 동일한 빌드인 경우가 있습니다. Xcodes는 자동으로 이 버전들을 함께 표시합니다."; - -"ReleaseDate" = "출시일"; -"ReleaseNotes" = "릴리즈 노트"; -"ReleaseNotes.help" = "릴리즈 노트 보기"; -"CopyReleaseNoteURL" = "URL 복사"; -"Compatibility" = "호환성"; -"MacOSRequirement" = "macOS %@ 또는 이후 버전"; -"SDKs" = "SDKs"; -"Compilers" = "컴파일러"; -"DownloadSize" = "다운로드 크기"; -"NoXcodeSelected" = "선택된 Xcode 없음"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "%1$d / %2$d 단계: %3$@"; -"DownloadingPercentDescription" = "다운로드 중: %d%% 완료"; -"StopInstallation" = "설치 중지"; -"DownloadingError" = "다운로드 정보를 찾을 수 없음"; - -// About -"VersionWithBuild" = "버전 %@ (%@)"; -"GithubRepo" = "GitHub 저장소"; -"Acknowledgements" = "Acknowledgements"; -"UnxipExperiment" = "Unxip 실험"; -"License" = "라이센스"; - -// General Preference Pane -"General" = "일반"; -"AppleID" = "Apple ID"; -"SignIn" = "로그인하기"; -"Notifications" = "알림"; - -// Updates Preference Pane -"Updates" = "업데이트"; -"Versions" = "버전"; -"AutomaticInstallNewVersion" = "새 Xcode 버전 자동으로 설치"; -"IncludePreRelease" = "사전 출시/베타 버전 포함"; -"AppUpdates" = "Xcodes.app 업데이트"; -"CheckForAppUpdates" = "업데이트 자동 확인"; -"CheckNow" = "지금 확인하기"; -"LastChecked" = "마지막 확인 시점: %@"; -"Never" = "확인하지 않음"; - -// Download Preference Pane -"Downloads" = "다운로드"; -"DataSource" = "데이터 소스"; -"DataSourceDescription" = "Apple 데이터 소스는 Apple Developer 웹사이트를 스크랩합니다. Apple Developer에는 항상 사용 가능한 최신 출시 버전이 표시되지만 취약한 면이 있습니다.\n\nXcode Releases는 비공식적인 Xcode 출시 버전 목록입니다. Xcode Releases에서는 정리된 데이터를 제공하며, Apple에서 쉽게 구할 수 없는 정보를 포함하며 Apple이 Apple Developer를 재설계할 경우에도 안전할 수 있습니다."; -"Downloader" = "다운로더"; -"DownloaderDescription" = "aria2는 최대 16 개의 연결을 사용하여 URLSession보다 3~5배 더 빠르게 Xcode를 다운로드합니다. GPLv2 라이센스를 준수하기 위해 Xcodes 내 소스 코드와 함께 실행 파일 번들로 제공됩니다.\n\nURLSession은 URL 요청을 만들기 위한 기본 Apple API입니다."; - -// Advanced Preference Pane -"Advanced" = "고급"; -"LocalCachePath" = "로컬 캐시 경로"; -"LocalCachePathDescription" = "Xcodes는 사용 가능한 Xcode 버전을 캐시하고 임시로 디렉토리에 새 버전을 다운로드 합니다."; -"Change" = "변경"; -"Active/Select" = "기본 버전/선택"; -"AutomaticallyCreateSymbolicLink" = "Xcodes.app에 대한 심볼릭 링크 자동 생성"; -"AutomaticallyCreateSymbolicLinkDescription" = "Xcode 버전을 기본 버전(활성)/선택됨 상태로 만들 때 설치 디렉토리에 Xcode.app이라는 심볼릭 링크를 만들어 보세요."; -"PrivilegedHelper" = "권한을 가진 도우미 (Privileged Helper)"; -"PrivilegedHelperDescription" = "Xcodes는 별도의 권한을 가진 도우미를 사용하여 작업을 루트로서 수행합니다. 설치 후 단계와 xcode-select로 Xcode 버전을 전환하는 것과 같이 커맨드 라인에서 sudo가 필요한 작업이 이에 해당합니다.\n\n설치하려면 macOS 계정 암호를 입력하라는 메시지가 표시됩니다."; -"HelperInstalled" = "도우미 설치됨"; -"HelperNotInstalled" = "도우미 설치되지 않음"; -"InstallHelper" = "도우미 설치"; - -// Experiment Preference Pane -"Experiments" = "실험실"; -"FasterUnxip" = "더 빠른 Unxip"; -"UseUnxipExperiment" = "unxipping 시 실험 기능 사용"; -"FasterUnxipDescription" = "@_saagarjha님 덕분에 이 실험 기능을 이용하면 일부 시스템에서 압축 해제 속도를 최대 70%까지 향상시킬 수 있습니다.\n\n이를 수행하는 방법에 대한 자세한 내용은 unxip 저장소 (https://github.com/saagarjha/unxip)에서 확인할 수 있습니다."; - -// Notifications -"AccessGranted" = "접근 권한이 부여되었습니다. Xcodes에서 알림을 받게 됩니다."; -"AccessDenied" = "⚠️ 접근 권한이 부여되지 않았습니다 ⚠️\n\n 접근을 허용하려면 알림 설정을 열고 Xcodes를 선택하여 알림을 허용해주세요."; -"NotificationSettings" = "알림 설정"; -"EnableNotifications" = "알림 활성화"; - -// SignIn -"SignInWithApple" = "Apple ID로 로그인하세요."; -"AppleID" = "AppleID:"; -"Password" = "비밀번호:"; -"Required" = "필수 입력"; -"SignOut" = "로그아웃"; - -// SMS/2FA -"DigitCodeDescription" = "신뢰할 수 있는 장치 중 하나에서 %d 자리 코드를 입력하세요."; -"SendSMS" = "SMS 보내기"; -"EnterDigitCodeDescription" = "%2$@(으)로 전송된 %1$d 자리 코드를 입력하세요."; -"SelectTrustedPhone" = "SMS를 통해 %d 자리 코드를 수신하려면 신뢰할 수 있는 전화번호를 선택하세요."; -"NoTrustedPhones" = "계정에 신뢰할 수 있는 전화번호가 없지만 이중 인증(2FA)에 필요합니다.\n\nhttps://support.apple.com/HT204915를 참조하세요."; - -// MainWindow -"UpdatedAt" = "마지막 업데이트 시점"; - -// ToolBar -"Login" = "로그인"; -"LoginDescription" = "로그인 창 열기"; -"Refresh" = "갱신"; -"RefreshDescription" = "Xcode 목록 갱신"; -"All" = "전체"; -"Release" = "출시 버전"; -"ReleaseOnly" = "출시 버전만"; -"Beta" = "베타"; -"BetaOnly" = "베타만"; -"Filter" = "필터"; -"FilterAvailableDescription" = "이용 가능한 버전만 보기"; -"FilterInstalledDescription" = "설치한 버전만 보기"; -"Info" = "정보"; -"InfoDescription" = "정보창 표시 또는 숨기기"; -"Preferences" = "환경설정"; -"PreferencesDescription" = "환경설정 열기"; -"Search" = "검색하기..."; -"SearchDescription" = "목록 검색하기"; - -// List -"ActiveVersionDescription" = "기본 버전으로 사용 중"; -"MakeActiveVersionDescription" = "기본 버전으로 만들기"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Xcode %@을 제거하시겠습니까?"; -"Alert.Uninstall.Message" = "휴지통으로 이동되지만 비워지지는 않습니다."; -"Alert.Uninstall.Error.Title" = "Xcode를 제거할 수 없음"; - -// Cancel Install -"Alert.CancelInstall.Title" = "Xcode %@ 설치를 중지하시겠습니까?"; -"Alert.CancelInstall.Message" = "진행된 모든 사항은 삭제됩니다"; -"Alert.CancelInstall.PrimaryButton" = "설치 중지"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "권한을 가진 도우미 (Privileged Helper)"; -"Alert.PrivilegedHelper.Message" = "Xcodes는 별도의 권한을 가진 도우미를 사용하여 작업을 루트로서 수행합니다. 설치 후 단계와 xcode-select로 Xcode 버전을 전환하는 것과 같이 커맨드 라인에서 sudo가 필요한 작업이 이에 해당합니다.\n\n설치하려면 macOS 계정 암호를 입력하라는 메시지가 표시됩니다."; -"Alert.PrivilegedHelper.Error.Title" = "도우미를 설치할 수 없음"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "최소 요건 충족되지 않음"; -"Alert.MinSupported.Message" = "Xcode %@는 MacOS %@이(가) 필요하지만 MacOS %@을(를) 실행 중입니다. 그래도 설치하시겠습니까?"; - -// Install -"Alert.Install.Error.Title" = "Xcode를 설치할 수 없음"; -"Alert.InstallArchive.Error.Title" = "아카이브된 Xcode를 설치할 수 없음"; - -// Update -"Alert.Update.Error.Title" = "선택된 Xcode를 업데이트할 수 없음"; - -// Active/Select -"Alert.Select.Error.Title" = "Xcode를 선택할 수 없음"; - -// Symbolic Links -"Alert.SymLink.Title" = "심볼릭 링크를 생성할 수 없음"; -"Alert.SymLink.Message" = "Xcode.app이 존재하며 심볼릭 링크가 아닙니다."; - -// Post install -"Alert.PostInstall.Title" = "설치 후 단계를 수행할 수 없음"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "아카이브 \"%@\"이(가) 손상되어 확장할 수 없습니다."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "현재 볼륨에 여유 공간이 충분하지 않기 때문에 아카이브 \"%@\"을(를) 확장할 수 없습니다.\n\n아카이브를 확장하기 위해 더 많은 공간을 확보한 다음 Xcode %@을(를) 다시 설치하여 중단된 위치에서 설치를 시작하세요."; -"InstallationError.FailedToMoveXcodeToApplications" = "Xcode를 %@ 디렉토리로 이동하지 못했습니다."; -"InstallationError.FailedSecurityAssessment" = "Xcode %@이(가) 다음과 같이 보안 평가에 실패했습니다.\n%@\n그래도 사용하려는 경우 %@에 설치된 상태로 유지됩니다."; -"InstallationError.CodesignVerifyFailed" = "다운로드한 Xcode가 다음과 같이 코드 서명 확인에 실패했습니다.\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "다운로드한 Xcode에 예상된 코드 서명 ID가 없습니다.\n받은 값:\n%@\n%@\n예상된 값:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes는 (아직) %@ 파일 형식에서 Xcode 설치를 지원하지 않습니다."; -"InstallationError.MissingSudoerPassword" = "비밀번호가 입력되지 않았습니다. 다시 시도해 주세요."; -"InstallationError.UnavailableVersion" = "%@ 버전을 찾을 수 없습니다."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "사전 출시 버전 이외에 사용 가능한 버전이 없습니다."; -"InstallationError.NoPrereleaseVersionAvailable" = "사용 가능한 사전 출시 버전이 없습니다."; -"InstallationError.MissingUsernameOrPassword" = "사용자 이름 또는 비밀번호가 입력되지 않았습니다. 다시 시도해 주세요."; -"InstallationError.VersionAlreadyInstalled" = "%@은(는) 이미 %@에 설치되어 있습니다."; -"InstallationError.InvalidVersion" = "%@은(는) 유효한 버전 번호가 아닙니다."; -"InstallationError.VersionNotInstalled" = "%@이(가) 설치되지 않았습니다."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "설치가 완료되었지만 일부 설치 후 단계가 자동으로 수행되지 않았습니다. 이는 Xcode %@를 처음 실행할 때 수행됩니다."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "설치가 완료되었지만 일부 설치 후 단계가 자동으로 수행되지 않았습니다. Xcodes는 설치되지 않은 것으로 보이는 권한을 가진 도우미 (Privileged helper)를 사용하여 이러한 단계를 수행합니다. 권한을 가진 도우미는 환경설정 > 고급에서 설치할 수 있습니다.\n\n이 단계는 Xcode %@를 처음 실행할 때 수행됩니다."; - -// Installation Steps -"Downloading" = "다운로드 중"; -"Unarchiving" = "언아카이빙 중 (시간이 좀 걸릴 수 있습니다)"; -"Moving" = "%@(으)로 이동 중"; -"TrashingArchive" = "아카이브를 휴지통으로 이동"; -"CheckingSecurity" = "보안 확인"; -"Finishing" = "마무리하는 중"; - -// Notifications -"Notification.NewVersionAvailable" = "새 버전을 사용할 수 있습니다"; -"Notification.FinishedInstalling" = "설치 완료"; - - -"HelperClient.error" = "권한을 가진 도우미 (Privileged helper)와의 통신할 수 없습니다."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "새 Xcode 버전"; -"Notification.NewXcodeVersion.Body" = "새로운 Xcode 버전을 다운로드 할 수 있습니다."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/nl.lproj/Localizable.strings b/Xcodes/Resources/nl.lproj/Localizable.strings deleted file mode 100644 index e1fe455..0000000 --- a/Xcodes/Resources/nl.lproj/Localizable.strings +++ /dev/null @@ -1,230 +0,0 @@ -// Menu -"Menu.About" = "Over Xcodes"; -"Menu.CheckForUpdates" = "Controleren op Updates..."; -"Menu.Acknowledgements" = "Xcodes Dankbetuigingen"; -"Menu.GitHubRepo" = "Xcodes GitHub Repo"; -"Menu.ReportABug" = "Bug Rapporteren"; -"Menu.RequestNewFeature" = "Nieuwe Feature Aanvragen"; - -// Common -"Install" = "Installeren"; -"InstallDescription" = "Installeer deze versie"; -"RevealInFinder" = "Toon in Finder"; -"Active" = "Actief"; -"MakeActive" = "Maak actief"; -"Open" = "Open"; -"OpenDescription" = "Open deze versie"; -"CopyPath" = "Kopieer Pad"; -"CreateSymLink" = "Creëer Symlink als Xcode.app"; -"Uninstall" = "Deinstalleren"; -"Selected" = "Geselecteerd"; -"Select" = "Selecteer"; -"Cancel" = "Annuleren"; -"Next" = "Volgende"; -"Continue" = "Doorgaan"; -"Close" = "Sluiten"; -"OK" = "OK"; - -// Info Pane -"IdenticalBuilds" = "Identieke Builds"; -"IdenticalBuilds.help" = "Soms zijn een prerelease en release versie exact hetzelfde. Xcodes toont deze versies automatisch samen."; - -"ReleaseDate" = "Release Datum"; -"ReleaseNotes" = "Release Notes"; -"ReleaseNotes.help" = "Toon Release Notes"; -"CopyReleaseNoteURL" = "Kopieer URL"; -"Compatibility" = "Compatibiliteit"; -"MacOSRequirement" = "Vereist macOS %@ of hoger"; -"SDKs" = "SDKs"; -"Compilers" = "Compilers"; -"DownloadSize" = "Download Grootte"; -"NoXcodeSelected" = "Geen Xcode Geselecteerd"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Stap %1$d van %2$d: %3$@"; -"DownloadingPercentDescription" = "Downloaden: %d%% compleet"; -"StopInstallation" = "Stop installatie"; -"DownloadingError" = "Geen download informatie gevonden"; - -// About -"VersionWithBuild" = "Versie %@ (%@)"; -"GithubRepo" = "GitHub Repo"; -"Acknowledgements" = "Dankbetuigingen"; -"UnxipExperiment" = "Unxip Experiment"; -"License" = "Licentie"; - -// General Preference Pane -"General" = "Algemeen"; -"AppleID" = "Apple ID"; -"SignIn" = "Inloggen"; -"Notifications" = "Notificaties"; - -// Updates Preference Pane -"Updates" = "Updates"; -"Versions" = "Versies"; -"AutomaticInstallNewVersion" = "Installeer nieuwe versies van Xcode automatisch"; -"IncludePreRelease" = "Prerelease/beta versies toestaan"; -"AppUpdates" = "Xcodes.app Updates"; -"CheckForAppUpdates" = "Automatisch controleren op app updates"; -"CheckNow" = "Nu Controleren"; -"LastChecked" = "Laatste controle: %@"; -"Never" = "Nooit"; - -// Advanced Preference Pane -"Advanced" = "Geavanceerd"; -"LocalCachePath" = "Lokaal Cache Pad"; -"LocalCachePathDescription" = "Xcodes cached beschikbare Xcode versies en download tijdelijk nieuwe versies naar een map"; -"Change" = "Wijzig"; -"Active/Select" = "Active/Select"; -"InstallDirectory" = "Installatie Map"; -"InstallPathDescription" = "Xcodes zoekt en installeert naar een enkele map. Standaard (en aanbevolen) is om dit in te stellen op /Applications. Wijzigingen die gemaakt worden in waar Xcode is opgeslagen kan resulteren in niet werkende apps/services. "; - -"OnSelectDoNothing" = "Behoud naam als Xcode-X.X.X.app"; -"OnSelectDoNothingDescription" = "Wanneer ingeschakeld, zal de bestandsnaam altijd het versienummer bevatten. Bijvoorbeeld Xcode-13.4.1.app"; -"AutomaticallyCreateSymbolicLink" = "Creëer automatisch een symbolic link naar Xcode.app"; -"AutomaticallyCreateSymbolicLinkDescription" = "Bij het actief maken/selecteren van een Xcode versie, probeer een symbolic link genaamd Xcode.app te maken in de installatie map"; -"OnSelectRenameXcode" = "Altijd hernoemen naar Xcode.app"; -"OnSelectRenameXcodeDescription" = "Wanneer ingeschakeld, zal automatisch de actieve Xcode hernoemd worden naar Xcode.app, de vorige Xcode.app zal hernoemd worden naar de desbetreffende versie."; - -"DataSource" = "Databron"; -"DataSourceDescription" = "De Apple databron scraped de Apple Developer website. Dit zal altijd de laatste nieuwe versies tonen die beschikbaar zijn, maar is meer foutgevoelig.\n\nXcode Releases is een onofficiële lijst van Xcode releases. Deze lijst wordt gepresenteerd als gevalideerde data en bevat extra informatie die niet beschikbaar is vanuit Apple. Deze databron is minder foutgevoelig en niet afhankelijk van wanneer Apple de developer website aanpast."; -"Downloader" = "Downloader"; -"DownloaderDescription" = "aria2 gebruikt tot 16 verbindingen om Xcode 3-5x sneller te downloaden dan met URLSession. Het is gebundeld als een executable samen met de broncode binnen Xcodes om te voldoen aan de GPLv2 licentie.\n\nURLSession is de standaard Apple API voor het maken van URL verzoeken."; -"PrivilegedHelper" = "Privileged Helper"; -"PrivilegedHelperDescription" = "Xcodes gebruikt een separate privilged helper om taken uit te voeren als root. Dit zijn operaties die een sudo vereisen op de command line, inclusief post-installatie stappen en het wijzigen van Xcode versies met xcode-select.\n\nJe zult worden gevraagd om je macOS account wachtwoord om deze te installeren."; -"HelperInstalled" = "Helper is geïnstalleerd"; -"HelperNotInstalled" = "Helper is niet geïnstalleerd"; -"InstallHelper" = "Installeer helper"; - -// Experiment Preference Pane -"Experiments" = "Experimenten"; -"FasterUnxip" = "Snellere Unxip"; -"UseUnxipExperiment" = "Bij unxipping, gebruik expiriment"; -"FasterUnxipDescription" = "Dankzij @_saagarjha, kan met dit experiment het uitpakken van Xcode tot 70% sneller gaan op sommige systemen.\n\nMeer informatie over hoe dit mogelijk wordt gemaakt kan worden gevonden op de unxip repo - https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "Toegang Verleend. Je krijgt notificaties van Xcodes."; -"AccessDenied" = "⚠️ Toegang Geweigerd ⚠️\n\nOpen je Notificatie Instellingen en selecteer Xcodes om toegang te verlenen."; -"NotificationSettings" = "Notificatie Instellingen"; -"EnableNotifications" = "Notificaties Inschakelen"; - -// SignIn -"SignInWithApple" = "Log in met je Apple ID."; -"AppleID" = "AppleID:"; -"Password" = "Wachtwoord:"; -"Required" = "Vereist"; -"SignOut" = "Uitloggen"; - -// SMS/2FA -"DigitCodeDescription" = "Voer de %d code in van een van je vertrouwde apparaten:"; -"SendSMS" = "Verstuur SMS"; -"EnterDigitCodeDescription" = "Voer de %1$d code in die is verstuurd naar %2$@: "; -"SelectTrustedPhone" = "Selecteer een vertrouwd telefoonnumer on een %d code te ontvangen via SMS:"; -"NoTrustedPhones" = "Je account heeft geen vertrouwde telefoonnummers, dit is nodig voor two-factor authenticatie.\n\nZie https://support.apple.com/HT204915."; - -// MainWindow -"UpdatedAt" = "Bijgewerkt op"; - -// ToolBar -"Login" = "Inloggen"; -"LoginDescription" = "Open Inloggen"; -"Refresh" = "Verversen"; -"RefreshDescription" = "Ververs Xcode Lijst"; -"All" = "Alles"; -"Release" = "Release"; -"ReleaseOnly" = "Alleen release"; -"Beta" = "Beta"; -"BetaOnly" = "Alleen beta"; -"Filter" = "Filter"; -"FilterAvailableDescription" = "Filter beschikbare versies"; -"FilterInstalledDescription" = "Filter geïnstalleerde versies"; -"Info" = "Info"; -"InfoDescription" = "Show or hide the info pane"; -"Preferences" = "Voorkeuren"; -"PreferencesDescription" = "Open Voorkeuren"; -"Search" = "Zoeken..."; -"SearchDescription" = "Zoek lijst"; - -// List -"ActiveVersionDescription" = "Dit is de actieve versie"; -"MakeActiveVersionDescription" = "Maak dit de actieve versie"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Xcode %@ deinstalleren?"; -"Alert.Uninstall.Message" = "Het zal worden verplaatst naar de Prullenbak, maar deze zal niet geleegd worden."; -"Alert.Uninstall.Error.Title" = "Kan Xcode niet deinstalleren"; - -// Cancel Install -"Alert.CancelInstall.Title" = "Weet je zeker dat je de installatie van Xcode %@ wilt stoppen?"; -"Alert.CancelInstall.Message" = "Elke voortgang zal worden weggegooid."; -"Alert.CancelInstall.PrimaryButton" = "Stop Installatie"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Privileged Helper"; -"Alert.PrivilegedHelper.Message" = "Xcodes gebruikt een separate privilged helper om taken uit te voeren als root. Dit zijn operaties die een sudo vereisen op de command line, inclusief post-installatie stappen en het wijzigen van Xcode versies met xcode-select.\n\nJe zult worden gevraagd om je macOS account wachtwoord om deze te installeren."; -"Alert.PrivilegedHelper.Error.Title" = "Kan helper niet installeren"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Minimale vereisten niet voldaan"; -"Alert.MinSupported.Message" = "Xcode %@ vereist MacOS %@, maar jouw MacOS versie is %@, wil je doorgaan met installeren?"; - -// Install -"Alert.Install.Error.Title" = "Kan Xcode niet installeren"; -"Alert.InstallArchive.Error.Title" = "Kan gearchiveerde Xcode niet installeren"; - -// Update -"Alert.Update.Error.Title" = "Kan geselecteerde Xcode niet updaten"; - -// Active/Select -"Alert.Select.Error.Title" = "Kan Xcode niet selecteren"; - -// Symbolic Links -"Alert.SymLink.Title" = "Kan geen symbolic link maken"; -"Alert.SymLink.Message" = "Xcode.app bestaat en is geen symbolic link"; - -// Post install -"Alert.PostInstall.Title" = "Kan post-installatie stappen niet uitvoeren"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "Het archief \"%@\" is beschadigd en kan niet worden uitgepakt."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "Het archief \"%@\" kan niet worden uitgepakt omdat het huidige volume niet voldoende vrije schijf ruimte heeft.\n\nMaak meer ruimte beschikbaar om het archief uit te pakken en installeer dan Xcode %@ opnieuw om de installatie voort te zetten."; -"InstallationError.FailedToMoveXcodeToApplications" = "Het is mislukt om Xcode te verplaatsen naar de %@ map."; -"InstallationError.FailedSecurityAssessment" = "De Xcode %@ veiligheidsbeoordeling was onsuccesvol en gaf de volgende melding:\n%@\nXcode blijft geïnstalleerd op %@ als je deze toch wilt gebruiken."; -"InstallationError.CodesignVerifyFailed" = "De gedownloade Xcode is mislukt voor verificatie van code-ondertekening met de volgende melding:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "De gedownloade Xcode heeft niet de verwachte code-ondertekeningsidentiteit.\nVerkregen:\n%@\n%@\nVerwacht:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes heeft (nog) geen ondersteuning om Xcode te installeren vanaf het %@ bestandsformaat."; -"InstallationError.MissingSudoerPassword" = "Wachtwoord ontbreekt. Probeer het opnieuw."; -"InstallationError.UnavailableVersion" = "Kan versie %@ niet vinden."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "Geen niet-prerelease versies beschikbaar."; -"InstallationError.NoPrereleaseVersionAvailable" = "Geen prerelease versies beschikbaar."; -"InstallationError.MissingUsernameOrPassword" = "Ontbrekende gebruikersnaam of wachtwoord. Probeer het opnieuw."; -"InstallationError.VersionAlreadyInstalled" = "%@ is al geïnstalleerd op %@"; -"InstallationError.InvalidVersion" = "%@ is geen geldig versie nummer."; -"InstallationError.VersionNotInstalled" = "%@ is niet geïnstalleerd."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "De installatie is voltooid, maar sommige post-installatie taken zijn niet uitgevoerd. Deze taken zullen worden uitgevoerd wanneer je Xcode %@ voor het eerst start."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "De installatie is voltooid, maar sommige post-installatie taken zijn niet uitgevoerd. Xcodes voert deze taken uit door middel van de privileged helper, maar deze lijkt niet te zijn geïnstalleerd. Je kunt deze installeren vanaf Voorkeuren > Geavanceerd.\n\nDeze taken zullen worden uitgevoerd wanneer je Xcode %@ voor het eerst start."; - -// Installation Steps -"Downloading" = "Downloaden"; -"Unarchiving" = "Dearchiveren (Dit kan even duren)"; -"Moving" = "Verplaatsen naar %@"; -"TrashingArchive" = "Bezig met archief naar Prullenbak verplaatsen"; -"CheckingSecurity" = "Beveiliging verificatie"; -"Finishing" = "Finishing"; - -// Notifications -"Notification.NewVersionAvailable" = "Nieuwe versie beschikbaar"; -"Notification.FinishedInstalling" = "Installatie voltooid"; - - -"HelperClient.error" = "Kan niet communiceren met de privileged helper."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Nieuwe Xcode versies"; -"Notification.NewXcodeVersion.Body" = "Nieuwe Xcode versies zijn beschikbaar om te downloaden."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/pl.lproj/Localizable.strings b/Xcodes/Resources/pl.lproj/Localizable.strings deleted file mode 100644 index f1a968e..0000000 --- a/Xcodes/Resources/pl.lproj/Localizable.strings +++ /dev/null @@ -1,239 +0,0 @@ -// Menu -"Menu.About" = "O Xcodes"; -"Menu.CheckForUpdates" = "Sprawdź aktualizacje..."; -"Menu.Acknowledgements" = "Podziękowania Xcodes"; -"Menu.GitHubRepo" = "Repozytorium Xcodes na GitHubie"; -"Menu.ReportABug" = "Zgłoś błąd"; -"Menu.RequestNewFeature" = "Poproś o nową funkcję"; - -// Common -"Install" = "Zainstaluj"; -"InstallDescription" = "Zainstaluj tę wersję"; -"RevealInFinder" = "Pokaż w Finderze"; -"Active" = "Aktywny"; -"MakeActive" = "Ustaw jako aktywny"; -"Open" = "Otwórz"; -"OpenDescription" = "Otwórz tę wersję"; -"CopyPath" = "Kopiuj ścieżkę"; -"CreateSymLink" = "Utwórz Symlink jako Xcode.app"; -"CreateSymLinkBeta" = "Utwórz Symlink jako Xcode-Beta.app"; -"Uninstall" = "Odinstaluj"; -"Selected" = "Wybrany"; -"Select" = "Wybierz"; -"Cancel" = "Anuluj"; -"Next" = "Dalej"; -"Continue" = "Kontynuuj"; -"Close" = "Zamknij"; -"OK" = "OK"; - -// Info Pane -"IdenticalBuilds" = "Takie same wersje"; -"IdenticalBuilds.help" = "Czasami wersja przedpremierowa i wydana są dokładnie takie same. Xcodes automatycznie wyświetla te wersje razem."; - -"ReleaseDate" = "Data wydania"; -"ReleaseNotes" = "Notatki wydania"; -"ReleaseNotes.help" = "Wyświetl notatki wydania"; -"CopyReleaseNoteURL" = "Kopiuj adres URL"; -"Compatibility" = "Kompatybilność"; -"MacOSRequirement" = "Wymaga systemu macOS %@ lub nowszego"; -"SDKs" = "SDK"; -"Compilers" = "Kompilatory"; -"DownloadSize" = "Wielkość pobierania"; -"NoXcodeSelected" = "Nie wybrano Xcode"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Krok %1$d z %2$d: %3$@"; -"DownloadingPercentDescription" = "Pobieranie: %d%% ukończone"; -"StopInstallation" = "Przerwij instalację"; -"DownloadingError" = "Nie znaleziono informacji o pobieraniu"; - -// About -"VersionWithBuild" = "Wersja %@ (%@)"; -"GithubRepo" = "Repozytorium GitHub"; -"Acknowledgements" = "Podziękowania"; -"UnxipExperiment" = "Eksperyment Unxip"; -"License" = "Licencja"; - -// General Preference Pane -"General" = "Ogólne"; -"AppleID" = "Apple ID"; -"SignIn" = "Zaloguj się"; -"Notifications" = "Powiadomienia"; - -// Updates Preference Pane -"Updates" = "Aktualizacje"; -"Versions" = "Wersje"; -"AutomaticInstallNewVersion" = "Automatycznie instaluj nowe wersje Xcode"; -"IncludePreRelease" = "Dołącz wersje beta/wstępne"; -"AppUpdates" = "Aktualizacje Xcodes.app"; -"CheckForAppUpdates" = "Automatycznie sprawdzaj aktualizacje aplikacji"; -"CheckNow" = "Sprawdź teraz"; -"LastChecked" = "Ostatnio sprawdzono: %@"; -"Never" = "Nigdy"; - -// Download Preference Pane -"Downloads" = "Pobieranie"; -"DataSource" = "Źródło danych"; -"DataSourceDescription" = "Źródło danych Apple przeszukuje stronę internetową Apple Developer. Zawsze wyświetla najnowsze dostępne wydania, ale jest bardziej podatne na problemy.\n\nXcode Releases to nieoficjalna lista wydań Xcode. Udostępnia ona dobrze sformatowane dane, zawiera dodatkowe informacje, które nie są łatwo dostępne w Apple, i jest mniej podatna na problemy, gdy Apple zmienia swoją stronę dla deweloperów."; -"Downloader" = "Pobieranie"; -"DownloaderDescription" = "aria2 używa do pobierania do 16 połączeń, co pozwala na pobieranie Xcode 3-5x szybciej niż URLSession. Jest on dostarczany jako plik wykonywalny wraz ze swoim kodem źródłowym w ramach Xcodes w celu przestrzegania jego licencji GPLv2.\n\nURLSession to domyślne API Apple do tworzenia żądań URL."; - -// Advanced Preference Pane -"Advanced" = "Zaawansowane"; -"LocalCachePath" = "Katalog cache"; -"LocalCachePathDescription" = "Xcodes przechowuje w cache dostępne wersje Xcode oraz tymczasowo pobiera nowe pliki do tego katalogu."; -"Change" = "Zmień"; -"Active/Select" = "Aktywny/wybrany"; -"InstallDirectory" = "Katalog instalacji"; -"InstallPathDescription" = "Xcodes wyszukuje i instaluje w jednym katalogu. Domyślnie (i zalecane) jest to /Applications. Wszelkie zmiany w miejscu przechowywania Xcode mogą spowodować, że inne aplikacje/usługi przestaną działać."; - -"OnSelectDoNothing" = "Zachowaj nazwę jako Xcode-X.X.X.app"; -"OnSelectDoNothingDescription" = "Po wybraniu, nazwa pozostanie w formacie z numerem wersji, np. Xcode-13.4.1.app"; -"AutomaticallyCreateSymbolicLink" = "Automatycznie twórz symboliczne połączenie do Xcode.app"; -"AutomaticallyCreateSymbolicLinkDescription" = "Przy ustawianiu Xcode jako aktywny/wybrany, próbuj automatycznie stworzyć symboliczne połączenie o nazwie Xcode.app w katalogu instalacji."; -"OnSelectRenameXcode" = "Zawsze zmieniaj nazwę na Xcode.app"; -"OnSelectRenameXcodeDescription" = "Po wybraniu, automatycznie zmienia aktywną wersję Xcode na Xcode.app, a poprzednie Xcode.app zostanie zmienione na nazwę wersji."; - -"PrivilegedHelper" = "Helper z uprawnieniami"; -"PrivilegedHelperDescription" = "Xcodes używa oddzielnego helpera z uprawnieniami do wykonywania zadań jako root. Są to rzeczy, które wymagałyby użycia komendy sudo w wierszu poleceń, w tym kroki po instalacji oraz przełączanie wersji Xcode za pomocą xcode-select.\n\nZostaniesz poproszony o podanie hasła do swojego konta macOS, aby go zainstalować."; -"HelperInstalled" = "Helper jest zainstalowany"; -"HelperNotInstalled" = "Helper nie jest zainstalowany"; -"InstallHelper" = "Zainstaluj helpera"; - -"ShowOpenInRosetta" = "Pokaż opcję Otwórz w Rosetta"; -"ShowOpenInRosettaDescription" = "Opcja Otwórz w Rosetta będzie wyświetlana, gdy dostępne są inne funkcje \"Otwórz\". Uwaga: Będzie to działać tylko na urządzeniach z Apple Silicon."; - -// Experiment Preference Pane -"Experiments" = "Eksperymenty"; -"FasterUnxip" = "Szybsze Unxip"; -"UseUnxipExperiment" = "Podczas rozpakowywania, użyj wersji eksperymentalnej"; -"FasterUnxipDescription" = "Dzięki @_saagarjha, wersja eksperymentalna może zwiększyć prędkość rozpakowywania o nawet 70% dla niektórych systemów.\n\nWięcej informacji na temat tego, jak to jest osiągane, można znaleźć w repozytorium unxip - https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "Dostęp przyznany. Będziesz otrzymywać powiadomienia z Xcodes."; -"AccessDenied" = "⚠️ Dostęp zabroniony ⚠️\n\nOtwórz ustawienia powiadomień i wybierz Xcodes, jeśli chcesz zezwolić na dostęp."; -"NotificationSettings" = "Ustawienia powiadomień"; -"EnableNotifications" = "Włącz powiadomienia"; - -// SignIn -"SignInWithApple" = "Zaloguj się przy użyciu Apple ID."; -"AppleID" = "AppleID:"; -"Password" = "Hasło:"; -"Required" = "Wymagane"; -"SignOut" = "Wyloguj się"; - -// SMS/2FA -"DigitCodeDescription" = "Wprowadź %d-cyfrowy kod z jednego ze swoich zaufanych urządzeń:"; -"SendSMS" = "Wyślij SMS"; -"EnterDigitCodeDescription" = "Wprowadź %1$d-cyfrowy kod wysłany do %2$@: "; -"SelectTrustedPhone" = "Wybierz zaufany numer telefonu, aby otrzymać %d-cyfrowy kod przez SMS:"; -"NoTrustedPhones" = "Twoje konto nie ma żadnych zaufanych numerów telefonów, ale są one wymagane do autoryzacji dwuskładnikowej.\n\nZobacz https://support.apple.com/HT204915."; - -// MainWindow -"UpdatedAt" = "Zaktualizowano o"; - -// ToolBar -"Login" = "Zaloguj się"; -"LoginDescription" = "Otwórz okno logowania"; -"Refresh" = "Odśwież"; -"RefreshDescription" = "Odśwież listę Xcode"; -"All" = "Wszystkie"; -"Release" = "Stabilne"; -"ReleaseOnly" = "Tylko stabilne"; -"Beta" = "Beta"; -"BetaOnly" = "Tylko beta"; -"Filter" = "Filtr"; -"FilterAvailableDescription" = "Filtruj dostępne wersje"; -"FilterInstalledDescription" = "Filtruj zainstalowane wersje"; -"Info" = "Informacje"; -"InfoDescription" = "Pokaż lub ukryj okno informacji"; -"Preferences" = "Ustawienia"; -"PreferencesDescription" = "Otwórz ustawienia"; -"Search" = "Szukaj..."; -"SearchDescription" = "Przeszukaj listę"; - -// List -"ActiveVersionDescription" = "To jest aktywna wersja"; -"MakeActiveVersionDescription" = "Ustaw jako aktywną wersję"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Odinstalować Xcode %@?"; -"Alert.Uninstall.Message" = "Zostanie przeniesiony do kosza, ale nie zostanie opróżniony."; -"Alert.Uninstall.Error.Title" = "Nie można odinstalować Xcode"; -"Alert.Uninstall.Error.Message.FileNotFound" = "Nie znaleziono pliku \"%@\"."; - -// Cancel Install -"Alert.CancelInstall.Title" = "Czy na pewno chcesz przerwać instalację Xcode %@?"; -"Alert.CancelInstall.Message" = "Postęp zostanie utracony."; -"Alert.CancelInstall.PrimaryButton" = "Przerwij instalację"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Helper z uprawnieniami"; -"Alert.PrivilegedHelper.Message" = "Xcodes używa oddzielnego helpera z uprawnieniami, aby wykonywać zadania jako root. Są to rzeczy, które wymagałyby sudo w wierszu poleceń, w tym kroki po instalacji i przełączanie wersji Xcode z xcode-select.\n\nBędziesz proszony o podanie hasła do konta macOS, aby go zainstalować."; -"Alert.PrivilegedHelper.Error.Title" = "Nie można zainstalować helpera"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Niezgodność z minimalnymi wymaganiami"; -"Alert.MinSupported.Message" = "Xcode %@ wymaga macOS %@, a ty masz macOS %@. Czy nadal chcesz go zainstalować?"; - -// Install -"Alert.Install.Error.Title" = "Nie można zainstalować Xcode"; -"Alert.InstallArchive.Error.Title" = "Nie można zainstalować zarchiwizowanego Xcode"; - -// Update -"Alert.Update.Error.Title" = "Nie można zaktualizować wybranej wersji Xcode"; - -// Active/Select -"Alert.Select.Error.Title" = "Nie można wybrać Xcode"; - -// Symbolic Links -"Alert.SymLink.Title" = "Nie można utworzyć linku symbolicznego"; -"Alert.SymLink.Message" = "Xcode.app istnieje i nie jest linkiem symbolicznym"; - -// Post install -"Alert.PostInstall.Title" = "Nie można wykonać czynności po-instalacyjnych"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "Archiwum \"%@\" jest uszkodzone i nie może zostać rozpakowane."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "Nie można rozpakować archiwum \"%@\", ponieważ wolumin nie ma wystarczającej ilości wolnego miejsca.\n\nZrób więcej miejsca, aby rozpakować archiwum, a następnie zainstaluj ponownie Xcode %@, aby kontynuować instalację od miejsca, w którym została wstrzymana."; -"InstallationError.FailedToMoveXcodeToApplications" = "Nie udało się przenieść Xcode do katalogu %@."; -"InstallationError.FailedSecurityAssessment" = "Xcode %@ nie przeszedł testu bezpieczeństwa z następującym wynikiem:\n%@\nPozostaje zainstalowany w %@, jeśli mimo to chcesz go używać."; -"InstallationError.CodesignVerifyFailed" = "Pobrany Xcode nie przeszedł weryfikacji sygnatury kodu z wynikiem:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "Pobrany Xcode nie ma oczekiwanej sygnatury kodu.\nOtrzymano:\n%@\n%@\nOczekiwano:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes nie obsługuje (jeszcze) instalowania Xcode z formatu %@."; - -"InstallationError.MissingSudoerPassword" = "Brak hasła. Spróbuj ponownie."; -"InstallationError.UnavailableVersion" = "Nie można znaleźć wersji %@."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "Brak wersji nie-przedpremierowych."; -"InstallationError.NoPrereleaseVersionAvailable" = "Brak wersji przedpremierowych."; -"InstallationError.MissingUsernameOrPassword" = "Brak nazwy użytkownika lub hasła. Spróbuj ponownie."; -"InstallationError.VersionAlreadyInstalled" = "%@ jest już zainstalowany w %@."; -"InstallationError.InvalidVersion" = "%@ nie jest prawidłowym numerem wersji."; -"InstallationError.VersionNotInstalled" = "%@ nie jest zainstalowany."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "Instalacja została zakończona, ale niektóre kroki po instalacji nie zostały wykonane automatycznie. Zostaną one wykonane przy pierwszym uruchomieniu Xcode %@."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "Instalacja została zakończona, ale niektóre kroki po instalacji nie zostały wykonane automatycznie. Xcodes wykonuje te kroki z pomocą helpera z uprawnieniami, który nie jest zainstalowany. Możesz go zainstalować w Ustawienia > Zaawansowane.\n\nTe kroki zostaną wykonane przy pierwszym uruchomieniu Xcode %@."; - -// Installation Steps -"Downloading" = "Pobieranie"; -"Unarchiving" = "Rozpakowywanie (To może chwilę potrwać)"; -"Moving" = "Przenoszenie do %@"; -"TrashingArchive" = "Przenoszenie archiwum do kosza"; -"CheckingSecurity" = "Weryfikacja zabezpieczeń"; -"Finishing" = "Kończenie"; - -// Notifications -"Notification.NewVersionAvailable" = "Dostępna jest nowa wersja"; -"Notification.FinishedInstalling" = "Zakończono instalację"; - - -"HelperClient.error" = "Nie można komunikować się z helperem z uprawnieniami."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Nowe wersje Xcode"; -"Notification.NewXcodeVersion.Body" = "Dostępne są nowe wersje Xcode do pobrania."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Wesołego WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/pt-BR.lproj/Localizable.strings b/Xcodes/Resources/pt-BR.lproj/Localizable.strings deleted file mode 100644 index 605b2af..0000000 --- a/Xcodes/Resources/pt-BR.lproj/Localizable.strings +++ /dev/null @@ -1,227 +0,0 @@ -// Menu -"Menu.About" = "Sobre Xcodes"; -"Menu.CheckForUpdates" = "Verificar atualizações..."; -"Menu.Acknowledgements" = "Menções de Xcodes"; -"Menu.GitHubRepo" = "Repositório Xcodes no GitHub"; -"Menu.ReportABug" = "Reportar um bug"; -"Menu.RequestNewFeature" = "Requerir uma nova funcionalidade"; - -// Common -"Install" = "Instalar"; -"InstallDescription" = "Instalar esta versão"; -"RevealInFinder" = "Abrir no Finder"; -"Active" = "Ativo"; -"MakeActive" = "Ativar"; -"Open" = "Abrir"; -"OpenDescription" = "Abrir essa versão"; -"CopyPath" = "Copiar caminho"; -"CreateSymLink" = "Criar Symlink como Xcode.app"; -"Uninstall" = "Desinstalar"; -"Selected" = "Selecionado(s)"; -"Select" = "Selecionar"; -"Cancel" = "Cancelar"; -"Next" = "Próximo"; -"Continue" = "Continuar"; -"Close" = "Fechar"; -"OK" = "OK"; - -// Info Pane -"IdenticalBuilds" = "Builds idênticos"; -"IdenticalBuilds.help" = "As vezes, uma versão pré-lançamento e uma versão de lançamento são exatemente o mesmo build. Xcodes mostrará essas versões juntas automaticamente."; - -"ReleaseDate" = "Data de lançamento"; -"ReleaseNotes" = "Notas de lançamento"; -"ReleaseNotes.help" = "Visualizar notas de lançamento"; -"Compatibility" = "Compatibilidade"; -"MacOSRequirement" = "Necessário macOS %@ ou mais recente"; -"SDKs" = "SDKs"; -"Compilers" = "Compiladores"; -"DownloadSize" = "Tamanho do download"; -"NoXcodeSelected" = "Nenhum Xcode selecionado"; - - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Passo %1$d de %2$d: %3$@"; -"DownloadingPercentDescription" = "Baixando: %d%% finalizado"; -"StopInstallation" = "Interromper instalação"; -"DownloadingError" = "Nenhuma informação de download encontrada"; - -// About -"VersionWithBuild" = "Versão %@ (%@)"; -"GithubRepo" = "Repositório GitHub"; -"Acknowledgements" = "Menções"; -"UnxipExperiment" = "Experimento Unxip"; -"License" = "Licensa"; - -// General Preference Pane -"General" = "Ajustes"; -"AppleID" = "Apple ID"; -"SignIn" = "Entrar"; -"Notifications" = "Notificações"; - -// Updates Preference Pane -"Updates" = "Atualizações"; -"Versions" = "Versões"; -"AutomaticInstallNewVersion" = "Instalar novas versões do Xcode automaticamente"; -"IncludePreRelease" = "Incluir versōes pré-lançamento/beta"; -"AppUpdates" = "Atualizações de Xcodes.app"; -"CheckForAppUpdates" = "Verificar atualizações do app automaticamente"; -"CheckNow" = "Verificar agora"; -"LastChecked" = "Ultima vez verificado: %@"; -"Never" = "Nunca"; - -// Advanced Preference Pane -"Advanced" = "Avançado"; -"LocalCachePath" = "Caminho de caches local"; -"LocalCachePathDescription" = "Xcodes faz caches de versões disponíveis do Xcode e baixa temporariamente estas novas versões para um diretório."; -"Change" = "Alterar"; -"Active/Select" = "Ativo/Selecionar"; -"AutomaticallyCreateSymbolicLink" = "Criar link simbólico para o Xcode.app automaticamente"; -"AutomaticallyCreateSymbolicLinkDescription" = "Quando ativar/selecionar uma versão do Xcode, tentar criar um link simbólico chamado Xcode.app no diretório de instalação"; -"DataSource" = "Fonte de dados"; -"DataSourceDescription" = "A fonte de dados da Apple copia o site Apple Developer. Sempre mostrará os lançamentos mais recentes que estão disponíveis, porém é mais frágil.\n\nLançamentos do Xcode (Xcode Releases) é uma lista de lançamentos do Xcode não-oficial. É provido como dado formatado, contem informação extra que não está prontamente disponível pela Apple, e é menos provável que quebre se a Apple redesenhar o seu site de desenvolvedores."; -"Downloader" = "Baixador"; -"DownloaderDescription" = "aria2 usa até 16 conexões para baixar o Xcode 3-5x mais rápido que URLSession. Está empacotado como um executável junto com o seu código fonte dentro do Xcodes para conformar com a licensa GPLv2.\n\nURLSession é a API padrão da Apple para performar requisições URL."; -"PrivilegedHelper" = "Ajudante privilegiado"; -"PrivilegedHelperDescription" = "Xcodes usa um ajudante privilegiado separado para performar atividades como raiz. São atividades que iriam requerir sudo na linha de comando, incluindo passos pós-instalação e trocar versões do Xcode com xcode-select.\n\nVocê será pedido para instalá-lo na sua conta do macOS."; -"HelperInstalled" = "Ajudante está instalado"; -"HelperNotInstalled" = "Ajudante não está instalado"; -"InstallHelper" = "Instalar ajudante"; -"OnSelectDoNothing" = "Manter nome como Xcode-X.X.X.app"; -"OnSelectRenameXcode" = "Sempre renomear para Xcode.app"; -"OnSelectRenameXcodeDescription" = "Ao selecionar, tentar renomear o Xcode ativo para Xcode.app, renomeando o Xcode.app anterior para um nome com a versão."; -"ShowOpenInRosetta" = "Mostrar opçao abrir com Rosetta"; -"ShowOpenInRosettaDescription" = "Opção de abrir com o Rosetta será mostrar onde outras opções \"Abrir\" estão disponíveis. Nota: Isso só será mostrado pra máquinas Apple Silicon."; - -// Experiment Preference Pane -"Experiments" = "Experiments"; -"FasterUnxip" = "Unxip mais rápido"; -"UseUnxipExperiment" = "Quando performar unxipping, use experiment"; -"FasterUnxipDescription" = "Graças à @_saagarjha, esse experimento pode acelerar o unxip em até 70% para algum sistemas.\n\nMais informações sobre como isso ocorre pode ser encontrada no repositório do unxip - https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "Acesso autorizado. Você receberá notificações de Xcodes."; -"AccessDenied" = "⚠️ Acesso negado ⚠️\n\nPor favor, abra suas configurações de notificação e selecione Xcodes se você deseja autorizar o acesso."; -"NotificationSettings" = "Configurações de notificação"; -"EnableNotifications" = "Ativar notificações"; - -// SignIn -"SignInWithApple" = "Entrar com o seu Apple ID."; -"AppleID" = "AppleID:"; -"Password" = "Senha:"; -"Required" = "Obrigatório"; -"SignOut" = "Sair"; - -// SMS/2FA -"DigitCodeDescription" = "Insira o código de %d dígitos de um de seus dispositivos confiáveis:"; -"SendSMS" = "Enviar SMS"; -"EnterDigitCodeDescription" = "Insira o código de %1$d dígitos enviado para %2$@: "; -"SelectTrustedPhone" = "Selecione um número de telefone confiável para receber um código de %d dígitos via SMS:"; -"NoTrustedPhones" = "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."; - -// MainWindow -"UpdatedAt" = "Atualizado em"; - -// ToolBar -"Login" = "Login"; -"LoginDescription" = "Abrir login"; -"Refresh" = "Atualizar"; -"RefreshDescription" = "Atualizar lista de Xcode"; -"All" = "Todos"; -"Release" = "Release"; -"ReleaseOnly" = "Somente release"; -"Beta" = "Beta"; -"BetaOnly" = "Somente beta"; -"Filter" = "Filtrar"; -"FilterAvailableDescription" = "Filtrar versões disponíveis"; -"FilterInstalledDescription" = "Filtrar versões instaladas"; -"Info" = "Informação"; -"InfoDescription" = "Mostrar ou esconder o painel de informações"; -"Preferences" = "Preferências"; -"PreferencesDescription" = "Abrir preferências"; -"Search" = "Procurar..."; -"SearchDescription" = "Lista de procura"; - -// List -"ActiveVersionDescription" = "Essa é a versão ativa"; -"MakeActiveVersionDescription" = "Ativar esta versão"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Desinstalar Xcode %@?"; -"Alert.Uninstall.Message" = "Será movido para a lixeira, mas não será esvaziada."; -"Alert.Uninstall.Error.Title" = "Não foi possível desinstalar o Xcode"; - -// Cancel Install -"Alert.CancelInstall.Title" = "Tem certeza que deseja interromper a instalação do Xcode %@?"; -"Alert.CancelInstall.Message" = "Todo progresso será descartado."; -"Alert.CancelInstall.PrimaryButton" = "Interromper instalação"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Ajudante privilegiado"; -"Alert.PrivilegedHelper.Message" = "Xcodes usa um ajudante privilegiado separado para realizar tarefas como root (raíz). São tarefas onde seria necessário permissão de super usuário (sudo) na linha de comando, incluindo comandos de pós-instalação e trocar versões de Xcode com xcode-select.\n\nVocê deverá inserir sua senha do macOS para instalá-lo."; -"Alert.PrivilegedHelper.Error.Title" = "Não foi possível instalar o ajudante"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Requerimentos mínimos não satisfeitos."; -"Alert.MinSupported.Message" = "Xcode %@ requere MacOS %@, mas você está rodando MacOS %@, você ainda quer instalá-lo?"; - -// Install -"Alert.Install.Error.Title" = "Não foi possível instalar o Xcode"; -"Alert.InstallArchive.Error.Title" = "Não foi possível instalar o Xcode arquivado"; - -// Update -"Alert.Update.Error.Title" = "Não foi possível atualizar o Xcode selecionado"; - -// Active/Select -"Alert.Select.Error.Title" = "Não foi possível selecionar Xcode"; - -// Symbolic Links -"Alert.SymLink.Title" = "Não foi possível criar link simbólico"; -"Alert.SymLink.Message" = "Xcode.app existe e não é um link simbólico"; - -// Post install -"Alert.PostInstall.Title" = "Não foi possível realizar os comandos de pós-instalação"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "O arquivamento \"%@\" está danificado e não pode ser expandido."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "O arquivamento \"%@\" não pode ser expandido porquê o volume atual não possui espaço disponível o suficiente.\n\nLibere espaço para expandir o arquivamento e então instale o Xcode %@ novamente para iniciar uma instalação de onde você parou."; -"InstallationError.FailedToMoveXcodeToApplications" = "Falha ao mover Xcode para o diretório: %@"; -"InstallationError.FailedSecurityAssessment" = "Xcode %@ falhou suas checagens de segurança com a seguinte saída:\n%@\nAinda está instalado em %@ se você deseja usar ainda assim."; -"InstallationError.CodesignVerifyFailed" = "O Xcode baixado falhou a verificação de assinatura de código (code signing) com a seguinte saída:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "O Xcode baixado não possui a identidade de assinatura de código esperada.\nPossui:\n%@\n%@\nEsperada:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes (ainda) não suporta instalação de Xcode no formato de arquivo %@."; -"InstallationError.MissingSudoerPassword" = "Faltando senha. Por favor, tente novamente."; -"InstallationError.UnavailableVersion" = "Não foi possível encontrar versão %@."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "Nenhuma versão não-pré-lançamento disponível."; -"InstallationError.NoPrereleaseVersionAvailable" = "Nenhuma versão de pré-lançamento disponível."; -"InstallationError.MissingUsernameOrPassword" = "Faltando usuário ou senha. Por favor, tente novamente."; -"InstallationError.VersionAlreadyInstalled" = "%@ já está instalada em %@"; -"InstallationError.InvalidVersion" = "%@ não é uma versão válida."; -"InstallationError.VersionNotInstalled" = "%@ não está instalada."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "A instalação foi completada, mas alguns passos de pós-instalação não puderam ser performados automaticamente. Estes serão performados quando você rodar o Xcode %@ pela primeira vez."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "A instalação foi completada, mas alguns passos de pós-instalação não puderam ser performados automaticamente. Xcodes performa estes passos com o ajudante privilegiado, que aparentemente não está instalado. Você pode instalá-lo em Preferências > Avançado.\n\nEstes passos serão performados quando você rodar o Xcode %@ pela primeira vez."; - -// Installation Steps -"Downloading" = "Baixando"; -"Unarchiving" = "Desarquivando (Pode demorar um pouco)"; -"Moving" = "Movendo para %@"; -"TrashingArchive" = "Movendo arquivo para a lixeira"; -"CheckingSecurity" = "Verificação de segurança"; -"Finishing" = "Finalizando"; - -// Notifications -"Notification.NewVersionAvailable" = "Nova versão disponível"; -"Notification.FinishedInstalling" = "Instalação finalizada"; - - -"HelperClient.error" = "Não foi possível se comunicar com o ajudante."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Novas versões do Xcode"; -"Notification.NewXcodeVersion.Body" = "Novas versões do Xcode estão disponíveis para baixar"; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Feliz WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/ru.lproj/Localizable.strings b/Xcodes/Resources/ru.lproj/Localizable.strings deleted file mode 100644 index 4569fea..0000000 --- a/Xcodes/Resources/ru.lproj/Localizable.strings +++ /dev/null @@ -1,234 +0,0 @@ -// Menu -"Menu.About" = "О Xcodes"; -"Menu.CheckForUpdates" = "Проверить наличие обновлений..."; -"Menu.Acknowledgements" = "Юридическая информация Xcodes"; -"Menu.GitHubRepo" = "GitHub-репозиторий Xcodes"; -"Menu.ReportABug" = "Сообщить об ошибке"; -"Menu.RequestNewFeature" = "Запросить новую функцию"; - -// Common -"Install" = "Установить"; -"InstallDescription" = "Установить эту версию"; -"RevealInFinder" = "Показать в Finder"; -"Active" = "Активно"; -"MakeActive" = "Активировать"; -"Open" = "Открыть"; -"OpenDescription" = "Открыть эту версию"; -"CopyPath" = "Копировать путь"; -"CreateSymLink" = "Создать символическую ссылку к Xcode.app"; -"CreateSymLinkBeta" = "Создать символическую ссылку к Xcode-Beta.app"; -"Uninstall" = "Удалить"; -"Selected" = "Выбрано"; -"Select" = "Выбрать"; -"Cancel" = "Отмена"; -"Next" = "Далее"; -"Continue" = "Продолжить"; -"Close" = "Закрыть"; -"OK" = "OK"; - -// Info Pane -"IdenticalBuilds" = "Идентичные выпуски"; -"IdenticalBuilds.help" = "Иногда предварительная и релизная версии представляют собой один и тот же выпуск. Xcodes автоматически отображает эти версии вместе."; - -"ReleaseDate" = "Дата выпуска"; -"ReleaseNotes" = "Примечания к выпуску"; -"ReleaseNotes.help" = "Просмотреть примечания к выпуску"; -"CopyReleaseNoteURL" = "Копировать URL"; -"Compatibility" = "Совместимость"; -"MacOSRequirement" = "Требуется macOS %@ или новее"; -"SDKs" = "SDK"; -"Compilers" = "Компиляторы"; -"DownloadSize" = "Размер загрузки"; -"NoXcodeSelected" = "Xcode не выбран"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Шаг %1$d из %2$d: %3$@"; -"DownloadingPercentDescription" = "Скачивание: %d% завершено"; -"StopInstallation" = "Остановить установку"; -"DownloadingError" = "Информация о загрузке не найдена"; - -// About -"VersionWithBuild" = "Версия %@ (%@)"; -"GithubRepo" = "Репозиторий GitHub"; -"Acknowledgements" = "Юридическая информация"; -"UnxipExperiment" = "Экспериментальный Unxip"; -"License" = "Лицензия"; - -// General Preference Pane -"General" = "Общее"; -"AppleID" = "Apple ID"; -"SignIn" = "Войти"; -"Notifications" = "Уведомления"; - -// Updates Preference Pane -"Updates" = "Обновления"; -"Versions" = "Версии"; -"AutomaticInstallNewVersion" = "Автоматически устанавливать новые версии Xcode"; -"IncludePreRelease" = "Включить предварительные/бета-версии"; -"AppUpdates" = "Обновления Xcodes.app"; -"CheckForAppUpdates" = "Автоматически проверять наличие обновлений"; -"CheckNow" = "Проверить сейчас"; -"LastChecked" = "Последняя проверка: %@"; -"Never" = "Никогда"; - -// Download Preference Pane -"Downloads" = "Загрузки"; -"DataSource" = "Источник данных"; -"DataSourceDescription" = "Источник данных Apple применяет технологию \"веб-скрейпинга\" к веб-сайту Apple для разработчиков. Он всегда показывает последние доступные выпуски, но является менее стабильным источником данных.\n\nXcode Releases — это неофициальный список выпусков Xcode. Он предоставляется в виде удобно структурированных данных, содержит дополнительную информацию, которую не всегда можно получить от Apple и который с меньшей вероятностью перестанет работать, если Apple изменит дизайн своего веб-сайта для разработчиков."; -"Downloader" = "Загрузчик"; -"DownloaderDescription" = "aria2 использует до 16 подключений для загрузки Xcode в 3-5 раз быстрее, чем URLSession. Он поставляется в виде исполняемого файла вместе с исходным кодом в Xcodes, чтобы соответствовать лицензии GPLv2.\n\nURLSession — это API Apple по умолчанию для выполнения запросов по сети."; - -// Advanced Preference Pane -"Advanced" = "Дополнительно"; -"LocalCachePath" = "Путь к локальному кешу"; -"LocalCachePathDescription" = "Xcodes кеширует доступные версии Xcode и временно загружает новые версии в указанную директорию"; -"Change" = "Изменить"; -"Active/Select" = "Активировать/Выбрать"; -"InstallDirectory" = "Путь для установки"; -"InstallPathDescription" = "Xcodes использует единый путь для поиска и установки выпусков Xcode. По умолчанию, рекомендуется оставить /Applications. Любые изменения в то, где находится Xcode, могут привести к тому, что другие приложения/сервисы могут перестать работать. "; - -"OnSelectDoNothing" = "Сохранять формат имени Xcode-X.X.X.app"; -"OnSelectDoNothingDescription" = "Если выбрано, формат имени будет содержать версию, прим. Xcode-13.4.1.app"; -"AutomaticallyCreateSymbolicLink" = "Автоматически создавать символическую ссылку к Xcode.app"; -"AutomaticallyCreateSymbolicLinkDescription" = "Когда вы делаете версию Xcode активной/выбранной, будет выполнена попытка создать символическую ссылку с именем Xcode.app в директории установки"; -"OnSelectRenameXcode" = "Всегда переименовывать в Xcode.app"; -"OnSelectRenameXcodeDescription" = "Если выбрано, будет выполнена попытка переименовать активный Xcode в Xcode.app, а предыдущий Xcode.app в формат имени с версией."; - -"PrivilegedHelper" = "Привилегированный помощник"; -"PrivilegedHelperDescription" = "Xcodes использует отдельный привилегированный помощник для выполнения задач от имени root-пользователя. Это команды, которые потребуют sudo в командной строке, включая шаги после установки и переключение версий Xcode с помощью xcode-select.\n\nВам будет предложено указать пароль от вашей учетной записи macOS для его установки."; -"HelperInstalled" = "Помощник установлен"; -"HelperNotInstalled" = "Помощник не установлен"; -"InstallHelper" = "Установить помощника"; - -// Experiment Preference Pane -"Experiments" = "Эксперименты"; -"FasterUnxip" = "Быстрый Unxip"; -"UseUnxipExperiment" = "При выполнении unxip будет использован экспериментальный функционал"; -"FasterUnxipDescription" = "Благодаря @_saagarjha этот эксперимент может увеличить скорость распаковки до 70% на некоторых системах.\n\nДополнительную информацию о том, как достигается такой результат, можно прочесть в репозитории unxip — https://github.com/saagarjha/unxip. "; - -// Notifications -"AccessGranted" = "Доступ разрешен. Вы будете получать уведомления от Xcodes."; -"AccessDenied" = "⚠️ Отказано в доступе ⚠️\n\nПожалуйста, откройте настройки уведомлений и выберите Xcodes, чтобы разрешить доступ."; -"NotificationSettings" = "Настройки уведомлений"; -"EnableNotifications" = "Включить уведомления"; - -// SignIn -"SignInWithApple" = "Войти со своим Apple ID."; -"AppleID" = "Apple ID:"; -"Password" = "Пароль:"; -"Required" = "Обязательно"; -"SignOut" = "Выход"; - -// SMS/2FA -"DigitCodeDescription" = "Введите %d цифровой код с одного из ваших доверенных устройств:"; -"SendSMS" = "Отправить SMS"; -"EnterDigitCodeDescription" = "Введите %1$d цифровой код, отправленный на %2$@: "; -"SelectTrustedPhone" = "Выберите доверенный номер телефона для получения %d цифрового кода по SMS:"; -"NoTrustedPhones" = "В вашем аккаунтe нет доверенных телефонных номеров, но они необходимы для двухфакторной аутентификации.\n\nСм. https://support.apple.com/HT204915."; - -// MainWindow -"UpdatedAt" = "Обновлено в"; - -// ToolBar -"Login" = "Логин"; -"LoginDescription" = "Открыть окно логина"; -"Refresh" = "Обновить"; -"RefreshDescription" = "Обновить список Xcode"; -"All" = "Все"; -"Release" = "Pелиз"; -"ReleaseOnly" = "Только релиз"; -"Beta" = "Бета"; -"BetaOnly" = "Только бета"; -"Filter" = "Фильтр"; -"FilterAvailableDescription" = "Отфильтровать доступные версии"; -"FilterInstalledDescription" = "Отфильтровать установленные версии"; -"Info" = "Информация"; -"InfoDescription" = "Показать или скрыть информационную панель"; -"Preferences" = "Hастройки"; -"PreferencesDescription" = "Открыть настройки"; -"Search" = "Поиск..."; -"SearchDescription" = "Поиск по списку"; - -// List -"ActiveVersionDescription" = "Это активная версия"; -"MakeActiveVersionDescription" = "Сделать эту версию активной"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Удалить Xcode %@?"; -"Alert.Uninstall.Message" = "Файлы будут перемещены в корзину, но не будут очищены из неё автоматически."; -"Alert.Uninstall.Error.Title" = "Невозможно удалить Xcode"; - -// Cancel Install -"Alert.CancelInstall.Title" = "Вы уверены, что хотите остановить установку Xcode %@?"; -"Alert.CancelInstall.Message" = "Прогресс будет сброшен."; -"Alert.CancelInstall.PrimaryButton" = "Остановить установку"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Привилегированный помощник"; -"Alert.PrivilegedHelper.Message" = "Xcodes использует отдельный привилегированный помощник для выполнения задач от имени root-пользователя. Это команды, которые потребуют sudo в командной строке, включая шаги после установки и переключение версий Xcode с помощью xcode-select.\n\nВам будет предложено указать пароль от вашей учетной записи macOS для его установки."; -"Alert.PrivilegedHelper.Error.Title" = "Невозможно установить помощник"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Текущая macOS не соответствует минимальным требованиям"; -"Alert.MinSupported.Message" = "Xcode %@ требует macOS %@, но вы используете macOS %@, вы все еще хотите установить?"; - -// Install -"Alert.Install.Error.Title" = "Невозможно установить Xcode"; -"Alert.InstallArchive.Error.Title" = "Невозможно установить заархивированный Xcode"; - -// Update -"Alert.Update.Error.Title" = "Невозможно обновить выбранный Xcode"; - -// Active/Select -"Alert.Select.Error.Title" = "Невозможно выбрать Xcode"; - -// Symbolic Links -"Alert.SymLink.Title" = "Невозможно создать символическую ссылку"; -"Alert.SymLink.Message" = "Xcode.app существует и не является символической ссылкой"; - -// Post install -"Alert.PostInstall.Title" = "Невозможно выполнить дополнительные шаги после установки"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "Архив \"%@\" поврежден и не может быть расширен."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "Архив \"%@\" не может быть расширен, поскольку в текущем жестком диске недостаточно свободного места.\n\nОсвободите больше места для расширения архива, а затем снова установите Xcode %@, чтобы начать установку с того места, где он остановился."; -"InstallationError.FailedToMoveXcodeToApplications" = "Не удалось переместить Xcode в директорию %@."; -"InstallationError.FailedSecurityAssessment" = "Xcode %@ не прошел оценку безопасности со следующим выводом:\n%@\nОн остается установленным в %@, если вы все равно хотите его использовать."; -"InstallationError.CodesignVerifyFailed" = "Загруженный Xcode не прошел проверку подписи сертификата со следующим выводом:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "Загруженный Xcode не имеет ожидаемого идентификатора подписи сертификата.\nПолучено:\n%@\n%@\nОжидается:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes (пока) не поддерживает установку Xcode из формата файла %@."; -"InstallationError.MissingSudoerPassword" = "Отсутствует пароль. Повторите попытку."; -"InstallationError.UnavailableVersion" = "Не удалось найти версию %@."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "Нет доступных не предварительных версий."; -"InstallationError.NoPrereleaseVersionAvailable" = "Предварительные версии недоступны."; -"InstallationError.MissingUsernameOrPassword" = "Отсутствует имя пользователя или пароль. Пожалуйста, попробуйте еще раз."; -"InstallationError.VersionAlreadyInstalled" = "%@ уже установлен в %@"; -"InstallationError.InvalidVersion" = "%@ не является допустимым номером версии."; -"InstallationError.VersionNotInstalled" = "%@ не установлен."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "Установка завершена, но некоторые шаги после установки не были выполнены автоматически. Они будут выполнены при первом запуске Xcode %@."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "Установка была завершена, но некоторые шаги после установки не были выполнены автоматически. Xcodes выполняет эти шаги с привилегированным помощником, который, похоже, не установлен. Вы можете установить его из Настройки > Дополнительно.\n\nЭти шаги будут выполнены при первом запуске Xcode %@."; - -// Installation Steps -"Downloading" = "Скачивание"; -"Unarchiving" = "Разархивирование (это может занять некоторое время)"; -"Moving" = "Перемещение в %@"; -"TrashingArchive" = "Перемещение архива в корзину"; -"CheckingSecurity" = "Проверка безопасности"; -"Finishing" = "Завершение"; - -// Notifications -"Notification.NewVersionAvailable" = "Доступна новая версия"; -"Notification.FinishedInstalling" = "Завершена установка"; - - -"HelperClient.error" = "Невозможно установить связь с привилегированным помощником."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Новые версии Xcode"; -"Notification.NewXcodeVersion.Body" = "Новые версии Xcode доступны для скачивания."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Счастливого WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/tr.lproj/Localizable.strings b/Xcodes/Resources/tr.lproj/Localizable.strings deleted file mode 100644 index 7b1421b..0000000 --- a/Xcodes/Resources/tr.lproj/Localizable.strings +++ /dev/null @@ -1,238 +0,0 @@ -// Menu -"Menu.About" = "Xcodes Hakkında"; -"Menu.CheckForUpdates" = "Güncellemeleri Denetle..."; -"Menu.Acknowledgements" = "Xcodes Teşekkür"; -"Menu.GitHubRepo" = "Xcodes GitHub Repo"; -"Menu.ReportABug" = "Bir Sorun Bildir"; -"Menu.RequestNewFeature" = "Yeni Özellik Talep Et"; - -// Common -"Install" = "Yükle"; -"InstallDescription" = "Bu sürümü indir"; -"RevealInFinder" = "Finder'da Görüntüle"; -"Active" = "Aktif"; -"MakeActive" = "Etkinleştir"; -"Open" = "Aç"; -"OpenDescription" = "Bu sürümü aç"; -"CopyPath" = "Yolu Kopyala"; -"CreateSymLink" = "Xcode.app olarak sembolik link yarat"; -"CreateSymLinkBeta" = "Xcode-Beta.app olarak sembolik link yarat"; -"Uninstall" = "Kaldır"; -"Selected" = "Seçili"; -"Select" = "Seç"; -"Cancel" = "İptal Et"; -"Next" = "Sonraki"; -"Continue" = "Devam Et"; -"Close" = "Kapat"; -"OK" = "OK"; - -// Info Pane -"IdenticalBuilds" = "Benzer Yapılar"; -"IdenticalBuilds.help" = " Bazen prerelase ve release sürümleri aynı yapı üzerindedir. Xcodes bu sürümleri birarada gösterecektir."; - -"ReleaseDate" = "Yayınlanma Tarihi"; -"ReleaseNotes" = "Yayınlanma Notları"; -"ReleaseNotes.help" = "Yayınlanma Notlarını Görüntüle"; -"CopyReleaseNoteURL" = "URL'yi kopyala"; -"Compatibility" = "Uyumluluk"; -"MacOSRequirement" = "macOS %@ veya sonrasını gerektirir"; -"SDKs" = "SDKler"; -"Compilers" = "Derleyiciler"; -"DownloadSize" = "İndirme Boyutu"; -"NoXcodeSelected" = "Xcode Sürümü Seçilmedi"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Adım %1$d/%2$d: %3$@"; -"DownloadingPercentDescription" = "İndirme: %d%% tamamlandı"; -"StopInstallation" = "İndirmeyi durdur"; -"DownloadingError" = "İndirme bilgisi bulunamadı"; - -// About -"VersionWithBuild" = "Sürüm %@ (%@)"; -"GithubRepo" = "GitHub Repo"; -"Acknowledgements" = "Teşekkür"; -"UnxipExperiment" = "Tecrübeyi çıkart"; -"License" = "Lisans"; - -// General Preference Pane -"General" = "Genel"; -"AppleID" = "Apple ID"; -"SignIn" = "Giriş Yap"; -"Notifications" = "Bildirimler"; - -// Updates Preference Pane -"Updates" = "Güncellemeler"; -"Versions" = "Sürümler"; -"AutomaticInstallNewVersion" = "Xcode'un yeni versiyonlarını otomatik yükle"; -"IncludePreRelease" = "Prerelease/beta sürümlerini dahil et"; -"AppUpdates" = "Xcodes.app Güncellemeleri"; -"CheckForAppUpdates" = "Uygulama güncellemelerini otomatik kontrol et"; -"CheckNow" = "Kontrol Et"; -"LastChecked" = "Son kontrol: %@"; -"Never" = "Daha Yeni"; - -// Download Preference Pane -"Downloads" = "İndirilenler"; -"DataSource" = "Veri Kaynağı"; -"DataSourceDescription" = "Apple veri kaynağı Apple'ın geliştirici sitesini inceliyor. Uygun olan en son sürümleri gösterir, ama biraz daha hassastır.\n\nXcode Releases, Xcode sürümlerinin bulunduğu resmi olmayan bir listedir. Data düzenli bir formata sahip bilgileri barındırır, Apple tarafında olmayan ek bilgileri içerir ve Apple'ın ileride sitesini değiştireceği için bozabileceği bir kaynak değildir."; -"Downloader" = "Yükleyici"; -"DownloaderDescription" = "aria2 16ya kadar bağlantı kullanarak Xcode'u URLSession'a göre 3-5 kat daha hızlı indirir. Çalıştırılabilir bir dosya olarak Bundle'a dahildir ve kaynak dosyaları GPLv2 lisansıyla uyumlu olması açısından Xcode içerisinde yer alır.\n\nURLSession Apple'ın URL istekleri oluşturmak için sunduğu varsayılan API'dır."; - -// Advanced Preference Pane -"Advanced" = "Gelişmiş"; -"LocalCachePath" = "Lokal Önbellek Konumu"; -"LocalCachePathDescription" = "Xcodes, uygun Xcode sürümlerini ve geçici yeni indirilenleri bir klasörde önbelleğe alır"; -"Change" = "Değiştir"; -"Active/Select" = "Aktif/Seç"; -"InstallDirectory" = "Yükleme Klasörü"; -"InstallPathDescription" = "Xcodes bir klasörü arayıp oraya yükler. Varsayılan(ve önerilen) yöntem /Uygulamalar klasöründe tutmaktır. Xcode'un bulunduğu ortamdaki herhangi bir değişiklik başka bir uygulamanın/servisin çalışmasını durdurabilir."; - -"OnSelectDoNothing" = "Uygulama ismini Xcode-X.X.X.app gibi tut."; -"OnSelectDoNothingDescription" = "Seçildiğinde, ismi Xcode-13.4.1.app örneğindeki gibi tutar."; -"AutomaticallyCreateSymbolicLink" = "Xcodes.app'in sembolik linkini otomatik oluştur."; -"AutomaticallyCreateSymbolicLinkDescription" = "Bir Xcode sürümünü Aktif/Seç yaparken Xcode.app ismindeki uygulamanın sembolik linkini yükleme klasörüne otomatik oluşturmayı dene"; -"OnSelectRenameXcode" = "Her zaman Xcode.app şeklinde ismi değiştir"; -"OnSelectRenameXcodeDescription" = "Seçildiğinde, aktif olan Xcode'u Xcode.app olarak isimlendirmeye çalışır ve eski Xcode ismine sürüm ismi ekler."; - -"PrivilegedHelper" = "Ayrıcalıklı Yardımcı"; -"PrivilegedHelperDescription" ="Xcodes, root görevlerini yerine getirmek için bir Ayrıcalıklı yardımcı aracı kullanır. Bunlar komut satırındaki sudo gerektiren, yükleme sonrası adımlarını sağlayan ve Xcode sürümü değiştiren xcode-select gibi komutlardan ibarettir.\n\nBunu yüklemek için macOS hesap şifrenizi girmeniz istenecektir."; -"HelperInstalled" = "Yardımcı yüklendi"; -"HelperNotInstalled" = "Yardımcı yüklenmedi"; -"InstallHelper" = "Yardımcıyı yükle"; - -"ShowOpenInRosetta" = "Rosetta ile açma seçeneğini göster"; -"ShowOpenInRosettaDescription" = "Rosetta ile açma opsiyonu diğer uygun \"Açma\" fonksiyonlarını gösterecektir. Not: Bu sadece Apple Silikon makinelerinde gözükecektir."; - -// Experiment Preference Pane -"Experiments" = "Deneyler"; -"FasterUnxip" = "Daha Hızlı Unxip"; -"UseUnxipExperiment" = "Unxip yaparken dene"; -"FasterUnxipDescription" = "@_saagarjha sayesinde bu deney bazı sistemlerde unxip sürecini %70'e kadar hızlandırabilir.\n\nBu işlemin nasıl yapıldığına dair ayrıntılara unxip repo .- https://github.com/saagarjha/unxip adresinden bakabilirsiniz"; - -// Notifications -"AccessGranted" = "Erişim Tanımlandı. Xcodes'dan bildirimler alacaksınız."; -"AccessDenied" = "⚠️ Erişim Reddedildi ⚠️\n\nEğer bildirimler için erişim vermek istiyorsanız lütfen bildirim ayarlarını açın ve Xcodes uygulamasını seçin."; -"NotificationSettings" = "Bildirim Ayarları"; -"EnableNotifications" = "Bildirimleri Etkinleştir"; - -// SignIn -"SignInWithApple" = "Apple ID ile Giriş Yap."; -"AppleID" = "AppleID:"; -"Password" = "Şifre:"; -"Required" = "Gerekli"; -"SignOut" = "Oturumu Kapat"; - -// SMS/2FA -"DigitCodeDescription" = "Güvenilir cihazından aldığın %d rakamlı kodu gir:"; -"SendSMS" = "SMS Gönder"; -"EnterDigitCodeDescription" = "%2$@ kaynağından gönderilen %1$d rakamlı kodu gir: "; -"SelectTrustedPhone" = "%d rakamlı kodu SMS olarak almak için güvenilir telefon numarasını seç:"; -"NoTrustedPhones" = "Hesabına tanımlı güvenli bir telefon numarası yok, fakat iki aşamalı doğrulama için gerekmektedir.\n\nDaha fazlası için https://support.apple.com/HT204915 adresine bakın."; - -// MainWindow -"UpdatedAt" = "Güncellenme Zamanı:"; - -// ToolBar -"Login" = "Giriş"; -"LoginDescription" = "Giriş Yap"; -"Refresh" = "Yenile"; -"RefreshDescription" = "Xcode Listesini Yenile"; -"All" = "Tümü"; -"Release" = "Kararlı Sürüm"; -"ReleaseOnly" = "Yalnızca Kararlı Sürüm"; -"Beta" = "Beta"; -"BetaOnly" = "Yalnızca Beta"; -"Filter" = "Filtre"; -"FilterAvailableDescription" = "Uygun sürümleri filtrele"; -"FilterInstalledDescription" = "Yüklü sürümleri filtrele"; -"Info" = "Bilgi"; -"InfoDescription" = "Bilgi panelini göster ya da gizle"; -"Preferences" = "Tercihler"; -"PreferencesDescription" = "Tercihleri Aç"; -"Search" = "Ara..."; -"SearchDescription" = "Arama listesi"; - -// List -"ActiveVersionDescription" = "Bu aktif sürümdür"; -"MakeActiveVersionDescription" = "Bu sürümü aktif et"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Xcode %@ sürümünü Kaldır?"; -"Alert.Uninstall.Message" = "Uygulama Çöp Kutusuna taşınacaktır, fakat silinmeyecektir."; -"Alert.Uninstall.Error.Title" = "Xcode Kaldırılamadı"; -"Alert.Uninstall.Error.Message.FileNotFound" = "\"%@\" dosyası bulunamadı."; - -// Cancel Install -"Alert.CancelInstall.Title" = "Xcode %@ sürümünün yüklenmesini durdurmak istediğinize emin misiniz?"; -"Alert.CancelInstall.Message" = "Herhangi bir ilerleme göz ardı edilecektir."; -"Alert.CancelInstall.PrimaryButton" = "Yüklemeyi Durdur"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Ayrıcalıklı Yardımcı"; -"Alert.PrivilegedHelper.Message" = "Xcodes, root görevlerini yerine getirmek için bir Ayrıcalıklı yardımcı aracı kullanır. Bunlar komut satırındaki sudo gerektiren, yükleme sonrası adımlarını sağlayan ve Xcode sürümü değiştiren xcode-select gibi komutlardan ibarettir.\n\nBunu yüklemek için macOS hesap şifrenizi girmeniz istenecektir."; -"Alert.PrivilegedHelper.Error.Title" = "Yardımcı yüklenemedi"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Minimum gereksinimler karşılanamadı"; -"Alert.MinSupported.Message" = "Xcode %@ macOS %@ sürümünü gerektirir, fakat siz macOS %@ sürümünü kullanıyorsunuz, yine de indirmek istediğinize emin misiniz?"; - -// Install -"Alert.Install.Error.Title" = "Xcode yüklenemedi"; -"Alert.InstallArchive.Error.Title" = "Arşivlenmiş Xcode yüklenemedi."; - -// Update -"Alert.Update.Error.Title" = "Seçili Xcode güncellenemedi"; - -// Active/Select -"Alert.Select.Error.Title" = "Xcode seçilemedi"; - -// Symbolic Links -"Alert.SymLink.Title" = "Uygulama sembolik linki oluşturulamadı"; -"Alert.SymLink.Message" = "Xcode.app zaten var ve bir sembolik link değil"; - -// Post install -"Alert.PostInstall.Title" = "Yükleme aşamaları çalıştırılamadı"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "\"%@\" arşivi hasar görmüş ve açılamıyor."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "\"%@\" arşivi açılamıyor çünkü diskte yeterli alan bulunmuyor.\n\nArşivi açmak için daha fazla alan aç ve ondan sonra kaldığın yerden devam ederek Xcode %@ sürümünü tekrar kur."; -"InstallationError.FailedToMoveXcodeToApplications" = "Xcode %@ klasörüne taşınamadı."; -"InstallationError.FailedSecurityAssessment" = "Xcode %@ güvenlik görevlerini gerçekleştirirken şu hatayı verdi:\n%@\nYine de devam etmek isterseniz uygulama %@ konumunda bulunmaya devam ediyor."; -"InstallationError.CodesignVerifyFailed" = "İndirilmiş Xcode imza onayı işleminde şu hatayı verdi:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "İndirilmiş Xcode beklenilen imza kimliğine sahip değil.\nEldeki:\n%@\n%@\nBeklenen:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes henüz Xcodu %@ dosya formatında yüklemeye (henüz) izin vermiyor."; -"InstallationError.MissingSudoerPassword" = "Eksik şifre. Lütfen tekrar deneyin"; -"InstallationError.UnavailableVersion" = "%@ sürümü bulunamadı."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "Prerelease olmayan sürümler yok."; -"InstallationError.NoPrereleaseVersionAvailable" = "Prerelease sürümleri yok."; -"InstallationError.MissingUsernameOrPassword" = "Eksik kullanıcı adı veya şifre. Lütfen tekrar deneyin."; -"InstallationError.VersionAlreadyInstalled" = "%@ zaten %@ konumunda yüklü."; -"InstallationError.InvalidVersion" = "%@ geçerli bir sürüm numarası değil."; -"InstallationError.VersionNotInstalled" = "%@ yüklenmedi."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "İndirme tamamlandı, fakat bazı indirme sonrası aşamaları tamamlanamadı. Bunlar Xcode %@ uygulamasını ilk açtığınızda gerçekleşecek."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "İndirme tamamlandı, fakat bazı indirme sonrası aşamaları otomatik tamamlanamadı. Xcodes bu aşamaları bir ayrıcalıklı yardımcı aracı ile gerçekleştirir, ama bu araç yüklenmemiş gözüküyor. Yüklemek için Tercihler > Gelişmiş yolunu kullanabilirsiniz. \n\nBunlar Xcode %@ uygulamasını ilk açtığınızda gerçekleşecek."; - -// Installation Steps -"Downloading" = "İndiriliyor"; -"Unarchiving" = "Arşivden Çıkarılıyor (Bu biraz sürebilir)"; -"Moving" = "%@ Konumuna Taşınıyor"; -"TrashingArchive" = "Arşiv Çöp Kutusuna taşınıyor"; -"CheckingSecurity" = "Güvenlik doğrulaması"; -"Finishing" = "Tamamlanıyor"; - -// Notifications -"Notification.NewVersionAvailable" = "Yeni sürüm mevcut"; -"Notification.FinishedInstalling" = "İndirme tamamlandı"; - - -"HelperClient.error" = "Yardımcı araç ile iletişim kurulamadı."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Yeni Xcode sürümü"; -"Notification.NewXcodeVersion.Body" = "Yeni Xcode sürümleri indirmek için mevcut."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 WWDC %@ haftanız kutlu olsun! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/uk.lproj/Localizable.strings b/Xcodes/Resources/uk.lproj/Localizable.strings deleted file mode 100644 index 752586a..0000000 --- a/Xcodes/Resources/uk.lproj/Localizable.strings +++ /dev/null @@ -1,225 +0,0 @@ -// Menu -"Menu.About" = "Про Xcodes"; -"Menu.CheckForUpdates" = "Перевірити Оновлення..."; -"Menu.Acknowledgements" = "Подяки"; -"Menu.GitHubRepo" = "Xcodes GitHub Repo"; -"Menu.ReportABug" = "Повідомити про помилку"; -"Menu.RequestNewFeature" = "Запит на нову Фічу"; - -// Common -"Install" = "Встановити"; -"InstallDescription" = "Встановити цю версію"; -"RevealInFinder" = "Показати у Finder"; -"Active" = "Активний"; -"MakeActive" = "Зробити активним"; -"Open" = "Запустити"; -"OpenDescription" = "Запустити цю версію"; -"CopyPath" = "Скопіювати шлях"; -"CreateSymLink" = "Створити символічну ссилку як Xcode.app"; -"CreateSymLinkBeta" = "Створити символічну ссилку як Xcode-Beta.app"; -"Uninstall" = "Видалити"; -"Selected" = "Обрано"; -"Select" = "Обрати"; -"Cancel" = "Відміна"; -"Next" = "Далі"; -"Continue" = "Продовжити"; -"Close" = "Закрити"; -"OK" = "OK"; - -// Info Pane -"IdenticalBuilds" = "Ідентичні Білди"; -"IdenticalBuilds.help" = "Буває що prerelease та release насправді ідентичні (то й же Build). У такому разі Xcodes будуть показувати обидві версії разом"; - -"ReleaseDate" = "Дата релізу"; -"ReleaseNotes" = "Деталі релізу"; -"ReleaseNotes.help" = "Переглянути деталі релізу"; -"Compatibility" = "Сумісність"; -"MacOSRequirement" = "Потрібен macOS %@ чи новіший"; -"SDKs" = "SDKs"; -"Compilers" = "Компілятори"; -"DownloadSize" = "Розмір завантаження"; -"NoXcodeSelected" = "Не обрано Xcode"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "Крок %1$d з %2$d: %3$@"; -"DownloadingPercentDescription" = "Закачка: %d%% готово"; -"StopInstallation" = "Зупинити встановлення"; -"DownloadingError" = "Не знайдено інформації для закачування"; - -// About -"VersionWithBuild" = "Версія %@ (%@)"; -"GithubRepo" = "GitHub репозиторій"; -"Acknowledgements" = "Подяки"; -"UnxipExperiment" = "Експеримент Unxip"; -"License" = "Ліцензія"; - -// General Preference Pane -"General" = "Основне"; -"AppleID" = "Apple ID"; -"SignIn" = "Логін"; -"Notifications" = "Сповіщення"; - -// Updates Preference Pane -"Updates" = "Оновлення"; -"Versions" = "Версії"; -"AutomaticInstallNewVersion" = "Автоматично встановлювати нові версії Xcode"; -"IncludePreRelease" = "Також встановлювати prerelease/beta версії"; -"AppUpdates" = "Оновлення Xcodes.app"; -"CheckForAppUpdates" = "Автоматично перевіряти наявність оновлень."; -"CheckNow" = "Перевірити зараз"; -"LastChecked" = "Перевірено в останнє: %@"; -"Never" = "Ніколи"; - -// Download Preference Pane -"Downloads" = "Завантаження"; -"DataSource" = "Джерело інформації"; -"DataSourceDescription" = "Apple – cканування порталу Apple Developer у пошуку доступних версій Xcode. Створюючи список усих нових релізів, але це не завжи спрацьовує.\n\nXcode Releases – це не офіційний список релізів Xcode. Він являє собою відформатований список, що також має додаткову інформацію не завжди доступну напряму з сайту Apple, і менш ймовірно що він зламається якщо Apple випустить редизайн Developer Portal"; -"Downloader" = "Завантажувач"; -"DownloaderDescription" = "aria2 може використовувати до 16 з'єднань, завантажуючи Xcode у 3-5 разів швидше ніж URLSession. Вона поставляється у вигляді бінарника та коду, відповідно до вимог її GPLv2 ліцензії.\n\nURLSession – це завантажувач по замовчуванню від Apple"; - -// Advanced Preference Pane -"Advanced" = "Розширені"; -"LocalCachePath" = "Локальний Кеш"; -"LocalCachePathDescription" = "Сюди зберігаються тимчасові закачки встановлюваних версій Xcode"; -"Change" = "Змінити"; -"Active/Select" = "Акивний/Обрати"; -"AutomaticallyCreateSymbolicLink" = "Автоматично створювати символічну ссилку Xcode.app"; -"AutomaticallyCreateSymbolicLinkDescription" = "Обираючи Акивний Xcode, спробувати створити символічну ссилку Xcode.app що вказує на обрану версію. Ссилка буде розміщена у папці інсталяції Xcode"; -"PrivilegedHelper" = "Privileged Helper"; -"PrivilegedHelperDescription" = "Xcodes використовує спеціальний \"privilege helper\" щоб запускати задачі як суперюзер. Це включає наприклад sudo в терміналі, та кроки після інсталяції або перемикання версії Xcode за допомогою xcode-select.\n\nБуде запит на ваш пароль від Мак щоб встановити цей хелпер."; -"HelperInstalled" = "Helper встановлено"; -"HelperNotInstalled" = "Helper не встановлено"; -"InstallHelper" = "Встановити Install helper"; - -// Experiment Preference Pane -"Experiments" = "Експерименти"; -"FasterUnxip" = "Швидкий Unxip"; -"UseUnxipExperiment" = "Під час розпаковки Unxip використовувати експериментальний метод."; -"FasterUnxipDescription" = "Завдяки @_saagarjha, цей експеримент може пришвидшити розпаковку майже на 70%. Подробиці про unxip тут – https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "Сповіщення Дозволено. Ви будете отримувати сповіщення від Xcodes."; -"AccessDenied" = "⚠️ Сповіщення Заборонено ⚠️\n\nВідкрийте будьласка Налаштування Сповіщень та надайте дозвіл Xcodes для отримання дозволу."; -"NotificationSettings" = "Налаштування Сповіщень"; -"EnableNotifications" = "Увімкнути Сповіщення"; - -// SignIn -"SignInWithApple" = "Вхід з вашим Apple ID."; -"AppleID" = "Apple ID:"; -"Password" = "Пароль:"; -"Required" = "Вимагається"; -"SignOut" = "Логаут"; - -// SMS/2FA -"DigitCodeDescription" = "Введіть %d-значний код з одного з довірених пристроїв:"; -"SendSMS" = "Надіслати СМС"; -"EnterDigitCodeDescription" = "Введіть %1$d-значний код відправлений на %2$@:"; -"SelectTrustedPhone" = "Виберіть довірений номер телефону щоб отримати %d-значний код в СМС:"; -"NoTrustedPhones" = "Ваш аккаунт не має перевіреного телефонного номеру, що вимагається для двофакторної авторизації.\n\nДивіться https://support.apple.com/HT204915."; - -// MainWindow -"UpdatedAt" = "Оновлено о"; - -// ToolBar -"Login" = "Apple ID"; -"LoginDescription" = "Показати Apple ID"; -"Refresh" = "Оновити"; -"RefreshDescription" = "Оновити список Xcode"; -"All" = "Всі"; -"Release" = "Release"; -"ReleaseOnly" = "лише Release"; -"Beta" = "Beta"; -"BetaOnly" = "лише Beta"; -"Filter" = "Фільтр"; -"FilterAvailableDescription" = "Фільтрувати доступні версії"; -"FilterInstalledDescription" = "Фільтрувати встановлені версії"; -"Info" = "Info"; -"InfoDescription" = "Показати або сховати панель інформації"; -"Preferences" = "Налаштування"; -"PreferencesDescription" = "Відкрити Налаштування"; -"Search" = "Пошук..."; -"SearchDescription" = "Список знайденого"; - -// List -"ActiveVersionDescription" = "Це активна версія"; -"MakeActiveVersionDescription" = "Зробити цю версію активною"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "Видалити Xcode %@?"; -"Alert.Uninstall.Message" = "Xcode буде просто переміщено до Кошика, без очищення."; -"Alert.Uninstall.Error.Title" = "Не можливо видалити Xcode"; - -// Cancel Install -"Alert.CancelInstall.Title" = "Впевнені що хочете скасувати встановлення Xcode %@?"; -"Alert.CancelInstall.Message" = "Увесь прогрес буде скасовано."; -"Alert.CancelInstall.PrimaryButton" = "Зупинити встановлення"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "Privileged Helper"; -"Alert.PrivilegedHelper.Message" = "Xcodes використовує спеціальний \"privilege helper\" щоб запускати задачі як суперюзер. Це включає наприклад sudo в терміналі, та кроки після інсталяції або перемикання версії Xcode за допомогою xcode-select.\n\nЗараз буде запит на ваш пароль від Мак щоб встановити цей хелпер."; -"Alert.PrivilegedHelper.Error.Title" = "Не вдалося встановити \"privilege helper\""; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "Мінімальні вимоги не задоволені"; -"Alert.MinSupported.Message" = "Xcode %@ вимагає як мінімум MacOS %@, але у вас MacOS %@, всеодно продовжити?"; - -// Install -"Alert.Install.Error.Title" = "Не вдалося встановити Xcode"; -"Alert.InstallArchive.Error.Title" = "Помилка з архівом Xcode"; - -// Update -"Alert.Update.Error.Title" = "Не вдалося оновити обраний Xcode"; - -// Active/Select -"Alert.Select.Error.Title" = "Не вдалося вибрати Xcode"; - -// Symbolic Links -"Alert.SymLink.Title" = "Не вдалося створити символічну ссилку"; -"Alert.SymLink.Message" = "Xcode.app вже існує, і це не символічна ссилка"; - -// Post install -"Alert.PostInstall.Title" = "Не можливо виконати пост-інсталяційні дії"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "Архів \"%@\" пошкожено і не можливо розпакувати."; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "Архів \"%@\" не можливо розпакувати, так як бракує місця.\n\nПочистіть файлове сховище щоб вистачило місця на розпаковку Архіву, та спробуйте встановити Xcode %@ знову."; -"InstallationError.FailedToMoveXcodeToApplications" = "Помилка при переміщенні Xcode в %@."; -"InstallationError.FailedSecurityAssessment" = "Xcode провалив перевірку безпеки (security assessment) з наступним повідомленням:\n%@\nВін залишиться установлений в %@ якщо ви все ж наважитесь його використовувати."; -"InstallationError.CodesignVerifyFailed" = "Викачаний Xcode не зміг пройти перевірку коду підпису (code signing verification) з наступним повідомленням:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "Викачаний Xcode має неочікуваний код підпису (code signing identity).\nМає:\n%@\n%@\nОчікується:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcode (поки що) не підтримує свою установку у %@ форматі."; -"InstallationError.MissingSudoerPassword" = "Не вистачає sudo паролю. Спробуйте ще раз."; -"InstallationError.UnavailableVersion" = "Не можу знайти версію %@."; -"InstallationError.NoNonPrereleaseVersionAvailable" = "Немає доступних релізних версій."; -"InstallationError.NoPrereleaseVersionAvailable" = "Немає доступного пререлізу."; -"InstallationError.MissingUsernameOrPassword" = "Не вистачає юзернейму чи паролю. Спробуйте ще раз."; -"InstallationError.VersionAlreadyInstalled" = "%@ вже встановлено в %@"; -"InstallationError.InvalidVersion" = "%@ не є вірним номером версії."; -"InstallationError.VersionNotInstalled" = "%@ не встановлено."; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "Установку завершено. Але деякі post-install кроки не виконано автоматично. Ці кроки буде виконано коли ви вперше запустите Xcode %@."; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "Установку завершено. Але деякі post-install кроки не виконано автоматично. Xcodes виконує цю роботу за допомогою \"privileged helper\", який схоже що не встановлено. Ви можете встановити його за доромогою Налаштування > Додатково.\n\nЦі кроки буде виконано коли ви вперше запустите Xcode %@."; - -// Installation Steps -"Downloading" = "Скачування"; -"Unarchiving" = "Розпаковка (Може бути довго)"; -"Moving" = "Переміщення до %@"; -"TrashingArchive" = "Видалення архіву"; -"CheckingSecurity" = "Перевірка безпеки"; -"Finishing" = "Завершення"; - -// Notifications -"Notification.NewVersionAvailable" = "Доступна нова версія"; -"Notification.FinishedInstalling" = "Встановлено"; - - -"HelperClient.error" = "Помилка з'єднання з \"privileged helper\"."; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "Нові версії Xcode"; -"Notification.NewXcodeVersion.Body" = "Нові версії Xcode доступні до завантаження."; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Веселого WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/zh-Hans.lproj/Localizable.strings b/Xcodes/Resources/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index 9b0fa82..0000000 --- a/Xcodes/Resources/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,238 +0,0 @@ -// Menu -"Menu.About" = "关于Xcodes"; -"Menu.CheckForUpdates" = "检查更新…"; -"Menu.Acknowledgements" = "Xcodes版权声明"; -"Menu.GitHubRepo" = "Xcodes GitHub仓库"; -"Menu.ReportABug" = "反馈问题"; -"Menu.RequestNewFeature" = "建议新功能"; - -// Common -"Install" = "安装"; -"InstallDescription" = "安装此版本"; -"RevealInFinder" = "在访达中显示"; -"Active" = "已激活"; -"MakeActive" = "激活"; -"Open" = "打开"; -"OpenDescription" = "打开此版本"; -"CopyPath" = "复制文件位置"; -"CreateSymLink" = "以Xcode.app创建软链接"; -"CreateSymLinkBeta" = "以Xcode-Beta.app创建软链接"; -"Uninstall" = "卸载"; -"Selected" = "已选定"; -"Select" = "选定"; -"Cancel" = "取消"; -"Next" = "下一步"; -"Continue" = "继续"; -"Close" = "关闭"; -"OK" = "好"; - -// Info Pane -"IdenticalBuilds" = "重复版本"; -"IdenticalBuilds.help" = "有时预发布版本会与正式版使用相同的Build号。Xcodes会自动将这些版本显示为一个。"; - -"ReleaseDate" = "发布日期"; -"ReleaseNotes" = "更新说明"; -"ReleaseNotes.help" = "查看更新说明"; -"CopyReleaseNoteURL" = "复制 URL"; -"Compatibility" = "兼容性"; -"MacOSRequirement" = "需要macOS %@及以上"; -"SDKs" = "SDK"; -"Compilers" = "编译器"; -"DownloadSize" = "下载文件大小"; -"NoXcodeSelected" = "没有选定的Xcode版本"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "第%1$d步,共%2$d步:%3$@"; -"DownloadingPercentDescription" = "正在下载:已完成%d%%"; -"StopInstallation" = "停止安装"; -"DownloadingError" = "没有找到下载信息"; - -// About -"VersionWithBuild" = "版本%@ (%@)"; -"GithubRepo" = "GitHub仓库"; -"Acknowledgements" = "版权声明"; -"UnxipExperiment" = "Unxip Experiment"; -"License" = "许可协议"; - -// General Preference Pane -"General" = "通用"; -"AppleID" = "Apple ID"; -"SignIn" = "登录"; -"Notifications" = "通知"; - -// Updates Preference Pane -"Updates" = "更新"; -"Versions" = "版本"; -"AutomaticInstallNewVersion" = "自动安装最新的Xcode版本"; -"IncludePreRelease" = "包含预发布/测试版本"; -"AppUpdates" = "Xcodes.app更新"; -"CheckForAppUpdates" = "自动检查更新"; -"CheckNow" = "现在检查"; -"LastChecked" = "上次检查时间:%@"; -"Never" = "从未检查"; - -// Download Preference Pane -"Downloads" = "下载"; -"DataSource" = "数据源"; -"DataSourceDescription" = "Apple数据源是从Apple开发者网站爬取的。它会及时反应最新版本,但较为脆弱。\n\nXcode Releases是一个非官方的Xcode版本列表。它提供了良好格式化的数据,包含了不便从Apple直接获得的附加信息,且更不容易在Apple开发者网站无法访问时出现问题。"; -"Downloader" = "下载器"; -"DownloaderDescription" = "aria2使用最高16线程,能提供3至5倍的下载速度。它与它的源代码被一同打包在Xcodes中以符合GPLv2授权。\n\nURLSession是用于发起URL请求的默认Apple API。"; - -// Advanced Preference Pane -"Advanced" = "高级"; -"LocalCachePath" = "本地缓存位置"; -"LocalCachePathDescription" = "Xcodes会缓存可用的Xcode版本并暂时下载新版本到一个目录。"; -"Change" = "变更"; -"Active/Select" = "激活/选定"; -"InstallDirectory" = "安装目录"; -"InstallPathDescription" = "Xcodes会在一个目录中检索及安装。默认(推荐)保持/Applications。任何对Xcode存储位置的变更都可能会导致其他App或服务停止工作。"; - -"OnSelectDoNothing" = "保持名称为Xcode-X.X.X.app"; -"OnSelectDoNothingDescription" = "选中时,将会保持各版本的名称。例如Xcode-13.4.1.app。"; -"AutomaticallyCreateSymbolicLink" = "自动创建名为Xcode.app的软连接"; -"AutomaticallyCreateSymbolicLinkDescription" = "当激活/选定某个Xcode版本时,尝试在安装目录创建一个名为Xcode.app的软链接。"; -"OnSelectRenameXcode" = "总是重命名为Xcode.app"; -"OnSelectRenameXcodeDescription" = "选中时,会自动尝试重命名活跃的Xcode为Xcode.app,将之前的Xcode.app重命名为包含版本的名称。"; - -"PrivilegedHelper" = "提权帮助程序"; -"PrivilegedHelperDescription" = "Xcodes使用一个独立的提权帮助程序来以root身份执行任务。就是那些需要在命令行中用sudo执行的命令。包括一些安装前置步骤以及用xcode-select切换Xcode版本。\n\n您需要提供当前用户的密码来安装它。"; -"HelperInstalled" = "帮助程序已安装"; -"HelperNotInstalled" = "帮助程序未安装"; -"InstallHelper" = "安装帮助程序"; - -"ShowOpenInRosetta" = "显示“在Rosetta中打开”选项"; -"ShowOpenInRosettaDescription" = "“在Rosetta中打开”将会在有其他“打开”方式可用时显示。注:此选项只会在Apple Silicon设备上显示。"; - -// Experiment Preference Pane -"Experiments" = "实验性功能"; -"FasterUnxip" = "更快的xip解压"; -"UseUnxipExperiment" = "使用实验性功能解压xip"; -"FasterUnxipDescription" = "感谢@_saagarjha,此实验性功能可在部分系统上将xip解压速度提高70%。\n\n请从此仓库获取关于其实现细节的信息:https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "已授权。您将会收到Xcodes的通知。"; -"AccessDenied" = "⚠️ 没有权限 ⚠️\n\n请打开您的通知偏好设置并允许Xcodes发送通知。"; -"NotificationSettings" = "通知设置"; -"EnableNotifications" = "启用通知"; - -// SignIn -"SignInWithApple" = "使用您的Apple ID登录。"; -"AppleID" = "Apple ID:"; -"Password" = "密码:"; -"Required" = "必填"; -"SignOut" = "登出"; - -// SMS/2FA -"DigitCodeDescription" = "请输入从信任的设备接收到的%d位代码:"; -"SendSMS" = "发送短信"; -"EnterDigitCodeDescription" = "请输入%1$d位代码,已发送到%2$@:"; -"SelectTrustedPhone" = "请选择一个信任的手机号来从短信接收%d位代码:"; -"NoTrustedPhones" = "您的账户没有任何信任的手机号,但这是两步验证所必须的。\n\n请参阅 https://support.apple.com/HT204915。"; - -// MainWindow -"UpdatedAt" = "更新于"; - -// ToolBar -"Login" = "登录"; -"LoginDescription" = "打开登录窗口"; -"Refresh" = "刷新"; -"RefreshDescription" = "刷新Xcode列表"; -"All" = "全部"; -"Release" = "正式版"; -"ReleaseOnly" = "只显示正式版"; -"Beta" = "测试版"; -"BetaOnly" = "只显示测试版"; -"Filter" = "过滤"; -"FilterAvailableDescription" = "过滤可用版本"; -"FilterInstalledDescription" = "过滤已安装版本"; -"Info" = "信息"; -"InfoDescription" = "显示或隐藏信息面板"; -"Preferences" = "偏好设置"; -"PreferencesDescription" = "打开偏好设置"; -"Search" = "搜索…"; -"SearchDescription" = "搜索列表"; - -// List -"ActiveVersionDescription" = "这是一个已激活的版本"; -"MakeActiveVersionDescription" = "激活此版本"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "要卸载Xcode %@吗?"; -"Alert.Uninstall.Message" = "它会被移动到废纸篓,但废纸篓不会清空。"; -"Alert.Uninstall.Error.Title" = "无法卸载Xcode"; -"Alert.Uninstall.Error.Message.FileNotFound" = "无法找到文件\"%@\"."; - -// Cancel Install -"Alert.CancelInstall.Title" = "您确定要终止Xcode %@的安装吗?"; -"Alert.CancelInstall.Message" = "所有进度都将会丢失。"; -"Alert.CancelInstall.PrimaryButton" = "终止安装"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "提权帮助程序"; -"Alert.PrivilegedHelper.Message" = "Xcodes使用一个独立的提权帮助程序来以root身份执行任务。就是那些需要在命令行中用sudo执行的命令。包括安装前置步骤以及用xcode-select切换Xcode版本。\n\n您需要提供当前用户的密码来安装它。"; -"Alert.PrivilegedHelper.Error.Title" = "无法安装帮助程序"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "没有达到安装所需的最低要求"; -"Alert.MinSupported.Message" = "Xcode %@需要macOS %@及以上,但您运行的是macOS %@,仍然要安装吗?"; - -// Install -"Alert.Install.Error.Title" = "无法安装Xcode"; -"Alert.InstallArchive.Error.Title" = "无法安装Xcode压缩文件"; - -// Update -"Alert.Update.Error.Title" = "无法更新选定的Xcode版本"; - -// Active/Select -"Alert.Select.Error.Title" = "无法选定Xcode版本"; - -// Symbolic Links -"Alert.SymLink.Title" = "无法创建软链接"; -"Alert.SymLink.Message" = "Xcode.app已存在且不是软连接"; - -// Post install -"Alert.PostInstall.Title" = "无法执行安装前置步骤"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "此压缩文件“%@”已损坏且无法解压。"; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "此压缩文件“%@”无法解压因为当前宗卷没有足够的可用空间。\n\n请空出更多空间并再次安装Xcode %@以从失败处继续。"; -"InstallationError.FailedToMoveXcodeToApplications" = "无法将Xcode移动到目录%@。"; -"InstallationError.FailedSecurityAssessment" = "Xcode %@无法完成安全评估,并输出如下:\n%@\n但它依然被安装到了%@如果您依然想使用它的话。"; -"InstallationError.CodesignVerifyFailed" = "无法验证下载的Xcode版本的代码签名,并输出如下:\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "下载的Xcode版本不包含期望的代码签名身份。\n读取到:\n%@\n%@\n期望是:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes尚未支持从%@格式安装。"; -"InstallationError.MissingSudoerPassword" = "缺少密码。请再试一次。"; -"InstallationError.UnavailableVersion" = "无法找到版本%@。"; -"InstallationError.NoNonPrereleaseVersionAvailable" = "没有非预发布版以外的其他可用版本。"; -"InstallationError.NoPrereleaseVersionAvailable" = "没有可用的预发布版本。"; -"InstallationError.MissingUsernameOrPassword" = "缺少用户名或密码。请再试一次。"; -"InstallationError.VersionAlreadyInstalled" = "%@已经被安装到%@"; -"InstallationError.InvalidVersion" = "%@不是一个正确的版本。"; -"InstallationError.VersionNotInstalled" = "%@没有被安装。"; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "安装已完成,但一些前置步骤没有被自动执行。它们将会在您第一次运行Xcode %@时执行。"; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "安装已完成,但一些前置步骤没有被自动执行。Xcodes使用一个提权帮助程序来执行这些步骤,但帮助程序似乎没有被安装。您可以从 偏好设置 > 高级 中安装。\n\n这些步骤将会在您第一次运行Xcode %@时执行。"; - -// Installation Steps -"Downloading" = "正在下载"; -"Unarchiving" = "正在解压(这将需要一些时间)"; -"Moving" = "正在移动到%@"; -"TrashingArchive" = "正在将压缩文件移动到废纸篓"; -"CheckingSecurity" = "正在检查安全性"; -"Finishing" = "正在完成"; - -// Notifications -"Notification.NewVersionAvailable" = "新版本可用"; -"Notification.FinishedInstalling" = "安装完成"; - - -"HelperClient.error" = "无法与提权帮助程序通信。"; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "新Xcode版本可用"; -"Notification.NewXcodeVersion.Body" = "新的Xcode版本已经可以下载。"; - -// WWDC -"WWDC.Message" = "👨🏻‍💻👩🏼‍💻 Happy WWDC %@! 👨🏽‍💻🧑🏻‍💻"; diff --git a/Xcodes/Resources/zh-Hant.lproj/Localizable.strings b/Xcodes/Resources/zh-Hant.lproj/Localizable.strings deleted file mode 100644 index b655c83..0000000 --- a/Xcodes/Resources/zh-Hant.lproj/Localizable.strings +++ /dev/null @@ -1,223 +0,0 @@ -// Menu -"Menu.About" = "關於 Xcodes"; -"Menu.CheckForUpdates" = "檢查更新版本⋯"; -"Menu.Acknowledgements" = "Xcodes 版權宣告"; -"Menu.GitHubRepo" = "Xcodes GitHub Repo"; -"Menu.ReportABug" = "回報錯誤"; -"Menu.RequestNewFeature" = "請求新功能"; - -// Common -"Install" = "安裝"; -"InstallDescription" = "安裝這個版本"; -"RevealInFinder" = "顯示於 Finder"; -"Active" = "啟用中"; -"MakeActive" = "啟用"; -"Open" = "打開"; -"OpenDescription" = "打開這個版本"; -"CopyPath" = "拷貝路徑"; -"CreateSymLink" = "製作 Xcode.app 的 Symlink"; -"CreateSymLink" = "製作 Xcode-Beta.app 的 Symlink"; -"Uninstall" = "解除安裝"; -"Selected" = "已選取"; -"Select" = "選取"; -"Cancel" = "取消"; -"Next" = "下一步"; -"Continue" = "繼續"; -"Close" = "關閉"; -"OK" = "好"; - -// Info Pane -"IdenticalBuilds" = "相同的建置版本"; -"IdenticalBuilds.help" = "有時候預先發行版與正式版的建制版本號會相同,Xcodes 會自動將這些版本整理在一起。"; - -"ReleaseDate" = "發行日期"; -"ReleaseNotes" = "版本附註"; -"ReleaseNotes.help" = "檢視版本附註"; -"CopyReleaseNoteURL" = "複製 URL"; -"Compatibility" = "相容性"; -"MacOSRequirement" = "需要 macOS %@ 或以上版本"; -"SDKs" = "SDKs"; -"Compilers" = "編譯器"; -"DownloadSize" = "下載大小"; -"NoXcodeSelected" = "沒有已選取的 Xcode"; - -// Installation Steps -// When localizing. Items will be replaced in order. ie "Step 1 of 6: Downloading" -// So if changing order, make sure the positional specficier is retained. ex: "%3$@: Step %1$d of %2$d" -"InstallationStepDescription" = "步驟 %1$d 之 %2$d:%3$@"; -"DownloadingPercentDescription" = "下載中:已完成 %d%%"; -"StopInstallation" = "停止安裝"; -"DownloadingError" = "找不到下載相關資訊"; - -// About -"VersionWithBuild" = "版本 %@ (%@)"; -"GithubRepo" = "GitHub Repo"; -"Acknowledgements" = "版權宣告"; -"UnxipExperiment" = "Unxip 試驗"; -"License" = "軟體許可證"; - -// General Preference Pane -"General" = "一般"; -"AppleID" = "Apple ID"; -"SignIn" = "登入"; -"Notifications" = "通知"; - -// Updates Preference Pane -"Updates" = "更新"; -"Versions" = "版本"; -"AutomaticInstallNewVersion" = "自動安裝新版本的 Xcode"; -"IncludePreRelease" = "包含預先發行及測試版"; -"AppUpdates" = "Xcodes.app 更新"; -"CheckForAppUpdates" = "自動檢查更新項目"; -"CheckNow" = "立即檢查"; -"LastChecked" = "上一次檢查: %@"; -"Never" = "從未使用"; - -// Download Preference Pane -"Downloads" = "下載"; -"DataSource" = "資料來源"; -"DataSourceDescription" = "Apple 資料來源是擷取 Apple 開發者網站而來,永遠會顯示最新的可用版本,但比較容易出錯。\n\nXcode Releases 是一個非官方的 Xcodes 發行版本列表。這個來源提供格式良好的資料,包含了 Apple 開發者網站上未列出的額外資訊並且即使 Apple 決定重新設計他們的開發者網站也比較不容易出錯。"; -"Downloader" = "下載器"; -"DownloaderDescription" = "aria2 相較 URLSession 可以同時使用最多 16 條連線以 3 ~ 5 倍的速度下載 Xcode。Xcodes 包含了執行檔與其原始碼以遵循他的 GPLv2 授權合約。\n\nURLSession 是系統內建用來發送 URL 連線請求的 Apple API。"; - -// Advanced Preference Pane -"Advanced" = "進階"; -"LocalCachePath" = "本機快取路徑"; -"LocalCachePathDescription" = "Xcodes 會快取可用的 Xcode 版本並將新版本暫存下載至這個目錄"; -"Change" = "變更"; -"Active/Select" = "啟用/選取"; -"AutomaticallyCreateSymbolicLink" = "自動建立 Symlink 至 Xcode.app"; -"AutomaticallyCreateSymbolicLinkDescription" = "當你選擇/啟用一個 Xcode 版本,自動建立一個名為 Xcode.app 的 Symlink 到該版本的安裝目錄"; -"PrivilegedHelper" = "權限輔助程式"; -"PrivilegedHelperDescription" = "Xcodes 使用一個分開的權限輔助程式以使用 root 身份執行特定工作。這些工作包含了通常需要在命令列使用 sudo 的指令,包含安裝後步驟以及使用 xcode-select 選擇 Xcode 版本。\n\n安裝時,你將會被詢問你的 macOS 帳號密碼。"; -"HelperInstalled" = "輔助程式已安裝"; -"HelperNotInstalled" = "輔助程式尚未安裝"; -"InstallHelper" = "安裝輔助程式"; - -// Experiment Preference Pane -"Experiments" = "實驗"; -"FasterUnxip" = "更快的 Unxip"; -"UseUnxipExperiment" = "解壓縮 (Unxip) 時,使用這個試驗版本"; -"FasterUnxipDescription" = "感謝 @_saagarjha 的努力,這個試驗版本可以在某些系統上加快 70% 的解壓縮速度。\n\n更多關於這項成就是如何達成的資訊,請參閱 unxip 的 repo - https://github.com/saagarjha/unxip"; - -// Notifications -"AccessGranted" = "通知已啟用。你將會開始收到來自 Xcodes 的通知。"; -"AccessDenied" = "⚠️ 通知已停用 ⚠️\n\n如果你想要啟用通知,請打開你的通知設定並選擇 Xcodes。"; -"NotificationSettings" = "通知偏好設定"; -"EnableNotifications" = "啟用通知"; - -// SignIn -"SignInWithApple" = "登入您的Apple ID"; -"AppleID" = "Apple ID:"; -"Password" = "密碼:"; -"Required" = "必要"; -"SignOut" = "登出"; - -// SMS/2FA -"DigitCodeDescription" = "請輸入顯示在你其中一個信任裝置中的 %d 位數密碼:"; -"SendSMS" = "傳送簡訊"; -"EnterDigitCodeDescription" = "請輸入 %1$d 位數密碼,已傳送至 %2$@: "; -"SelectTrustedPhone" = "請輸入一個你想用來接收 %d 位數密碼簡訊的電話號碼:"; -"NoTrustedPhones" = "你的帳號沒有任何已信任的手機號碼,但兩階段認證需要信任的手機號碼。\n\n請參閱 https://support.apple.com/HT204915."; - -// MainWindow -"UpdatedAt" = "上一次檢查:"; - -// ToolBar -"Login" = "登入"; -"LoginDescription" = "打開登入"; -"Refresh" = "更新"; -"RefreshDescription" = "更新 Xcode 版本列表"; -"All" = "全部"; -"Release" = "正式版"; -"ReleaseOnly" = "只看正式版"; -"Beta" = "測試版"; -"BetaOnly" = "只看測試版"; -"Filter" = "過濾"; -"FilterAvailableDescription" = "顯示可用的版本"; -"FilterInstalledDescription" = "顯示已安裝的版本"; -"Info" = "資訊"; -"InfoDescription" = "顯示或隱藏資訊面板"; -"Preferences" = "偏好設定"; -"PreferencesDescription" = "打開偏好設定"; -"Search" = "搜尋⋯"; -"SearchDescription" = "搜尋列表"; - -// List -"ActiveVersionDescription" = "這是啟用中版本"; -"MakeActiveVersionDescription" = "啟用這個版本"; - -// Alerts -// Uninstall -"Alert.Uninstall.Title" = "解除安裝 Xcode %@?"; -"Alert.Uninstall.Message" = "它將會被移到垃圾桶,但不會被清除。"; -"Alert.Uninstall.Error.Title" = "無法解除安裝 Xcode"; - -// Cancel Install -"Alert.CancelInstall.Title" = "你確定你想要停止安裝 Xcode %@?"; -"Alert.CancelInstall.Message" = "所有已進行的安裝步驟將被放棄。"; -"Alert.CancelInstall.PrimaryButton" = "停止安裝"; - -// Privileged Helper -"Alert.PrivilegedHelper.Title" = "權限輔助程式"; -"Alert.PrivilegedHelper.Message" = "Xcodes 使用一個分開的權限輔助程式以使用 root 身份執行特定工作。這些工作包含了通常需要在命令列使用 sudo 的指令,包含安裝後步驟以及使用 xcode-select 選擇 Xcode 版本。\n\n安裝時,你將會被詢問你的 macOS 帳號密碼。"; -"Alert.PrivilegedHelper.Error.Title" = "無法安裝輔助程式"; - -// Min MacOS Supported -"Alert.MinSupported.Title" = "未達最低版本要求"; -"Alert.MinSupported.Message" = "Xcode %@ 需要 MacOS %@,但你正在使用 MacOS %@,你確定還要繼續安裝嗎?"; - -// Install -"Alert.Install.Error.Title" = "無法安裝 Xcode"; -"Alert.InstallArchive.Error.Title" = "無法安裝已封存的 Xcode"; - -// Update -"Alert.Update.Error.Title" = "無法更新已選擇的 Xcode"; - -// Active/Select -"Alert.Select.Error.Title" = "無法選擇 Xcode"; - -// Symbolic Links -"Alert.SymLink.Title" = "無法建立 Symlink"; -"Alert.SymLink.Message" = "Xcode.app 已經存在,但並不是一個 Symlink"; - -// Post install -"Alert.PostInstall.Title" = "無法進行安裝後步驟"; - -// InstallationErrors -"InstallationError.DamagedXIP" = "壓縮檔 \"%@\" 已經損壞並無法解壓縮。"; -"InstallationError.NotEnoughFreeSpaceToExpandArchive" = "壓縮檔 \"%@\" 由於缺乏足夠的磁碟空間,無法解壓縮。\n\n請清空更多磁碟空間以確保可以解壓縮該檔案,然後再重新安裝 Xcode %@ 一次。安裝步驟將會從上次停住的地方繼續。"; -"InstallationError.FailedToMoveXcodeToApplications" = "無法將 Xcode 移動至 %@ 目錄。"; -"InstallationError.FailedSecurityAssessment" = "由於以下原因無法安全驗證 Xcode %@:\n%@\n如果你執意使用,該版本仍然安裝於 %@。"; -"InstallationError.CodesignVerifyFailed" = "下載的 Xcode 由於以下原因無法驗證 Codesign 簽章\n%@"; -"InstallationError.UnexpectedCodeSigningIdentity" = "下載的 Xcode 含有未預期的簽章。\n簽章人:\n%@\n%@\n預期的簽章人:\n%@\n%@"; -"InstallationError.UnsupportedFileFormat" = "Xcodes 目前尚未支援由 %@ 檔案格式安裝 Xcode。"; -"InstallationError.MissingSudoerPassword" = "找不到密碼,請再試一次。"; -"InstallationError.UnavailableVersion" = "找不到版本 %@。"; -"InstallationError.NoNonPrereleaseVersionAvailable" = "目前沒有可用的非預先發行版本。"; -"InstallationError.NoPrereleaseVersionAvailable" = "目前沒有可用的預先發行版本。"; -"InstallationError.MissingUsernameOrPassword" = "找不到使用者名稱或是密碼,請再試一次。"; -"InstallationError.VersionAlreadyInstalled" = "%@ 已經安裝於 %@"; -"InstallationError.InvalidVersion" = "%@ 不是個正確的版本號碼。"; -"InstallationError.VersionNotInstalled" = "%@ 沒有被安裝。"; -"InstallationError.PostInstallStepsNotPerformed.Installed" = "安裝已經完成,但有些安裝後步驟沒有自動執行。這些步驟在你第一次啟動 Xcode %@ 的時候會自動執行。"; -"InstallationError.PostInstallStepsNotPerformed.NotInstalled" = "安裝已經完成,但有些安裝後步驟沒有自動執行。 Xcodes 需要權限輔助程式來執行這些步驟,但該程式尚未被安裝。你可以在 偏好設定 > 進階中安裝它。\n\n這些步驟在你第一次啟動 Xcode %@ 的時候會自動執行。"; - -// Installation Steps -"Downloading" = "下載中"; -"Unarchiving" = "解壓縮中 (可能需要一點時間)"; -"Moving" = "移動至 %@"; -"TrashingArchive" = "移動封存檔到垃圾桶"; -"CheckingSecurity" = "安全驗證中"; -"Finishing" = "收尾中"; - -// Notifications -"Notification.NewVersionAvailable" = "有新的版本可用"; -"Notification.FinishedInstalling" = "已經完成安裝"; - - -"HelperClient.error" = "無法與權限輔助程式溝通。"; -///++ -// Notifications -"Notification.NewXcodeVersion.Title" = "新的 Xcode 版本"; -"Notification.NewXcodeVersion.Body" = "新的 Xcode 版本已經可以下載了"; From 7690c19115b64c4fb734c54b105bc0e054f39acc Mon Sep 17 00:00:00 2001 From: Ege Sucu Date: Fri, 1 Dec 2023 20:28:51 +0300 Subject: [PATCH 51/86] Localization file updated --- Xcodes/Resources/Localizable.xcstrings | 492 +++++++++++++++++++------ 1 file changed, 377 insertions(+), 115 deletions(-) diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index 334c52d..ede84f6 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -1,26 +1,8 @@ { "sourceLanguage" : "en", "strings" : { - "" : { - - }, - "%@" : { - - }, - "%@ %@ %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ %2$@ %3$@" - } - } - } - }, - "• %@" : { - - }, "AccessDenied" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -134,6 +116,7 @@ }, "AccessGranted" : { "comment" : "Notifications", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -246,6 +229,7 @@ } }, "Acknowledgements" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -259,6 +243,12 @@ "value" : "Anerkennungen" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acknowledgements" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -352,6 +342,7 @@ } }, "Active" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -365,6 +356,12 @@ "value" : "Aktiv" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -458,6 +455,7 @@ } }, "Active/Select" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -471,6 +469,12 @@ "value" : "Aktiv/Auswählen" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active/Select" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -565,6 +569,7 @@ }, "ActiveVersionDescription" : { "comment" : "List", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -678,6 +683,7 @@ }, "Advanced" : { "comment" : "Advanced Preference Pane", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -691,6 +697,12 @@ "value" : "Erweitert" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Advanced" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -784,6 +796,7 @@ } }, "Alert.CancelInstall.Message" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -896,6 +909,7 @@ } }, "Alert.CancelInstall.PrimaryButton" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1009,7 +1023,7 @@ }, "Alert.CancelInstall.Title" : { "comment" : "Cancel Install", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1123,7 +1137,7 @@ }, "Alert.Install.Error.Title" : { "comment" : "Install", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1236,7 +1250,7 @@ } }, "Alert.InstallArchive.Error.Title" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1349,7 +1363,7 @@ } }, "Alert.MinSupported.Message" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1463,6 +1477,7 @@ }, "Alert.MinSupported.Title" : { "comment" : "Min MacOS Supported", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1576,7 +1591,7 @@ }, "Alert.PostInstall.Title" : { "comment" : "Post install", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1689,7 +1704,7 @@ } }, "Alert.PrivilegedHelper.Error.Title" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1802,6 +1817,7 @@ } }, "Alert.PrivilegedHelper.Message" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1915,6 +1931,7 @@ }, "Alert.PrivilegedHelper.Title" : { "comment" : "Privileged Helper", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2028,7 +2045,7 @@ }, "Alert.Select.Error.Title" : { "comment" : "Active/Select", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2141,7 +2158,7 @@ } }, "Alert.SymLink.Message" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2255,7 +2272,7 @@ }, "Alert.SymLink.Title" : { "comment" : "Symbolic Links", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2368,7 +2385,7 @@ } }, "Alert.Uninstall.Error.Message.FileNotFound" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "de" : { "stringUnit" : { @@ -2409,7 +2426,7 @@ } }, "Alert.Uninstall.Error.Title" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2522,6 +2539,7 @@ } }, "Alert.Uninstall.Message" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2635,7 +2653,7 @@ }, "Alert.Uninstall.Title" : { "comment" : "Uninstall", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2749,7 +2767,7 @@ }, "Alert.Update.Error.Title" : { "comment" : "Update", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2862,6 +2880,7 @@ } }, "All" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2875,6 +2894,12 @@ "value" : "Alle" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "All" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -2966,11 +2991,9 @@ } } } - }, - "Apple Silicon" : { - }, "AppleID" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3083,6 +3106,7 @@ } }, "AppUpdates" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3195,6 +3219,7 @@ } }, "AutomaticallyCreateSymbolicLink" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3307,6 +3332,7 @@ } }, "AutomaticallyCreateSymbolicLinkDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3419,6 +3445,7 @@ } }, "AutomaticInstallNewVersion" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3531,7 +3558,7 @@ } }, "Beta" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3644,6 +3671,7 @@ } }, "BetaOnly" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3756,6 +3784,7 @@ } }, "Cancel" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3769,6 +3798,12 @@ "value" : "Abbrechen" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -3862,6 +3897,7 @@ } }, "Change" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3875,6 +3911,12 @@ "value" : "Ändern" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -3968,6 +4010,7 @@ } }, "CheckForAppUpdates" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4080,7 +4123,7 @@ } }, "CheckingSecurity" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4193,6 +4236,7 @@ } }, "CheckNow" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4305,6 +4349,7 @@ } }, "Close" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4318,6 +4363,12 @@ "value" : "Schließen" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Close" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -4411,6 +4462,7 @@ } }, "Compatibility" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4424,6 +4476,12 @@ "value" : "Kompatibilität" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compatibility" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -4517,6 +4575,7 @@ } }, "Compilers" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4530,6 +4589,12 @@ "value" : "Compiler" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compilers" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -4623,6 +4688,7 @@ } }, "Continue" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4636,6 +4702,12 @@ "value" : "Fortfahren" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continue" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -4729,6 +4801,7 @@ } }, "CopyPath" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4841,6 +4914,7 @@ } }, "CopyReleaseNoteURL" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4935,6 +5009,7 @@ } }, "CreateSymLink" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5047,6 +5122,7 @@ } }, "CreateSymLinkBeta" : { + "extractionState" : "migrated", "localizations" : { "de" : { "stringUnit" : { @@ -5129,6 +5205,7 @@ } }, "DataSource" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5241,7 +5318,7 @@ } }, "DataSourceDescription" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5355,7 +5432,7 @@ }, "DigitCodeDescription" : { "comment" : "SMS/2FA", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5468,6 +5545,7 @@ } }, "Downloader" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5481,6 +5559,12 @@ "value" : "Downloader" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloader" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -5574,7 +5658,7 @@ } }, "DownloaderDescription" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5688,7 +5772,7 @@ }, "Downloading" : { "comment" : "Installation Steps", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5801,7 +5885,7 @@ } }, "DownloadingError" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5914,7 +5998,7 @@ } }, "DownloadingPercentDescription" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6028,6 +6112,7 @@ }, "Downloads" : { "comment" : "Download Preference Pane", + "extractionState" : "migrated", "localizations" : { "de" : { "stringUnit" : { @@ -6035,6 +6120,12 @@ "value" : "Downloads" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloads" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -6116,6 +6207,7 @@ } }, "DownloadSize" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6228,6 +6320,7 @@ } }, "EnableNotifications" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6340,7 +6433,7 @@ } }, "EnterDigitCodeDescription" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6451,12 +6544,10 @@ } } } - }, - "example@icloud.com" : { - }, "Experiments" : { "comment" : "Experiment Preference Pane", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6470,6 +6561,12 @@ "value" : "Experimente" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experiments" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -6563,6 +6660,7 @@ } }, "FasterUnxip" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6675,7 +6773,7 @@ } }, "FasterUnxipDescription" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6788,6 +6886,7 @@ } }, "Filter" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6801,6 +6900,12 @@ "value" : "Filter" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Filter" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -6894,6 +6999,7 @@ } }, "FilterAvailableDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7006,6 +7112,7 @@ } }, "FilterInstalledDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7118,7 +7225,7 @@ } }, "Finishing" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7232,6 +7339,7 @@ }, "General" : { "comment" : "General Preference Pane", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7245,6 +7353,12 @@ "value" : "Allgemein" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "General" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -7338,6 +7452,7 @@ } }, "GithubRepo" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7450,7 +7565,7 @@ } }, "HelperClient.error" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7563,6 +7678,7 @@ } }, "HelperInstalled" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7675,6 +7791,7 @@ } }, "HelperNotInstalled" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7785,12 +7902,10 @@ } } } - }, - "Hidden" : { - }, "IdenticalBuilds" : { "comment" : "Info Pane", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7903,6 +8018,7 @@ } }, "IdenticalBuilds.help" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8015,6 +8131,7 @@ } }, "IncludePreRelease" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8127,6 +8244,7 @@ } }, "Info" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8140,6 +8258,12 @@ "value" : "Info" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Info" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -8233,6 +8357,7 @@ } }, "InfoDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8346,6 +8471,7 @@ }, "Install" : { "comment" : "Common", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8359,6 +8485,12 @@ "value" : "Installieren" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Install" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -8450,12 +8582,9 @@ } } } - }, - "INSTALL" : { - }, "InstallationError.CodesignVerifyFailed" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8569,7 +8698,7 @@ }, "InstallationError.DamagedXIP" : { "comment" : "InstallationErrors", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8682,7 +8811,7 @@ } }, "InstallationError.FailedSecurityAssessment" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8795,7 +8924,7 @@ } }, "InstallationError.FailedToMoveXcodeToApplications" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8908,7 +9037,7 @@ } }, "InstallationError.InvalidVersion" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -9021,7 +9150,7 @@ } }, "InstallationError.MissingSudoerPassword" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -9134,7 +9263,7 @@ } }, "InstallationError.MissingUsernameOrPassword" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -9247,7 +9376,7 @@ } }, "InstallationError.NoNonPrereleaseVersionAvailable" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -9360,7 +9489,7 @@ } }, "InstallationError.NoPrereleaseVersionAvailable" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -9473,7 +9602,7 @@ } }, "InstallationError.NotEnoughFreeSpaceToExpandArchive" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -9586,7 +9715,7 @@ } }, "InstallationError.PostInstallStepsNotPerformed.Installed" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -9699,7 +9828,7 @@ } }, "InstallationError.PostInstallStepsNotPerformed.NotInstalled" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -9812,7 +9941,7 @@ } }, "InstallationError.UnavailableVersion" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -9925,7 +10054,7 @@ } }, "InstallationError.UnexpectedCodeSigningIdentity" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10038,7 +10167,7 @@ } }, "InstallationError.UnsupportedFileFormat" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10151,7 +10280,7 @@ } }, "InstallationError.VersionAlreadyInstalled" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10264,7 +10393,7 @@ } }, "InstallationError.VersionNotInstalled" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10378,7 +10507,7 @@ }, "InstallationStepDescription" : { "comment" : "So if changing order, make sure the positional specficier is retained. ex: \"%3$@: Step %1$d of %2$d\"", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10491,6 +10620,7 @@ } }, "InstallDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10603,6 +10733,7 @@ } }, "InstallDirectory" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10667,6 +10798,7 @@ } }, "InstallHelper" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10779,6 +10911,7 @@ } }, "InstallPathDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10837,7 +10970,7 @@ } }, "LastChecked" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10950,6 +11083,7 @@ } }, "License" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10963,6 +11097,12 @@ "value" : "Lizenz" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "License" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -11056,6 +11196,7 @@ } }, "LocalCachePath" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11168,6 +11309,7 @@ } }, "LocalCachePathDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11281,6 +11423,7 @@ }, "Login" : { "comment" : "ToolBar", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11294,6 +11437,12 @@ "value" : "Login" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -11387,6 +11536,7 @@ } }, "LoginDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11499,7 +11649,7 @@ } }, "MacOSRequirement" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11612,6 +11762,7 @@ } }, "MakeActive" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11724,6 +11875,7 @@ } }, "MakeActiveVersionDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11837,6 +11989,7 @@ }, "Menu.About" : { "comment" : "Menu", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11949,7 +12102,7 @@ } }, "Menu.Acknowledgements" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12062,6 +12215,7 @@ } }, "Menu.CheckForUpdates" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12174,6 +12328,7 @@ } }, "Menu.GitHubRepo" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12286,6 +12441,7 @@ } }, "Menu.ReportABug" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12398,6 +12554,7 @@ } }, "Menu.RequestNewFeature" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12510,7 +12667,7 @@ } }, "Moving" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12623,7 +12780,7 @@ } }, "Never" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12736,6 +12893,7 @@ } }, "Next" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12749,6 +12907,12 @@ "value" : "Nächstes" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Next" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -12840,12 +13004,9 @@ } } } - }, - "Not Hidden" : { - }, "Notification.FinishedInstalling" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12959,7 +13120,7 @@ }, "Notification.NewVersionAvailable" : { "comment" : "Notifications", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13072,7 +13233,7 @@ } }, "Notification.NewXcodeVersion.Body" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13186,7 +13347,7 @@ }, "Notification.NewXcodeVersion.Title" : { "comment" : "Notifications", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13299,6 +13460,7 @@ } }, "Notifications" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13312,6 +13474,12 @@ "value" : "Benachrichtigungen" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifications" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -13405,6 +13573,7 @@ } }, "NotificationSettings" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13517,7 +13686,7 @@ } }, "NoTrustedPhones" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13630,6 +13799,7 @@ } }, "NoXcodeSelected" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13742,6 +13912,7 @@ } }, "OK" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13755,6 +13926,12 @@ "value" : "OK" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -13840,12 +14017,9 @@ } } } - }, - "OnSelect" : { - }, "OnSelectDoNothing" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13922,7 +14096,7 @@ } }, "OnSelectDoNothingDescription" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13987,7 +14161,7 @@ } }, "OnSelectRenameXcode" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "de" : { "stringUnit" : { @@ -14052,7 +14226,7 @@ } }, "OnSelectRenameXcodeDescription" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14123,6 +14297,7 @@ } }, "Open" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14136,6 +14311,12 @@ "value" : "Öffnen" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -14227,14 +14408,9 @@ } } } - }, - "OPEN" : { - - }, - "Open In Rosetta" : { - }, "OpenDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14347,6 +14523,7 @@ } }, "Password" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14458,10 +14635,19 @@ } } }, - "Perform post-install steps" : { - + "Platforms" : { + "extractionState" : "migrated", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Platforms" + } + } + } }, "Preferences" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14475,6 +14661,12 @@ "value" : "Einstellungen" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferences" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -14568,6 +14760,7 @@ } }, "PreferencesDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14680,6 +14873,7 @@ } }, "PrivilegedHelper" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14792,6 +14986,7 @@ } }, "PrivilegedHelperDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14904,6 +15099,7 @@ } }, "Refresh" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14917,6 +15113,12 @@ "value" : "Aktualisieren" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Refresh" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -15010,6 +15212,7 @@ } }, "RefreshDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15122,7 +15325,7 @@ } }, "Release" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15235,6 +15438,7 @@ } }, "ReleaseDate" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15347,6 +15551,7 @@ } }, "ReleaseNotes" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15459,6 +15664,7 @@ } }, "ReleaseNotes.help" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15571,6 +15777,7 @@ } }, "ReleaseOnly" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15683,6 +15890,7 @@ } }, "Required" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15696,6 +15904,12 @@ "value" : "Erforderlich" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Required" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -15789,6 +16003,7 @@ } }, "RevealInFinder" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15901,6 +16116,7 @@ } }, "SDKs" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15914,6 +16130,12 @@ "value" : "SDKs" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "SDKs" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -16007,6 +16229,7 @@ } }, "Search" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16119,6 +16342,7 @@ } }, "SearchDescription" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16231,6 +16455,7 @@ } }, "Select" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16244,6 +16469,12 @@ "value" : "Auswählen" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Select" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -16337,6 +16568,7 @@ } }, "Selected" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16350,6 +16582,12 @@ "value" : "Ausgewählt" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selected" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -16443,7 +16681,7 @@ } }, "SelectTrustedPhone" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16556,6 +16794,7 @@ } }, "SendSMS" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16668,6 +16907,7 @@ } }, "ShowOpenInRosetta" : { + "extractionState" : "migrated", "localizations" : { "en" : { "stringUnit" : { @@ -16708,6 +16948,7 @@ } }, "ShowOpenInRosettaDescription" : { + "extractionState" : "migrated", "localizations" : { "en" : { "stringUnit" : { @@ -16748,6 +16989,7 @@ } }, "SignIn" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16861,6 +17103,7 @@ }, "SignInWithApple" : { "comment" : "SignIn", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16973,6 +17216,7 @@ } }, "SignOut" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17085,6 +17329,7 @@ } }, "StopInstallation" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17197,7 +17442,7 @@ } }, "TrashingArchive" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17310,7 +17555,7 @@ } }, "Unarchiving" : { - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17423,6 +17668,7 @@ } }, "Uninstall" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17436,6 +17682,12 @@ "value" : "Deinstallieren" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uninstall" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -17529,6 +17781,7 @@ } }, "UnxipExperiment" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17642,7 +17895,7 @@ }, "UpdatedAt" : { "comment" : "MainWindow", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17756,6 +18009,7 @@ }, "Updates" : { "comment" : "Updates Preference Pane", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17769,6 +18023,12 @@ "value" : "Updates" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Updates" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -17862,6 +18122,7 @@ } }, "UseUnxipExperiment" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17974,6 +18235,7 @@ } }, "Versions" : { + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17987,6 +18249,12 @@ "value" : "Versionen" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versions" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -18081,7 +18349,7 @@ }, "VersionWithBuild" : { "comment" : "About", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -18195,7 +18463,7 @@ }, "WWDC.Message" : { "comment" : "WWDC", - "extractionState" : "manual", + "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -18300,12 +18568,6 @@ } } } - }, - "Xcode" : { - - }, - "Xcodes" : { - } }, "version" : "1.0" From 57bf6d8a80230e8fd1c872fd59f09f176ee440fe Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Sat, 2 Dec 2023 09:24:54 -0600 Subject: [PATCH 52/86] add ability to cancel runtime downloads --- Xcodes/Backend/AppState+Runtimes.swift | 151 ++++++++++++++---- Xcodes/Backend/AppState.swift | 2 +- Xcodes/Backend/Environment.swift | 81 +++++++++- Xcodes/Backend/XcodeCommands.swift | 17 ++ Xcodes/Frontend/Common/XcodesAlert.swift | 3 + Xcodes/Frontend/InfoPane/RuntimesView.swift | 97 ++++++----- Xcodes/Frontend/MainWindow.swift | 15 ++ Xcodes/Resources/en.lproj/Localizable.strings | 1 + 8 files changed, 290 insertions(+), 77 deletions(-) diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift index 009279d..f39c105 100644 --- a/Xcodes/Backend/AppState+Runtimes.swift +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -46,16 +46,33 @@ extension AppState { } func downloadRuntime(runtime: DownloadableRuntime) { - Task { + runtimePublishers[runtime.identifier] = Task { do { - try await downloadRunTimeFull(runtime: runtime) + let downloadedURL = try await downloadRunTimeFull(runtime: runtime) + if !Task.isCancelled { + Logger.appState.debug("Installing rungtime: \(runtime.name)") + DispatchQueue.main.async { + self.setInstallationStep(of: runtime, to: .installing) + } + switch runtime.contentType { + case .package: + // not supported yet (do we need to for old packages?) + throw "Installing via package not support - please install manually from \(downloadedURL.description)" + case .diskImage: + try await self.installFromImage(dmgURL: downloadedURL) + DispatchQueue.main.async { + self.setInstallationStep(of: runtime, to: .trashingArchive) + } + try Current.files.removeItem(at: downloadedURL) + } - DispatchQueue.main.async { - guard let index = self.downloadableRuntimes.firstIndex(where: { $0.identifier == runtime.identifier }) else { return } - self.downloadableRuntimes[index].installState = .installed + DispatchQueue.main.async { + guard let index = self.downloadableRuntimes.firstIndex(where: { $0.identifier == runtime.identifier }) else { return } + self.downloadableRuntimes[index].installState = .installed + } + updateInstalledRuntimes() } - - updateInstalledRuntimes() + } catch { Logger.appState.error("Error downloading runtime: \(error.localizedDescription)") @@ -67,38 +84,44 @@ extension AppState { } } - func downloadRunTimeFull(runtime: DownloadableRuntime) async throws { + func downloadRunTimeFull(runtime: DownloadableRuntime) async throws -> URL { // sets a proper cookie for runtimes try await validateADCSession(path: runtime.downloadPath) let downloader = Downloader(rawValue: UserDefaults.standard.string(forKey: "downloader") ?? "aria2") ?? .aria2 + + let url = URL(string: runtime.source)! + let expectedRuntimePath = Path.xcodesApplicationSupport/"\(url.lastPathComponent)" + // aria2 downloads directly to the destination (instead of into /tmp first) so we need to make sure that the download isn't incomplete + let aria2DownloadMetadataPath = expectedRuntimePath.parent/(expectedRuntimePath.basename() + ".aria2") + var aria2DownloadIsIncomplete = false + if case .aria2 = downloader, aria2DownloadMetadataPath.exists { + aria2DownloadIsIncomplete = true + } + if Current.files.fileExistsAtPath(expectedRuntimePath.string), aria2DownloadIsIncomplete == false { + Logger.appState.info("Found existing runtime that will be used for installation at \(expectedRuntimePath).") + return expectedRuntimePath.url + } + Logger.appState.info("Downloading \(runtime.visibleIdentifier) with \(downloader)") - - - let url = try await self.downloadRuntime(for: runtime, downloader: downloader, progressChanged: { [unowned self] progress in - DispatchQueue.main.async { - self.setInstallationStep(of: runtime, to: .downloading(progress: progress)) - } - }).async() - - Logger.appState.debug("Done downloading: \(url)") - DispatchQueue.main.async { - self.setInstallationStep(of: runtime, to: .installing) - } - switch runtime.contentType { - case .package: - // not supported yet (do we need to for old packages?) - throw "Installing via package not support - please install manually from \(url.description)" - case .diskImage: - try await self.installFromImage(dmgURL: url) - DispatchQueue.main.async { - self.setInstallationStep(of: runtime, to: .trashingArchive) - } - try Current.files.removeItem(at: url) + switch downloader { + case .aria2: + let aria2Path = Path(url: Bundle.main.url(forAuxiliaryExecutable: "aria2c")!)! + for try await progress in downloadRuntimeWithAria2(runtime, to: expectedRuntimePath, aria2Path: aria2Path) { + DispatchQueue.main.async { + Logger.appState.debug("Downloading: \(progress.fractionCompleted)") + self.setInstallationStep(of: runtime, to: .downloading(progress: progress)) + } + } + Logger.appState.debug("Done downloading") + + case .urlSession: + throw "Downloading runtimes with URLSession is not supported. Please use aria2" } + return expectedRuntimePath.url } + - @MainActor func downloadRuntime(for runtime: DownloadableRuntime, downloader: Downloader, progressChanged: @escaping (Progress) -> Void) -> AnyPublisher { // Check to see if the dmg is in the expected path in case it was downloaded but failed to install @@ -156,9 +179,36 @@ extension AppState { .eraseToAnyPublisher() } + public func downloadRuntimeWithAria2(_ runtime: DownloadableRuntime, to destination: Path, aria2Path: Path) -> AsyncThrowingStream { + let cookies = AppleAPI.Current.network.session.configuration.httpCookieStorage?.cookies(for: runtime.url) ?? [] + + return Current.shell.downloadWithAria2Async(aria2Path, runtime.url, destination, cookies) + } + + public func installFromImage(dmgURL: URL) async throws { try await self.runtimeService.installRuntimeImage(dmgURL: dmgURL) } + + func cancelRuntimeInstall(runtime: DownloadableRuntime) { + // Cancel the publisher + + runtimePublishers[runtime.identifier]?.cancel() + runtimePublishers[runtime.identifier] = nil + + // If the download is cancelled by the user, clean up the download files that aria2 creates. + let url = URL(string: runtime.source)! + let expectedRuntimePath = Path.xcodesApplicationSupport/"\(url.lastPathComponent)" + let aria2DownloadMetadataPath = expectedRuntimePath.parent/(expectedRuntimePath.basename() + ".aria2") + + try? Current.files.removeItem(at: expectedRuntimePath.url) + try? Current.files.removeItem(at: aria2DownloadMetadataPath.url) + + guard let index = self.downloadableRuntimes.firstIndex(where: { $0.identifier == runtime.identifier }) else { return } + self.downloadableRuntimes[index].installState = .notInstalled + + updateInstalledRuntimes() + } } extension AnyPublisher { @@ -181,3 +231,42 @@ extension AnyPublisher { } } } +extension AnyPublisher where Failure: Error { + struct Subscriber { + fileprivate let send: (Output) -> Void + fileprivate let complete: (Subscribers.Completion) -> Void + + func send(_ value: Output) { self.send(value) } + func send(completion: Subscribers.Completion) { self.complete(completion) } + } + + init(_ closure: (Subscriber) -> AnyCancellable) { + let subject = PassthroughSubject() + + let subscriber = Subscriber( + send: subject.send, + complete: subject.send(completion:) + ) + let cancel = closure(subscriber) + + self = subject + .handleEvents(receiveCancel: cancel.cancel) + .eraseToAnyPublisher() + } +} + +extension AnyPublisher where Failure == Error { + init(taskPriority: TaskPriority? = nil, asyncFunc: @escaping () async throws -> Output) { + self.init { subscriber in + let task = Task(priority: taskPriority) { + do { + subscriber.send(try await asyncFunc()) + subscriber.send(completion: .finished) + } catch { + subscriber.send(completion: .failure(error)) + } + } + return AnyCancellable { task.cancel() } + } + } +} diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index 9db4dbe..7de4af7 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -112,7 +112,7 @@ class AppState: ObservableObject { var cancellables = Set() private var installationPublishers: [Version: AnyCancellable] = [:] - internal var runtimePublishers: [String: AnyCancellable] = [:] + internal var runtimePublishers: [String: Task<(), any Error>] = [:] private var selectPublisher: AnyCancellable? private var uninstallPublisher: AnyCancellable? private var autoInstallTimer: Timer? diff --git a/Xcodes/Backend/Environment.swift b/Xcodes/Backend/Environment.swift index 6d77108..8470913 100644 --- a/Xcodes/Backend/Environment.swift +++ b/Xcodes/Backend/Environment.swift @@ -111,9 +111,84 @@ public struct Shell { return (progress, publisher) } - // TODO: Support using aria2 using AysncStream/AsyncSequence -// public var downloadWithAria2Async: (Path, URL, Path, [HTTPCookie]) async throws -> Progress = { aria2Path, url, destination, cookies in - + + public var downloadWithAria2Async: (Path, URL, Path, [HTTPCookie]) -> AsyncThrowingStream = { aria2Path, url, destination, cookies in + return AsyncThrowingStream { continuation in + + Task { + var progress = Progress() + progress.kind = .file + progress.fileOperationKind = .downloading + + let process = Process() + process.executableURL = aria2Path.url + process.arguments = [ + "--header=Cookie: \(cookies.map { "\($0.name)=\($0.value)" }.joined(separator: "; "))", + "--max-connection-per-server=16", + "--split=16", + "--summary-interval=1", + "--stop-with-process=\(ProcessInfo.processInfo.processIdentifier)", // if xcodes quits, stop aria2 process + "--dir=\(destination.parent.string)", + "--out=\(destination.basename())", + "--human-readable=false", // sets the output to use bytes instead of formatting + url.absoluteString, + ] + let stdOutPipe = Pipe() + process.standardOutput = stdOutPipe + let stdErrPipe = Pipe() + process.standardError = stdErrPipe + + let observer = NotificationCenter.default.addObserver( + forName: .NSFileHandleDataAvailable, + object: nil, + queue: OperationQueue.main + ) { note in + guard + // This should always be the case for Notification.Name.NSFileHandleDataAvailable + let handle = note.object as? FileHandle, + handle === stdOutPipe.fileHandleForReading || handle === stdErrPipe.fileHandleForReading + else { return } + + defer { handle.waitForDataInBackgroundAndNotify() } + + let string = String(decoding: handle.availableData, as: UTF8.self) + // TODO: fix warning. ObservingProgressView is currently tied to an updating progress + progress.updateFromAria2(string: string) + + continuation.yield(progress) + } + + stdOutPipe.fileHandleForReading.waitForDataInBackgroundAndNotify() + stdErrPipe.fileHandleForReading.waitForDataInBackgroundAndNotify() + + continuation.onTermination = { @Sendable _ in + process.terminate() + NotificationCenter.default.removeObserver(observer, name: .NSFileHandleDataAvailable, object: nil) + } + + do { + try process.run() + } catch { + continuation.finish(throwing: error) + } + + process.waitUntilExit() + + NotificationCenter.default.removeObserver(observer, name: .NSFileHandleDataAvailable, object: nil) + + guard process.terminationReason == .exit, process.terminationStatus == 0 else { + if let aria2cError = Aria2CError(exitStatus: process.terminationStatus) { + continuation.finish(throwing: aria2cError) + } else { + continuation.finish(throwing: ProcessExecutionError(process: process, standardOutput: "", standardError: "")) + } + return + } + continuation.finish() + } + } + } + public var unxipExperiment: (URL) -> AnyPublisher = { url in let unxipPath = Path(url: Bundle.main.url(forAuxiliaryExecutable: "unxip")!)! diff --git a/Xcodes/Backend/XcodeCommands.swift b/Xcodes/Backend/XcodeCommands.swift index ce36399..2913af5 100644 --- a/Xcodes/Backend/XcodeCommands.swift +++ b/Xcodes/Backend/XcodeCommands.swift @@ -67,6 +67,23 @@ struct CancelInstallButton: View { } } +struct CancelRuntimeInstallButton: View { + @EnvironmentObject var appState: AppState + let runtime: DownloadableRuntime? + + var body: some View { + Button(action: cancelInstall) { + Text("Cancel") + .help(localizeString("StopInstallation")) + } + } + + private func cancelInstall() { + guard let runtime = runtime else { return } + appState.presentedAlert = .cancelRuntimeInstall(runtime: runtime) + } +} + struct SelectButton: View { @EnvironmentObject var appState: AppState let xcode: Xcode? diff --git a/Xcodes/Frontend/Common/XcodesAlert.swift b/Xcodes/Frontend/Common/XcodesAlert.swift index c928501..38636cb 100644 --- a/Xcodes/Frontend/Common/XcodesAlert.swift +++ b/Xcodes/Frontend/Common/XcodesAlert.swift @@ -1,7 +1,9 @@ import Foundation +import XcodesKit enum XcodesAlert: Identifiable { case cancelInstall(xcode: Xcode) + case cancelRuntimeInstall(runtime: DownloadableRuntime) case privilegedHelper case generic(title: String, message: String) case checkMinSupportedVersion(xcode: AvailableXcode, macOS: String) @@ -12,6 +14,7 @@ enum XcodesAlert: Identifiable { case .privilegedHelper: return 2 case .generic: return 3 case .checkMinSupportedVersion: return 4 + case .cancelRuntimeInstall: return 5 } } } diff --git a/Xcodes/Frontend/InfoPane/RuntimesView.swift b/Xcodes/Frontend/InfoPane/RuntimesView.swift index e9e894e..5148c71 100644 --- a/Xcodes/Frontend/InfoPane/RuntimesView.swift +++ b/Xcodes/Frontend/InfoPane/RuntimesView.swift @@ -7,6 +7,7 @@ // import SwiftUI +import XcodesKit struct RuntimesView: View { @EnvironmentObject var appState: AppState @@ -14,49 +15,61 @@ struct RuntimesView: View { var body: some View { VStack(alignment: .leading) { - Text("Platforms") - .font(.headline) - .frame(maxWidth: .infinity, alignment: .leading) - - let builds = xcode.sdks?.allBuilds() - let runtimes = builds?.flatMap { sdkBuild in - appState.downloadableRuntimes.filter { - $0.sdkBuildUpdate == sdkBuild - } - } - - ForEach(runtimes ?? [], id: \.simulatorVersion.buildUpdate) { runtime in - VStack { - HStack { - Text("\(runtime.visibleIdentifier)") - .font(.subheadline) - Spacer() - Text(runtime.downloadFileSizeString) - .font(.subheadline) - - // it's installed if we have a path - if let path = appState.runtimeInstallPath(xcode: xcode, runtime: runtime) { - Button(action: { appState.reveal(path: path.string) }) { - Image(systemName: "arrow.right.circle.fill") - } - .buttonStyle(PlainButtonStyle()) - .help("RevealInFinder") - } else { - DownloadRuntimeButton(runtime: runtime) - } - } - switch runtime.installState { - - case .installing(let installationStep): - RuntimeInstallationStepDetailView(installationStep: installationStep) - .fixedSize(horizontal: false, vertical: true) - default: - EmptyView() - } - } - - } + Text("Platforms") + .font(.headline) + .frame(maxWidth: .infinity, alignment: .leading) + + let builds = xcode.sdks?.allBuilds() + let runtimes = builds?.flatMap { sdkBuild in + appState.downloadableRuntimes.filter { + $0.sdkBuildUpdate == sdkBuild } + } + + ForEach(runtimes ?? [], id: \.simulatorVersion.buildUpdate) { runtime in + VStack { + runtimeRow(runtime: runtime) + } + + } + } + } + + @ViewBuilder + func runtimeRow(runtime: DownloadableRuntime) -> some View { + HStack { + Text("\(runtime.visibleIdentifier)") + .font(.subheadline) + Spacer() + Text(runtime.downloadFileSizeString) + .font(.subheadline) + + switch runtime.installState { + case .installed, .notInstalled: + // it's installed if we have a path + if let path = appState.runtimeInstallPath(xcode: xcode, runtime: runtime) { + Button(action: { appState.reveal(path: path.string) }) { + Image(systemName: "arrow.right.circle.fill") + } + .buttonStyle(PlainButtonStyle()) + .help("RevealInFinder") + } else { + DownloadRuntimeButton(runtime: runtime) + } + case .installing(_): + CancelRuntimeInstallButton(runtime: runtime) + } + + } + + switch runtime.installState { + + case .installing(let installationStep): + RuntimeInstallationStepDetailView(installationStep: installationStep) + .fixedSize(horizontal: false, vertical: true) + default: + EmptyView() + } } } diff --git a/Xcodes/Frontend/MainWindow.swift b/Xcodes/Frontend/MainWindow.swift index 5c74ea4..b8df774 100644 --- a/Xcodes/Frontend/MainWindow.swift +++ b/Xcodes/Frontend/MainWindow.swift @@ -1,5 +1,6 @@ import ErrorHandling import SwiftUI +import XcodesKit struct MainWindow: View { @EnvironmentObject var appState: AppState @@ -176,7 +177,21 @@ struct MainWindow: View { ), secondaryButton: .cancel(Text("Cancel")) ) + + case let .cancelRuntimeInstall(runtime): + return Alert( + title: Text(String(format: localizeString("Alert.CancelInstall.Runtimes.Title"), runtime.name)), + message: Text("Alert.CancelInstall.Message"), + primaryButton: .destructive( + Text("Alert.CancelInstall.PrimaryButton"), + action: { + self.appState.cancelRuntimeInstall(runtime: runtime) + } + ), + secondaryButton: .cancel(Text("Cancel")) + ) } + } } diff --git a/Xcodes/Resources/en.lproj/Localizable.strings b/Xcodes/Resources/en.lproj/Localizable.strings index 66b4ace..358468e 100644 --- a/Xcodes/Resources/en.lproj/Localizable.strings +++ b/Xcodes/Resources/en.lproj/Localizable.strings @@ -167,6 +167,7 @@ "Alert.Uninstall.Error.Message.FileNotFound" = "Could not find file \"%@\"."; // Cancel Install +"Alert.CancelInstall.Runtimes.Title" = "Are you sure you want to stop the installation of Runtime %@?"; "Alert.CancelInstall.Title" = "Are you sure you want to stop the installation of Xcode %@?"; "Alert.CancelInstall.Message" = "Any progress will be discarded."; "Alert.CancelInstall.PrimaryButton" = "Stop Installation"; From 1f032a57190e7471aa388f957ab0895fa21321be Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Sat, 2 Dec 2023 09:30:38 -0600 Subject: [PATCH 53/86] Fix localization from rebase --- Xcodes/Resources/Localizable.xcstrings | 505 +++++++------------------ 1 file changed, 129 insertions(+), 376 deletions(-) diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index ede84f6..b816f46 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -1,8 +1,26 @@ { "sourceLanguage" : "en", "strings" : { + "" : { + + }, + "%@" : { + + }, + "%@ %@ %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ %2$@ %3$@" + } + } + } + }, + "• %@" : { + + }, "AccessDenied" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -116,7 +134,6 @@ }, "AccessGranted" : { "comment" : "Notifications", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -229,7 +246,6 @@ } }, "Acknowledgements" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -243,12 +259,6 @@ "value" : "Anerkennungen" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acknowledgements" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -342,7 +352,6 @@ } }, "Active" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -356,12 +365,6 @@ "value" : "Aktiv" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Active" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -455,7 +458,6 @@ } }, "Active/Select" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -469,12 +471,6 @@ "value" : "Aktiv/Auswählen" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Active/Select" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -569,7 +565,6 @@ }, "ActiveVersionDescription" : { "comment" : "List", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -683,7 +678,6 @@ }, "Advanced" : { "comment" : "Advanced Preference Pane", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -697,12 +691,6 @@ "value" : "Erweitert" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Advanced" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -796,7 +784,6 @@ } }, "Alert.CancelInstall.Message" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -909,7 +896,6 @@ } }, "Alert.CancelInstall.PrimaryButton" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1021,9 +1007,21 @@ } } }, + "Alert.CancelInstall.Runtimes.Title" : { + "comment" : "Cancel Runtime Install", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Are you sure you want to stop the installation of Xcode %@?" + } + } + } + }, "Alert.CancelInstall.Title" : { "comment" : "Cancel Install", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -1137,7 +1135,7 @@ }, "Alert.Install.Error.Title" : { "comment" : "Install", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -1250,7 +1248,7 @@ } }, "Alert.InstallArchive.Error.Title" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -1363,7 +1361,7 @@ } }, "Alert.MinSupported.Message" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -1477,7 +1475,6 @@ }, "Alert.MinSupported.Title" : { "comment" : "Min MacOS Supported", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1591,7 +1588,7 @@ }, "Alert.PostInstall.Title" : { "comment" : "Post install", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -1704,7 +1701,7 @@ } }, "Alert.PrivilegedHelper.Error.Title" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -1817,7 +1814,6 @@ } }, "Alert.PrivilegedHelper.Message" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -1931,7 +1927,6 @@ }, "Alert.PrivilegedHelper.Title" : { "comment" : "Privileged Helper", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2045,7 +2040,7 @@ }, "Alert.Select.Error.Title" : { "comment" : "Active/Select", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -2158,7 +2153,7 @@ } }, "Alert.SymLink.Message" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -2272,7 +2267,7 @@ }, "Alert.SymLink.Title" : { "comment" : "Symbolic Links", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -2385,7 +2380,7 @@ } }, "Alert.Uninstall.Error.Message.FileNotFound" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "de" : { "stringUnit" : { @@ -2426,7 +2421,7 @@ } }, "Alert.Uninstall.Error.Title" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -2539,7 +2534,6 @@ } }, "Alert.Uninstall.Message" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2653,7 +2647,7 @@ }, "Alert.Uninstall.Title" : { "comment" : "Uninstall", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -2767,7 +2761,7 @@ }, "Alert.Update.Error.Title" : { "comment" : "Update", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -2880,7 +2874,6 @@ } }, "All" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -2894,12 +2887,6 @@ "value" : "Alle" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "All" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -2991,9 +2978,11 @@ } } } + }, + "Apple Silicon" : { + }, "AppleID" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3106,7 +3095,6 @@ } }, "AppUpdates" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3219,7 +3207,6 @@ } }, "AutomaticallyCreateSymbolicLink" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3332,7 +3319,6 @@ } }, "AutomaticallyCreateSymbolicLinkDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3445,7 +3431,6 @@ } }, "AutomaticInstallNewVersion" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3558,7 +3543,7 @@ } }, "Beta" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -3671,7 +3656,6 @@ } }, "BetaOnly" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3784,7 +3768,6 @@ } }, "Cancel" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3798,12 +3781,6 @@ "value" : "Abbrechen" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancel" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -3897,7 +3874,6 @@ } }, "Change" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -3911,12 +3887,6 @@ "value" : "Ändern" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Change" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -4010,7 +3980,6 @@ } }, "CheckForAppUpdates" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4123,7 +4092,7 @@ } }, "CheckingSecurity" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -4236,7 +4205,6 @@ } }, "CheckNow" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4349,7 +4317,6 @@ } }, "Close" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4363,12 +4330,6 @@ "value" : "Schließen" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Close" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -4462,7 +4423,6 @@ } }, "Compatibility" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4476,12 +4436,6 @@ "value" : "Kompatibilität" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Compatibility" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -4575,7 +4529,6 @@ } }, "Compilers" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4589,12 +4542,6 @@ "value" : "Compiler" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Compilers" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -4688,7 +4635,6 @@ } }, "Continue" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4702,12 +4648,6 @@ "value" : "Fortfahren" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Continue" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -4801,7 +4741,6 @@ } }, "CopyPath" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -4914,7 +4853,6 @@ } }, "CopyReleaseNoteURL" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5009,7 +4947,6 @@ } }, "CreateSymLink" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5122,7 +5059,6 @@ } }, "CreateSymLinkBeta" : { - "extractionState" : "migrated", "localizations" : { "de" : { "stringUnit" : { @@ -5205,7 +5141,6 @@ } }, "DataSource" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5318,7 +5253,7 @@ } }, "DataSourceDescription" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -5432,7 +5367,7 @@ }, "DigitCodeDescription" : { "comment" : "SMS/2FA", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -5545,7 +5480,6 @@ } }, "Downloader" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -5559,12 +5493,6 @@ "value" : "Downloader" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Downloader" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -5658,7 +5586,7 @@ } }, "DownloaderDescription" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -5772,7 +5700,7 @@ }, "Downloading" : { "comment" : "Installation Steps", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -5885,7 +5813,7 @@ } }, "DownloadingError" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -5998,7 +5926,7 @@ } }, "DownloadingPercentDescription" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -6112,7 +6040,6 @@ }, "Downloads" : { "comment" : "Download Preference Pane", - "extractionState" : "migrated", "localizations" : { "de" : { "stringUnit" : { @@ -6120,12 +6047,6 @@ "value" : "Downloads" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Downloads" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -6207,7 +6128,6 @@ } }, "DownloadSize" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6320,7 +6240,6 @@ } }, "EnableNotifications" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6433,7 +6352,7 @@ } }, "EnterDigitCodeDescription" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -6544,10 +6463,12 @@ } } } + }, + "example@icloud.com" : { + }, "Experiments" : { "comment" : "Experiment Preference Pane", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6561,12 +6482,6 @@ "value" : "Experimente" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Experiments" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -6660,7 +6575,6 @@ } }, "FasterUnxip" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6773,7 +6687,7 @@ } }, "FasterUnxipDescription" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -6886,7 +6800,6 @@ } }, "Filter" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -6900,12 +6813,6 @@ "value" : "Filter" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Filter" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -6999,7 +6906,6 @@ } }, "FilterAvailableDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7112,7 +7018,6 @@ } }, "FilterInstalledDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7225,7 +7130,7 @@ } }, "Finishing" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -7339,7 +7244,6 @@ }, "General" : { "comment" : "General Preference Pane", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7353,12 +7257,6 @@ "value" : "Allgemein" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "General" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -7452,7 +7350,6 @@ } }, "GithubRepo" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7565,7 +7462,7 @@ } }, "HelperClient.error" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -7678,7 +7575,6 @@ } }, "HelperInstalled" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7791,7 +7687,6 @@ } }, "HelperNotInstalled" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -7902,10 +7797,12 @@ } } } + }, + "Hidden" : { + }, "IdenticalBuilds" : { "comment" : "Info Pane", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8018,7 +7915,6 @@ } }, "IdenticalBuilds.help" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8131,7 +8027,6 @@ } }, "IncludePreRelease" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8244,7 +8139,6 @@ } }, "Info" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8258,12 +8152,6 @@ "value" : "Info" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Info" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -8357,7 +8245,6 @@ } }, "InfoDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8471,7 +8358,6 @@ }, "Install" : { "comment" : "Common", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -8485,12 +8371,6 @@ "value" : "Installieren" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Install" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -8582,9 +8462,12 @@ } } } + }, + "INSTALL" : { + }, "InstallationError.CodesignVerifyFailed" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -8698,7 +8581,7 @@ }, "InstallationError.DamagedXIP" : { "comment" : "InstallationErrors", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -8811,7 +8694,7 @@ } }, "InstallationError.FailedSecurityAssessment" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -8924,7 +8807,7 @@ } }, "InstallationError.FailedToMoveXcodeToApplications" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -9037,7 +8920,7 @@ } }, "InstallationError.InvalidVersion" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -9150,7 +9033,7 @@ } }, "InstallationError.MissingSudoerPassword" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -9263,7 +9146,7 @@ } }, "InstallationError.MissingUsernameOrPassword" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -9376,7 +9259,7 @@ } }, "InstallationError.NoNonPrereleaseVersionAvailable" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -9489,7 +9372,7 @@ } }, "InstallationError.NoPrereleaseVersionAvailable" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -9602,7 +9485,7 @@ } }, "InstallationError.NotEnoughFreeSpaceToExpandArchive" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -9715,7 +9598,7 @@ } }, "InstallationError.PostInstallStepsNotPerformed.Installed" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -9828,7 +9711,7 @@ } }, "InstallationError.PostInstallStepsNotPerformed.NotInstalled" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -9941,7 +9824,7 @@ } }, "InstallationError.UnavailableVersion" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -10054,7 +9937,7 @@ } }, "InstallationError.UnexpectedCodeSigningIdentity" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -10167,7 +10050,7 @@ } }, "InstallationError.UnsupportedFileFormat" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -10280,7 +10163,7 @@ } }, "InstallationError.VersionAlreadyInstalled" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -10393,7 +10276,7 @@ } }, "InstallationError.VersionNotInstalled" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -10507,7 +10390,7 @@ }, "InstallationStepDescription" : { "comment" : "So if changing order, make sure the positional specficier is retained. ex: \"%3$@: Step %1$d of %2$d\"", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -10620,7 +10503,6 @@ } }, "InstallDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10733,7 +10615,6 @@ } }, "InstallDirectory" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10798,7 +10679,6 @@ } }, "InstallHelper" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10911,7 +10791,6 @@ } }, "InstallPathDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -10970,7 +10849,7 @@ } }, "LastChecked" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -11083,7 +10962,6 @@ } }, "License" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11097,12 +10975,6 @@ "value" : "Lizenz" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "License" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -11196,7 +11068,6 @@ } }, "LocalCachePath" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11309,7 +11180,6 @@ } }, "LocalCachePathDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11423,7 +11293,6 @@ }, "Login" : { "comment" : "ToolBar", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11437,12 +11306,6 @@ "value" : "Login" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Login" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -11536,7 +11399,6 @@ } }, "LoginDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11649,7 +11511,7 @@ } }, "MacOSRequirement" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -11762,7 +11624,6 @@ } }, "MakeActive" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11875,7 +11736,6 @@ } }, "MakeActiveVersionDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -11989,7 +11849,6 @@ }, "Menu.About" : { "comment" : "Menu", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12102,7 +11961,7 @@ } }, "Menu.Acknowledgements" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -12215,7 +12074,6 @@ } }, "Menu.CheckForUpdates" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12328,7 +12186,6 @@ } }, "Menu.GitHubRepo" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12441,7 +12298,6 @@ } }, "Menu.ReportABug" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12554,7 +12410,6 @@ } }, "Menu.RequestNewFeature" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12667,7 +12522,7 @@ } }, "Moving" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -12780,7 +12635,7 @@ } }, "Never" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -12893,7 +12748,6 @@ } }, "Next" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -12907,12 +12761,6 @@ "value" : "Nächstes" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Next" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -13004,9 +12852,12 @@ } } } + }, + "Not Hidden" : { + }, "Notification.FinishedInstalling" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -13120,7 +12971,7 @@ }, "Notification.NewVersionAvailable" : { "comment" : "Notifications", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -13233,7 +13084,7 @@ } }, "Notification.NewXcodeVersion.Body" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -13347,7 +13198,7 @@ }, "Notification.NewXcodeVersion.Title" : { "comment" : "Notifications", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -13460,7 +13311,6 @@ } }, "Notifications" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13474,12 +13324,6 @@ "value" : "Benachrichtigungen" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Notifications" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -13573,7 +13417,6 @@ } }, "NotificationSettings" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13686,7 +13529,7 @@ } }, "NoTrustedPhones" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -13799,7 +13642,6 @@ } }, "NoXcodeSelected" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13912,7 +13754,6 @@ } }, "OK" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -13926,12 +13767,6 @@ "value" : "OK" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "OK" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -14017,9 +13852,12 @@ } } } + }, + "OnSelect" : { + }, "OnSelectDoNothing" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -14096,7 +13934,7 @@ } }, "OnSelectDoNothingDescription" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -14161,7 +13999,7 @@ } }, "OnSelectRenameXcode" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "de" : { "stringUnit" : { @@ -14226,7 +14064,7 @@ } }, "OnSelectRenameXcodeDescription" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -14297,7 +14135,6 @@ } }, "Open" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14311,12 +14148,6 @@ "value" : "Öffnen" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -14408,9 +14239,14 @@ } } } + }, + "OPEN" : { + + }, + "Open In Rosetta" : { + }, "OpenDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14523,7 +14359,6 @@ } }, "Password" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14634,20 +14469,14 @@ } } } + }, + "Perform post-install steps" : { + }, "Platforms" : { - "extractionState" : "migrated", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Platforms" - } - } - } + }, "Preferences" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14661,12 +14490,6 @@ "value" : "Einstellungen" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preferences" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -14760,7 +14583,6 @@ } }, "PreferencesDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14873,7 +14695,6 @@ } }, "PrivilegedHelper" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -14986,7 +14807,6 @@ } }, "PrivilegedHelperDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15099,7 +14919,6 @@ } }, "Refresh" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15113,12 +14932,6 @@ "value" : "Aktualisieren" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Refresh" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -15212,7 +15025,6 @@ } }, "RefreshDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15325,7 +15137,7 @@ } }, "Release" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -15438,7 +15250,6 @@ } }, "ReleaseDate" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15551,7 +15362,6 @@ } }, "ReleaseNotes" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15664,7 +15474,6 @@ } }, "ReleaseNotes.help" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15777,7 +15586,6 @@ } }, "ReleaseOnly" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15890,7 +15698,6 @@ } }, "Required" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -15904,12 +15711,6 @@ "value" : "Erforderlich" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Required" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -16003,7 +15804,6 @@ } }, "RevealInFinder" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16116,7 +15916,6 @@ } }, "SDKs" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16130,12 +15929,6 @@ "value" : "SDKs" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "SDKs" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -16229,7 +16022,6 @@ } }, "Search" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16342,7 +16134,6 @@ } }, "SearchDescription" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16455,7 +16246,6 @@ } }, "Select" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16469,12 +16259,6 @@ "value" : "Auswählen" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Select" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -16568,7 +16352,6 @@ } }, "Selected" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16582,12 +16365,6 @@ "value" : "Ausgewählt" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Selected" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -16681,7 +16458,7 @@ } }, "SelectTrustedPhone" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -16794,7 +16571,6 @@ } }, "SendSMS" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -16907,7 +16683,6 @@ } }, "ShowOpenInRosetta" : { - "extractionState" : "migrated", "localizations" : { "en" : { "stringUnit" : { @@ -16948,7 +16723,6 @@ } }, "ShowOpenInRosettaDescription" : { - "extractionState" : "migrated", "localizations" : { "en" : { "stringUnit" : { @@ -16989,7 +16763,6 @@ } }, "SignIn" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17103,7 +16876,6 @@ }, "SignInWithApple" : { "comment" : "SignIn", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17216,7 +16988,6 @@ } }, "SignOut" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17329,7 +17100,6 @@ } }, "StopInstallation" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17442,7 +17212,7 @@ } }, "TrashingArchive" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -17555,7 +17325,7 @@ } }, "Unarchiving" : { - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -17668,7 +17438,6 @@ } }, "Uninstall" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17682,12 +17451,6 @@ "value" : "Deinstallieren" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uninstall" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -17781,7 +17544,6 @@ } }, "UnxipExperiment" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -17895,7 +17657,7 @@ }, "UpdatedAt" : { "comment" : "MainWindow", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -18009,7 +17771,6 @@ }, "Updates" : { "comment" : "Updates Preference Pane", - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -18023,12 +17784,6 @@ "value" : "Updates" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Updates" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -18122,7 +17877,6 @@ } }, "UseUnxipExperiment" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -18235,7 +17989,6 @@ } }, "Versions" : { - "extractionState" : "migrated", "localizations" : { "ca" : { "stringUnit" : { @@ -18249,12 +18002,6 @@ "value" : "Versionen" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Versions" - } - }, "es" : { "stringUnit" : { "state" : "translated", @@ -18349,7 +18096,7 @@ }, "VersionWithBuild" : { "comment" : "About", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -18463,7 +18210,7 @@ }, "WWDC.Message" : { "comment" : "WWDC", - "extractionState" : "migrated", + "extractionState" : "manual", "localizations" : { "ca" : { "stringUnit" : { @@ -18568,6 +18315,12 @@ } } } + }, + "Xcode" : { + + }, + "Xcodes" : { + } }, "version" : "1.0" From eda3e2680b8cad751f0ad8d40d1b384cd430910c Mon Sep 17 00:00:00 2001 From: Ege Sucu Date: Sun, 3 Dec 2023 08:37:18 +0300 Subject: [PATCH 54/86] More translations are updated after the rebase --- Xcodes/Resources/Localizable.xcstrings | 147 ++++++++++++++++++++++--- 1 file changed, 132 insertions(+), 15 deletions(-) diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index b816f46..c27943d 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -2,10 +2,24 @@ "sourceLanguage" : "en", "strings" : { "" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + } + } }, "%@" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + } + } }, "%@ %@ %@" : { "localizations" : { @@ -14,11 +28,24 @@ "state" : "new", "value" : "%1$@ %2$@ %3$@" } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ %3$@" + } } } }, "• %@" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "• %@" + } + } + } }, "AccessDenied" : { "localizations" : { @@ -1016,6 +1043,12 @@ "state" : "translated", "value" : "Are you sure you want to stop the installation of Xcode %@?" } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode %@ sürümünü yüklemeyi durdurmak istediğine emin misin?" + } } } }, @@ -2980,7 +3013,14 @@ } }, "Apple Silicon" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple Silikon" + } + } + } }, "AppleID" : { "localizations" : { @@ -6465,7 +6505,14 @@ } }, "example@icloud.com" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ornek@icloud.com" + } + } + } }, "Experiments" : { "comment" : "Experiment Preference Pane", @@ -7799,7 +7846,14 @@ } }, "Hidden" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gizli" + } + } + } }, "IdenticalBuilds" : { "comment" : "Info Pane", @@ -8464,7 +8518,14 @@ } }, "INSTALL" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "YÜKLE" + } + } + } }, "InstallationError.CodesignVerifyFailed" : { "extractionState" : "manual", @@ -12854,7 +12915,14 @@ } }, "Not Hidden" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gizli Değil" + } + } + } }, "Notification.FinishedInstalling" : { "extractionState" : "manual", @@ -13854,7 +13922,14 @@ } }, "OnSelect" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "OnSelect" + } + } + } }, "OnSelectDoNothing" : { "extractionState" : "manual", @@ -14241,10 +14316,24 @@ } }, "OPEN" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "AÇ" + } + } + } }, "Open In Rosetta" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rosetta ile Aç" + } + } + } }, "OpenDescription" : { "localizations" : { @@ -14471,10 +14560,24 @@ } }, "Perform post-install steps" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yükleme sonrası adımları uygula" + } + } + } }, "Platforms" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Platformlar" + } + } + } }, "Preferences" : { "localizations" : { @@ -18317,10 +18420,24 @@ } }, "Xcode" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcode" + } + } + } }, "Xcodes" : { - + "localizations" : { + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes" + } + } + } } }, "version" : "1.0" From 2d3a26374bf0987e446212898306418fa24ef295 Mon Sep 17 00:00:00 2001 From: Ege Sucu Date: Sun, 3 Dec 2023 08:44:00 +0300 Subject: [PATCH 55/86] Updated README.md Since Strings Catalog has been added, Xcode 15 is required to work with them. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e18c941..c2bfa13 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ brew install --cask xcodes ## Development -You'll need macOS 12 Big Sur and Xcode 13 in order to build and run Xcodes.app. +You'll need macOS 13.5 Ventura and Xcode 15 in order to build and run Xcodes.app. `Unxip` and `aria2` must be compiled as a universal binary ``` From 9622b563b34db85095f7676abae357509972bd3a Mon Sep 17 00:00:00 2001 From: Daniel Chick Date: Tue, 5 Dec 2023 17:20:41 -0600 Subject: [PATCH 56/86] Move button styling to not affect the info pane --- Xcodes/Backend/XcodeCommands.swift | 3 +-- Xcodes/Frontend/XcodeList/XcodeListViewRow.swift | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Xcodes/Backend/XcodeCommands.swift b/Xcodes/Backend/XcodeCommands.swift index 5071f30..75773bb 100644 --- a/Xcodes/Backend/XcodeCommands.swift +++ b/Xcodes/Backend/XcodeCommands.swift @@ -43,9 +43,8 @@ struct InstallButton: View { install() } label: { Text("Install") - .textCase(.uppercase) .help("InstallDescription") - }.buttonStyle(AppStoreButtonStyle(primary: false, highlighted: false)) + } } private func install() { diff --git a/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift b/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift index 4757977..55f431c 100644 --- a/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift +++ b/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift @@ -111,6 +111,8 @@ struct XcodeListViewRow: View { .help("OpenDescription") case .notInstalled: InstallButton(xcode: xcode) + .textCase(.uppercase) + .buttonStyle(AppStoreButtonStyle(primary: false, highlighted: false)) case let .installing(installationStep): InstallationStepRowView( installationStep: installationStep, From c0cff4822caa8185b19e8f801288bfdccf4508df Mon Sep 17 00:00:00 2001 From: Daniel Chick Date: Tue, 5 Dec 2023 18:12:57 -0600 Subject: [PATCH 57/86] If status code 412 is returned from code entry change error to describe acknowledgement required --- Xcodes/AppleAPI/Sources/AppleAPI/Client.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Xcodes/AppleAPI/Sources/AppleAPI/Client.swift b/Xcodes/AppleAPI/Sources/AppleAPI/Client.swift index 6f33a4a..5b9bd08 100644 --- a/Xcodes/AppleAPI/Sources/AppleAPI/Client.swift +++ b/Xcodes/AppleAPI/Sources/AppleAPI/Client.swift @@ -180,6 +180,8 @@ public class Client { return (data, urlResponse) case 400, 401: throw AuthenticationError.incorrectSecurityCode + case 412: + throw AuthenticationError.appleIDAndPrivacyAcknowledgementRequired case let code: throw AuthenticationError.badStatusCode(statusCode: code, data: data, response: urlResponse) } From 78a62c4ebaf5fc2fae018b0a9cf7cc9bc850a0f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Dec 2023 10:57:26 +0000 Subject: [PATCH 58/86] Bump ruby/setup-ruby from 1.161.0 to 1.162.0 Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.161.0 to 1.162.0. - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Commits](https://github.com/ruby/setup-ruby/compare/v1.161.0...v1.162.0) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/appcast.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appcast.yml b/.github/workflows/appcast.yml index 7a10112..d920bad 100644 --- a/.github/workflows/appcast.yml +++ b/.github/workflows/appcast.yml @@ -23,7 +23,7 @@ jobs: ${{ runner.os }}-gems- - name: Setup Ruby, JRuby and TruffleRuby - uses: ruby/setup-ruby@v1.161.0 + uses: ruby/setup-ruby@v1.162.0 with: ruby-version: '2.7' From 7070575a3288e84b6d0f7d2a90c6876c35e5df1b Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Mon, 18 Dec 2023 09:00:10 -0600 Subject: [PATCH 59/86] Switch to NavigationSplitView --- Xcodes.xcodeproj/project.pbxproj | 12 ++- .../Common/NavigationSplitViewWrapper.swift | 46 ++++++++++ Xcodes/Frontend/MainWindow.swift | 92 +++++++++++++++---- Xcodes/Frontend/XcodeList/MainToolbar.swift | 56 +++-------- Xcodes/Frontend/XcodeList/XcodeListView.swift | 1 + Xcodes/Resources/Localizable.xcstrings | 4 + 6 files changed, 148 insertions(+), 63 deletions(-) create mode 100644 Xcodes/Frontend/Common/NavigationSplitViewWrapper.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 6c418b8..a1ee749 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -114,8 +114,8 @@ E689540325BE8C64000EBCEA /* DockProgress in Frameworks */ = {isa = PBXBuildFile; productRef = E689540225BE8C64000EBCEA /* DockProgress */; }; E81D7EA02805250100A205FC /* Collection+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E81D7E9F2805250100A205FC /* Collection+.swift */; }; E832EAF82B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */; }; + E84B7D0D2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84B7D0C2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift */; }; E84CF8C12B0FEB8300ECA259 /* RuntimesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */; }; - E872EE4E2808D4F100D3DD8B /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E872EE502808D4F100D3DD8B /* Localizable.strings */; }; E87AB3C52939B65E00D72F43 /* Hardware.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87AB3C42939B65E00D72F43 /* Hardware.swift */; }; E87DD6EB25D053FA00D86808 /* Progress+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87DD6EA25D053FA00D86808 /* Progress+.swift */; }; E89342FA25EDCC17007CF557 /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E89342F925EDCC17007CF557 /* NotificationManager.swift */; }; @@ -310,9 +310,9 @@ CAFFFEEE259CEAC400903F81 /* RingProgressViewStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RingProgressViewStyle.swift; sourceTree = ""; }; E81D7E9F2805250100A205FC /* Collection+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+.swift"; sourceTree = ""; }; E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeInstallationStepDetailView.swift; sourceTree = ""; }; + E84B7D0C2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationSplitViewWrapper.swift; sourceTree = ""; }; E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimesView.swift; sourceTree = ""; }; E856BB73291EDD3D00DC438B /* XcodesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = XcodesKit; path = Xcodes/XcodesKit; sourceTree = ""; }; - E872EE4F2808D4F100D3DD8B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; E87AB3C42939B65E00D72F43 /* Hardware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hardware.swift; sourceTree = ""; }; E87DD6EA25D053FA00D86808 /* Progress+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Progress+.swift"; sourceTree = ""; }; E89342F925EDCC17007CF557 /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = ""; }; @@ -373,6 +373,7 @@ CA452BAF259FD9770072DFA4 /* ProgressIndicator.swift */, 536CFDD3263C9A8000026CE0 /* XcodesSheet.swift */, 53CBAB2B263DCC9100410495 /* XcodesAlert.swift */, + E84B7D0C2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift */, ); path = Common; sourceTree = ""; @@ -921,6 +922,7 @@ E8B20CBF2A2EDEC20057D816 /* SDKs+Xcode.swift in Sources */, CA9FF877259528CC00E47BAF /* Version+XcodeReleases.swift in Sources */, CABFAA2D2592FBFC00380FEE /* Configure.swift in Sources */, + E84B7D0D2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift in Sources */, CA73510D257BFCEF00EA9CF8 /* NSAttributedString+.swift in Sources */, CAFBDB952598FE96003DCC5A /* FocusedValues.swift in Sources */, B0403CF42AD9381D00137C09 /* SDKsView.swift in Sources */, @@ -1040,7 +1042,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -1227,7 +1229,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -1285,7 +1287,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; diff --git a/Xcodes/Frontend/Common/NavigationSplitViewWrapper.swift b/Xcodes/Frontend/Common/NavigationSplitViewWrapper.swift new file mode 100644 index 0000000..928e49a --- /dev/null +++ b/Xcodes/Frontend/Common/NavigationSplitViewWrapper.swift @@ -0,0 +1,46 @@ +// +// NavigationSplitViewWrapper.swift +// Xcodes +// +// Created by Matt Kiazyk on 2023-12-12. +// + +import SwiftUI + +struct NavigationSplitViewWrapper: View where Sidebar: View, Detail: View { + private var sidebar: Sidebar + private var detail: Detail + + init( + @ViewBuilder sidebar: () -> Sidebar, + @ViewBuilder detail: () -> Detail + ) { + self.sidebar = sidebar() + self.detail = detail() + } + + var body: some View { + if #available(iOS 16, macOS 13, tvOS 16, watchOS 9, visionOS 1, *) { + // Use the latest API available + NavigationSplitView { + + if #available(macOS 14, *) { + sidebar + .toolbar(removing: .sidebarToggle) + } else { + sidebar + } + } detail: { + detail + } + } else { + // Alternative code for earlier versions of OS. + NavigationView { + // The first column is the sidebar. + sidebar + detail + } + .navigationViewStyle(.columns) + } + } +} diff --git a/Xcodes/Frontend/MainWindow.swift b/Xcodes/Frontend/MainWindow.swift index b8df774..406d2a6 100644 --- a/Xcodes/Frontend/MainWindow.swift +++ b/Xcodes/Frontend/MainWindow.swift @@ -1,6 +1,8 @@ import ErrorHandling import SwiftUI import XcodesKit +import Path +import Version struct MainWindow: View { @EnvironmentObject var appState: AppState @@ -16,7 +18,7 @@ struct MainWindow: View { @AppStorage("isInstalledOnly") private var isInstalledOnly = false var body: some View { - HSplitView { + NavigationSplitViewWrapper { XcodeListView(selectedXcodeID: $selectedXcodeID, searchText: searchText, category: category, isInstalledOnly: isInstalledOnly) .frame(minWidth: 300) .layoutPriority(1) @@ -26,25 +28,73 @@ struct MainWindow: View { primaryButton: .destructive(Text("Uninstall"), action: { self.appState.uninstall(xcode: xcode) }), secondaryButton: .cancel(Text("Cancel"))) } - - if isShowingInfoPane { - Group { - if let xcode = xcode { - InfoPane(xcode: xcode) + .searchable(text: $searchText, placement: .sidebar) + .mainToolbar( + category: $category, + isInstalledOnly: $isInstalledOnly, + isShowingInfoPane: $isShowingInfoPane + ) + } detail: { + Group { + if let xcode = xcode { + InfoPane(xcode: xcode) + } else { + UnselectedView() + } + } + .padding() + .toolbar { + ToolbarItemGroup { + Button(action: { appState.presentedSheet = .signIn }, label: { + Label("Login", systemImage: "person.circle") + }) + .help("LoginDescription") + if #available(macOS 14, *) { + SettingsLink(label: { + Label("Preferences", systemImage: "gearshape") + }) + .help("PreferencesDescription") } else { - UnselectedView() + Button(action: { + if #available(macOS 13, *) { + NSApp.sendAction(Selector(("showSettingsWindow:")), to: nil, from: nil) + } else { + NSApp.sendAction(Selector(("showPreferencesWindow:")), to: nil, from: nil) + } + }, label: { + Label("Preferences", systemImage: "gearshape") + }) + .help("PreferencesDescription") } } - .padding() - .frame(minWidth: 300, maxWidth: .infinity) } } - .mainToolbar( - category: $category, - isInstalledOnly: $isInstalledOnly, - isShowingInfoPane: $isShowingInfoPane, - searchText: $searchText - ) + +// HSplitView { +// XcodeListView(selectedXcodeID: $selectedXcodeID, searchText: searchText, category: category, isInstalledOnly: isInstalledOnly) +// .frame(minWidth: 300) +// .layoutPriority(1) +// .alert(item: $appState.xcodeBeingConfirmedForUninstallation) { xcode in +// Alert(title: Text(String(format: localizeString("Alert.Uninstall.Title"), xcode.description)), +// message: Text("Alert.Uninstall.Message"), +// primaryButton: .destructive(Text("Uninstall"), action: { self.appState.uninstall(xcode: xcode) }), +// secondaryButton: .cancel(Text("Cancel"))) +// } +// .searchable(text: $searchText) +// +// if isShowingInfoPane { +// Group { +// if let xcode = xcode { +// InfoPane(xcode: xcode) +// } else { +// UnselectedView() +// } +// } +// .padding() +// .frame(minWidth: 300, maxWidth: .infinity) +// } +// } + .bottomStatusBar() .padding([.top], 0) .navigationSubtitle(subtitleText) @@ -197,6 +247,16 @@ struct MainWindow: View { struct MainWindow_Previews: PreviewProvider { static var previews: some View { - MainWindow() + MainWindow().environmentObject({ () -> AppState in + let a = AppState() + a.allXcodes = [ + Xcode(version: Version("12.0.0+1234A")!, identicalBuilds: [Version("12.0.0+1234A")!, Version("12.0.0-RC+1234A")!], installState: .installed(Path("/Applications/Xcode-12.3.0.app")!), selected: false, icon: nil), + Xcode(version: Version("12.3.0")!, installState: .installed(Path("/Applications/Xcode-12.3.0.app")!), selected: true, icon: nil), + Xcode(version: Version("12.2.0")!, installState: .notInstalled, selected: false, icon: nil), + Xcode(version: Version("12.1.0")!, installState: .installing(.downloading(progress: configure(Progress(totalUnitCount: 100)) { $0.completedUnitCount = 40 })), selected: false, icon: nil), + Xcode(version: Version("12.0.0")!, installState: .installed(Path("/Applications/Xcode-12.3.0.app")!), selected: false, icon: nil), + ] + return a + }()) } } diff --git a/Xcodes/Frontend/XcodeList/MainToolbar.swift b/Xcodes/Frontend/XcodeList/MainToolbar.swift index e355304..b21460b 100644 --- a/Xcodes/Frontend/XcodeList/MainToolbar.swift +++ b/Xcodes/Frontend/XcodeList/MainToolbar.swift @@ -5,7 +5,6 @@ struct MainToolbarModifier: ViewModifier { @Binding var category: XcodeListCategory @Binding var isInstalledOnly: Bool @Binding var isShowingInfoPane: Bool - @Binding var searchText: String func body(content: Content) -> some View { content @@ -14,10 +13,6 @@ struct MainToolbarModifier: ViewModifier { private var toolbar: some ToolbarContent { ToolbarItemGroup { - Button(action: { appState.presentedSheet = .signIn }, label: { - Label("Login", systemImage: "person.circle") - }) - .help("LoginDescription") ProgressButton( isInProgress: appState.isUpdating, @@ -27,7 +22,7 @@ struct MainToolbarModifier: ViewModifier { } .keyboardShortcut(KeyEquivalent("r")) .help("RefreshDescription") - + Spacer() Button(action: { switch category { case .all: category = .release @@ -75,39 +70,18 @@ struct MainToolbarModifier: ViewModifier { } .help("FilterInstalledDescription") - Button(action: { isShowingInfoPane.toggle() }) { - if isShowingInfoPane { - Label("Info", systemImage: "info.circle.fill") - .foregroundColor(.accentColor) - } else { - Label("Info", systemImage: "info.circle") - } - } - .keyboardShortcut(KeyboardShortcut("i", modifiers: [.command, .option])) - .help("InfoDescription") +// Button(action: { isShowingInfoPane.toggle() }) { +// if isShowingInfoPane { +// Label("Info", systemImage: "info.circle.fill") +// .foregroundColor(.accentColor) +// } else { +// Label("Info", systemImage: "info.circle") +// } +// } +// .keyboardShortcut(KeyboardShortcut("i", modifiers: [.command, .option])) +// .help("InfoDescription") - if #available(macOS 14, *) { - SettingsLink(label: { - Label("Preferences", systemImage: "gearshape") - }) - .help("PreferencesDescription") - } else { - Button(action: { - if #available(macOS 13, *) { - NSApp.sendAction(Selector(("showSettingsWindow:")), to: nil, from: nil) - } else { - NSApp.sendAction(Selector(("showPreferencesWindow:")), to: nil, from: nil) - } - }, label: { - Label("Preferences", systemImage: "gearshape") - }) - .help("PreferencesDescription") - } - - TextField("Search", text: $searchText) - .textFieldStyle(RoundedBorderTextFieldStyle()) - .frame(width: 200) - .help("SearchDescription") + } } } @@ -116,15 +90,13 @@ extension View { func mainToolbar( category: Binding, isInstalledOnly: Binding, - isShowingInfoPane: Binding, - searchText: Binding + isShowingInfoPane: Binding ) -> some View { self.modifier( MainToolbarModifier( category: category, isInstalledOnly: isInstalledOnly, - isShowingInfoPane: isShowingInfoPane, - searchText: searchText + isShowingInfoPane: isShowingInfoPane ) ) } diff --git a/Xcodes/Frontend/XcodeList/XcodeListView.swift b/Xcodes/Frontend/XcodeList/XcodeListView.swift index 101010f..fdbdfc8 100644 --- a/Xcodes/Frontend/XcodeList/XcodeListView.swift +++ b/Xcodes/Frontend/XcodeList/XcodeListView.swift @@ -42,6 +42,7 @@ struct XcodeListView: View { List(visibleXcodes, selection: $selectedXcodeID) { xcode in XcodeListViewRow(xcode: xcode, selected: selectedXcodeID == xcode.id, appState: appState) } + .listStyle(.sidebar) } } diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index c27943d..c655402 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -8193,6 +8193,7 @@ } }, "Info" : { + "extractionState" : "stale", "localizations" : { "ca" : { "stringUnit" : { @@ -8299,6 +8300,7 @@ } }, "InfoDescription" : { + "extractionState" : "stale", "localizations" : { "ca" : { "stringUnit" : { @@ -16125,6 +16127,7 @@ } }, "Search" : { + "extractionState" : "stale", "localizations" : { "ca" : { "stringUnit" : { @@ -16237,6 +16240,7 @@ } }, "SearchDescription" : { + "extractionState" : "stale", "localizations" : { "ca" : { "stringUnit" : { From ede9bd1c46f0f21b4aae959242fcee4501c81154 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Tue, 19 Dec 2023 14:36:34 -0600 Subject: [PATCH 60/86] redesigned infoPane --- Xcodes.xcodeproj/project.pbxproj | 8 + Xcodes/Backend/AppState+Runtimes.swift | 1 + Xcodes/Backend/AppState.swift | 13 +- Xcodes/Backend/SDKs+Xcode.swift | 23 +++ Xcodes/Backend/XcodeCommands.swift | 11 +- .../Frontend/InfoPane/CompatibilityView.swift | 25 ++- .../InfoPane/IdenticalBuildView.swift | 4 + Xcodes/Frontend/InfoPane/InfoPane.swift | 60 ++++-- Xcodes/Frontend/InfoPane/InfoPane2.swift | 176 ++++++++++++++++++ .../Frontend/InfoPane/InfoPaneControls.swift | 28 +-- Xcodes/Frontend/InfoPane/PlatformsView.swift | 104 +++++++++++ .../Frontend/InfoPane/ReleaseDateView.swift | 35 ++-- .../Frontend/InfoPane/ReleaseNotesView.swift | 6 +- Xcodes/Frontend/MainWindow.swift | 4 +- Xcodes/Frontend/XcodeList/MainToolbar.swift | 12 -- Xcodes/Resources/Licenses.rtf | 27 +++ Xcodes/Resources/Localizable.xcstrings | 1 + Xcodes/XcodesApp.swift | 1 + .../Models/Runtimes/CoreSimulatorImage.swift | 14 ++ 19 files changed, 485 insertions(+), 68 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/InfoPane2.swift create mode 100644 Xcodes/Frontend/InfoPane/PlatformsView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index a1ee749..6ace20e 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -115,7 +115,9 @@ E81D7EA02805250100A205FC /* Collection+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E81D7E9F2805250100A205FC /* Collection+.swift */; }; E832EAF82B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */; }; E84B7D0D2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84B7D0C2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift */; }; + E84B7D0F2B30986700DBDA2B /* InfoPane2.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84B7D0E2B30986700DBDA2B /* InfoPane2.swift */; }; E84CF8C12B0FEB8300ECA259 /* RuntimesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */; }; + E86671272B309D2F0048559A /* PlatformsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E86671262B309D2F0048559A /* PlatformsView.swift */; }; E87AB3C52939B65E00D72F43 /* Hardware.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87AB3C42939B65E00D72F43 /* Hardware.swift */; }; E87DD6EB25D053FA00D86808 /* Progress+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87DD6EA25D053FA00D86808 /* Progress+.swift */; }; E89342FA25EDCC17007CF557 /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E89342F925EDCC17007CF557 /* NotificationManager.swift */; }; @@ -311,8 +313,10 @@ E81D7E9F2805250100A205FC /* Collection+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+.swift"; sourceTree = ""; }; E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeInstallationStepDetailView.swift; sourceTree = ""; }; E84B7D0C2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationSplitViewWrapper.swift; sourceTree = ""; }; + E84B7D0E2B30986700DBDA2B /* InfoPane2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoPane2.swift; sourceTree = ""; }; E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimesView.swift; sourceTree = ""; }; E856BB73291EDD3D00DC438B /* XcodesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = XcodesKit; path = Xcodes/XcodesKit; sourceTree = ""; }; + E86671262B309D2F0048559A /* PlatformsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlatformsView.swift; sourceTree = ""; }; E87AB3C42939B65E00D72F43 /* Hardware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hardware.swift; sourceTree = ""; }; E87DD6EA25D053FA00D86808 /* Progress+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Progress+.swift"; sourceTree = ""; }; E89342F925EDCC17007CF557 /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = ""; }; @@ -648,6 +652,8 @@ B0C6AD0C2AD91D7900E64698 /* IconView.swift */, E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */, E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */, + E84B7D0E2B30986700DBDA2B /* InfoPane2.swift */, + E86671262B309D2F0048559A /* PlatformsView.swift */, ); path = InfoPane; sourceTree = ""; @@ -911,6 +917,7 @@ CABFA9C12592EEEA00380FEE /* Version+.swift in Sources */, E8D655C0288DD04700A139C2 /* SelectedActionType.swift in Sources */, 36741BFD291E4FDB00A85AAE /* DownloadPreferencePane.swift in Sources */, + E86671272B309D2F0048559A /* PlatformsView.swift in Sources */, CA9FF8522595080100E47BAF /* AcknowledgementsView.swift in Sources */, CABFA9CE2592EEEA00380FEE /* Version+Xcode.swift in Sources */, CAFBDB912598FE80003DCC5A /* SelectedXcode.swift in Sources */, @@ -922,6 +929,7 @@ E8B20CBF2A2EDEC20057D816 /* SDKs+Xcode.swift in Sources */, CA9FF877259528CC00E47BAF /* Version+XcodeReleases.swift in Sources */, CABFAA2D2592FBFC00380FEE /* Configure.swift in Sources */, + E84B7D0F2B30986700DBDA2B /* InfoPane2.swift in Sources */, E84B7D0D2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift in Sources */, CA73510D257BFCEF00EA9CF8 /* NSAttributedString+.swift in Sources */, CAFBDB952598FE96003DCC5A /* FocusedValues.swift in Sources */, diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift index f39c105..9143667 100644 --- a/Xcodes/Backend/AppState+Runtimes.swift +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -36,6 +36,7 @@ extension AppState { Task { do { let runtimes = try await self.runtimeService.localInstalledRuntimes() + DispatchQueue.main.async { self.installedRuntimes = runtimes } diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index 7de4af7..998e9f8 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -163,7 +163,6 @@ class AppState: ObservableObject { checkIfHelperIsInstalled() setupAutoInstallTimer() setupDefaults() - updateInstalledRuntimes() } func setupDefaults() { @@ -410,10 +409,7 @@ class AppState: ObservableObject { // Check to see if users MacOS is supported if let requiredMacOSVersion = availableXcode.requiredMacOSVersion { - let split = requiredMacOSVersion.components(separatedBy: ".").compactMap { Int($0) } - let xcodeMinimumMacOSVersion = OperatingSystemVersion(majorVersion: split[safe: 0] ?? 0, minorVersion: split[safe: 1] ?? 0, patchVersion: split[safe: 2] ?? 0) - - if !ProcessInfo.processInfo.isOperatingSystemAtLeast(xcodeMinimumMacOSVersion) { + if hasMinSupportedOS(requiredMacOSVersion: requiredMacOSVersion) { // prompt self.presentedAlert = .checkMinSupportedVersion(xcode: availableXcode, macOS: ProcessInfo.processInfo.operatingSystemVersion.versionString()) return @@ -428,6 +424,13 @@ class AppState: ObservableObject { } } + func hasMinSupportedOS(requiredMacOSVersion: String) -> Bool { + let split = requiredMacOSVersion.components(separatedBy: ".").compactMap { Int($0) } + let xcodeMinimumMacOSVersion = OperatingSystemVersion(majorVersion: split[safe: 0] ?? 0, minorVersion: split[safe: 1] ?? 0, patchVersion: split[safe: 2] ?? 0) + + return !ProcessInfo.processInfo.isOperatingSystemAtLeast(xcodeMinimumMacOSVersion) + } + func install(id: Xcode.ID) { guard let availableXcode = availableXcodes.first(where: { $0.version == id }) else { return } diff --git a/Xcodes/Backend/SDKs+Xcode.swift b/Xcodes/Backend/SDKs+Xcode.swift index 1462b96..e01f3b4 100644 --- a/Xcodes/Backend/SDKs+Xcode.swift +++ b/Xcodes/Backend/SDKs+Xcode.swift @@ -8,6 +8,8 @@ import Foundation import struct XCModel.SDKs +import XcodesKit +import SwiftUI extension SDKs { /// Loops through all SDK's and returns an array of buildNumbers (to be used to correlate runtimes) @@ -33,3 +35,24 @@ extension SDKs { return buildNumbers } } + +extension DownloadableRuntime { + func icon() -> Image { + switch self.platform { + case .iOS: + return Image(systemName: "iphone") + case .macOS: + return Image(systemName: "macwindow") + case .watchOS: + return Image(systemName: "applewatch") + case .tvOS: + return Image(systemName: "appletv") + case .visionOS: + if #available(macOS 14, *) { + return Image(systemName: "visionpro") + } else { + return Image(systemName: "eyeglasses") + } + } + } +} diff --git a/Xcodes/Backend/XcodeCommands.swift b/Xcodes/Backend/XcodeCommands.swift index 97f36b3..b168bd4 100644 --- a/Xcodes/Backend/XcodeCommands.swift +++ b/Xcodes/Backend/XcodeCommands.swift @@ -61,9 +61,10 @@ struct CancelInstallButton: View { var body: some View { Button(action: cancelInstall) { - Text("Cancel") - .help(localizeString("StopInstallation")) + Image(systemName: "xmark.circle.fill") } + .help(localizeString("StopInstallation")) + .buttonStyle(.plain) } private func cancelInstall() { @@ -78,9 +79,9 @@ struct CancelRuntimeInstallButton: View { var body: some View { Button(action: cancelInstall) { - Text("Cancel") - .help(localizeString("StopInstallation")) - } + Image(systemName: "xmark.circle.fill") + }.help(localizeString("StopInstallation")) + .buttonStyle(.plain) } private func cancelInstall() { diff --git a/Xcodes/Frontend/InfoPane/CompatibilityView.swift b/Xcodes/Frontend/InfoPane/CompatibilityView.swift index 2cf3b40..a81183b 100644 --- a/Xcodes/Frontend/InfoPane/CompatibilityView.swift +++ b/Xcodes/Frontend/InfoPane/CompatibilityView.swift @@ -9,16 +9,30 @@ import SwiftUI struct CompatibilityView: View { + @EnvironmentObject var appState: AppState + let requiredMacOSVersion: String? var body: some View { if let requiredMacOSVersion = requiredMacOSVersion { - VStack(alignment: .leading) { - Text("Compatibility") - .font(.headline) - Text(String(format: localizeString("MacOSRequirement"), requiredMacOSVersion)) - .font(.subheadline) + HStack(alignment: .top){ + VStack(alignment: .leading) { + Text("Compatibility") + .font(.headline) + Text(String(format: localizeString("MacOSRequirement"), requiredMacOSVersion)) + .font(.subheadline) + .foregroundColor(appState.hasMinSupportedOS(requiredMacOSVersion: requiredMacOSVersion) ? .red : .primary) + } + Spacer() + if appState.hasMinSupportedOS(requiredMacOSVersion: requiredMacOSVersion) { + Image(systemName: "exclamationmark.triangle.fill") + .font(.largeTitle) + } } + .frame(maxWidth: .infinity, alignment: .leading) + .padding() + .background(.background) + .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) } else { EmptyView() } @@ -28,4 +42,5 @@ struct CompatibilityView: View { #Preview { CompatibilityView(requiredMacOSVersion: "10.15.4") .padding() + .environmentObject(AppState()) } diff --git a/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift b/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift index 2eac1f0..c09f20a 100644 --- a/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift +++ b/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift @@ -33,6 +33,10 @@ struct IdenticalBuildsView: View { .font(.subheadline) } } + .frame(maxWidth: .infinity, alignment: .leading) + .padding() + .background(.background) + .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) .accessibilityElement() .accessibility(label: Text("IdenticalBuilds")) .accessibility(value: Text(accessibilityDescription)) diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index d39648a..624e89f 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -1,4 +1,5 @@ import AppKit +import XcodesKit import Path import SwiftUI import Version @@ -23,7 +24,7 @@ struct InfoPane: View { Group { RuntimesView(xcode: xcode) - ReleaseDateView(date: xcode.releaseDate) + ReleaseDateView(date: xcode.releaseDate, url: xcode.releaseNotesURL) ReleaseNotesView(url: xcode.releaseNotesURL) IdenticalBuildsView(builds: xcode.identicalBuilds) CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) @@ -37,14 +38,14 @@ struct InfoPane: View { } } -#Preview(PreviewName.allCases[0].rawValue) { makePreviewContent(for: 0) } -#Preview(PreviewName.allCases[1].rawValue) { makePreviewContent(for: 1) } -#Preview(PreviewName.allCases[2].rawValue) { makePreviewContent(for: 2) } -#Preview(PreviewName.allCases[3].rawValue) { makePreviewContent(for: 3) } -#Preview(PreviewName.allCases[4].rawValue) { makePreviewContent(for: 4) } +#Preview(XcodePreviewName.allCases[0].rawValue) { makePreviewContent(for: 0) } +#Preview(XcodePreviewName.allCases[1].rawValue) { makePreviewContent(for: 1) } +#Preview(XcodePreviewName.allCases[2].rawValue) { makePreviewContent(for: 2) } +#Preview(XcodePreviewName.allCases[3].rawValue) { makePreviewContent(for: 3) } +#Preview(XcodePreviewName.allCases[4].rawValue) { makePreviewContent(for: 4) } private func makePreviewContent(for index: Int) -> some View { - let name = PreviewName.allCases[index] + let name = XcodePreviewName.allCases[index] return InfoPane(xcode: xcodeDict[name]!) .environmentObject(configure(AppState()) { $0.allXcodes = [xcodeDict[name]!] @@ -53,17 +54,17 @@ private func makePreviewContent(for index: Int) -> some View { .padding() } -enum PreviewName: String, CaseIterable, Identifiable { +enum XcodePreviewName: String, CaseIterable, Identifiable { case Populated_Installed_Selected case Populated_Installed_Unselected case Populated_Uninstalled case Basic_Installed case Basic_Installing - var id: PreviewName { self } + var id: XcodePreviewName { self } } -var xcodeDict: [PreviewName: Xcode] = [ +var xcodeDict: [XcodePreviewName: Xcode] = [ .Populated_Installed_Selected: .init( version: _versionNoMeta, installState: .installed(Path(_path)!), @@ -121,15 +122,48 @@ var xcodeDict: [PreviewName: Xcode] = [ ), ] +var downloadableRuntimes: [DownloadableRuntime] = { + var runtimes = try! JSONDecoder().decode([DownloadableRuntime].self, from: Current.files.contents(atPath: Path.runtimeCacheFile.string)!) + // set iOS to installed + let iOSIndex = runtimes.firstIndex { $0.sdkBuildUpdate == "19E239" }! + var iOSRuntime = runtimes[iOSIndex] + iOSRuntime.installState = .installed + runtimes[iOSIndex] = iOSRuntime + + let watchOSIndex = runtimes.firstIndex { $0.sdkBuildUpdate == "20R362" }! + var runtime = runtimes[watchOSIndex] + runtime.installState = .installing( + RuntimeInstallationStep.downloading( + progress:configure(Progress()) { + $0.kind = .file + $0.fileOperationKind = .downloading + $0.estimatedTimeRemaining = 123 + $0.totalUnitCount = 11_944_848_484 + $0.completedUnitCount = 848_444_920 + $0.throughput = 9_211_681 + } + ) + ) + runtimes[watchOSIndex] = runtime + + return runtimes +}() + +var installedRuntimes: [CoreSimulatorImage] = { + [CoreSimulatorImage(uuid: "85B22F5B-048B-4331-B6E2-F4196D8B7475", path: ["relative" : "file:///Library/Developer/CoreSimulator/Images/85B22F5B-048B-4331-B6E2-F4196D8B7475.dmg"], runtimeInfo: CoreSimulatorRuntimeInfo(build: "19E240"))] // same as iOS in _SDK's +}() + + private let _versionNoMeta = Version(major: 12, minor: 3, patch: 0) private let _versionWithMeta = Version(major: 12, minor: 3, patch: 1, buildMetadataIdentifiers: ["1234A"]) private let _path = "/Applications/Xcode-12.3.0.app" private let _requiredMacOSVersion = "10.15.4" private let _sdks = SDKs( macOS: .init(number: "11.1"), - iOS: .init(number: "14.3"), - watchOS: .init(number: "7.3"), - tvOS: .init(number: "14.3") + iOS: .init(number: "15.4", "19E239"), + watchOS: .init(number: "7.3", "20R362"), + tvOS: .init(number: "14.3", "20K67"), + visionOS: .init(number: "1.0", "21N5233e") ) private let _compilers = Compilers( gcc: .init(number: "4"), diff --git a/Xcodes/Frontend/InfoPane/InfoPane2.swift b/Xcodes/Frontend/InfoPane/InfoPane2.swift new file mode 100644 index 0000000..8f8eaa8 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/InfoPane2.swift @@ -0,0 +1,176 @@ +// +// InfoPane2.swift +// Xcodes +// +// Created by Matt Kiazyk on 2023-12-18. +// + +import AppKit +import Path +import SwiftUI +import Version +import struct XCModel.Compilers +import struct XCModel.SDKs + +struct InfoPane2: View { + + let xcode: Xcode + var body: some View { + ScrollView(.vertical) { + HStack(alignment: .top) { + VStack { + VStack(spacing: 5) { + HStack { + IconView(installState: xcode.installState) + + Text(verbatim: "Xcode \(xcode.description) \(xcode.version.buildMetadataIdentifiersDisplay)") + .font(.title) + .frame(maxWidth: .infinity, alignment: .leading) + } + InfoPaneControls(xcode: xcode) + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding() + .background(.background) + .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) + + + VStack { + Text("Platforms") + .font(.title3) + .frame(maxWidth: .infinity, alignment: .leading) + PlatformsView(xcode: xcode) + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding() + .background(.background) + .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) + } + + VStack(alignment: .leading) { + ReleaseDateView(date: xcode.releaseDate, url: xcode.releaseNotesURL) + CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) + IdenticalBuildsView(builds: xcode.identicalBuilds) + SDKandCompilers + } + .frame(width: 200) + + } + } + } + + @ViewBuilder + var SDKandCompilers: some View { + VStack(alignment: .leading, spacing: 16) { + SDKsView(sdks: xcode.sdks) + CompilersView(compilers: xcode.compilers) + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding() + .background(.background) + .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) + } +} + +#Preview(XcodePreviewName.allCases[0].rawValue) { makePreviewContent(for: 0) } +#Preview(XcodePreviewName.allCases[1].rawValue) { makePreviewContent(for: 1) } +#Preview(XcodePreviewName.allCases[2].rawValue) { makePreviewContent(for: 2) } +#Preview(XcodePreviewName.allCases[3].rawValue) { makePreviewContent(for: 3) } +#Preview(XcodePreviewName.allCases[4].rawValue) { makePreviewContent(for: 4) } + +private func makePreviewContent(for index: Int) -> some View { + let name = XcodePreviewName.allCases[index] + return InfoPane2(xcode: xcodeDict[name]!) + .environmentObject(configure(AppState()) { + $0.allXcodes = [xcodeDict[name]!] + }) + .frame(width: 600, height: 400) + .padding() +} + +enum Preview2Name: String, CaseIterable, Identifiable { + case Populated_Installed_Selected + case Populated_Installed_Unselected + case Populated_Uninstalled + case Basic_Installed + case Basic_Installing + + var id: Preview2Name { self } +} + +var xcodeDict2: [Preview2Name: Xcode] = [ + .Populated_Installed_Selected: .init( + version: _versionNoMeta, + installState: .installed(Path(_path)!), + selected: true, + icon: NSWorkspace.shared.icon(forFile: _path), + requiredMacOSVersion: _requiredMacOSVersion, + releaseNotesURL: URL(string: "https://developer.apple.com/documentation/xcode-release-notes/xcode-12_3-release-notes/")!, + releaseDate: Date(), + sdks: _sdks, + compilers: _compilers, + downloadFileSize: _downloadFileSize + ), + .Populated_Installed_Unselected: .init( + version: _versionNoMeta, + installState: .installed(Path(_path)!), + selected: false, + icon: NSWorkspace.shared.icon(forFile: _path), + sdks: _sdks, + compilers: _compilers, + downloadFileSize: _downloadFileSize + ), + .Populated_Uninstalled: .init( + version: Version(major: 12, minor: 3, patch: 0), + installState: .notInstalled, + selected: false, + icon: nil, + sdks: _sdks, + compilers: _compilers, + downloadFileSize: _downloadFileSize + ), + .Basic_Installed: .init( + version: _versionWithMeta, + installState: .installed(Path(_path)!), + selected: false, + icon: nil, + sdks: nil, + compilers: nil + ), + .Basic_Installing: .init( + version: _versionWithMeta, + installState: .installing(.downloading( + progress: configure(Progress()) { + $0.kind = .file + $0.fileOperationKind = .downloading + $0.estimatedTimeRemaining = 123 + $0.totalUnitCount = 11_944_848_484 + $0.completedUnitCount = 848_444_920 + $0.throughput = 9_211_681 + } + )), + selected: false, + icon: nil, + sdks: nil, + compilers: nil + ), +] + +private let _versionNoMeta = Version(major: 12, minor: 3, patch: 0) +private let _versionWithMeta = Version(major: 12, minor: 3, patch: 1, buildMetadataIdentifiers: ["1234A"]) +private let _path = "/Applications/Xcode-12.3.0.app" +private let _requiredMacOSVersion = "10.15.4" +private let _sdks = SDKs( + macOS: .init(number: "11.1"), + iOS: .init(number: "14.3"), + watchOS: .init(number: "7.3"), + tvOS: .init(number: "14.3") +) +private let _compilers = Compilers( + gcc: .init(number: "4"), + llvm_gcc: .init(number: "213"), + llvm: .init(number: "2.3"), + clang: .init(number: "7.3"), + swift: .init(number: "5.3.2") +) +private let _downloadFileSize: Int64 = 242_342_424 diff --git a/Xcodes/Frontend/InfoPane/InfoPaneControls.swift b/Xcodes/Frontend/InfoPane/InfoPaneControls.swift index 6034a38..73cdb35 100644 --- a/Xcodes/Frontend/InfoPane/InfoPaneControls.swift +++ b/Xcodes/Frontend/InfoPane/InfoPaneControls.swift @@ -15,12 +15,18 @@ struct InfoPaneControls: View { VStack (alignment: .leading) { switch xcode.installState { case .notInstalled: - NotInstalledStateButtons( - downloadFileSizeString: xcode.downloadFileSizeString, - id: xcode.id) + HStack { + Spacer() + NotInstalledStateButtons( + downloadFileSizeString: xcode.downloadFileSizeString, + id: xcode.id) + } + case .installing(let installationStep): - InstallationStepDetailView(installationStep: installationStep) - CancelInstallButton(xcode: xcode) + HStack(alignment: .top) { + InstallationStepDetailView(installationStep: installationStep) + CancelInstallButton(xcode: xcode) + } case .installed(_): InstalledStateButtons(xcode: xcode) } @@ -28,14 +34,14 @@ struct InfoPaneControls: View { } } -#Preview(PreviewName.allCases[0].rawValue) { makePreviewContent(for: 0) } -#Preview(PreviewName.allCases[1].rawValue) { makePreviewContent(for: 1) } -#Preview(PreviewName.allCases[2].rawValue) { makePreviewContent(for: 2) } -#Preview(PreviewName.allCases[3].rawValue) { makePreviewContent(for: 3) } -#Preview(PreviewName.allCases[4].rawValue) { makePreviewContent(for: 4) } +#Preview(XcodePreviewName.allCases[0].rawValue) { makePreviewContent(for: 0) } +#Preview(XcodePreviewName.allCases[1].rawValue) { makePreviewContent(for: 1) } +#Preview(XcodePreviewName.allCases[2].rawValue) { makePreviewContent(for: 2) } +#Preview(XcodePreviewName.allCases[3].rawValue) { makePreviewContent(for: 3) } +#Preview(XcodePreviewName.allCases[4].rawValue) { makePreviewContent(for: 4) } private func makePreviewContent(for index: Int) -> some View { - let name = PreviewName.allCases[index] + let name = XcodePreviewName.allCases[index] return InfoPaneControls(xcode: xcodeDict[name]!) .environmentObject(configure(AppState()) { diff --git a/Xcodes/Frontend/InfoPane/PlatformsView.swift b/Xcodes/Frontend/InfoPane/PlatformsView.swift new file mode 100644 index 0000000..184e597 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/PlatformsView.swift @@ -0,0 +1,104 @@ +// +// PlatformsView.swift +// Xcodes +// +// Created by Matt Kiazyk on 2023-12-18. +// + +import Foundation +import SwiftUI +import XcodesKit + +struct PlatformsView: View { + @EnvironmentObject var appState: AppState + + let xcode: Xcode + + var body: some View { + + let builds = xcode.sdks?.allBuilds() + let runtimes = builds?.flatMap { sdkBuild in + appState.downloadableRuntimes.filter { + $0.sdkBuildUpdate == sdkBuild + } + } + + ForEach(runtimes ?? [], id: \.simulatorVersion.buildUpdate) { runtime in + runtimeView(runtime: runtime) + .frame(minWidth: 200) + .padding() + .background(.quinary) + .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) + } + } + + @ViewBuilder + func runtimeView(runtime: DownloadableRuntime) -> some View { + VStack(spacing: 10) { + HStack { + runtime.icon() + Text("\(runtime.visibleIdentifier)") + .font(.headline) + pathIfAvailable(xcode: xcode, runtime: runtime) + Spacer() + Text(runtime.downloadFileSizeString) + .font(.subheadline) + } + switch runtime.installState { + case .installed: + EmptyView() + case .notInstalled: + // TODO: Update the downloadableRuntimes with the appropriate installState so we don't have to check path awkwardly + if let path = appState.runtimeInstallPath(xcode: xcode, runtime: runtime) { + EmptyView() + } else { + HStack { + Spacer() + DownloadRuntimeButton(runtime: runtime) + } + } + + case .installing(let installationStep): + HStack(alignment: .top, spacing: 5){ + RuntimeInstallationStepDetailView(installationStep: installationStep) + .fixedSize(horizontal: false, vertical: true) + CancelRuntimeInstallButton(runtime: runtime) + } + + } + } + } + + @ViewBuilder + func pathIfAvailable(xcode: Xcode, runtime: DownloadableRuntime) -> some View { + if let path = appState.runtimeInstallPath(xcode: xcode, runtime: runtime) { + Button(action: { appState.reveal(path: path.string) }) { + Image(systemName: "arrow.right.circle.fill") + } + .buttonStyle(PlainButtonStyle()) + .help("RevealInFinder") + } else { + EmptyView() + } + } +} + +#Preview(XcodePreviewName.allCases[0].rawValue) { makePreviewContent(for: 0) } + +private func makePreviewContent(for index: Int) -> some View { + let name = XcodePreviewName.allCases[index] + let runtimes = downloadableRuntimes + + return PlatformsView(xcode: xcodeDict[name]!) + .environmentObject({ () -> AppState in + let a = AppState() + a.allXcodes = [xcodeDict[name]!] + a.installedRuntimes = installedRuntimes + a.downloadableRuntimes = runtimes + + return a + + }()) + .frame(width: 300) + .padding() +} diff --git a/Xcodes/Frontend/InfoPane/ReleaseDateView.swift b/Xcodes/Frontend/InfoPane/ReleaseDateView.swift index c7ee304..838c365 100644 --- a/Xcodes/Frontend/InfoPane/ReleaseDateView.swift +++ b/Xcodes/Frontend/InfoPane/ReleaseDateView.swift @@ -10,26 +10,37 @@ import SwiftUI struct ReleaseDateView: View { let date: Date? - + let url: URL? var body: some View { if let date = date { - VStack(alignment: .leading) { - Text("ReleaseDate") - .font(.headline) - Text("\(date, style: .date)") - .font(.subheadline) - } + + VStack(alignment: .leading) { + HStack { + Text("ReleaseDate") + .font(.headline) + Spacer() + if let url { + ReleaseNotesView(url: url) + } + } + + Text("\(date, style: .date)") + .font(.subheadline) + + } + + + .frame(maxWidth: .infinity, alignment: .leading) + .padding() + .background(.background) + .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) } else { EmptyView() } } - - init(date: Date? = nil) { - self.date = date - } } #Preview { - ReleaseDateView(date: Date()) + ReleaseDateView(date: Date(), url: URL(string: "https://www.xcodes.app")!) .padding() } diff --git a/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift b/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift index 10e3638..8f16e3a 100644 --- a/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift +++ b/Xcodes/Frontend/InfoPane/ReleaseNotesView.swift @@ -16,13 +16,13 @@ struct ReleaseNotesView: View { var body: some View { if let url = url { Button(action: { openURL(url) }) { - Label("ReleaseNotes", systemImage: "link") + Image(systemName: "link.circle.fill") + .font(.title) } - .buttonStyle(LinkButtonStyle()) + .buttonStyle(.plain) .contextMenu(menuItems: { CopyReleaseNoteButton(url: url) }) - .frame(maxWidth: .infinity, alignment: .leading) .help("ReleaseNotes.help") } else { EmptyView() diff --git a/Xcodes/Frontend/MainWindow.swift b/Xcodes/Frontend/MainWindow.swift index 406d2a6..f0a75e4 100644 --- a/Xcodes/Frontend/MainWindow.swift +++ b/Xcodes/Frontend/MainWindow.swift @@ -20,7 +20,7 @@ struct MainWindow: View { var body: some View { NavigationSplitViewWrapper { XcodeListView(selectedXcodeID: $selectedXcodeID, searchText: searchText, category: category, isInstalledOnly: isInstalledOnly) - .frame(minWidth: 300) + .frame(minWidth: 250) .layoutPriority(1) .alert(item: $appState.xcodeBeingConfirmedForUninstallation) { xcode in Alert(title: Text(String(format: localizeString("Alert.Uninstall.Title"), xcode.description)), @@ -37,7 +37,7 @@ struct MainWindow: View { } detail: { Group { if let xcode = xcode { - InfoPane(xcode: xcode) + InfoPane2(xcode: xcode) } else { UnselectedView() } diff --git a/Xcodes/Frontend/XcodeList/MainToolbar.swift b/Xcodes/Frontend/XcodeList/MainToolbar.swift index b21460b..c64c1dd 100644 --- a/Xcodes/Frontend/XcodeList/MainToolbar.swift +++ b/Xcodes/Frontend/XcodeList/MainToolbar.swift @@ -70,18 +70,6 @@ struct MainToolbarModifier: ViewModifier { } .help("FilterInstalledDescription") -// Button(action: { isShowingInfoPane.toggle() }) { -// if isShowingInfoPane { -// Label("Info", systemImage: "info.circle.fill") -// .foregroundColor(.accentColor) -// } else { -// Label("Info", systemImage: "info.circle") -// } -// } -// .keyboardShortcut(KeyboardShortcut("i", modifiers: [.command, .option])) -// .help("InfoDescription") - - } } } diff --git a/Xcodes/Resources/Licenses.rtf b/Xcodes/Resources/Licenses.rtf index 179cdf4..d79d973 100644 --- a/Xcodes/Resources/Licenses.rtf +++ b/Xcodes/Resources/Licenses.rtf @@ -335,6 +335,33 @@ For more information, please refer to <>\ otherwise be required by Sections 4(a), 4(b) and 4(d) of the License.\ \ +\fs34 SwiftUIMasonry\ +\ + +\fs26 MIT License\ +\ +Copyright (c) 2022 Ciaran O'Brien\ +\ +Permission is hereby granted, free of charge, to any person obtaining a copy\ +of this software and associated documentation files (the "Software"), to deal\ +in the Software without restriction, including without limitation the rights\ +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ +copies of the Software, and to permit persons to whom the Software is\ +furnished to do so, subject to the following conditions:\ +\ +The above copyright notice and this permission notice shall be included in all\ +copies or substantial portions of the Software.\ +\ +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\ +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\ +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\ +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\ +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\ +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\ +SOFTWARE.\ +\ +\ + \fs34 DockProgress\ \ diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index c655402..be5230f 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -15467,6 +15467,7 @@ } }, "ReleaseNotes" : { + "extractionState" : "stale", "localizations" : { "ca" : { "stringUnit" : { diff --git a/Xcodes/XcodesApp.swift b/Xcodes/XcodesApp.swift index e735bb8..695a9e2 100644 --- a/Xcodes/XcodesApp.swift +++ b/Xcodes/XcodesApp.swift @@ -23,6 +23,7 @@ struct XcodesApp: App { guard !isTesting else { return } if case .active = newScenePhase { appState.updateIfNeeded() + appState.updateInstalledRuntimes() } } } diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift index a85d3c8..f2ed89b 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift @@ -9,14 +9,28 @@ import Foundation public struct CoreSimulatorPlist: Decodable { public let images: [CoreSimulatorImage] + + public init(images: [CoreSimulatorImage]) { + self.images = images + } } public struct CoreSimulatorImage: Decodable { public let uuid: String public let path: [String: String] public let runtimeInfo: CoreSimulatorRuntimeInfo + + public init(uuid: String, path: [String : String], runtimeInfo: CoreSimulatorRuntimeInfo) { + self.uuid = uuid + self.path = path + self.runtimeInfo = runtimeInfo + } } public struct CoreSimulatorRuntimeInfo: Decodable { public let build: String + + public init(build: String) { + self.build = build + } } From cd69ddc40e275682b70f9ba4f74d757fd711a5a6 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Tue, 19 Dec 2023 15:13:11 -0600 Subject: [PATCH 61/86] Cleanup --- Xcodes.xcodeproj/project.pbxproj | 12 +- .../Frontend/InfoPane/CompatibilityView.swift | 5 +- .../InfoPane/CornerRadiusModifier.swift | 35 ++++ .../InfoPane/IdenticalBuildView.swift | 5 +- Xcodes/Frontend/InfoPane/InfoPane.swift | 67 ++++--- Xcodes/Frontend/InfoPane/InfoPane2.swift | 176 ------------------ Xcodes/Frontend/InfoPane/RuntimesView.swift | 78 -------- Xcodes/Frontend/MainWindow.swift | 2 +- Xcodes/Resources/Localizable.xcstrings | 3 + 9 files changed, 89 insertions(+), 294 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/CornerRadiusModifier.swift delete mode 100644 Xcodes/Frontend/InfoPane/InfoPane2.swift delete mode 100644 Xcodes/Frontend/InfoPane/RuntimesView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 6ace20e..078e350 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -115,8 +115,7 @@ E81D7EA02805250100A205FC /* Collection+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E81D7E9F2805250100A205FC /* Collection+.swift */; }; E832EAF82B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */; }; E84B7D0D2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84B7D0C2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift */; }; - E84B7D0F2B30986700DBDA2B /* InfoPane2.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84B7D0E2B30986700DBDA2B /* InfoPane2.swift */; }; - E84CF8C12B0FEB8300ECA259 /* RuntimesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */; }; + E84E4F522B323A5F003F3959 /* CornerRadiusModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84E4F512B323A5F003F3959 /* CornerRadiusModifier.swift */; }; E86671272B309D2F0048559A /* PlatformsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E86671262B309D2F0048559A /* PlatformsView.swift */; }; E87AB3C52939B65E00D72F43 /* Hardware.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87AB3C42939B65E00D72F43 /* Hardware.swift */; }; E87DD6EB25D053FA00D86808 /* Progress+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87DD6EA25D053FA00D86808 /* Progress+.swift */; }; @@ -313,8 +312,7 @@ E81D7E9F2805250100A205FC /* Collection+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+.swift"; sourceTree = ""; }; E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeInstallationStepDetailView.swift; sourceTree = ""; }; E84B7D0C2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationSplitViewWrapper.swift; sourceTree = ""; }; - E84B7D0E2B30986700DBDA2B /* InfoPane2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoPane2.swift; sourceTree = ""; }; - E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimesView.swift; sourceTree = ""; }; + E84E4F512B323A5F003F3959 /* CornerRadiusModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CornerRadiusModifier.swift; sourceTree = ""; }; E856BB73291EDD3D00DC438B /* XcodesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = XcodesKit; path = Xcodes/XcodesKit; sourceTree = ""; }; E86671262B309D2F0048559A /* PlatformsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlatformsView.swift; sourceTree = ""; }; E87AB3C42939B65E00D72F43 /* Hardware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hardware.swift; sourceTree = ""; }; @@ -651,9 +649,8 @@ B0C6AD0A2AD9178E00E64698 /* IdenticalBuildView.swift */, B0C6AD0C2AD91D7900E64698 /* IconView.swift */, E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */, - E84CF8C02B0FEB8300ECA259 /* RuntimesView.swift */, - E84B7D0E2B30986700DBDA2B /* InfoPane2.swift */, E86671262B309D2F0048559A /* PlatformsView.swift */, + E84E4F512B323A5F003F3959 /* CornerRadiusModifier.swift */, ); path = InfoPane; sourceTree = ""; @@ -875,7 +872,6 @@ CA9FF8CF25959A9700E47BAF /* HelperXPCShared.swift in Sources */, CA735109257BF96D00EA9CF8 /* AttributedText.swift in Sources */, CAFBDC4E2599B33D003DCC5A /* MainToolbar.swift in Sources */, - E84CF8C12B0FEB8300ECA259 /* RuntimesView.swift in Sources */, CA11E7BA2598476C00D2EE1C /* XcodeCommands.swift in Sources */, CAA8589B25A2B83000ACF8C0 /* Aria2CError.swift in Sources */, 536CFDD2263C94DE00026CE0 /* SignedInView.swift in Sources */, @@ -904,6 +900,7 @@ B0403CFC2AD9A6BF00137C09 /* InstalledStateButtons.swift in Sources */, 36741BFF291E50F500A85AAE /* FileError.swift in Sources */, CA9FF8872595607900E47BAF /* InstalledXcode.swift in Sources */, + E84E4F522B323A5F003F3959 /* CornerRadiusModifier.swift in Sources */, B0403CF22AD934B600137C09 /* CompatibilityView.swift in Sources */, B0403CFE2ADA712C00137C09 /* InfoPaneControls.swift in Sources */, 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */, @@ -929,7 +926,6 @@ E8B20CBF2A2EDEC20057D816 /* SDKs+Xcode.swift in Sources */, CA9FF877259528CC00E47BAF /* Version+XcodeReleases.swift in Sources */, CABFAA2D2592FBFC00380FEE /* Configure.swift in Sources */, - E84B7D0F2B30986700DBDA2B /* InfoPane2.swift in Sources */, E84B7D0D2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift in Sources */, CA73510D257BFCEF00EA9CF8 /* NSAttributedString+.swift in Sources */, CAFBDB952598FE96003DCC5A /* FocusedValues.swift in Sources */, diff --git a/Xcodes/Frontend/InfoPane/CompatibilityView.swift b/Xcodes/Frontend/InfoPane/CompatibilityView.swift index a81183b..f5a583b 100644 --- a/Xcodes/Frontend/InfoPane/CompatibilityView.swift +++ b/Xcodes/Frontend/InfoPane/CompatibilityView.swift @@ -29,10 +29,7 @@ struct CompatibilityView: View { .font(.largeTitle) } } - .frame(maxWidth: .infinity, alignment: .leading) - .padding() - .background(.background) - .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) + .xcodesBackground() } else { EmptyView() } diff --git a/Xcodes/Frontend/InfoPane/CornerRadiusModifier.swift b/Xcodes/Frontend/InfoPane/CornerRadiusModifier.swift new file mode 100644 index 0000000..4d9d7e2 --- /dev/null +++ b/Xcodes/Frontend/InfoPane/CornerRadiusModifier.swift @@ -0,0 +1,35 @@ +// +// CornerRadiusModifier.swift +// Xcodes +// +// Created by Matt Kiazyk on 2023-12-19. +// + +import Foundation +import SwiftUI + +struct CornerRadiusModifier: ViewModifier { + func body(content: Content) -> some View { + content + .frame(maxWidth: .infinity, alignment: .leading) + .padding() + .background(.background) + .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) + } +} + +extension View { + func xcodesBackground() -> some View { + self.modifier( + CornerRadiusModifier() + ) + } +} + +struct Previews_CornerRadius_Previews: PreviewProvider { + static var previews: some View { + HStack { + Text("XCODES RULES!") + }.xcodesBackground() + } +} diff --git a/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift b/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift index c09f20a..04ef3b8 100644 --- a/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift +++ b/Xcodes/Frontend/InfoPane/IdenticalBuildView.swift @@ -33,10 +33,7 @@ struct IdenticalBuildsView: View { .font(.subheadline) } } - .frame(maxWidth: .infinity, alignment: .leading) - .padding() - .background(.background) - .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) + .xcodesBackground() .accessibilityElement() .accessibility(label: Text("IdenticalBuilds")) .accessibility(value: Text(accessibilityDescription)) diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 624e89f..36f3387 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -8,34 +8,55 @@ import struct XCModel.SDKs struct InfoPane: View { let xcode: Xcode - var body: some View { - ScrollView { - VStack(alignment: .leading, spacing: 16) { - IconView(installState: xcode.installState) - .frame(maxWidth: .infinity, alignment: .center) - - Text(verbatim: "Xcode \(xcode.description) \(xcode.version.buildMetadataIdentifiersDisplay)") - .font(.title) - - InfoPaneControls(xcode: xcode) - - Divider() - - Group { - RuntimesView(xcode: xcode) - ReleaseDateView(date: xcode.releaseDate, url: xcode.releaseNotesURL) - ReleaseNotesView(url: xcode.releaseNotesURL) - IdenticalBuildsView(builds: xcode.identicalBuilds) - CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) - SDKsView(sdks: xcode.sdks) - CompilersView(compilers: xcode.compilers) + ScrollView(.vertical) { + HStack(alignment: .top) { + VStack { + VStack(spacing: 5) { + HStack { + IconView(installState: xcode.installState) + + Text(verbatim: "Xcode \(xcode.description) \(xcode.version.buildMetadataIdentifiersDisplay)") + .font(.title) + .frame(maxWidth: .infinity, alignment: .leading) + } + InfoPaneControls(xcode: xcode) + } + .xcodesBackground() + + + VStack { + Text("Platforms") + .font(.title3) + .frame(maxWidth: .infinity, alignment: .leading) + PlatformsView(xcode: xcode) + } + .xcodesBackground() } - - Spacer() + + VStack(alignment: .leading) { + ReleaseDateView(date: xcode.releaseDate, url: xcode.releaseNotesURL) + CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) + IdenticalBuildsView(builds: xcode.identicalBuilds) + SDKandCompilers + } + .frame(width: 200) + } } } + + @ViewBuilder + var SDKandCompilers: some View { + VStack(alignment: .leading, spacing: 16) { + SDKsView(sdks: xcode.sdks) + CompilersView(compilers: xcode.compilers) + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding() + .background(.background) + .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) + } } #Preview(XcodePreviewName.allCases[0].rawValue) { makePreviewContent(for: 0) } diff --git a/Xcodes/Frontend/InfoPane/InfoPane2.swift b/Xcodes/Frontend/InfoPane/InfoPane2.swift deleted file mode 100644 index 8f8eaa8..0000000 --- a/Xcodes/Frontend/InfoPane/InfoPane2.swift +++ /dev/null @@ -1,176 +0,0 @@ -// -// InfoPane2.swift -// Xcodes -// -// Created by Matt Kiazyk on 2023-12-18. -// - -import AppKit -import Path -import SwiftUI -import Version -import struct XCModel.Compilers -import struct XCModel.SDKs - -struct InfoPane2: View { - - let xcode: Xcode - var body: some View { - ScrollView(.vertical) { - HStack(alignment: .top) { - VStack { - VStack(spacing: 5) { - HStack { - IconView(installState: xcode.installState) - - Text(verbatim: "Xcode \(xcode.description) \(xcode.version.buildMetadataIdentifiersDisplay)") - .font(.title) - .frame(maxWidth: .infinity, alignment: .leading) - } - InfoPaneControls(xcode: xcode) - } - .frame(maxWidth: .infinity, alignment: .leading) - .padding() - .background(.background) - .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) - - - VStack { - Text("Platforms") - .font(.title3) - .frame(maxWidth: .infinity, alignment: .leading) - PlatformsView(xcode: xcode) - } - .frame(maxWidth: .infinity, alignment: .leading) - .padding() - .background(.background) - .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) - } - - VStack(alignment: .leading) { - ReleaseDateView(date: xcode.releaseDate, url: xcode.releaseNotesURL) - CompatibilityView(requiredMacOSVersion: xcode.requiredMacOSVersion) - IdenticalBuildsView(builds: xcode.identicalBuilds) - SDKandCompilers - } - .frame(width: 200) - - } - } - } - - @ViewBuilder - var SDKandCompilers: some View { - VStack(alignment: .leading, spacing: 16) { - SDKsView(sdks: xcode.sdks) - CompilersView(compilers: xcode.compilers) - } - .frame(maxWidth: .infinity, alignment: .leading) - .padding() - .background(.background) - .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) - } -} - -#Preview(XcodePreviewName.allCases[0].rawValue) { makePreviewContent(for: 0) } -#Preview(XcodePreviewName.allCases[1].rawValue) { makePreviewContent(for: 1) } -#Preview(XcodePreviewName.allCases[2].rawValue) { makePreviewContent(for: 2) } -#Preview(XcodePreviewName.allCases[3].rawValue) { makePreviewContent(for: 3) } -#Preview(XcodePreviewName.allCases[4].rawValue) { makePreviewContent(for: 4) } - -private func makePreviewContent(for index: Int) -> some View { - let name = XcodePreviewName.allCases[index] - return InfoPane2(xcode: xcodeDict[name]!) - .environmentObject(configure(AppState()) { - $0.allXcodes = [xcodeDict[name]!] - }) - .frame(width: 600, height: 400) - .padding() -} - -enum Preview2Name: String, CaseIterable, Identifiable { - case Populated_Installed_Selected - case Populated_Installed_Unselected - case Populated_Uninstalled - case Basic_Installed - case Basic_Installing - - var id: Preview2Name { self } -} - -var xcodeDict2: [Preview2Name: Xcode] = [ - .Populated_Installed_Selected: .init( - version: _versionNoMeta, - installState: .installed(Path(_path)!), - selected: true, - icon: NSWorkspace.shared.icon(forFile: _path), - requiredMacOSVersion: _requiredMacOSVersion, - releaseNotesURL: URL(string: "https://developer.apple.com/documentation/xcode-release-notes/xcode-12_3-release-notes/")!, - releaseDate: Date(), - sdks: _sdks, - compilers: _compilers, - downloadFileSize: _downloadFileSize - ), - .Populated_Installed_Unselected: .init( - version: _versionNoMeta, - installState: .installed(Path(_path)!), - selected: false, - icon: NSWorkspace.shared.icon(forFile: _path), - sdks: _sdks, - compilers: _compilers, - downloadFileSize: _downloadFileSize - ), - .Populated_Uninstalled: .init( - version: Version(major: 12, minor: 3, patch: 0), - installState: .notInstalled, - selected: false, - icon: nil, - sdks: _sdks, - compilers: _compilers, - downloadFileSize: _downloadFileSize - ), - .Basic_Installed: .init( - version: _versionWithMeta, - installState: .installed(Path(_path)!), - selected: false, - icon: nil, - sdks: nil, - compilers: nil - ), - .Basic_Installing: .init( - version: _versionWithMeta, - installState: .installing(.downloading( - progress: configure(Progress()) { - $0.kind = .file - $0.fileOperationKind = .downloading - $0.estimatedTimeRemaining = 123 - $0.totalUnitCount = 11_944_848_484 - $0.completedUnitCount = 848_444_920 - $0.throughput = 9_211_681 - } - )), - selected: false, - icon: nil, - sdks: nil, - compilers: nil - ), -] - -private let _versionNoMeta = Version(major: 12, minor: 3, patch: 0) -private let _versionWithMeta = Version(major: 12, minor: 3, patch: 1, buildMetadataIdentifiers: ["1234A"]) -private let _path = "/Applications/Xcode-12.3.0.app" -private let _requiredMacOSVersion = "10.15.4" -private let _sdks = SDKs( - macOS: .init(number: "11.1"), - iOS: .init(number: "14.3"), - watchOS: .init(number: "7.3"), - tvOS: .init(number: "14.3") -) -private let _compilers = Compilers( - gcc: .init(number: "4"), - llvm_gcc: .init(number: "213"), - llvm: .init(number: "2.3"), - clang: .init(number: "7.3"), - swift: .init(number: "5.3.2") -) -private let _downloadFileSize: Int64 = 242_342_424 diff --git a/Xcodes/Frontend/InfoPane/RuntimesView.swift b/Xcodes/Frontend/InfoPane/RuntimesView.swift deleted file mode 100644 index 5148c71..0000000 --- a/Xcodes/Frontend/InfoPane/RuntimesView.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// RuntimesView.swift -// Xcodes -// -// Created by Matt Kiazyk on 2023-11-23. -// Copyright © 2023 Robots and Pencils. All rights reserved. -// - -import SwiftUI -import XcodesKit - -struct RuntimesView: View { - @EnvironmentObject var appState: AppState - let xcode: Xcode - - var body: some View { - VStack(alignment: .leading) { - Text("Platforms") - .font(.headline) - .frame(maxWidth: .infinity, alignment: .leading) - - let builds = xcode.sdks?.allBuilds() - let runtimes = builds?.flatMap { sdkBuild in - appState.downloadableRuntimes.filter { - $0.sdkBuildUpdate == sdkBuild - } - } - - ForEach(runtimes ?? [], id: \.simulatorVersion.buildUpdate) { runtime in - VStack { - runtimeRow(runtime: runtime) - } - - } - } - } - - @ViewBuilder - func runtimeRow(runtime: DownloadableRuntime) -> some View { - HStack { - Text("\(runtime.visibleIdentifier)") - .font(.subheadline) - Spacer() - Text(runtime.downloadFileSizeString) - .font(.subheadline) - - switch runtime.installState { - case .installed, .notInstalled: - // it's installed if we have a path - if let path = appState.runtimeInstallPath(xcode: xcode, runtime: runtime) { - Button(action: { appState.reveal(path: path.string) }) { - Image(systemName: "arrow.right.circle.fill") - } - .buttonStyle(PlainButtonStyle()) - .help("RevealInFinder") - } else { - DownloadRuntimeButton(runtime: runtime) - } - case .installing(_): - CancelRuntimeInstallButton(runtime: runtime) - } - - } - - switch runtime.installState { - - case .installing(let installationStep): - RuntimeInstallationStepDetailView(installationStep: installationStep) - .fixedSize(horizontal: false, vertical: true) - default: - EmptyView() - } - } -} - -//#Preview { -// RuntimesView() -//} diff --git a/Xcodes/Frontend/MainWindow.swift b/Xcodes/Frontend/MainWindow.swift index f0a75e4..cee42ac 100644 --- a/Xcodes/Frontend/MainWindow.swift +++ b/Xcodes/Frontend/MainWindow.swift @@ -37,7 +37,7 @@ struct MainWindow: View { } detail: { Group { if let xcode = xcode { - InfoPane2(xcode: xcode) + InfoPane(xcode: xcode) } else { UnselectedView() } diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index be5230f..b7d3d62 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -18443,6 +18443,9 @@ } } } + }, + "XCODES RULES!" : { + } }, "version" : "1.0" From 36a9bd267b6dcbd998b3319136bf7b2c045f4702 Mon Sep 17 00:00:00 2001 From: Yuki Yamamoto Date: Wed, 20 Dec 2023 00:39:03 +0100 Subject: [PATCH 62/86] add default phone number selection when there is only one --- Xcodes/Frontend/SignIn/SignInPhoneListView.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Xcodes/Frontend/SignIn/SignInPhoneListView.swift b/Xcodes/Frontend/SignIn/SignInPhoneListView.swift index 1efea67..a4341c1 100644 --- a/Xcodes/Frontend/SignIn/SignInPhoneListView.swift +++ b/Xcodes/Frontend/SignIn/SignInPhoneListView.swift @@ -16,6 +16,11 @@ struct SignInPhoneListView: View { List(phoneNumbers, selection: $selectedPhoneNumberID) { Text($0.numberWithDialCode) } + .onAppear { + if phoneNumbers.count == 1 { + selectedPhoneNumberID = phoneNumbers.first?.id + } + } } else { AttributedText( NSAttributedString(string: localizeString("NoTrustedPhones")) From b9681492358c34607182c192eb7a41dc71f09b24 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Wed, 20 Dec 2023 12:10:13 -0600 Subject: [PATCH 63/86] Add new platforms list in settings --- Xcodes.xcodeproj/project.pbxproj | 21 ++ .../xcshareddata/swiftpm/Package.resolved | 9 + Xcodes/Backend/AppState+Install.swift | 7 +- Xcodes/Backend/AppState+Runtimes.swift | 37 ++- Xcodes/Backend/AppState.swift | 15 +- Xcodes/Frontend/Common/XcodesAlert.swift | 14 ++ Xcodes/Frontend/InfoPane/InfoPane.swift | 3 +- Xcodes/Frontend/InfoPane/PlatformsView.swift | 1 + .../Preferences/PlatformsListView.swift | 88 +++++++ .../Preferences/PreferencesView.swift | 8 +- Xcodes/Resources/Licenses.rtf | 226 ++++++++++++++++-- Xcodes/Resources/Localizable.xcstrings | 44 ++++ Xcodes/XcodesApp.swift | 41 ++++ .../Models/Runtimes/CoreSimulatorImage.swift | 10 +- .../Models/Runtimes/RuntimeInstallState.swift | 2 +- .../Runtimes/RuntimeInstallationStep.swift | 2 +- .../XcodesKit/Models/Runtimes/Runtimes.swift | 19 +- .../XcodesKit/Services/RuntimeService.swift | 11 + .../Sources/XcodesKit/Shell/XcodesShell.swift | 3 + 19 files changed, 513 insertions(+), 48 deletions(-) create mode 100644 Xcodes/Frontend/Preferences/PlatformsListView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 078e350..b57cfd7 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -116,6 +116,8 @@ E832EAF82B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */; }; E84B7D0D2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84B7D0C2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift */; }; E84E4F522B323A5F003F3959 /* CornerRadiusModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84E4F512B323A5F003F3959 /* CornerRadiusModifier.swift */; }; + E84E4F542B333864003F3959 /* PlatformsListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84E4F532B333864003F3959 /* PlatformsListView.swift */; }; + E84E4F572B335094003F3959 /* OrderedCollections in Frameworks */ = {isa = PBXBuildFile; productRef = E84E4F562B335094003F3959 /* OrderedCollections */; }; E86671272B309D2F0048559A /* PlatformsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E86671262B309D2F0048559A /* PlatformsView.swift */; }; E87AB3C52939B65E00D72F43 /* Hardware.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87AB3C42939B65E00D72F43 /* Hardware.swift */; }; E87DD6EB25D053FA00D86808 /* Progress+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87DD6EA25D053FA00D86808 /* Progress+.swift */; }; @@ -313,6 +315,7 @@ E832EAF72B0FBCF4001B570D /* RuntimeInstallationStepDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeInstallationStepDetailView.swift; sourceTree = ""; }; E84B7D0C2B296A8900DBDA2B /* NavigationSplitViewWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationSplitViewWrapper.swift; sourceTree = ""; }; E84E4F512B323A5F003F3959 /* CornerRadiusModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CornerRadiusModifier.swift; sourceTree = ""; }; + E84E4F532B333864003F3959 /* PlatformsListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlatformsListView.swift; sourceTree = ""; }; E856BB73291EDD3D00DC438B /* XcodesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = XcodesKit; path = Xcodes/XcodesKit; sourceTree = ""; }; E86671262B309D2F0048559A /* PlatformsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlatformsView.swift; sourceTree = ""; }; E87AB3C42939B65E00D72F43 /* Hardware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hardware.swift; sourceTree = ""; }; @@ -352,6 +355,7 @@ E8FD5727291EE4AC001E004C /* AsyncNetworkService in Frameworks */, CAA1CB2D255A5262003FD669 /* AppleAPI in Frameworks */, CABFA9EE2592F0CC00380FEE /* SwiftSoup in Frameworks */, + E84E4F572B335094003F3959 /* OrderedCollections in Frameworks */, E8F44A1E296B4CD7002D6592 /* Path in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -628,6 +632,7 @@ E8977EA225C11E1500835F80 /* PreferencesView.swift */, E8DA461025FAF7FB002E85EF /* NotificationsView.swift */, E8CBDB8A27AE02FF00B22292 /* ExperiementsPreferencePane.swift */, + E84E4F532B333864003F3959 /* PlatformsListView.swift */, ); path = Preferences; sourceTree = ""; @@ -705,6 +710,7 @@ E8FD5726291EE4AC001E004C /* AsyncNetworkService */, E8C0EB19291EF43E0081528A /* XcodesKit */, E8F44A1D296B4CD7002D6592 /* Path */, + E84E4F562B335094003F3959 /* OrderedCollections */, ); productName = XcodesMac; productReference = CAD2E79E2449574E00113D76 /* Xcodes.app */; @@ -791,6 +797,7 @@ E689540125BE8C64000EBCEA /* XCRemoteSwiftPackageReference "DockProgress" */, E8FD5725291EE4AC001E004C /* XCRemoteSwiftPackageReference "AsyncHTTPNetworkService" */, E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */, + E84E4F552B335094003F3959 /* XCRemoteSwiftPackageReference "swift-collections" */, ); productRefGroup = CAD2E79F2449574E00113D76 /* Products */; projectDirPath = ""; @@ -914,6 +921,7 @@ CABFA9C12592EEEA00380FEE /* Version+.swift in Sources */, E8D655C0288DD04700A139C2 /* SelectedActionType.swift in Sources */, 36741BFD291E4FDB00A85AAE /* DownloadPreferencePane.swift in Sources */, + E84E4F542B333864003F3959 /* PlatformsListView.swift in Sources */, E86671272B309D2F0048559A /* PlatformsView.swift in Sources */, CA9FF8522595080100E47BAF /* AcknowledgementsView.swift in Sources */, CABFA9CE2592EEEA00380FEE /* Version+Xcode.swift in Sources */, @@ -1501,6 +1509,14 @@ minimumVersion = 3.2.0; }; }; + E84E4F552B335094003F3959 /* XCRemoteSwiftPackageReference "swift-collections" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/apple/swift-collections.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.5; + }; + }; E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/mxcl/Path.swift"; @@ -1572,6 +1588,11 @@ package = E689540125BE8C64000EBCEA /* XCRemoteSwiftPackageReference "DockProgress" */; productName = DockProgress; }; + E84E4F562B335094003F3959 /* OrderedCollections */ = { + isa = XCSwiftPackageProductDependency; + package = E84E4F552B335094003F3959 /* XCRemoteSwiftPackageReference "swift-collections" */; + productName = OrderedCollections; + }; E8C0EB19291EF43E0081528A /* XcodesKit */ = { isa = XCSwiftPackageProductDependency; productName = XcodesKit; diff --git a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index a08a9b2..743059b 100644 --- a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -82,6 +82,15 @@ "version": "2.1.0" } }, + { + "package": "swift-collections", + "repositoryURL": "https://github.com/apple/swift-collections.git", + "state": { + "branch": null, + "revision": "a902f1823a7ff3c9ab2fba0f992396b948eda307", + "version": "1.0.5" + } + }, { "package": "SwiftSoup", "repositoryURL": "https://github.com/scinfu/SwiftSoup", diff --git a/Xcodes/Backend/AppState+Install.swift b/Xcodes/Backend/AppState+Install.swift index ae562d3..325f314 100644 --- a/Xcodes/Backend/AppState+Install.swift +++ b/Xcodes/Backend/AppState+Install.swift @@ -500,12 +500,13 @@ extension AppState { } } - func setInstallationStep(of runtime: DownloadableRuntime, to step: RuntimeInstallationStep) { + func setInstallationStep(of runtime: DownloadableRuntime, to step: RuntimeInstallationStep, postNotification: Bool = true) { DispatchQueue.main.async { guard let index = self.downloadableRuntimes.firstIndex(where: { $0.identifier == runtime.identifier }) else { return } self.downloadableRuntimes[index].installState = .installing(step) - - Current.notificationManager.scheduleNotification(title: runtime.name, body: step.description, category: .normal) + if postNotification { + Current.notificationManager.scheduleNotification(title: runtime.name, body: step.description, category: .normal) + } } } } diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift index 9143667..63a00f1 100644 --- a/Xcodes/Backend/AppState+Runtimes.swift +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -35,6 +35,7 @@ extension AppState { func updateInstalledRuntimes() { Task { do { + Logger.appState.info("Loading Installed runtimes") let runtimes = try await self.runtimeService.localInstalledRuntimes() DispatchQueue.main.async { @@ -51,7 +52,7 @@ extension AppState { do { let downloadedURL = try await downloadRunTimeFull(runtime: runtime) if !Task.isCancelled { - Logger.appState.debug("Installing rungtime: \(runtime.name)") + Logger.appState.debug("Installing runtime: \(runtime.name)") DispatchQueue.main.async { self.setInstallationStep(of: runtime, to: .installing) } @@ -110,11 +111,10 @@ extension AppState { let aria2Path = Path(url: Bundle.main.url(forAuxiliaryExecutable: "aria2c")!)! for try await progress in downloadRuntimeWithAria2(runtime, to: expectedRuntimePath, aria2Path: aria2Path) { DispatchQueue.main.async { - Logger.appState.debug("Downloading: \(progress.fractionCompleted)") - self.setInstallationStep(of: runtime, to: .downloading(progress: progress)) + self.setInstallationStep(of: runtime, to: .downloading(progress: progress), postNotification: false) } } - Logger.appState.debug("Done downloading") + Logger.appState.debug("Done downloading runtime") case .urlSession: throw "Downloading runtimes with URLSession is not supported. Please use aria2" @@ -210,6 +210,35 @@ extension AppState { updateInstalledRuntimes() } + + func runtimeInstallPath(xcode: Xcode, runtime: DownloadableRuntime) -> Path? { + if let coreSimulatorInfo = coreSimulatorInfo(runtime: runtime) { + let urlString = coreSimulatorInfo.path["relative"]! + // app was not allowed to open up file:// url's so remove + let fileRemovedString = urlString.replacingOccurrences(of: "file://", with: "") + let url = URL(fileURLWithPath: fileRemovedString) + + return Path(url: url)! + } + return nil + } + + func coreSimulatorInfo(runtime: DownloadableRuntime) -> CoreSimulatorImage? { + return installedRuntimes.filter({ $0.runtimeInfo.build == runtime.simulatorVersion.buildUpdate }).first + } + + func deleteRuntime(runtime: DownloadableRuntime) async throws { + if let info = coreSimulatorInfo(runtime: runtime) { + try await runtimeService.deleteRuntime(identifier: info.uuid) + + // give it some time to actually finish deleting before updating + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in + self?.updateInstalledRuntimes() + } + } else { + throw "No simulator found with \(runtime.identifier)" + } + } } extension AnyPublisher { diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index 998e9f8..7bec2cb 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -48,6 +48,7 @@ class AppState: ObservableObject { @Published var isProcessingAuthRequest = false @Published var xcodeBeingConfirmedForUninstallation: Xcode? @Published var presentedAlert: XcodesAlert? + @Published var presentedPreferenceAlert: XcodesPreferencesAlert? @Published var helperInstallState: HelperInstallState = .notInstalled /// Whether the user is being prepared for the helper installation alert with an explanation. /// This closure will be performed after the user chooses whether or not to proceed. @@ -824,19 +825,7 @@ class AppState: ObservableObject { self.allXcodes = newAllXcodes.sorted { $0.version > $1.version } } - - // MARK: Runtimes - func runtimeInstallPath(xcode: Xcode, runtime: DownloadableRuntime) -> Path? { - if let coreSimulatorInfo = installedRuntimes.filter({ $0.runtimeInfo.build == runtime.simulatorVersion.buildUpdate }).first { - let urlString = coreSimulatorInfo.path["relative"]! - // app was not allowed to open up file:// url's so remove - let fileRemovedString = urlString.replacingOccurrences(of: "file://", with: "") - let url = URL(fileURLWithPath: fileRemovedString) - - return Path(url: url)! - } - return nil - } + // MARK: - Private diff --git a/Xcodes/Frontend/Common/XcodesAlert.swift b/Xcodes/Frontend/Common/XcodesAlert.swift index 38636cb..2d5e66f 100644 --- a/Xcodes/Frontend/Common/XcodesAlert.swift +++ b/Xcodes/Frontend/Common/XcodesAlert.swift @@ -18,3 +18,17 @@ enum XcodesAlert: Identifiable { } } } + +// Splitting out alerts that are shown on the preference screen as by default we are showing on the MainWindow() +// and users awkwardly switch screens, sometimes losing the preference screen +enum XcodesPreferencesAlert: Identifiable { + case deletePlatform(runtime: DownloadableRuntime) + case generic(title: String, message: String) + + var id: Int { + switch self { + case .deletePlatform: return 1 + case .generic: return 2 + } + } +} diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 36f3387..95826b7 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -171,7 +171,8 @@ var downloadableRuntimes: [DownloadableRuntime] = { }() var installedRuntimes: [CoreSimulatorImage] = { - [CoreSimulatorImage(uuid: "85B22F5B-048B-4331-B6E2-F4196D8B7475", path: ["relative" : "file:///Library/Developer/CoreSimulator/Images/85B22F5B-048B-4331-B6E2-F4196D8B7475.dmg"], runtimeInfo: CoreSimulatorRuntimeInfo(build: "19E240"))] // same as iOS in _SDK's + [CoreSimulatorImage(uuid: "85B22F5B-048B-4331-B6E2-F4196D8B7475", path: ["relative" : "file:///Library/Developer/CoreSimulator/Images/85B22F5B-048B-4331-B6E2-F4196D8B7475.dmg"], runtimeInfo: CoreSimulatorRuntimeInfo(build: "19E240")), + CoreSimulatorImage(uuid: "85B22F5B-048B-4331-B6E2-F4196D8B7473", path: ["relative" : "file:///Library/Developer/CoreSimulator/Images/85B22F5B-048B-4331-B6E2-F4196D8B7475.dmg"], runtimeInfo: CoreSimulatorRuntimeInfo(build: "21N5233f"))] }() diff --git a/Xcodes/Frontend/InfoPane/PlatformsView.swift b/Xcodes/Frontend/InfoPane/PlatformsView.swift index 184e597..93b2d3b 100644 --- a/Xcodes/Frontend/InfoPane/PlatformsView.swift +++ b/Xcodes/Frontend/InfoPane/PlatformsView.swift @@ -62,6 +62,7 @@ struct PlatformsView: View { HStack(alignment: .top, spacing: 5){ RuntimeInstallationStepDetailView(installationStep: installationStep) .fixedSize(horizontal: false, vertical: true) + Spacer() CancelRuntimeInstallButton(runtime: runtime) } diff --git a/Xcodes/Frontend/Preferences/PlatformsListView.swift b/Xcodes/Frontend/Preferences/PlatformsListView.swift new file mode 100644 index 0000000..855bd7e --- /dev/null +++ b/Xcodes/Frontend/Preferences/PlatformsListView.swift @@ -0,0 +1,88 @@ +// +// PlatformsListView.swift +// Xcodes +// +// Created by Matt Kiazyk on 2023-12-20. +// + +import Foundation +import SwiftUI +import Path +import XcodesKit +import OrderedCollections + +struct PlatformsListView: View { + @EnvironmentObject var appState: AppState + @State private var runtimes: OrderedDictionary = [:] + @State private var selectedRuntime: DownloadableRuntime? + + var body: some View { + List(selection: $selectedRuntime) { + Text("PlatformsList.Title") + .font(.body) + ForEach(runtimes.elements.sorted(\.key.order), id: \.key) { platform, runtimeList in + Section { + ForEach(runtimeList, id: \.self) { runtime in + HStack { + Text(runtime.name) + Spacer() + Text(runtime.downloadFileSizeString) + Button { + deleteRuntime(runtime: runtime) + } label: { + Image(systemName: "trash") + } + .foregroundStyle(.red) + .buttonStyle(.plain) + } + .frame(height: 30) + } + + } header: { + HStack { + runtimeList.first!.icon() + .aspectRatio(contentMode: .fit) + .frame(width: 20) + Text(platform.shortName) + .font(.headline) + } + } footer: { + EmptyView() + } + } + } + .listStyle(.inset(alternatesRowBackgrounds: true)) + .task { + loadRuntimes() + } + .onChange(of: appState.installedRuntimes) { _ in + loadRuntimes() + } + } + + func loadRuntimes() { + let filteredRuntimes = appState.downloadableRuntimes.filter { runtime in + appState.installedRuntimes.contains { $0.runtimeInfo.build == runtime.simulatorVersion.buildUpdate + } + } + runtimes = OrderedDictionary(grouping: filteredRuntimes, by: { $0.platform }) + } + + func deleteRuntime(runtime: DownloadableRuntime) { + appState.presentedPreferenceAlert = .deletePlatform(runtime: runtime) + } +} + + +#Preview { + PlatformsListView() + .environmentObject({ () -> AppState in + let a = AppState() + + a.installedRuntimes = installedRuntimes + a.downloadableRuntimes = downloadableRuntimes + + return a + + }()) +} diff --git a/Xcodes/Frontend/Preferences/PreferencesView.swift b/Xcodes/Frontend/Preferences/PreferencesView.swift index 83ab775..5aa5d7d 100644 --- a/Xcodes/Frontend/Preferences/PreferencesView.swift +++ b/Xcodes/Frontend/Preferences/PreferencesView.swift @@ -2,7 +2,7 @@ import SwiftUI struct PreferencesView: View { private enum Tabs: Hashable { - case general, updates, advanced, experiment + case general, updates, platforms, advanced, experiment } @EnvironmentObject var appState: AppState @EnvironmentObject var updater: ObservableUpdater @@ -26,6 +26,12 @@ struct PreferencesView: View { .tabItem { Label("Downloads", systemImage: "icloud.and.arrow.down") } + PlatformsListView() + .environmentObject(appState) + .tabItem { + Label("Platforms", systemImage: "ipad.and.iphone") + } + .tag(Tabs.platforms) AdvancedPreferencePane() .environmentObject(appState) .tabItem { diff --git a/Xcodes/Resources/Licenses.rtf b/Xcodes/Resources/Licenses.rtf index d79d973..aa97f20 100644 --- a/Xcodes/Resources/Licenses.rtf +++ b/Xcodes/Resources/Licenses.rtf @@ -335,30 +335,220 @@ For more information, please refer to <>\ otherwise be required by Sections 4(a), 4(b) and 4(d) of the License.\ \ -\fs34 SwiftUIMasonry\ +\fs34 swift-collections\ \ -\fs26 MIT License\ +\fs26 Apache License\ + Version 2.0, January 2004\ + http://www.apache.org/licenses/\ \ -Copyright (c) 2022 Ciaran O'Brien\ + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\ \ -Permission is hereby granted, free of charge, to any person obtaining a copy\ -of this software and associated documentation files (the "Software"), to deal\ -in the Software without restriction, including without limitation the rights\ -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ -copies of the Software, and to permit persons to whom the Software is\ -furnished to do so, subject to the following conditions:\ + 1. Definitions.\ \ -The above copyright notice and this permission notice shall be included in all\ -copies or substantial portions of the Software.\ + "License" shall mean the terms and conditions for use, reproduction,\ + and distribution as defined by Sections 1 through 9 of this document.\ \ -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\ -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\ -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\ -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\ -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\ -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\ -SOFTWARE.\ + "Licensor" shall mean the copyright owner or entity authorized by\ + the copyright owner that is granting the License.\ +\ + "Legal Entity" shall mean the union of the acting entity and all\ + other entities that control, are controlled by, or are under common\ + control with that entity. For the purposes of this definition,\ + "control" means (i) the power, direct or indirect, to cause the\ + direction or management of such entity, whether by contract or\ + otherwise, or (ii) ownership of fifty percent (50%) or more of the\ + outstanding shares, or (iii) beneficial ownership of such entity.\ +\ + "You" (or "Your") shall mean an individual or Legal Entity\ + exercising permissions granted by this License.\ +\ + "Source" form shall mean the preferred form for making modifications,\ + including but not limited to software source code, documentation\ + source, and configuration files.\ +\ + "Object" form shall mean any form resulting from mechanical\ + transformation or translation of a Source form, including but\ + not limited to compiled object code, generated documentation,\ + and conversions to other media types.\ +\ + "Work" shall mean the work of authorship, whether in Source or\ + Object form, made available under the License, as indicated by a\ + copyright notice that is included in or attached to the work\ + (an example is provided in the Appendix below).\ +\ + "Derivative Works" shall mean any work, whether in Source or Object\ + form, that is based on (or derived from) the Work and for which the\ + editorial revisions, annotations, elaborations, or other modifications\ + represent, as a whole, an original work of authorship. For the purposes\ + of this License, Derivative Works shall not include works that remain\ + separable from, or merely link (or bind by name) to the interfaces of,\ + the Work and Derivative Works thereof.\ +\ + "Contribution" shall mean any work of authorship, including\ + the original version of the Work and any modifications or additions\ + to that Work or Derivative Works thereof, that is intentionally\ + submitted to Licensor for inclusion in the Work by the copyright owner\ + or by an individual or Legal Entity authorized to submit on behalf of\ + the copyright owner. For the purposes of this definition, "submitted"\ + means any form of electronic, verbal, or written communication sent\ + to the Licensor or its representatives, including but not limited to\ + communication on electronic mailing lists, source code control systems,\ + and issue tracking systems that are managed by, or on behalf of, the\ + Licensor for the purpose of discussing and improving the Work, but\ + excluding communication that is conspicuously marked or otherwise\ + designated in writing by the copyright owner as "Not a Contribution."\ +\ + "Contributor" shall mean Licensor and any individual or Legal Entity\ + on behalf of whom a Contribution has been received by Licensor and\ + subsequently incorporated within the Work.\ +\ + 2. Grant of Copyright License. Subject to the terms and conditions of\ + this License, each Contributor hereby grants to You a perpetual,\ + worldwide, non-exclusive, no-charge, royalty-free, irrevocable\ + copyright license to reproduce, prepare Derivative Works of,\ + publicly display, publicly perform, sublicense, and distribute the\ + Work and such Derivative Works in Source or Object form.\ +\ + 3. Grant of Patent License. Subject to the terms and conditions of\ + this License, each Contributor hereby grants to You a perpetual,\ + worldwide, non-exclusive, no-charge, royalty-free, irrevocable\ + (except as stated in this section) patent license to make, have made,\ + use, offer to sell, sell, import, and otherwise transfer the Work,\ + where such license applies only to those patent claims licensable\ + by such Contributor that are necessarily infringed by their\ + Contribution(s) alone or by combination of their Contribution(s)\ + with the Work to which such Contribution(s) was submitted. If You\ + institute patent litigation against any entity (including a\ + cross-claim or counterclaim in a lawsuit) alleging that the Work\ + or a Contribution incorporated within the Work constitutes direct\ + or contributory patent infringement, then any patent licenses\ + granted to You under this License for that Work shall terminate\ + as of the date such litigation is filed.\ +\ + 4. Redistribution. You may reproduce and distribute copies of the\ + Work or Derivative Works thereof in any medium, with or without\ + modifications, and in Source or Object form, provided that You\ + meet the following conditions:\ +\ + (a) You must give any other recipients of the Work or\ + Derivative Works a copy of this License; and\ +\ + (b) You must cause any modified files to carry prominent notices\ + stating that You changed the files; and\ +\ + (c) You must retain, in the Source form of any Derivative Works\ + that You distribute, all copyright, patent, trademark, and\ + attribution notices from the Source form of the Work,\ + excluding those notices that do not pertain to any part of\ + the Derivative Works; and\ +\ + (d) If the Work includes a "NOTICE" text file as part of its\ + distribution, then any Derivative Works that You distribute must\ + include a readable copy of the attribution notices contained\ + within such NOTICE file, excluding those notices that do not\ + pertain to any part of the Derivative Works, in at least one\ + of the following places: within a NOTICE text file distributed\ + as part of the Derivative Works; within the Source form or\ + documentation, if provided along with the Derivative Works; or,\ + within a display generated by the Derivative Works, if and\ + wherever such third-party notices normally appear. The contents\ + of the NOTICE file are for informational purposes only and\ + do not modify the License. You may add Your own attribution\ + notices within Derivative Works that You distribute, alongside\ + or as an addendum to the NOTICE text from the Work, provided\ + that such additional attribution notices cannot be construed\ + as modifying the License.\ +\ + You may add Your own copyright statement to Your modifications and\ + may provide additional or different license terms and conditions\ + for use, reproduction, or distribution of Your modifications, or\ + for any such Derivative Works as a whole, provided Your use,\ + reproduction, and distribution of the Work otherwise complies with\ + the conditions stated in this License.\ +\ + 5. Submission of Contributions. Unless You explicitly state otherwise,\ + any Contribution intentionally submitted for inclusion in the Work\ + by You to the Licensor shall be under the terms and conditions of\ + this License, without any additional terms or conditions.\ + Notwithstanding the above, nothing herein shall supersede or modify\ + the terms of any separate license agreement you may have executed\ + with Licensor regarding such Contributions.\ +\ + 6. Trademarks. This License does not grant permission to use the trade\ + names, trademarks, service marks, or product names of the Licensor,\ + except as required for reasonable and customary use in describing the\ + origin of the Work and reproducing the content of the NOTICE file.\ +\ + 7. Disclaimer of Warranty. Unless required by applicable law or\ + agreed to in writing, Licensor provides the Work (and each\ + Contributor provides its Contributions) on an "AS IS" BASIS,\ + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\ + implied, including, without limitation, any warranties or conditions\ + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\ + PARTICULAR PURPOSE. You are solely responsible for determining the\ + appropriateness of using or redistributing the Work and assume any\ + risks associated with Your exercise of permissions under this License.\ +\ + 8. Limitation of Liability. In no event and under no legal theory,\ + whether in tort (including negligence), contract, or otherwise,\ + unless required by applicable law (such as deliberate and grossly\ + negligent acts) or agreed to in writing, shall any Contributor be\ + liable to You for damages, including any direct, indirect, special,\ + incidental, or consequential damages of any character arising as a\ + result of this License or out of the use or inability to use the\ + Work (including but not limited to damages for loss of goodwill,\ + work stoppage, computer failure or malfunction, or any and all\ + other commercial damages or losses), even if such Contributor\ + has been advised of the possibility of such damages.\ +\ + 9. Accepting Warranty or Additional Liability. While redistributing\ + the Work or Derivative Works thereof, You may choose to offer,\ + and charge a fee for, acceptance of support, warranty, indemnity,\ + or other liability obligations and/or rights consistent with this\ + License. However, in accepting such obligations, You may act only\ + on Your own behalf and on Your sole responsibility, not on behalf\ + of any other Contributor, and only if You agree to indemnify,\ + defend, and hold each Contributor harmless for any liability\ + incurred by, or claims asserted against, such Contributor by reason\ + of your accepting any such warranty or additional liability.\ +\ + END OF TERMS AND CONDITIONS\ +\ + APPENDIX: How to apply the Apache License to your work.\ +\ + To apply the Apache License to your work, attach the following\ + boilerplate notice, with the fields enclosed by brackets "[]"\ + replaced with your own identifying information. (Don't include\ + the brackets!) The text should be enclosed in the appropriate\ + comment syntax for the file format. We also recommend that a\ + file or class name and description of purpose be included on the\ + same "printed page" as the copyright notice for easier\ + identification within third-party archives.\ +\ + Copyright [yyyy] [name of copyright owner]\ +\ + Licensed under the Apache License, Version 2.0 (the "License");\ + you may not use this file except in compliance with the License.\ + You may obtain a copy of the License at\ +\ + http://www.apache.org/licenses/LICENSE-2.0\ +\ + Unless required by applicable law or agreed to in writing, software\ + distributed under the License is distributed on an "AS IS" BASIS,\ + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\ + See the License for the specific language governing permissions and\ + limitations under the License.\ +\ +\ +\ +## Runtime Library Exception to the Apache 2.0 License: ##\ +\ +\ + As an exception, if you use this Software to compile your source code and\ + portions of this Software are embedded into the binary product as a result,\ + you may redistribute such product without providing attribution as would\ + otherwise be required by Sections 4(a), 4(b) and 4(d) of the License.\ \ \ diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index b7d3d62..1b0fa25 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -1166,6 +1166,28 @@ } } }, + "Alert.DeletePlatform.PrimaryButton" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete" + } + } + } + }, + "Alert.DeletePlatform.Title" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Are you sure you want to delete %@?" + } + } + } + }, "Alert.Install.Error.Title" : { "comment" : "Install", "extractionState" : "manual", @@ -6504,6 +6526,17 @@ } } }, + "Error" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" + } + } + } + }, "example@icloud.com" : { "localizations" : { "tr" : { @@ -14581,6 +14614,17 @@ } } }, + "PlatformsList.Title" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Below are a list of platforms that are installed on this machine. " + } + } + } + }, "Preferences" : { "localizations" : { "ca" : { diff --git a/Xcodes/XcodesApp.swift b/Xcodes/XcodesApp.swift index 695a9e2..c6eeceb 100644 --- a/Xcodes/XcodesApp.swift +++ b/Xcodes/XcodesApp.swift @@ -73,9 +73,50 @@ struct XcodesApp: App { PreferencesView() .environmentObject(appState) .environmentObject(updater) + .alert(item: $appState.presentedPreferenceAlert, content: { presentedAlert in + alert(for: presentedAlert) + }) } #endif } + + private func alert(for alertType: XcodesPreferencesAlert) -> Alert { + switch alertType { + case let .deletePlatform(runtime): + return Alert( + title: Text(String(format: localizeString("Alert.DeletePlatform.Title"), runtime.name)), + primaryButton: .destructive( + Text("Alert.DeletePlatform.PrimaryButton"), + action: { + Task { + do { + try await self.appState.deleteRuntime(runtime: runtime) + } catch { + var errorString: String + if let error = error as? String { + errorString = error + } else { + errorString = error.localizedDescription + } + self.appState.presentedPreferenceAlert = .generic(title: "Error", message: errorString) + } + + } + } + ), + secondaryButton: .cancel(Text("Cancel")) + ) + case let .generic(title, message): + return Alert( + title: Text(title), + message: Text(message), + dismissButton: .default( + Text("OK"), + action: { appState.presentedAlert = nil } + ) + ) + } + } } class AppDelegate: NSObject, NSApplicationDelegate { diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift index f2ed89b..cf537d4 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/CoreSimulatorImage.swift @@ -15,7 +15,11 @@ public struct CoreSimulatorPlist: Decodable { } } -public struct CoreSimulatorImage: Decodable { +public struct CoreSimulatorImage: Decodable, Identifiable, Equatable { + public var id: String { + return uuid + } + public let uuid: String public let path: [String: String] public let runtimeInfo: CoreSimulatorRuntimeInfo @@ -25,6 +29,10 @@ public struct CoreSimulatorImage: Decodable { self.path = path self.runtimeInfo = runtimeInfo } + + public static func == (lhs: CoreSimulatorImage, rhs: CoreSimulatorImage) -> Bool { + lhs.id == rhs.id + } } public struct CoreSimulatorRuntimeInfo: Decodable { diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift index 84c4c8d..f50e4a2 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallState.swift @@ -8,7 +8,7 @@ import Foundation import Path -public enum RuntimeInstallState: Equatable { +public enum RuntimeInstallState: Equatable, Hashable { case notInstalled case installing(RuntimeInstallationStep) case installed diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift index 27b4e17..231971f 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/RuntimeInstallationStep.swift @@ -7,7 +7,7 @@ import Foundation -public enum RuntimeInstallationStep: Equatable, CustomStringConvertible { +public enum RuntimeInstallationStep: Equatable, CustomStringConvertible, Hashable { case downloading(progress: Progress) case installing case trashingArchive diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift index 9e9e370..26289ee 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Models/Runtimes/Runtimes.swift @@ -8,7 +8,7 @@ public struct DownloadableRuntimesResponse: Codable { public let version: String } -public struct DownloadableRuntime: Codable { +public struct DownloadableRuntime: Codable, Identifiable, Hashable { public let category: Category public let simulatorVersion: SimulatorVersion public let source: String @@ -71,6 +71,14 @@ public struct DownloadableRuntime: Codable { public var downloadFileSizeString: String { return ByteCountFormatter.string(fromByteCount: Int64(fileSize), countStyle: .file) } + + public var id: String { + return visibleIdentifier + } + + public static func == (lhs: DownloadableRuntime, rhs: DownloadableRuntime) -> Bool { + return lhs.identifier == rhs.identifier + } } public struct SDKToSeedMapping: Codable { @@ -86,12 +94,12 @@ public struct SDKToSimulatorMapping: Codable { } extension DownloadableRuntime { - public struct SimulatorVersion: Codable { + public struct SimulatorVersion: Codable, Hashable { public let buildUpdate: String public let version: String } - public struct HostRequirements: Codable { + public struct HostRequirements: Codable, Hashable { let maxHostVersion: String? let excludedHostArchitectures: [String]? let minHostVersion: String? @@ -118,7 +126,7 @@ extension DownloadableRuntime { case tvOS = "com.apple.platform.appletvos" case visionOS = "com.apple.platform.xros" - var order: Int { + public var order: Int { switch self { case .iOS: return 1 case .macOS: return 2 @@ -128,7 +136,7 @@ extension DownloadableRuntime { } } - var shortName: String { + public var shortName: String { switch self { case .iOS: return "iOS" case .macOS: return "macOS" @@ -137,6 +145,7 @@ extension DownloadableRuntime { case .visionOS: return "visionOS" } } + } } diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift index 5ffb33c..3250801 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Services/RuntimeService.swift @@ -84,6 +84,17 @@ public struct RuntimeService { public func installPkg(pkgPath: Path, expandedPkgPath: Path) async throws { _ = try await Current.shell.installPkg(pkgPath.url, expandedPkgPath.url.absoluteString) } + + public func deleteRuntime(identifier: String) async throws { + do { + _ = try await Current.shell.deleteRuntime(identifier) + } catch { + if let executionError = error as? ProcessExecutionError { + throw executionError.standardError + } + throw error + } + } } extension String: Error {} diff --git a/Xcodes/XcodesKit/Sources/XcodesKit/Shell/XcodesShell.swift b/Xcodes/XcodesKit/Sources/XcodesKit/Shell/XcodesShell.swift index c5760b3..4c72795 100644 --- a/Xcodes/XcodesKit/Sources/XcodesKit/Shell/XcodesShell.swift +++ b/Xcodes/XcodesKit/Sources/XcodesKit/Shell/XcodesShell.swift @@ -23,4 +23,7 @@ public struct XcodesShell { public var installRuntimeImage: (URL) async throws -> ProcessOutput = { try await Process.run(Path.root.usr.bin.join("xcrun"), "simctl", "runtime", "add", $0.path) } + public var deleteRuntime: (String) async throws -> ProcessOutput = { + try await Process.run(Path.root.usr.bin.join("xcrun"), "simctl", "runtime", "delete", $0) + } } From 48e9b1568e26c7938e953f1b68075b2a5169b85b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 Dec 2023 10:39:05 +0000 Subject: [PATCH 64/86] Bump ruby/setup-ruby from 1.162.0 to 1.165.1 Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.162.0 to 1.165.1. - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Commits](https://github.com/ruby/setup-ruby/compare/v1.162.0...v1.165.1) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/appcast.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appcast.yml b/.github/workflows/appcast.yml index d920bad..19b12f0 100644 --- a/.github/workflows/appcast.yml +++ b/.github/workflows/appcast.yml @@ -23,7 +23,7 @@ jobs: ${{ runner.os }}-gems- - name: Setup Ruby, JRuby and TruffleRuby - uses: ruby/setup-ruby@v1.162.0 + uses: ruby/setup-ruby@v1.165.1 with: ruby-version: '2.7' From 805f754bc81c57a9deb789ccaeccb65cdff18d97 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Mon, 1 Jan 2024 19:46:27 -0600 Subject: [PATCH 65/86] Move platforms list view to it's own window, outside of settings --- Xcodes.xcodeproj/project.pbxproj | 3 +++ Xcodes/Frontend/MainWindow.swift | 26 ------------------- .../Preferences/PreferencesView.swift | 8 +----- Xcodes/Frontend/XcodeList/XcodeListView.swift | 26 +++++++++++++++++++ Xcodes/XcodesApp.swift | 5 ++++ 5 files changed, 35 insertions(+), 33 deletions(-) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index b57cfd7..d251ead 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -1083,6 +1083,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.10.0; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; @@ -1326,6 +1327,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.10.0; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; @@ -1350,6 +1352,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.10.0; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; diff --git a/Xcodes/Frontend/MainWindow.swift b/Xcodes/Frontend/MainWindow.swift index cee42ac..6bbe1ee 100644 --- a/Xcodes/Frontend/MainWindow.swift +++ b/Xcodes/Frontend/MainWindow.swift @@ -69,32 +69,6 @@ struct MainWindow: View { } } } - -// HSplitView { -// XcodeListView(selectedXcodeID: $selectedXcodeID, searchText: searchText, category: category, isInstalledOnly: isInstalledOnly) -// .frame(minWidth: 300) -// .layoutPriority(1) -// .alert(item: $appState.xcodeBeingConfirmedForUninstallation) { xcode in -// Alert(title: Text(String(format: localizeString("Alert.Uninstall.Title"), xcode.description)), -// message: Text("Alert.Uninstall.Message"), -// primaryButton: .destructive(Text("Uninstall"), action: { self.appState.uninstall(xcode: xcode) }), -// secondaryButton: .cancel(Text("Cancel"))) -// } -// .searchable(text: $searchText) -// -// if isShowingInfoPane { -// Group { -// if let xcode = xcode { -// InfoPane(xcode: xcode) -// } else { -// UnselectedView() -// } -// } -// .padding() -// .frame(minWidth: 300, maxWidth: .infinity) -// } -// } - .bottomStatusBar() .padding([.top], 0) .navigationSubtitle(subtitleText) diff --git a/Xcodes/Frontend/Preferences/PreferencesView.swift b/Xcodes/Frontend/Preferences/PreferencesView.swift index 5aa5d7d..83ab775 100644 --- a/Xcodes/Frontend/Preferences/PreferencesView.swift +++ b/Xcodes/Frontend/Preferences/PreferencesView.swift @@ -2,7 +2,7 @@ import SwiftUI struct PreferencesView: View { private enum Tabs: Hashable { - case general, updates, platforms, advanced, experiment + case general, updates, advanced, experiment } @EnvironmentObject var appState: AppState @EnvironmentObject var updater: ObservableUpdater @@ -26,12 +26,6 @@ struct PreferencesView: View { .tabItem { Label("Downloads", systemImage: "icloud.and.arrow.down") } - PlatformsListView() - .environmentObject(appState) - .tabItem { - Label("Platforms", systemImage: "ipad.and.iphone") - } - .tag(Tabs.platforms) AdvancedPreferencePane() .environmentObject(appState) .tabItem { diff --git a/Xcodes/Frontend/XcodeList/XcodeListView.swift b/Xcodes/Frontend/XcodeList/XcodeListView.swift index fdbdfc8..10749a1 100644 --- a/Xcodes/Frontend/XcodeList/XcodeListView.swift +++ b/Xcodes/Frontend/XcodeList/XcodeListView.swift @@ -43,6 +43,32 @@ struct XcodeListView: View { XcodeListViewRow(xcode: xcode, selected: selectedXcodeID == xcode.id, appState: appState) } .listStyle(.sidebar) + .safeAreaInset(edge: .bottom, spacing: 10) { + PlatformsPocket() + .padding() + } + } +} + +struct PlatformsPocket: View { + @SwiftUI.Environment(\.openWindow) private var openWindow + + var body: some View { + Button(action: { + openWindow(id: "platforms") } + ) { + VStack(spacing: 5) { + Image(systemName: "square.3.layers.3d") + .font(.largeTitle) + Text("Platforms") + .font(.callout) + } + .frame(width: 100, height: 75) + .background(.quaternary) + .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) + + } + .buttonStyle(.plain) } } diff --git a/Xcodes/XcodesApp.swift b/Xcodes/XcodesApp.swift index c6eeceb..37d51c5 100644 --- a/Xcodes/XcodesApp.swift +++ b/Xcodes/XcodesApp.swift @@ -77,6 +77,11 @@ struct XcodesApp: App { alert(for: presentedAlert) }) } + + Window("Platforms", id: "platforms") { + PlatformsListView() + .environmentObject(appState) + } #endif } From 79c1f678116eeaa7593f055025f3dd7b1868cba6 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Mon, 1 Jan 2024 19:52:34 -0600 Subject: [PATCH 66/86] small adjustments --- Xcodes/Frontend/XcodeList/XcodeListView.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Xcodes/Frontend/XcodeList/XcodeListView.swift b/Xcodes/Frontend/XcodeList/XcodeListView.swift index 10749a1..d68936d 100644 --- a/Xcodes/Frontend/XcodeList/XcodeListView.swift +++ b/Xcodes/Frontend/XcodeList/XcodeListView.swift @@ -43,7 +43,7 @@ struct XcodeListView: View { XcodeListViewRow(xcode: xcode, selected: selectedXcodeID == xcode.id, appState: appState) } .listStyle(.sidebar) - .safeAreaInset(edge: .bottom, spacing: 10) { + .safeAreaInset(edge: .bottom, spacing: 0) { PlatformsPocket() .padding() } @@ -59,11 +59,11 @@ struct PlatformsPocket: View { ) { VStack(spacing: 5) { Image(systemName: "square.3.layers.3d") - .font(.largeTitle) + .font(.title) Text("Platforms") .font(.callout) } - .frame(width: 100, height: 75) + .frame(width: 70, height: 70) .background(.quaternary) .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) From 7167c40072d843550819605433e81142f795df29 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Mon, 1 Jan 2024 19:55:45 -0600 Subject: [PATCH 67/86] Tests to MacOS 13 --- Xcodes.xcodeproj/project.pbxproj | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index d251ead..cc71e82 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -1107,6 +1107,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 13.0; PRODUCT_BUNDLE_IDENTIFIER = com.robotsandpencils.XcodesAppTests; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1374,6 +1375,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 13.0; PRODUCT_BUNDLE_IDENTIFIER = com.robotsandpencils.XcodesAppTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -1395,6 +1397,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 13.0; PRODUCT_BUNDLE_IDENTIFIER = com.robotsandpencils.XcodesAppTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; From 7aaf0563e672318783f698fdd93422349fbb17ae Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Tue, 2 Jan 2024 22:19:31 -0600 Subject: [PATCH 68/86] update Sparkle to 2.5.2 --- Xcodes.xcodeproj/project.pbxproj | 34 ++++---- .../xcshareddata/swiftpm/Package.resolved | 4 +- .../Preferences/UpdatesPreferencePane.swift | 36 ++++++--- Xcodes/Resources/Licenses.rtf | 79 ++++++++++++++++++- 4 files changed, 120 insertions(+), 33 deletions(-) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index cc71e82..8e5cd8c 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -121,6 +121,7 @@ E86671272B309D2F0048559A /* PlatformsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E86671262B309D2F0048559A /* PlatformsView.swift */; }; E87AB3C52939B65E00D72F43 /* Hardware.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87AB3C42939B65E00D72F43 /* Hardware.swift */; }; E87DD6EB25D053FA00D86808 /* Progress+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87DD6EA25D053FA00D86808 /* Progress+.swift */; }; + E891A1C42B43ACF900A1B9D1 /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = E891A1C32B43ACF900A1B9D1 /* Sparkle */; }; E89342FA25EDCC17007CF557 /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E89342F925EDCC17007CF557 /* NotificationManager.swift */; }; E8977EA325C11E1500835F80 /* PreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8977EA225C11E1500835F80 /* PreferencesView.swift */; }; E8B20CBF2A2EDEC20057D816 /* SDKs+Xcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8B20CBE2A2EDEC20057D816 /* SDKs+Xcode.swift */; }; @@ -134,7 +135,6 @@ E8E98A9025D8631800EC89A0 /* InstallationStepRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFBC3FF259AC17F00E2A3D8 /* InstallationStepRowView.swift */; }; E8E98A9625D863D700EC89A0 /* InstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */; }; E8F44A1E296B4CD7002D6592 /* Path in Frameworks */ = {isa = PBXBuildFile; productRef = E8F44A1D296B4CD7002D6592 /* Path */; }; - E8F81FC4282D8A17006CBD0F /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = E8F81FC3282D8A17006CBD0F /* Sparkle */; }; E8FD5727291EE4AC001E004C /* AsyncNetworkService in Frameworks */ = {isa = PBXBuildFile; productRef = E8FD5726291EE4AC001E004C /* AsyncNetworkService */; }; /* End PBXBuildFile section */ @@ -344,12 +344,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E8F81FC4282D8A17006CBD0F /* Sparkle in Frameworks */, CABFA9E42592F08E00380FEE /* Version in Frameworks */, CABFA9FD2592F13300380FEE /* LegibleError in Frameworks */, E689540325BE8C64000EBCEA /* DockProgress in Frameworks */, CA9FF86D25951C6E00E47BAF /* XCModel in Frameworks */, CABFA9F82592F0F900380FEE /* KeychainAccess in Frameworks */, + E891A1C42B43ACF900A1B9D1 /* Sparkle in Frameworks */, CAA858CD25A3D8BC00ACF8C0 /* ErrorHandling in Frameworks */, E8C0EB1A291EF43E0081528A /* XcodesKit in Frameworks */, E8FD5727291EE4AC001E004C /* AsyncNetworkService in Frameworks */, @@ -705,12 +705,12 @@ CABFA9FC2592F13300380FEE /* LegibleError */, CA9FF86C25951C6E00E47BAF /* XCModel */, CAA858CC25A3D8BC00ACF8C0 /* ErrorHandling */, - E8F81FC3282D8A17006CBD0F /* Sparkle */, E689540225BE8C64000EBCEA /* DockProgress */, E8FD5726291EE4AC001E004C /* AsyncNetworkService */, E8C0EB19291EF43E0081528A /* XcodesKit */, E8F44A1D296B4CD7002D6592 /* Path */, E84E4F562B335094003F3959 /* OrderedCollections */, + E891A1C32B43ACF900A1B9D1 /* Sparkle */, ); productName = XcodesMac; productReference = CAD2E79E2449574E00113D76 /* Xcodes.app */; @@ -793,11 +793,11 @@ CA9FF86B25951C6E00E47BAF /* XCRemoteSwiftPackageReference "data" */, CAA858CB25A3D8BC00ACF8C0 /* XCRemoteSwiftPackageReference "ErrorHandling" */, CAC28186259EE27200B8AB0B /* XCRemoteSwiftPackageReference "CombineExpectations" */, - E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */, E689540125BE8C64000EBCEA /* XCRemoteSwiftPackageReference "DockProgress" */, E8FD5725291EE4AC001E004C /* XCRemoteSwiftPackageReference "AsyncHTTPNetworkService" */, E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */, E84E4F552B335094003F3959 /* XCRemoteSwiftPackageReference "swift-collections" */, + E891A1C22B43ACA400A1B9D1 /* XCRemoteSwiftPackageReference "Sparkle" */, ); productRefGroup = CAD2E79F2449574E00113D76 /* Products */; projectDirPath = ""; @@ -1523,6 +1523,14 @@ minimumVersion = 1.0.5; }; }; + E891A1C22B43ACA400A1B9D1 /* XCRemoteSwiftPackageReference "Sparkle" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sparkle-project/Sparkle"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.5.2; + }; + }; E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/mxcl/Path.swift"; @@ -1531,14 +1539,6 @@ minimumVersion = 1.0.0; }; }; - E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/sparkle-project/Sparkle"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.0.0; - }; - }; E8FD5725291EE4AC001E004C /* XCRemoteSwiftPackageReference "AsyncHTTPNetworkService" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/RobotsAndPencils/AsyncHTTPNetworkService"; @@ -1599,6 +1599,11 @@ package = E84E4F552B335094003F3959 /* XCRemoteSwiftPackageReference "swift-collections" */; productName = OrderedCollections; }; + E891A1C32B43ACF900A1B9D1 /* Sparkle */ = { + isa = XCSwiftPackageProductDependency; + package = E891A1C22B43ACA400A1B9D1 /* XCRemoteSwiftPackageReference "Sparkle" */; + productName = Sparkle; + }; E8C0EB19291EF43E0081528A /* XcodesKit */ = { isa = XCSwiftPackageProductDependency; productName = XcodesKit; @@ -1608,11 +1613,6 @@ package = E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */; productName = Path; }; - E8F81FC3282D8A17006CBD0F /* Sparkle */ = { - isa = XCSwiftPackageProductDependency; - package = E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */; - productName = Sparkle; - }; E8FD5726291EE4AC001E004C /* AsyncNetworkService */ = { isa = XCSwiftPackageProductDependency; package = E8FD5725291EE4AC001E004C /* XCRemoteSwiftPackageReference "AsyncHTTPNetworkService" */; diff --git a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 743059b..220940e 100644 --- a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -78,8 +78,8 @@ "repositoryURL": "https://github.com/sparkle-project/Sparkle/", "state": { "branch": null, - "revision": "286edd1fa22505a9e54d170e9fd07d775ea233f2", - "version": "2.1.0" + "revision": "47d3d90aee3c52b6f61d04ceae426e607df62347", + "version": "2.5.2" } }, { diff --git a/Xcodes/Frontend/Preferences/UpdatesPreferencePane.swift b/Xcodes/Frontend/Preferences/UpdatesPreferencePane.swift index 349d9be..624a306 100644 --- a/Xcodes/Frontend/Preferences/UpdatesPreferencePane.swift +++ b/Xcodes/Frontend/Preferences/UpdatesPreferencePane.swift @@ -69,7 +69,8 @@ struct UpdatesPreferencePane: View { class ObservableUpdater: ObservableObject { private let updater: SPUUpdater - + private let updaterDelegate = UpdaterDelegate() + @Published var automaticallyChecksForUpdates = false { didSet { updater.automaticallyChecksForUpdates = automaticallyChecksForUpdates @@ -81,17 +82,17 @@ class ObservableUpdater: ObservableObject { @Published var includePrereleaseVersions = false { didSet { UserDefaults.standard.setValue(includePrereleaseVersions, forKey: "includePrereleaseVersions") - - if includePrereleaseVersions { - updater.setFeedURL(.prereleaseAppcast) - } else { - updater.setFeedURL(.appcast) - } + + updaterDelegate.includePrereleaseVersions = includePrereleaseVersions } } init() { - updater = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: nil, userDriverDelegate: nil).updater + updater = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: updaterDelegate, userDriverDelegate: nil).updater + + // upgrade from an old sparkle version which set feeds via the updater + // now it uses the `updaterDelegate` + updater.clearFeedURLFromUserDefaults() automaticallyChecksForUpdatesObservation = updater.observe( \.automaticallyChecksForUpdates, @@ -116,9 +117,22 @@ class ObservableUpdater: ObservableObject { } } -extension URL { - static let appcast = URL(string: "https://www.xcodes.app/appcast.xml")! - static let prereleaseAppcast = URL(string: "https://www.xcodes.app/appcast_pre.xml")! +class UpdaterDelegate: NSObject, SPUUpdaterDelegate { + var includePrereleaseVersions: Bool = false + + func feedURLString(for updater: SPUUpdater) -> String? { + if includePrereleaseVersions { + return .prereleaseAppcast + } else { + return .appcast + } + } +} + + +extension String { + static let appcast = "https://www.xcodes.app/appcast.xml" + static let prereleaseAppcast = "https://www.xcodes.app/appcast_pre.xml" } struct UpdatesPreferencePane_Previews: PreviewProvider { diff --git a/Xcodes/Resources/Licenses.rtf b/Xcodes/Resources/Licenses.rtf index aa97f20..266ceda 100644 --- a/Xcodes/Resources/Licenses.rtf +++ b/Xcodes/Resources/Licenses.rtf @@ -656,13 +656,86 @@ EXTERNAL LICENSES\ =================\ \ bspatch.c and bsdiff.c, from bsdiff 4.3 :\ - Copyright (c) 2003-2005 Colin Percival.\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without\ +modification, are permitted providing that the following conditions \ +are met:\ +1. Redistributions of source code must retain the above copyright\ + notice, this list of conditions and the following disclaimer.\ +2. Redistributions in binary form must reproduce the above copyright\ + notice, this list of conditions and the following disclaimer in the\ + documentation and/or other materials provided with the distribution.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\ +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\ +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\ +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\ +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\ +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\ +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\ +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\ +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\ +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\ +POSSIBILITY OF SUCH DAMAGE.\ +\ +--\ \ sais.c and sais.c, from sais-lite (2010/08/07) :\ - Copyright (c) 2008-2010 Yuta Mori.\ +\ +The sais-lite copyright is as follows:\ +\ +Copyright (c) 2008-2010 Yuta Mori All Rights Reserved.\ +\ +Permission is hereby granted, free of charge, to any person\ +obtaining a copy of this software and associated documentation\ +files (the "Software"), to deal in the Software without\ +restriction, including without limitation the rights to use,\ +copy, modify, merge, publish, distribute, sublicense, and/or sell\ +copies of the Software, and to permit persons to whom the\ +Software is furnished to do so, subject to the following\ +conditions:\ +\ +The above copyright notice and this permission notice shall be\ +included in all copies or substantial portions of the Software.\ +\ +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\ +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\ +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\ +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\ +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\ +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\ +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\ +OTHER DEALINGS IN THE SOFTWARE.\ +\ +--\ +\ +Portable C implementation of Ed25519, from https://github.com/orlp/ed25519\ +\ +Copyright (c) 2015 Orson Peters \ +\ +This software is provided 'as-is', without any express or implied warranty. In no event will the\ +authors be held liable for any damages arising from the use of this software.\ +\ +Permission is granted to anyone to use this software for any purpose, including commercial\ +applications, and to alter it and redistribute it freely, subject to the following restrictions:\ +\ +1. The origin of this software must not be misrepresented; you must not claim that you wrote the\ + original software. If you use this software in a product, an acknowledgment in the product\ + documentation would be appreciated but is not required.\ +\ +2. Altered source versions must be plainly marked as such, and must not be misrepresented as\ + being the original software.\ +\ +3. This notice may not be removed or altered from any source distribution.\ +\ +--\ \ SUSignatureVerifier.m:\ - Copyright (c) 2011 Mark Hamlin.\ +\ +Copyright (c) 2011 Mark Hamlin.\ \ All rights reserved.\ \ From 4d95a270ae1d42b0b4c24d55916f8aac36fa77c7 Mon Sep 17 00:00:00 2001 From: Daniel Chick Date: Thu, 4 Jan 2024 22:01:18 -0600 Subject: [PATCH 69/86] Handle preference alerts from the PlatformsListView --- Xcodes/XcodesApp.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Xcodes/XcodesApp.swift b/Xcodes/XcodesApp.swift index 37d51c5..611341b 100644 --- a/Xcodes/XcodesApp.swift +++ b/Xcodes/XcodesApp.swift @@ -81,6 +81,9 @@ struct XcodesApp: App { Window("Platforms", id: "platforms") { PlatformsListView() .environmentObject(appState) + .alert(item: $appState.presentedPreferenceAlert, content: { presentedAlert in + alert(for: presentedAlert) + }) } #endif } From 111f08fdcf15455e5cd12861c2887a2acbd1dde3 Mon Sep 17 00:00:00 2001 From: Robin Kunde Date: Wed, 10 Jan 2024 13:44:02 -0500 Subject: [PATCH 70/86] Remove newline from derived data path returned by defaults --- .../Sources/AcknowledgementsGenerator/Tools/Xcode.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xcodes/AcknowledgementsGenerator/Sources/AcknowledgementsGenerator/Tools/Xcode.swift b/Xcodes/AcknowledgementsGenerator/Sources/AcknowledgementsGenerator/Tools/Xcode.swift index 8710931..ab6ed16 100644 --- a/Xcodes/AcknowledgementsGenerator/Sources/AcknowledgementsGenerator/Tools/Xcode.swift +++ b/Xcodes/AcknowledgementsGenerator/Sources/AcknowledgementsGenerator/Tools/Xcode.swift @@ -35,7 +35,7 @@ private extension Xcode { try? task.run() let handle = pipe.fileHandleForReading let data = handle.readDataToEndOfFile() - let path = String(data: data, encoding: String.Encoding.utf8) + let path = String(data: data, encoding: String.Encoding.utf8)?.trimmingCharacters(in: .whitespacesAndNewlines) return (path?.isEmpty ?? true) ? nil : path } } From 1cf4381c3ac18dd4396c4b87ad04cc8326abd559 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 10:39:41 +0000 Subject: [PATCH 71/86] Bump actions/cache from 3.3.2 to 4.0.0 Bumps [actions/cache](https://github.com/actions/cache) from 3.3.2 to 4.0.0. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v3.3.2...v4.0.0) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/appcast.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appcast.yml b/.github/workflows/appcast.yml index 19b12f0..b6af385 100644 --- a/.github/workflows/appcast.yml +++ b/.github/workflows/appcast.yml @@ -15,7 +15,7 @@ jobs: persist-credentials: false - name: Cache 📦 - uses: actions/cache@v3.3.2 + uses: actions/cache@v4.0.0 with: path: AppCast/vendor/bundle key: ${{ runner.os }}-gems-v1.0-${{ hashFiles('AppCast/Gemfile') }} From e1ea64c6473f566d47dca92aa378169df5f7a6b2 Mon Sep 17 00:00:00 2001 From: McNight Date: Wed, 17 Jan 2024 22:48:35 +0100 Subject: [PATCH 72/86] Add latest missing french translations --- Xcodes/Resources/Localizable.xcstrings | 110 ++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 1 deletion(-) diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index 1b0fa25..0921f2d 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -1044,6 +1044,12 @@ "value" : "Are you sure you want to stop the installation of Xcode %@?" } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Êtes-vous sûr de vouloir arrêter l'installation de Xcode %@ ?" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -1174,6 +1180,12 @@ "state" : "translated", "value" : "Delete" } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer" + } } } }, @@ -1185,6 +1197,12 @@ "state" : "translated", "value" : "Are you sure you want to delete %@?" } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Êtes-vous sûr de vouloir supprimer %@ ?" + } } } }, @@ -2449,6 +2467,12 @@ "value" : "Could not find file \"%@\"." } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de trouver le fichier \"%@\"." + } + }, "ja" : { "stringUnit" : { "state" : "translated", @@ -5146,6 +5170,12 @@ "value" : "Luo Symlink nimellä Xcode-Beta.app" } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Créer un lien symbolique Xcode-Beta.app" + } + }, "hi" : { "stringUnit" : { "state" : "translated", @@ -6534,6 +6564,12 @@ "state" : "translated", "value" : "Error" } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erreur" + } } } }, @@ -7880,6 +7916,12 @@ }, "Hidden" : { "localizations" : { + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masqué" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -8554,6 +8596,12 @@ }, "INSTALL" : { "localizations" : { + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "INSTALLER" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -10736,6 +10784,12 @@ "value" : "Directorio de instalación" } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Répertoire d'installation" + } + }, "ja" : { "stringUnit" : { "state" : "translated", @@ -10906,6 +10960,12 @@ "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. " } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xcodes recherche et installe dans un répertoire spécifique. Par défaut, il est recommandé de laisser /Applications. Tout changement modifiant l'emplacement de Xcode risque de provoquer des dysfonctionnements aux autres apps/services." + } + }, "ja" : { "stringUnit" : { "state" : "translated", @@ -12951,6 +13011,12 @@ }, "Not Hidden" : { "localizations" : { + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visible" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14070,6 +14136,12 @@ "value" : "Al seleccionar, mantener el nombre como la versión p.ej. Xcode-13.4.1.app" } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lors de la sélection, gardera le numéro de version. Exemple: Xcode-13.4.1.app" + } + }, "ja" : { "stringUnit" : { "state" : "translated", @@ -14197,7 +14269,7 @@ "fr" : { "stringUnit" : { "state" : "translated", - "value" : "À la sélection, toujours essayer de renommer la version active de Xcode en Xcode.app, en renommant l'ancienne Xcode.app avec le nom de version." + "value" : "Lors de la sélection, toujours essayer de renommer la version active de Xcode en Xcode.app, en renommant l'ancienne Xcode.app avec le nom de version." } }, "ja" : { @@ -14352,6 +14424,12 @@ }, "OPEN" : { "localizations" : { + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "OUVRIR" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14362,6 +14440,12 @@ }, "Open In Rosetta" : { "localizations" : { + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ouvrir avec Rosetta" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14596,6 +14680,12 @@ }, "Perform post-install steps" : { "localizations" : { + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exécuter des étapes post-installation" + } + }, "tr" : { "stringUnit" : { "state" : "translated", @@ -14622,6 +14712,12 @@ "state" : "translated", "value" : "Below are a list of platforms that are installed on this machine. " } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ci-dessous une liste des plateformes installées sur cette machine." + } } } }, @@ -16842,6 +16938,12 @@ "value" : "Show Open In Rosetta option" } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afficher l'option Ouvrir avec Rosetta" + } + }, "ja" : { "stringUnit" : { "state" : "translated", @@ -16882,6 +16984,12 @@ "value" : "Open in Rosetta option will show where other \"Open\" functions are available. Note: This will only show for Apple Silicon machines." } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ouvrir avec Rosetta s'affichera d'autres options \"Ouvrir\" sont disponibles. Note: Uniquement pour les machines Apple Silicon." + } + }, "ja" : { "stringUnit" : { "state" : "translated", From dada7f271680034b0866ad3d280749cfd9ea52c9 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Fri, 19 Jan 2024 11:18:45 -0600 Subject: [PATCH 73/86] 2.0.0 beta --- Xcodes.xcodeproj/project.pbxproj | 12 +- Xcodes/Backend/AppState+Runtimes.swift | 58 ------ Xcodes/Resources/Info.plist | 6 +- Xcodes/Resources/Licenses.rtf | 170 ++++++++++++++++++ .../Info.plist | 2 +- 5 files changed, 180 insertions(+), 68 deletions(-) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 8e5cd8c..4d34652 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -1073,7 +1073,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 18; + CURRENT_PROJECT_VERSION = 19; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; @@ -1084,7 +1084,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.10.0; + MARKETING_VERSION = 2.0.0; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1318,7 +1318,7 @@ CODE_SIGN_ENTITLEMENTS = Xcodes/Resources/Xcodes.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 18; + CURRENT_PROJECT_VERSION = 19; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; @@ -1329,7 +1329,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.10.0; + MARKETING_VERSION = 2.0.0; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; SWIFT_VERSION = 5.0; @@ -1343,7 +1343,7 @@ CODE_SIGN_ENTITLEMENTS = Xcodes/Resources/Xcodes.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 18; + CURRENT_PROJECT_VERSION = 19; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; @@ -1354,7 +1354,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.10.0; + MARKETING_VERSION = 2.0.0; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; SWIFT_VERSION = 5.0; diff --git a/Xcodes/Backend/AppState+Runtimes.swift b/Xcodes/Backend/AppState+Runtimes.swift index 63a00f1..81abc5b 100644 --- a/Xcodes/Backend/AppState+Runtimes.swift +++ b/Xcodes/Backend/AppState+Runtimes.swift @@ -122,64 +122,6 @@ extension AppState { return expectedRuntimePath.url } - - func downloadRuntime(for runtime: DownloadableRuntime, downloader: Downloader, progressChanged: @escaping (Progress) -> Void) -> AnyPublisher { - // Check to see if the dmg is in the expected path in case it was downloaded but failed to install - - // call https://developerservices2.apple.com/services/download?path=/Developer_Tools/watchOS_10_beta/watchOS_10_beta_Simulator_Runtime.dmg 1st to get cookie - // use runtime.url for final with cookies - - // Check to see if the archive is in the expected path in case it was downloaded but failed to install - let url = URL(string: runtime.source)! - let expectedRuntimePath = Path.xcodesApplicationSupport/"\(url.lastPathComponent)" - // aria2 downloads directly to the destination (instead of into /tmp first) so we need to make sure that the download isn't incomplete - let aria2DownloadMetadataPath = expectedRuntimePath.parent/(expectedRuntimePath.basename() + ".aria2") - var aria2DownloadIsIncomplete = false - if case .aria2 = downloader, aria2DownloadMetadataPath.exists { - aria2DownloadIsIncomplete = true - } - if Current.files.fileExistsAtPath(expectedRuntimePath.string), aria2DownloadIsIncomplete == false { - Logger.appState.info("Found existing runtime that will be used for installation at \(expectedRuntimePath).") - return Just(expectedRuntimePath.url) - .setFailureType(to: Error.self) - .eraseToAnyPublisher() - } - else { - - Logger.appState.info("Downloading runtime: \(url.lastPathComponent)") - switch downloader { - case .aria2: - let aria2Path = Path(url: Bundle.main.url(forAuxiliaryExecutable: "aria2c")!)! - return downloadRuntimeWithAria2( - runtime, - to: expectedRuntimePath, - aria2Path: aria2Path, - progressChanged: progressChanged) - - case .urlSession: - // TODO: Support runtime download via URL Session - return Just(runtime.url) - .setFailureType(to: Error.self) - .eraseToAnyPublisher() - } - } - } - - public func downloadRuntimeWithAria2(_ runtime: DownloadableRuntime, to destination: Path, aria2Path: Path, progressChanged: @escaping (Progress) -> Void) -> AnyPublisher { - let cookies = AppleAPI.Current.network.session.configuration.httpCookieStorage?.cookies(for: runtime.url) ?? [] - - let (progress, publisher) = Current.shell.downloadWithAria2( - aria2Path, - runtime.url, - destination, - cookies - ) - progressChanged(progress) - return publisher - .map { _ in destination.url } - .eraseToAnyPublisher() - } - public func downloadRuntimeWithAria2(_ runtime: DownloadableRuntime, to destination: Path, aria2Path: Path) -> AsyncThrowingStream { let cookies = AppleAPI.Current.network.session.configuration.httpCookieStorage?.cookies(for: runtime.url) ?? [] diff --git a/Xcodes/Resources/Info.plist b/Xcodes/Resources/Info.plist index 49fe676..733c89a 100644 --- a/Xcodes/Resources/Info.plist +++ b/Xcodes/Resources/Info.plist @@ -25,7 +25,7 @@ LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSHumanReadableCopyright - Copyright © 2023 Robots and Pencils. + Copyright © 2024 XcodesOrg NSPrincipalClass NSApplication NSSupportsAutomaticTermination @@ -35,11 +35,11 @@ SMPrivilegedExecutables com.robotsandpencils.XcodesApp.Helper - identifier "com.robotsandpencils.XcodesApp.Helper" and info [CFBundleShortVersionString] >= "1.0.0" and anchor apple generic and certificate leaf[subject.OU] = "$(CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT)" + identifier "com.robotsandpencils.XcodesApp.Helper" and info [CFBundleShortVersionString] >= "1.0.0" and anchor apple generic and certificate leaf[subject.OU] = "$(CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT)" SUFeedURL https://www.xcodes.app/appcast.xml SUPublicEDKey - SEcz0vgUSeBTOoAXYe+64zea95G6lIf5NgzFs3InYJQ= + GrqOrFQHxfqoLFCAGc9luvsAWQifHtG9gQ3NVJ583tE= diff --git a/Xcodes/Resources/Licenses.rtf b/Xcodes/Resources/Licenses.rtf index 266ceda..c0fb5ad 100644 --- a/Xcodes/Resources/Licenses.rtf +++ b/Xcodes/Resources/Licenses.rtf @@ -595,6 +595,176 @@ SOFTWARE.\ \ \ +\fs34 unxip\ +\ + +\fs26 GNU LESSER GENERAL PUBLIC LICENSE\ + Version 3, 29 June 2007\ +\ + Copyright (C) 2007 Free Software Foundation, Inc. \ + Everyone is permitted to copy and distribute verbatim copies\ + of this license document, but changing it is not allowed.\ +\ +\ + This version of the GNU Lesser General Public License incorporates\ +the terms and conditions of version 3 of the GNU General Public\ +License, supplemented by the additional permissions listed below.\ +\ + 0. Additional Definitions.\ +\ + As used herein, "this License" refers to version 3 of the GNU Lesser\ +General Public License, and the "GNU GPL" refers to version 3 of the GNU\ +General Public License.\ +\ + "The Library" refers to a covered work governed by this License,\ +other than an Application or a Combined Work as defined below.\ +\ + An "Application" is any work that makes use of an interface provided\ +by the Library, but which is not otherwise based on the Library.\ +Defining a subclass of a class defined by the Library is deemed a mode\ +of using an interface provided by the Library.\ +\ + A "Combined Work" is a work produced by combining or linking an\ +Application with the Library. The particular version of the Library\ +with which the Combined Work was made is also called the "Linked\ +Version".\ +\ + The "Minimal Corresponding Source" for a Combined Work means the\ +Corresponding Source for the Combined Work, excluding any source code\ +for portions of the Combined Work that, considered in isolation, are\ +based on the Application, and not on the Linked Version.\ +\ + The "Corresponding Application Code" for a Combined Work means the\ +object code and/or source code for the Application, including any data\ +and utility programs needed for reproducing the Combined Work from the\ +Application, but excluding the System Libraries of the Combined Work.\ +\ + 1. Exception to Section 3 of the GNU GPL.\ +\ + You may convey a covered work under sections 3 and 4 of this License\ +without being bound by section 3 of the GNU GPL.\ +\ + 2. Conveying Modified Versions.\ +\ + If you modify a copy of the Library, and, in your modifications, a\ +facility refers to a function or data to be supplied by an Application\ +that uses the facility (other than as an argument passed when the\ +facility is invoked), then you may convey a copy of the modified\ +version:\ +\ + a) under this License, provided that you make a good faith effort to\ + ensure that, in the event an Application does not supply the\ + function or data, the facility still operates, and performs\ + whatever part of its purpose remains meaningful, or\ +\ + b) under the GNU GPL, with none of the additional permissions of\ + this License applicable to that copy.\ +\ + 3. Object Code Incorporating Material from Library Header Files.\ +\ + The object code form of an Application may incorporate material from\ +a header file that is part of the Library. You may convey such object\ +code under terms of your choice, provided that, if the incorporated\ +material is not limited to numerical parameters, data structure\ +layouts and accessors, or small macros, inline functions and templates\ +(ten or fewer lines in length), you do both of the following:\ +\ + a) Give prominent notice with each copy of the object code that the\ + Library is used in it and that the Library and its use are\ + covered by this License.\ +\ + b) Accompany the object code with a copy of the GNU GPL and this license\ + document.\ +\ + 4. Combined Works.\ +\ + You may convey a Combined Work under terms of your choice that,\ +taken together, effectively do not restrict modification of the\ +portions of the Library contained in the Combined Work and reverse\ +engineering for debugging such modifications, if you also do each of\ +the following:\ +\ + a) Give prominent notice with each copy of the Combined Work that\ + the Library is used in it and that the Library and its use are\ + covered by this License.\ +\ + b) Accompany the Combined Work with a copy of the GNU GPL and this license\ + document.\ +\ + c) For a Combined Work that displays copyright notices during\ + execution, include the copyright notice for the Library among\ + these notices, as well as a reference directing the user to the\ + copies of the GNU GPL and this license document.\ +\ + d) Do one of the following:\ +\ + 0) Convey the Minimal Corresponding Source under the terms of this\ + License, and the Corresponding Application Code in a form\ + suitable for, and under terms that permit, the user to\ + recombine or relink the Application with a modified version of\ + the Linked Version to produce a modified Combined Work, in the\ + manner specified by section 6 of the GNU GPL for conveying\ + Corresponding Source.\ +\ + 1) Use a suitable shared library mechanism for linking with the\ + Library. A suitable mechanism is one that (a) uses at run time\ + a copy of the Library already present on the user's computer\ + system, and (b) will operate properly with a modified version\ + of the Library that is interface-compatible with the Linked\ + Version.\ +\ + e) Provide Installation Information, but only if you would otherwise\ + be required to provide such information under section 6 of the\ + GNU GPL, and only to the extent that such information is\ + necessary to install and execute a modified version of the\ + Combined Work produced by recombining or relinking the\ + Application with a modified version of the Linked Version. (If\ + you use option 4d0, the Installation Information must accompany\ + the Minimal Corresponding Source and Corresponding Application\ + Code. If you use option 4d1, you must provide the Installation\ + Information in the manner specified by section 6 of the GNU GPL\ + for conveying Corresponding Source.)\ +\ + 5. Combined Libraries.\ +\ + You may place library facilities that are a work based on the\ +Library side by side in a single library together with other library\ +facilities that are not Applications and are not covered by this\ +License, and convey such a combined library under terms of your\ +choice, if you do both of the following:\ +\ + a) Accompany the combined library with a copy of the same work based\ + on the Library, uncombined with any other library facilities,\ + conveyed under the terms of this License.\ +\ + b) Give prominent notice with the combined library that part of it\ + is a work based on the Library, and explaining where to find the\ + accompanying uncombined form of the same work.\ +\ + 6. Revised Versions of the GNU Lesser General Public License.\ +\ + The Free Software Foundation may publish revised and/or new versions\ +of the GNU Lesser General Public License from time to time. Such new\ +versions will be similar in spirit to the present version, but may\ +differ in detail to address new problems or concerns.\ +\ + Each version is given a distinguishing version number. If the\ +Library as you received it specifies that a certain numbered version\ +of the GNU Lesser General Public License "or any later version"\ +applies to it, you have the option of following the terms and\ +conditions either of that published version or of any later version\ +published by the Free Software Foundation. If the Library as you\ +received it does not specify a version number of the GNU Lesser\ +General Public License, you may choose any version of the GNU Lesser\ +General Public License ever published by the Free Software Foundation.\ +\ + If the Library as you received it specifies that a proxy can decide\ +whether future versions of the GNU Lesser General Public License shall\ +apply, that proxy's public statement of acceptance of any version is\ +permanent authorization for you to choose that version for the\ +Library.\ +\ + \fs34 data\ \ diff --git a/com.robotsandpencils.XcodesApp.Helper/Info.plist b/com.robotsandpencils.XcodesApp.Helper/Info.plist index 54d2d99..2c54701 100644 --- a/com.robotsandpencils.XcodesApp.Helper/Info.plist +++ b/com.robotsandpencils.XcodesApp.Helper/Info.plist @@ -3,7 +3,7 @@ CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleShortVersionString From 4acd676f69dcfe34db3146f57241681f51ce45fa Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Fri, 19 Jan 2024 11:59:19 -0600 Subject: [PATCH 74/86] Bump and fix AppCast action --- .github/workflows/appcast.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/appcast.yml b/.github/workflows/appcast.yml index 19b12f0..6432078 100644 --- a/.github/workflows/appcast.yml +++ b/.github/workflows/appcast.yml @@ -22,10 +22,10 @@ jobs: restore-keys: | ${{ runner.os }}-gems- - - name: Setup Ruby, JRuby and TruffleRuby - uses: ruby/setup-ruby@v1.165.1 - with: - ruby-version: '2.7' + # - name: Setup Ruby, JRuby and TruffleRuby + # uses: ruby/setup-ruby@v1.165.1 + # with: + # ruby-version: '3.0' - name: Bundler 💎 working-directory: AppCast @@ -43,8 +43,8 @@ jobs: run: bundle exec jekyll build - name: Publish 🚀 - uses: JamesIves/github-pages-deploy-action@releases/v3 + uses: JamesIves/github-pages-deploy-action@releases/v4 with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - BRANCH: gh-pages - FOLDER: AppCast/_site + token: ${{ secrets.GITHUB_TOKEN }} + branch: gh-pages + folder: AppCast/_site From dede435725bf2a7fa417c141b8b1ed5b72a89416 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Fri, 19 Jan 2024 12:04:41 -0600 Subject: [PATCH 75/86] update ruby version for appcast action --- .github/workflows/appcast.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/appcast.yml b/.github/workflows/appcast.yml index 6432078..2957ad9 100644 --- a/.github/workflows/appcast.yml +++ b/.github/workflows/appcast.yml @@ -22,10 +22,10 @@ jobs: restore-keys: | ${{ runner.os }}-gems- - # - name: Setup Ruby, JRuby and TruffleRuby - # uses: ruby/setup-ruby@v1.165.1 - # with: - # ruby-version: '3.0' + - name: Setup Ruby, JRuby and TruffleRuby + uses: ruby/setup-ruby@v1.165.1 + with: + ruby-version: '3.0' - name: Bundler 💎 working-directory: AppCast From 9ec90a3ca88bbcc27f489a8c107cc214167af967 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Fri, 19 Jan 2024 14:28:12 -0600 Subject: [PATCH 76/86] Update privilege helper to xcodesOrg and Team --- HelperXPCShared/HelperXPCShared.swift | 4 +- README.md | 4 +- Scripts/uninstall_privileged_helper.sh | 2 +- Xcodes.xcodeproj/project.pbxproj | 72 +++++++++-------- ...robotsandpencils.XcodesApp.Helper.xcscheme | 78 +++++++++++++++++++ Xcodes/Resources/Info.plist | 4 +- .../AuditTokenHack.h | 0 .../AuditTokenHack.m | 0 .../ConnectionVerifier.swift | 0 .../Info.plist | 2 +- .../Logger.swift | 0 .../SimpleXPCApp.LICENSE | 0 .../XPCDelegate.swift | 0 ...odesorg.xcodesapp.Helper-Bridging-Header.h | 0 ...codesorg.xcodesapp.HelperTest.entitlements | 0 .../launchd.plist | 4 +- .../main.swift | 0 17 files changed, 128 insertions(+), 42 deletions(-) create mode 100644 Xcodes.xcodeproj/xcshareddata/xcschemes/com.robotsandpencils.XcodesApp.Helper.xcscheme rename {com.robotsandpencils.XcodesApp.Helper => com.xcodesorg.xcodesapp.Helper}/AuditTokenHack.h (100%) rename {com.robotsandpencils.XcodesApp.Helper => com.xcodesorg.xcodesapp.Helper}/AuditTokenHack.m (100%) rename {com.robotsandpencils.XcodesApp.Helper => com.xcodesorg.xcodesapp.Helper}/ConnectionVerifier.swift (100%) rename {com.robotsandpencils.XcodesApp.Helper => com.xcodesorg.xcodesapp.Helper}/Info.plist (70%) rename {com.robotsandpencils.XcodesApp.Helper => com.xcodesorg.xcodesapp.Helper}/Logger.swift (100%) rename {com.robotsandpencils.XcodesApp.Helper => com.xcodesorg.xcodesapp.Helper}/SimpleXPCApp.LICENSE (100%) rename {com.robotsandpencils.XcodesApp.Helper => com.xcodesorg.xcodesapp.Helper}/XPCDelegate.swift (100%) rename com.robotsandpencils.XcodesApp.Helper/com.robotsandpencils.XcodesApp.Helper-Bridging-Header.h => com.xcodesorg.xcodesapp.Helper/com.xcodesorg.xcodesapp.Helper-Bridging-Header.h (100%) rename com.robotsandpencils.XcodesApp.Helper/com.robotsandpencils.XcodesApp.HelperTest.entitlements => com.xcodesorg.xcodesapp.Helper/com.xcodesorg.xcodesapp.HelperTest.entitlements (100%) rename {com.robotsandpencils.XcodesApp.Helper => com.xcodesorg.xcodesapp.Helper}/launchd.plist (70%) rename {com.robotsandpencils.XcodesApp.Helper => com.xcodesorg.xcodesapp.Helper}/main.swift (100%) diff --git a/HelperXPCShared/HelperXPCShared.swift b/HelperXPCShared/HelperXPCShared.swift index d3825af..80f89b8 100644 --- a/HelperXPCShared/HelperXPCShared.swift +++ b/HelperXPCShared/HelperXPCShared.swift @@ -1,7 +1,7 @@ import Foundation -let machServiceName = "com.robotsandpencils.XcodesApp.Helper" -let clientBundleID = "com.robotsandpencils.XcodesApp" +let machServiceName = "com.xcodesorg.xcodesapp.Helper" +let clientBundleID = "com.xcodesorg.xcodesapp" let subjectOrganizationalUnit = Bundle.main.infoDictionary!["CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT"] as! String @objc(HelperXPCProtocol) diff --git a/README.md b/README.md index c2bfa13..d04f8fc 100644 --- a/README.md +++ b/README.md @@ -97,8 +97,8 @@ Follow the steps below to build and release a new version of Xcodes.app. For any # Update the version number in Xcode and commit the change, if necessary # Question: Did anything in XPCHelper change? -# - com.robotsandpencils.XcodesApp.Helper folder and HelperXPCShared -# - if so, bump the version number in com.robotsandpencils.XcodesApp.Helper target. +# - com.xcodesorg.xcodesapp.Helper folder and HelperXPCShared +# - if so, bump the version number in com.xcodesorg.xcodesapp.Helper target. # Note: you do not have to bump the version number if nothing has changed. # Note2: If you do bump the version, the end user, must re-install the XPCHelper and give permission again. diff --git a/Scripts/uninstall_privileged_helper.sh b/Scripts/uninstall_privileged_helper.sh index c3ce84b..dc726eb 100755 --- a/Scripts/uninstall_privileged_helper.sh +++ b/Scripts/uninstall_privileged_helper.sh @@ -1,6 +1,6 @@ #!/bin/bash -PRIVILEGED_HELPER_LABEL=com.robotsandpencils.XcodesApp.Helper +PRIVILEGED_HELPER_LABEL=com.xcodesorg.xcodesapp.Helper sudo rm /Library/PrivilegedHelperTools/$PRIVILEGED_HELPER_LABEL sudo rm /Library/LaunchDaemons/$PRIVILEGED_HELPER_LABEL.plist diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 4d34652..31e2142 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -49,7 +49,6 @@ CA9FF88125955C7000E47BAF /* AvailableXcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9FF88025955C7000E47BAF /* AvailableXcode.swift */; }; CA9FF8872595607900E47BAF /* InstalledXcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9FF8862595607900E47BAF /* InstalledXcode.swift */; }; CA9FF8B12595967A00E47BAF /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9FF8B02595967A00E47BAF /* main.swift */; }; - CA9FF8BC259596CB00E47BAF /* com.robotsandpencils.XcodesApp.Helper in Copy Helper */ = {isa = PBXBuildFile; fileRef = CA9FF8AE2595967A00E47BAF /* com.robotsandpencils.XcodesApp.Helper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; CA9FF8CF25959A9700E47BAF /* HelperXPCShared.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9FF8CE25959A9700E47BAF /* HelperXPCShared.swift */; }; CA9FF8D025959A9700E47BAF /* HelperXPCShared.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9FF8CE25959A9700E47BAF /* HelperXPCShared.swift */; }; CA9FF8DB25959B4000E47BAF /* XPCDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9FF8DA25959B4000E47BAF /* XPCDelegate.swift */; }; @@ -135,6 +134,7 @@ E8E98A9025D8631800EC89A0 /* InstallationStepRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFBC3FF259AC17F00E2A3D8 /* InstallationStepRowView.swift */; }; E8E98A9625D863D700EC89A0 /* InstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */; }; 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 */; }; /* End PBXBuildFile section */ @@ -171,7 +171,7 @@ dstPath = Contents/Library/LaunchServices; dstSubfolderSpec = 1; files = ( - CA9FF8BC259596CB00E47BAF /* com.robotsandpencils.XcodesApp.Helper in Copy Helper */, + E8FA00542B5B109800769CE0 /* com.xcodesorg.xcodesapp.Helper in Copy Helper */, ); name = "Copy Helper"; runOnlyForDeploymentPostprocessing = 0; @@ -236,7 +236,7 @@ CA9FF87A2595293E00E47BAF /* DataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataSource.swift; sourceTree = ""; }; CA9FF88025955C7000E47BAF /* AvailableXcode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvailableXcode.swift; sourceTree = ""; }; CA9FF8862595607900E47BAF /* InstalledXcode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstalledXcode.swift; sourceTree = ""; }; - CA9FF8AE2595967A00E47BAF /* com.robotsandpencils.XcodesApp.Helper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = com.robotsandpencils.XcodesApp.Helper; sourceTree = BUILT_PRODUCTS_DIR; }; + CA9FF8AE2595967A00E47BAF /* com.xcodesorg.xcodesapp.Helper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = com.xcodesorg.xcodesapp.Helper; sourceTree = BUILT_PRODUCTS_DIR; }; CA9FF8B02595967A00E47BAF /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; CA9FF8C22595988B00E47BAF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; CA9FF8C32595989800E47BAF /* launchd.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = launchd.plist; sourceTree = ""; }; @@ -245,8 +245,8 @@ CA9FF8DF25959BAA00E47BAF /* ConnectionVerifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionVerifier.swift; sourceTree = ""; }; CA9FF8E425959BB800E47BAF /* AuditTokenHack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AuditTokenHack.h; sourceTree = ""; }; CA9FF8E525959BB800E47BAF /* AuditTokenHack.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AuditTokenHack.m; sourceTree = ""; }; - CA9FF8EA25959BDD00E47BAF /* com.robotsandpencils.XcodesApp.Helper-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "com.robotsandpencils.XcodesApp.Helper-Bridging-Header.h"; sourceTree = ""; }; - CA9FF9052595A28400E47BAF /* com.robotsandpencils.XcodesApp.HelperTest.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = com.robotsandpencils.XcodesApp.HelperTest.entitlements; sourceTree = ""; }; + CA9FF8EA25959BDD00E47BAF /* com.xcodesorg.xcodesapp.Helper-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "com.xcodesorg.xcodesapp.Helper-Bridging-Header.h"; sourceTree = ""; }; + CA9FF9052595A28400E47BAF /* com.xcodesorg.xcodesapp.HelperTest.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = com.xcodesorg.xcodesapp.HelperTest.entitlements; sourceTree = ""; }; CA9FF9252595A7EB00E47BAF /* Scripts */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Scripts; sourceTree = ""; }; CA9FF9352595B44700E47BAF /* HelperClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelperClient.swift; sourceTree = ""; }; CAA1CB34255A5AD5003FD669 /* SignInCredentialsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInCredentialsView.swift; sourceTree = ""; }; @@ -419,22 +419,22 @@ path = About; sourceTree = ""; }; - CA9FF8AF2595967A00E47BAF /* com.robotsandpencils.XcodesApp.Helper */ = { + CA9FF8AF2595967A00E47BAF /* com.xcodesorg.xcodesapp.Helper */ = { isa = PBXGroup; children = ( CA9FF8E425959BB800E47BAF /* AuditTokenHack.h */, CA9FF8E525959BB800E47BAF /* AuditTokenHack.m */, - CA9FF8EA25959BDD00E47BAF /* com.robotsandpencils.XcodesApp.Helper-Bridging-Header.h */, + CA9FF8EA25959BDD00E47BAF /* com.xcodesorg.xcodesapp.Helper-Bridging-Header.h */, CA9FF8DF25959BAA00E47BAF /* ConnectionVerifier.swift */, CA42DD7225AEB04300BC0B0C /* Logger.swift */, CA9FF8B02595967A00E47BAF /* main.swift */, CA9FF8DA25959B4000E47BAF /* XPCDelegate.swift */, CA9FF8C22595988B00E47BAF /* Info.plist */, CA9FF8C32595989800E47BAF /* launchd.plist */, - CA9FF9052595A28400E47BAF /* com.robotsandpencils.XcodesApp.HelperTest.entitlements */, + CA9FF9052595A28400E47BAF /* com.xcodesorg.xcodesapp.HelperTest.entitlements */, CAFBDBA525990C76003DCC5A /* SimpleXPCApp.LICENSE */, ); - path = com.robotsandpencils.XcodesApp.Helper; + path = com.xcodesorg.xcodesapp.Helper; sourceTree = ""; }; CA9FF8CD25959A7600E47BAF /* HelperXPCShared */ = { @@ -571,7 +571,7 @@ CA538A0C255A4F1A00E64DD7 /* AppleAPI */, CAD2E7A02449574E00113D76 /* Xcodes */, CAD2E7B62449575100113D76 /* XcodesTests */, - CA9FF8AF2595967A00E47BAF /* com.robotsandpencils.XcodesApp.Helper */, + CA9FF8AF2595967A00E47BAF /* com.xcodesorg.xcodesapp.Helper */, CA9FF8CD25959A7600E47BAF /* HelperXPCShared */, CAD2E79F2449574E00113D76 /* Products */, CA538A12255A4F7C00E64DD7 /* Frameworks */, @@ -584,7 +584,7 @@ children = ( CAD2E79E2449574E00113D76 /* Xcodes.app */, CAD2E7B32449575100113D76 /* XcodesTests.xctest */, - CA9FF8AE2595967A00E47BAF /* com.robotsandpencils.XcodesApp.Helper */, + CA9FF8AE2595967A00E47BAF /* com.xcodesorg.xcodesapp.Helper */, ); name = Products; sourceTree = ""; @@ -663,9 +663,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - CA9FF8AD2595967A00E47BAF /* com.robotsandpencils.XcodesApp.Helper */ = { + CA9FF8AD2595967A00E47BAF /* com.xcodesorg.xcodesapp.Helper */ = { isa = PBXNativeTarget; - buildConfigurationList = CA9FF8B52595967A00E47BAF /* Build configuration list for PBXNativeTarget "com.robotsandpencils.XcodesApp.Helper" */; + buildConfigurationList = CA9FF8B52595967A00E47BAF /* Build configuration list for PBXNativeTarget "com.xcodesorg.xcodesapp.Helper" */; buildPhases = ( CA9FF8AA2595967A00E47BAF /* Sources */, CA9FF8AB2595967A00E47BAF /* Frameworks */, @@ -675,9 +675,9 @@ ); dependencies = ( ); - name = com.robotsandpencils.XcodesApp.Helper; + name = com.xcodesorg.xcodesapp.Helper; productName = com.robotsandpencils.XcodesApp.Helper; - productReference = CA9FF8AE2595967A00E47BAF /* com.robotsandpencils.XcodesApp.Helper */; + productReference = CA9FF8AE2595967A00E47BAF /* com.xcodesorg.xcodesapp.Helper */; productType = "com.apple.product-type.tool"; }; CAD2E79D2449574E00113D76 /* Xcodes */ = { @@ -805,7 +805,7 @@ targets = ( CAD2E79D2449574E00113D76 /* Xcodes */, CAD2E7B22449575100113D76 /* XcodesTests */, - CA9FF8AD2595967A00E47BAF /* com.robotsandpencils.XcodesApp.Helper */, + CA9FF8AD2595967A00E47BAF /* com.xcodesorg.xcodesapp.Helper */, ); }; /* End PBXProject section */ @@ -990,7 +990,7 @@ /* Begin PBXTargetDependency section */ CA9FF8BA259596A000E47BAF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = CA9FF8AD2595967A00E47BAF /* com.robotsandpencils.XcodesApp.Helper */; + target = CA9FF8AD2595967A00E47BAF /* com.xcodesorg.xcodesapp.Helper */; targetProxy = CA9FF8B9259596A000E47BAF /* PBXContainerItemProxy */; }; CAD2E7B52449575100113D76 /* PBXTargetDependency */ = { @@ -1034,7 +1034,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = PBH8V487HB; + CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -1069,6 +1069,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; CODE_SIGN_ENTITLEMENTS = Xcodes/Resources/XcodesTest.entitlements; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Manual; @@ -1120,22 +1121,23 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; CODE_SIGN_STYLE = Automatic; CREATE_INFOPLIST_SECTION_IN_BINARY = YES; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "$(SRCROOT)/$(TARGET_NAME)/Info.plist"; - MARKETING_VERSION = 1.0.3; + MARKETING_VERSION = 2.0.0; OTHER_LDFLAGS = ( "-sectcreate", __TEXT, __launchd_plist, "$(SRCROOT)/${TARGET_NAME}/launchd.plist", ); - PRODUCT_BUNDLE_IDENTIFIER = com.robotsandpencils.XcodesApp.Helper; + PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp.Helper; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = "com.robotsandpencils.XcodesApp.Helper/com.robotsandpencils.XcodesApp.Helper-Bridging-Header.h"; + SWIFT_OBJC_BRIDGING_HEADER = "com.xcodesorg.xcodesapp.Helper/com.xcodesorg.xcodesapp.Helper-Bridging-Header.h"; SWIFT_VERSION = 5.0; }; name = Debug; @@ -1144,24 +1146,25 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CODE_SIGN_ENTITLEMENTS = com.robotsandpencils.XcodesApp.Helper/com.robotsandpencils.XcodesApp.HelperTest.entitlements; + CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; + CODE_SIGN_ENTITLEMENTS = com.xcodesorg.xcodesapp.Helper/com.xcodesorg.xcodesapp.HelperTest.entitlements; CODE_SIGN_STYLE = Manual; CREATE_INFOPLIST_SECTION_IN_BINARY = YES; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; INFOPLIST_FILE = "$(SRCROOT)/$(TARGET_NAME)/Info.plist"; - MARKETING_VERSION = 1.0.3; + MARKETING_VERSION = 2.0.0; OTHER_LDFLAGS = ( "-sectcreate", __TEXT, __launchd_plist, "$(SRCROOT)/${TARGET_NAME}/launchd.plist", ); - PRODUCT_BUNDLE_IDENTIFIER = com.robotsandpencils.XcodesApp.Helper; + PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp.Helper; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = "com.robotsandpencils.XcodesApp.Helper/com.robotsandpencils.XcodesApp.Helper-Bridging-Header.h"; + SWIFT_OBJC_BRIDGING_HEADER = "com.xcodesorg.xcodesapp.Helper/com.xcodesorg.xcodesapp.Helper-Bridging-Header.h"; SWIFT_VERSION = 5.0; }; name = Test; @@ -1170,22 +1173,23 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; CODE_SIGN_STYLE = Automatic; CREATE_INFOPLIST_SECTION_IN_BINARY = YES; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "$(SRCROOT)/$(TARGET_NAME)/Info.plist"; - MARKETING_VERSION = 1.0.3; + MARKETING_VERSION = 2.0.0; OTHER_LDFLAGS = ( "-sectcreate", __TEXT, __launchd_plist, "$(SRCROOT)/${TARGET_NAME}/launchd.plist", ); - PRODUCT_BUNDLE_IDENTIFIER = com.robotsandpencils.XcodesApp.Helper; + PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp.Helper; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = "com.robotsandpencils.XcodesApp.Helper/com.robotsandpencils.XcodesApp.Helper-Bridging-Header.h"; + SWIFT_OBJC_BRIDGING_HEADER = "com.xcodesorg.xcodesapp.Helper/com.xcodesorg.xcodesapp.Helper-Bridging-Header.h"; SWIFT_VERSION = 5.0; }; name = Release; @@ -1223,7 +1227,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = PBH8V487HB; + CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -1287,7 +1291,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = PBH8V487HB; + CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; @@ -1315,7 +1319,9 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + 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 = 19; @@ -1340,7 +1346,9 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; CODE_SIGN_ENTITLEMENTS = Xcodes/Resources/Xcodes.entitlements; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 19; @@ -1398,7 +1406,7 @@ "@loader_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - PRODUCT_BUNDLE_IDENTIFIER = com.robotsandpencils.XcodesAppTests; + PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp.XcodesAppTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Xcodes.app/Contents/MacOS/Xcodes"; @@ -1408,7 +1416,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - CA9FF8B52595967A00E47BAF /* Build configuration list for PBXNativeTarget "com.robotsandpencils.XcodesApp.Helper" */ = { + CA9FF8B52595967A00E47BAF /* Build configuration list for PBXNativeTarget "com.xcodesorg.xcodesapp.Helper" */ = { isa = XCConfigurationList; buildConfigurations = ( CA9FF8B22595967A00E47BAF /* Debug */, diff --git a/Xcodes.xcodeproj/xcshareddata/xcschemes/com.robotsandpencils.XcodesApp.Helper.xcscheme b/Xcodes.xcodeproj/xcshareddata/xcschemes/com.robotsandpencils.XcodesApp.Helper.xcscheme new file mode 100644 index 0000000..19ae1c9 --- /dev/null +++ b/Xcodes.xcodeproj/xcshareddata/xcschemes/com.robotsandpencils.XcodesApp.Helper.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Xcodes/Resources/Info.plist b/Xcodes/Resources/Info.plist index 733c89a..8e15e9d 100644 --- a/Xcodes/Resources/Info.plist +++ b/Xcodes/Resources/Info.plist @@ -34,8 +34,8 @@ SMPrivilegedExecutables - com.robotsandpencils.XcodesApp.Helper - identifier "com.robotsandpencils.XcodesApp.Helper" and info [CFBundleShortVersionString] >= "1.0.0" and anchor apple generic and certificate leaf[subject.OU] = "$(CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT)" + com.xcodesorg.xcodesapp.Helper + identifier "com.xcodesorg.xcodesapp.Helper" and info [CFBundleShortVersionString] >= "1.0.0" and anchor apple generic and certificate leaf[subject.OU] = "$(CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT)" SUFeedURL https://www.xcodes.app/appcast.xml diff --git a/com.robotsandpencils.XcodesApp.Helper/AuditTokenHack.h b/com.xcodesorg.xcodesapp.Helper/AuditTokenHack.h similarity index 100% rename from com.robotsandpencils.XcodesApp.Helper/AuditTokenHack.h rename to com.xcodesorg.xcodesapp.Helper/AuditTokenHack.h diff --git a/com.robotsandpencils.XcodesApp.Helper/AuditTokenHack.m b/com.xcodesorg.xcodesapp.Helper/AuditTokenHack.m similarity index 100% rename from com.robotsandpencils.XcodesApp.Helper/AuditTokenHack.m rename to com.xcodesorg.xcodesapp.Helper/AuditTokenHack.m diff --git a/com.robotsandpencils.XcodesApp.Helper/ConnectionVerifier.swift b/com.xcodesorg.xcodesapp.Helper/ConnectionVerifier.swift similarity index 100% rename from com.robotsandpencils.XcodesApp.Helper/ConnectionVerifier.swift rename to com.xcodesorg.xcodesapp.Helper/ConnectionVerifier.swift diff --git a/com.robotsandpencils.XcodesApp.Helper/Info.plist b/com.xcodesorg.xcodesapp.Helper/Info.plist similarity index 70% rename from com.robotsandpencils.XcodesApp.Helper/Info.plist rename to com.xcodesorg.xcodesapp.Helper/Info.plist index 2c54701..feec3e0 100644 --- a/com.robotsandpencils.XcodesApp.Helper/Info.plist +++ b/com.xcodesorg.xcodesapp.Helper/Info.plist @@ -12,7 +12,7 @@ $(CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT) SMAuthorizedClients - identifier "com.robotsandpencils.XcodesApp" and info [CFBundleShortVersionString] >= "1.0.0" and anchor apple generic and certificate leaf[subject.OU] = "$(CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT)" + identifier "com.xcodesorg.xcodesapp" and info [CFBundleShortVersionString] >= "1.0.0" and anchor apple generic and certificate leaf[subject.OU] = "$(CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT)" diff --git a/com.robotsandpencils.XcodesApp.Helper/Logger.swift b/com.xcodesorg.xcodesapp.Helper/Logger.swift similarity index 100% rename from com.robotsandpencils.XcodesApp.Helper/Logger.swift rename to com.xcodesorg.xcodesapp.Helper/Logger.swift diff --git a/com.robotsandpencils.XcodesApp.Helper/SimpleXPCApp.LICENSE b/com.xcodesorg.xcodesapp.Helper/SimpleXPCApp.LICENSE similarity index 100% rename from com.robotsandpencils.XcodesApp.Helper/SimpleXPCApp.LICENSE rename to com.xcodesorg.xcodesapp.Helper/SimpleXPCApp.LICENSE diff --git a/com.robotsandpencils.XcodesApp.Helper/XPCDelegate.swift b/com.xcodesorg.xcodesapp.Helper/XPCDelegate.swift similarity index 100% rename from com.robotsandpencils.XcodesApp.Helper/XPCDelegate.swift rename to com.xcodesorg.xcodesapp.Helper/XPCDelegate.swift diff --git a/com.robotsandpencils.XcodesApp.Helper/com.robotsandpencils.XcodesApp.Helper-Bridging-Header.h b/com.xcodesorg.xcodesapp.Helper/com.xcodesorg.xcodesapp.Helper-Bridging-Header.h similarity index 100% rename from com.robotsandpencils.XcodesApp.Helper/com.robotsandpencils.XcodesApp.Helper-Bridging-Header.h rename to com.xcodesorg.xcodesapp.Helper/com.xcodesorg.xcodesapp.Helper-Bridging-Header.h diff --git a/com.robotsandpencils.XcodesApp.Helper/com.robotsandpencils.XcodesApp.HelperTest.entitlements b/com.xcodesorg.xcodesapp.Helper/com.xcodesorg.xcodesapp.HelperTest.entitlements similarity index 100% rename from com.robotsandpencils.XcodesApp.Helper/com.robotsandpencils.XcodesApp.HelperTest.entitlements rename to com.xcodesorg.xcodesapp.Helper/com.xcodesorg.xcodesapp.HelperTest.entitlements diff --git a/com.robotsandpencils.XcodesApp.Helper/launchd.plist b/com.xcodesorg.xcodesapp.Helper/launchd.plist similarity index 70% rename from com.robotsandpencils.XcodesApp.Helper/launchd.plist rename to com.xcodesorg.xcodesapp.Helper/launchd.plist index 29f2559..c148439 100644 --- a/com.robotsandpencils.XcodesApp.Helper/launchd.plist +++ b/com.xcodesorg.xcodesapp.Helper/launchd.plist @@ -3,10 +3,10 @@ Label - com.robotsandpencils.XcodesApp.Helper + com.xcodesorg.xcodesapp.Helper MachServices - com.robotsandpencils.XcodesApp.Helper + com.xcodesorg.xcodesapp.Helper diff --git a/com.robotsandpencils.XcodesApp.Helper/main.swift b/com.xcodesorg.xcodesapp.Helper/main.swift similarity index 100% rename from com.robotsandpencils.XcodesApp.Helper/main.swift rename to com.xcodesorg.xcodesapp.Helper/main.swift From 99c4b49f28ac2d9e430cc857aef578440eb482ce Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Fri, 19 Jan 2024 15:36:18 -0600 Subject: [PATCH 77/86] Add Sponsor Button --- Xcodes/Frontend/About/AboutView.swift | 15 ++++++++++++--- Xcodes/Frontend/XcodeList/BottomStatusBar.swift | 9 +++++++++ Xcodes/Resources/Localizable.xcstrings | 3 +++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Xcodes/Frontend/About/AboutView.swift b/Xcodes/Frontend/About/AboutView.swift index 4967e2e..fb048da 100644 --- a/Xcodes/Frontend/About/AboutView.swift +++ b/Xcodes/Frontend/About/AboutView.swift @@ -45,9 +45,18 @@ struct AboutView: View { } .buttonStyle(LinkButtonStyle()) } - - Text(Bundle.main.humanReadableCopyright!) - .font(.footnote) + HStack { + Text(Bundle.main.humanReadableCopyright!) + .font(.footnote) + Button(action: { + openURL(URL(string: "https://opencollective.com/xcodesapp")!) + }) { + HStack { + Image(systemName: "heart.circle") + Text("SponsorXcodes") + } + } + } } } .padding() diff --git a/Xcodes/Frontend/XcodeList/BottomStatusBar.swift b/Xcodes/Frontend/XcodeList/BottomStatusBar.swift index cd38c3b..062b0dc 100644 --- a/Xcodes/Frontend/XcodeList/BottomStatusBar.swift +++ b/Xcodes/Frontend/XcodeList/BottomStatusBar.swift @@ -11,6 +11,7 @@ import SwiftUI struct BottomStatusModifier: ViewModifier { @EnvironmentObject var appState: AppState + @SwiftUI.Environment(\.openURL) var openURL: OpenURLAction func body(content: Content) -> some View { VStack(spacing: 0) { @@ -21,6 +22,14 @@ struct BottomStatusModifier: ViewModifier { Text(appState.bottomStatusBarMessage) .font(.subheadline) Spacer() + Button(action: { + openURL(URL(string: "https://opencollective.com/xcodesapp")!) + }) { + HStack { + Image(systemName: "heart.circle") + Text("SponsorXcodes") + } + } Text(Bundle.main.shortVersion!) .font(.subheadline) } diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index 1b0fa25..599d694 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -17251,6 +17251,9 @@ } } }, + "SponsorXcodes" : { + "extractionState" : "manual" + }, "StopInstallation" : { "localizations" : { "ca" : { From f1604538f36f44eb0ec7fd89a705c1342c01ad0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:37:03 +0000 Subject: [PATCH 78/86] Bump ruby/setup-ruby from 1.165.1 to 1.169.0 Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.165.1 to 1.169.0. - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Commits](https://github.com/ruby/setup-ruby/compare/v1.165.1...v1.169.0) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/appcast.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appcast.yml b/.github/workflows/appcast.yml index b12fdeb..4cd9181 100644 --- a/.github/workflows/appcast.yml +++ b/.github/workflows/appcast.yml @@ -23,7 +23,7 @@ jobs: ${{ runner.os }}-gems- - name: Setup Ruby, JRuby and TruffleRuby - uses: ruby/setup-ruby@v1.165.1 + uses: ruby/setup-ruby@v1.169.0 with: ruby-version: '3.0' From 36be5fd743c83d2725057d5fda725a928b40f488 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Tue, 23 Jan 2024 22:54:40 -0600 Subject: [PATCH 79/86] Bump version --- Xcodes.xcodeproj/project.pbxproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 31e2142..254cf60 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -1074,7 +1074,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 19; + CURRENT_PROJECT_VERSION = 21; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; @@ -1324,7 +1324,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 19; + CURRENT_PROJECT_VERSION = 21; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; @@ -1351,7 +1351,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 19; + CURRENT_PROJECT_VERSION = 21; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; From 0252bf1fe05d688fb1b6dcc79701f0406601c542 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Thu, 25 Jan 2024 22:01:40 -0600 Subject: [PATCH 80/86] clean up localization for support link --- Xcodes/Frontend/About/AboutView.swift | 2 +- .../Frontend/XcodeList/BottomStatusBar.swift | 2 +- Xcodes/Resources/Licenses.rtf | 172 +----------------- Xcodes/Resources/Localizable.xcstrings | 26 ++- 4 files changed, 26 insertions(+), 176 deletions(-) diff --git a/Xcodes/Frontend/About/AboutView.swift b/Xcodes/Frontend/About/AboutView.swift index fb048da..b913539 100644 --- a/Xcodes/Frontend/About/AboutView.swift +++ b/Xcodes/Frontend/About/AboutView.swift @@ -53,7 +53,7 @@ struct AboutView: View { }) { HStack { Image(systemName: "heart.circle") - Text("SponsorXcodes") + Text("Support.Xcodes") } } } diff --git a/Xcodes/Frontend/XcodeList/BottomStatusBar.swift b/Xcodes/Frontend/XcodeList/BottomStatusBar.swift index 062b0dc..18eaf2d 100644 --- a/Xcodes/Frontend/XcodeList/BottomStatusBar.swift +++ b/Xcodes/Frontend/XcodeList/BottomStatusBar.swift @@ -27,7 +27,7 @@ struct BottomStatusModifier: ViewModifier { }) { HStack { Image(systemName: "heart.circle") - Text("SponsorXcodes") + Text("Support.Xcodes") } } Text(Bundle.main.shortVersion!) diff --git a/Xcodes/Resources/Licenses.rtf b/Xcodes/Resources/Licenses.rtf index c0fb5ad..079a137 100644 --- a/Xcodes/Resources/Licenses.rtf +++ b/Xcodes/Resources/Licenses.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf2758 +{\rtf1\ansi\ansicpg1252\cocoartf2759 \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fnil\fcharset0 .SFNS-Regular;} {\colortbl;\red255\green255\blue255;} {\*\expandedcolortbl;;} @@ -595,176 +595,6 @@ SOFTWARE.\ \ \ -\fs34 unxip\ -\ - -\fs26 GNU LESSER GENERAL PUBLIC LICENSE\ - Version 3, 29 June 2007\ -\ - Copyright (C) 2007 Free Software Foundation, Inc. \ - Everyone is permitted to copy and distribute verbatim copies\ - of this license document, but changing it is not allowed.\ -\ -\ - This version of the GNU Lesser General Public License incorporates\ -the terms and conditions of version 3 of the GNU General Public\ -License, supplemented by the additional permissions listed below.\ -\ - 0. Additional Definitions.\ -\ - As used herein, "this License" refers to version 3 of the GNU Lesser\ -General Public License, and the "GNU GPL" refers to version 3 of the GNU\ -General Public License.\ -\ - "The Library" refers to a covered work governed by this License,\ -other than an Application or a Combined Work as defined below.\ -\ - An "Application" is any work that makes use of an interface provided\ -by the Library, but which is not otherwise based on the Library.\ -Defining a subclass of a class defined by the Library is deemed a mode\ -of using an interface provided by the Library.\ -\ - A "Combined Work" is a work produced by combining or linking an\ -Application with the Library. The particular version of the Library\ -with which the Combined Work was made is also called the "Linked\ -Version".\ -\ - The "Minimal Corresponding Source" for a Combined Work means the\ -Corresponding Source for the Combined Work, excluding any source code\ -for portions of the Combined Work that, considered in isolation, are\ -based on the Application, and not on the Linked Version.\ -\ - The "Corresponding Application Code" for a Combined Work means the\ -object code and/or source code for the Application, including any data\ -and utility programs needed for reproducing the Combined Work from the\ -Application, but excluding the System Libraries of the Combined Work.\ -\ - 1. Exception to Section 3 of the GNU GPL.\ -\ - You may convey a covered work under sections 3 and 4 of this License\ -without being bound by section 3 of the GNU GPL.\ -\ - 2. Conveying Modified Versions.\ -\ - If you modify a copy of the Library, and, in your modifications, a\ -facility refers to a function or data to be supplied by an Application\ -that uses the facility (other than as an argument passed when the\ -facility is invoked), then you may convey a copy of the modified\ -version:\ -\ - a) under this License, provided that you make a good faith effort to\ - ensure that, in the event an Application does not supply the\ - function or data, the facility still operates, and performs\ - whatever part of its purpose remains meaningful, or\ -\ - b) under the GNU GPL, with none of the additional permissions of\ - this License applicable to that copy.\ -\ - 3. Object Code Incorporating Material from Library Header Files.\ -\ - The object code form of an Application may incorporate material from\ -a header file that is part of the Library. You may convey such object\ -code under terms of your choice, provided that, if the incorporated\ -material is not limited to numerical parameters, data structure\ -layouts and accessors, or small macros, inline functions and templates\ -(ten or fewer lines in length), you do both of the following:\ -\ - a) Give prominent notice with each copy of the object code that the\ - Library is used in it and that the Library and its use are\ - covered by this License.\ -\ - b) Accompany the object code with a copy of the GNU GPL and this license\ - document.\ -\ - 4. Combined Works.\ -\ - You may convey a Combined Work under terms of your choice that,\ -taken together, effectively do not restrict modification of the\ -portions of the Library contained in the Combined Work and reverse\ -engineering for debugging such modifications, if you also do each of\ -the following:\ -\ - a) Give prominent notice with each copy of the Combined Work that\ - the Library is used in it and that the Library and its use are\ - covered by this License.\ -\ - b) Accompany the Combined Work with a copy of the GNU GPL and this license\ - document.\ -\ - c) For a Combined Work that displays copyright notices during\ - execution, include the copyright notice for the Library among\ - these notices, as well as a reference directing the user to the\ - copies of the GNU GPL and this license document.\ -\ - d) Do one of the following:\ -\ - 0) Convey the Minimal Corresponding Source under the terms of this\ - License, and the Corresponding Application Code in a form\ - suitable for, and under terms that permit, the user to\ - recombine or relink the Application with a modified version of\ - the Linked Version to produce a modified Combined Work, in the\ - manner specified by section 6 of the GNU GPL for conveying\ - Corresponding Source.\ -\ - 1) Use a suitable shared library mechanism for linking with the\ - Library. A suitable mechanism is one that (a) uses at run time\ - a copy of the Library already present on the user's computer\ - system, and (b) will operate properly with a modified version\ - of the Library that is interface-compatible with the Linked\ - Version.\ -\ - e) Provide Installation Information, but only if you would otherwise\ - be required to provide such information under section 6 of the\ - GNU GPL, and only to the extent that such information is\ - necessary to install and execute a modified version of the\ - Combined Work produced by recombining or relinking the\ - Application with a modified version of the Linked Version. (If\ - you use option 4d0, the Installation Information must accompany\ - the Minimal Corresponding Source and Corresponding Application\ - Code. If you use option 4d1, you must provide the Installation\ - Information in the manner specified by section 6 of the GNU GPL\ - for conveying Corresponding Source.)\ -\ - 5. Combined Libraries.\ -\ - You may place library facilities that are a work based on the\ -Library side by side in a single library together with other library\ -facilities that are not Applications and are not covered by this\ -License, and convey such a combined library under terms of your\ -choice, if you do both of the following:\ -\ - a) Accompany the combined library with a copy of the same work based\ - on the Library, uncombined with any other library facilities,\ - conveyed under the terms of this License.\ -\ - b) Give prominent notice with the combined library that part of it\ - is a work based on the Library, and explaining where to find the\ - accompanying uncombined form of the same work.\ -\ - 6. Revised Versions of the GNU Lesser General Public License.\ -\ - The Free Software Foundation may publish revised and/or new versions\ -of the GNU Lesser General Public License from time to time. Such new\ -versions will be similar in spirit to the present version, but may\ -differ in detail to address new problems or concerns.\ -\ - Each version is given a distinguishing version number. If the\ -Library as you received it specifies that a certain numbered version\ -of the GNU Lesser General Public License "or any later version"\ -applies to it, you have the option of following the terms and\ -conditions either of that published version or of any later version\ -published by the Free Software Foundation. If the Library as you\ -received it does not specify a version number of the GNU Lesser\ -General Public License, you may choose any version of the GNU Lesser\ -General Public License ever published by the Free Software Foundation.\ -\ - If the Library as you received it specifies that a proxy can decide\ -whether future versions of the GNU Lesser General Public License shall\ -apply, that proxy's public statement of acceptance of any version is\ -permanent authorization for you to choose that version for the\ -Library.\ -\ - \fs34 data\ \ diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index be7c1f5..74a637f 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -8282,6 +8282,12 @@ "value" : "Info" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Info" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -8502,6 +8508,12 @@ "value" : "Installieren" } }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Install" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -17359,9 +17371,6 @@ } } }, - "SponsorXcodes" : { - "extractionState" : "manual" - }, "StopInstallation" : { "localizations" : { "ca" : { @@ -17474,6 +17483,17 @@ } } }, + "Support.Xcodes" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Support Xcodes" + } + } + } + }, "TrashingArchive" : { "extractionState" : "manual", "localizations" : { From 9d7f122d11308059eee29d49dacd99b2b9bd2db1 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Thu, 25 Jan 2024 22:04:11 -0600 Subject: [PATCH 81/86] Bump version: 2.0 Release! --- Xcodes.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 254cf60..1618639 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -1074,7 +1074,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 21; + CURRENT_PROJECT_VERSION = 22; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; @@ -1085,7 +1085,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 2.0.0; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1324,7 +1324,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 21; + CURRENT_PROJECT_VERSION = 22; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; @@ -1335,7 +1335,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 2.0.0; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; SWIFT_VERSION = 5.0; @@ -1351,7 +1351,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 21; + CURRENT_PROJECT_VERSION = 22; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; @@ -1362,7 +1362,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 2.0.0; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; SWIFT_VERSION = 5.0; From 0ad800a5db2ab64f0922a09cb642eecc28f436c4 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Thu, 25 Jan 2024 22:10:52 -0600 Subject: [PATCH 82/86] Guess we have to set the code sign identity now? --- Xcodes.xcodeproj/project.pbxproj | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 1618639..4658c5d 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -1080,6 +1080,7 @@ ENABLE_HARDENED_RUNTIME = NO; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = Xcodes/Resources/Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", @@ -1330,6 +1331,7 @@ ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = Xcodes/Resources/Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", @@ -1348,7 +1350,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; CODE_SIGN_ENTITLEMENTS = Xcodes/Resources/Xcodes.entitlements; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 22; @@ -1357,6 +1359,7 @@ ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = Xcodes/Resources/Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", From 66a60fcf19dd2efe38378e85ac4b57f1b394c1c5 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Thu, 25 Jan 2024 22:50:23 -0600 Subject: [PATCH 83/86] missed code sign identity? --- Xcodes.xcodeproj/project.pbxproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 4658c5d..a01d604 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -1175,6 +1175,7 @@ buildSettings = { CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CODE_SIGNING_SUBJECT_ORGANIZATIONAL_UNIT = ZU6GR6B2FY; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; CREATE_INFOPLIST_SECTION_IN_BINARY = YES; DEVELOPMENT_TEAM = ZU6GR6B2FY; @@ -1399,6 +1400,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = ZU6GR6B2FY; From da6bfc775c4870def264242151fcfdc0b273abd9 Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Thu, 25 Jan 2024 22:50:56 -0600 Subject: [PATCH 84/86] update to 2.0.2 --- Xcodes.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index a01d604..4523900 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -1074,7 +1074,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 22; + CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; @@ -1086,7 +1086,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 2.0.1; + MARKETING_VERSION = 2.0.2; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1326,7 +1326,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 22; + CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; @@ -1338,7 +1338,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 2.0.1; + MARKETING_VERSION = 2.0.2; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; SWIFT_VERSION = 5.0; @@ -1354,7 +1354,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 22; + CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_ASSET_PATHS = "\"Xcodes/Preview Content\""; DEVELOPMENT_TEAM = ZU6GR6B2FY; ENABLE_HARDENED_RUNTIME = YES; @@ -1366,7 +1366,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 2.0.1; + MARKETING_VERSION = 2.0.2; PRODUCT_BUNDLE_IDENTIFIER = com.xcodesorg.xcodesapp; PRODUCT_NAME = Xcodes; SWIFT_VERSION = 5.0; From 71ed9a361792c8d5d92272aae666874f43967dcb Mon Sep 17 00:00:00 2001 From: Matt Kiazyk Date: Thu, 25 Jan 2024 23:27:26 -0600 Subject: [PATCH 85/86] Update readme --- README.md | 17 ++++++++++++++--- screenshot_dark.png | Bin 332924 -> 269299 bytes screenshot_light.png | Bin 314925 -> 249705 bytes 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d04f8fc..048f185 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,10 @@ 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 +## Platforms/Runtimes + +- Xcodes supports downloading the Apple runtimes via the app. Simply click on the Platform, and Xcodes will install automatically for you. + ## 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. @@ -49,9 +53,10 @@ The following languages are supported because of the following community users! |Catalan|[@ferranabello](https://github.com/ferranabello)| Want to add more languages? Simply create a PR with the updated strings file. -## Installation -Xcodes.app runs on macOS Big Sur 11.0 or later. +## Installation +v1.X - requires MacOS 11 or newer +v2.X - requires MacOS 13 ### Install with Homebrew @@ -66,6 +71,12 @@ brew install --cask xcodes 1. Download the latest version [here](https://github.com/XcodesOrg/XcodesApp/releases/latest) using the **Xcodes.zip** asset. These are Developer ID-signed and notarized release builds and don't require Xcode to already be installed in order to use. 2. Move the unzipped `Xcodes.app` to your `/Applications` directory +## Support + +Xcodes.app and CLI is updated, maintained with contributors like yourself. Even open source libraries and tools come with expenses. If you would like to support Xcodes or donate to the development and maintenance of the tool, it would be greatly appreciated. There is absolutely no obligation! + +[Support Now](https://opencollective.com/xcodesapp) + ## Development You'll need macOS 13.5 Ventura and Xcode 15 in order to build and run Xcodes.app. @@ -155,4 +166,4 @@ popd [Matt Kiazyk](https://github.com/mattkiazyk) - [Twitter](https://www.twitter.com/mattkiazyk) -[Twitter](https://twitter.com/xcodesApp) | [GitHub](https://github.com/xcodesOrg) +[Twitter](https://twitter.com/xcodesApp) | [GitHub](https://github.com/xcodesOrg) | [Mastadon](https://iosdev.space/@XcodesApp) | diff --git a/screenshot_dark.png b/screenshot_dark.png index cf4a6d758440ccf3bdd3cfacdc4b9227a9573e3b..1c2b13448e8cd06864a52afa078bedfbcaf1d693 100644 GIT binary patch literal 269299 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

)A?Z3)x9rw8`8JHHWX{nk!H~7oBpLD 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

c^yQX?rg@@X+v_dwuRsdGux4tRlTd`;5AP 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 X?2tZDUiwmj0SG)@{an^LB{Ts5koO`# literal 332924 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ʗ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 Dn-brx literal 314925 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

TcE{Okt3LAU0lmIU&)tHk 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

$vl8ZRI4NKAf`+8)TLOW@fU z#UI9{$-84hFt7Q(zfbJK2D&ANpgLl)^kc+kaIIb-o8dtofIz+VTm<&Mh|a(3pl&SG zkijHIn&%<}H4sLpeA*54CZkIwt1^Ow_9h3wVO;yW9Cy08V@oiHlP&nRZ+JdaC$o*A z4kv6J!zgcp*jPLND0q$8aN~?x>&aTOJE%+=0J8REZO3k2%!dKpP`dsu3GoFTh=p8o zL~>wEx9&^ ztnn~a8RLg|t0=Nr-(RU5HR1-ng;J6a2Me*a~G+HTnpL&c* zrV3yzf;hZ@?}wNok8CmK!vO7EPJIN`D43W6w*cku5Jqi01)iAVs*du>67%smVb7bV z=l!}3q6s`R%#o%+qKXII_hLyVJ&&fRSNy$=HukTDWlp2*n6j_FG|2y|zc`!>MkXA< z7&Z)mxHTw-a%k*rW4h+4VCKZ*LB|k#?>x5vN4-aCV_l$b-PM49N{L`R&pK)yjLr7Y zU0uo>e^3TeJ_G>8)_AgW)bQ(_6MB6|#lqgb-YKH%`vz1U!m>dx1mW}MFaT%c&Pj5K zXO=Qvq?Lun=$W$O)2x6HeQY!S!VT5Xn7dB9GhoICxUZ{u(lbqNFE?8H+$$A6<6nJb z!6yQB{$Ae>+U+xP3x8zVuuQGotjE5xE3kI%*e?zwwmUc*fATEBQT~q#=?P8h!(`l? zFGv}2&*H|m_>bR|nDIODZ|8h4EH6zU@Gv7D>c3&nrEf(arW(ibJ!==J*4JJ4O0;v& zo3Vm5v&ZDCT>5phzb{BPhlr6S@3)|)&$lWeHbzF9o+5rIx$Zskw&5n7re@$ zWpzJ>j!WaSv=n>zT_{cpIwD&N15Av&s*gWwCfHW#IeihmKt@&^$<{6V)*neQe&Tg@u zm{`6DFJ7vW2+|rB5~;3V2nwmTV7BiGw(qfxoglwzBkPkYN7P#;G-9+*au_{} zic7!iBTde3#E|66)${GFP3-cO%e3>TZyGre(5I~uj+njDT-b=}aQA$q^@OXZ7y>xD z8LumgbUdn!5F%0>5I7p-isU}qKN0#E|W38=cHAiUUDIdtci`BIGGes3; z#Eq>gyeoZ_8tIekMvIrLu@t##u!@~Sj!$A+p`LDLO&<95}uEHW!WyU!0->jq-8W{a6nli;=XGk8V;TEYLbL_@jB38xK!v$s@aFe2;v^ z`X2wg&T<2-h9>oO(a9Hf%NWF!7vU4D^@%j({i!c@Yauyec^rzHZ*~1dJb$%nWf$^L zW&5ItMDnJ(^rG+e*$j6fWi`k$Dn_^(aP#0A%m#y1uq<80lL z(OLIrPRph|#KaDqyENRqP)n;ize?0z9+y7J9b{7?Mky*=P2TV;e>5gv;W@jT` zv^IYH%e$exqEtIIBie>Ng;RQ?(FrM==#Db2gA|3$Z;D@zQfxx^k-A~R;$8rcOmD%+ zuH1-Pkiklc@2qv&GU;q$ay9QQos(|hH-FocIPN&5Kf)+n;&%M*C0qrnB#w%=Z@7V~ zGjKkgLFx@eY8&&t66vna+Wz#Yt$syC&^Ej}-@+4lxIw~8a$e82hU zRQFG%P}%HZyK5+OaWeffaG;F(Y4&%cVbZ&OUX8mXik6)t!cW%%g2@(z?XK&%zD}F_ zfabBeDc0Pt1{UWA3x(CL15iF*mZlJ6W)r0;YBuT=Qr_JIuFY*px9ir^_PqiNhqZeV zgxE`4Pavzo3~36MXe1A(+n*wF&aqY-dt8@>0GveQWnf$HT2ukxyzcM@x(W z-G_hL9hU|*m(E^_ONjcOL(X=Mf38`}PDm#Uh`)_jyTpuB^ZQeC1G*SF*3a0v>P}7L zn2{qc&)pcG+%rWw^()Zgbl!@32t1$|gq^Z0i?usqn+G!q+Y;nddZ>M)#!HX$D$b+I zzOGqSH(8z+$xR=@-uUm}vy3veBXRtkPa&u9C?_U$*pWQK&v!1`*F<=~(fF~z6k+=4z&F;19N5e=B_{Px}^rn8t%wPh_NY=D@CcJYU2xPfcjmG8D zOzOuv*=|#*A=g=VoO#W`mn#kf@FkgaiQa+efngQ zULuOvzdt>=fpx|7NRLv7x0P01z4wN{lIa^B-FdX=H7rw;TJ1mCF)%KNv zX6`gW32nnc%@Xz6nxjm1U-|Fye$t97#;Afl&962hcv}33RxMtHRILw{%;k#M)tff` zv+I?0@xV&@jF4$U9Lk$k#fPW9j+ra0ibKb)AGnX+ zpfL_6d>Xd*a0L5uMHf7|w`UR+Yp}|=G6a1bYvJfer>>PALq-)}nRPcdrRktmmOb3*gc@bfR?0U`Df7#3`cNwg)Dbl%}me_ zKO<(5HL+))*ibCB=(E;NL6-d{`*=E+_T<^j;kYF^KX+@>s5X^_N3M>4K%UY?{^b$f zj@~qVd?mHLe$9^J>b_*n;F=iig>(4g&7Wn* zhwZ%Y)}ciiF}g3hob@{P>NYPlHU@Mp`1CW_e09qz1TRsE8s&W%1QuQai{4j-KVFPf zaZ(?aBrGN{^?mGZIEEJzrgeHvyBW6Li^X2jv|1TCs=eFUHMCF0T5(z(bUIu++nm3F zm8AW7cXhQ&DQwu@^x|?P)yB$;tHNsm7~$gQ7^_SAOK>YI9;6WluhVwU`_w<9eXcz! z-CXr?L1uq*(df!u(4bC(EL9XT;g z(p&_x_cI04&$zsm_ao46fQQlQ3HqWqZa{b=k~lQlg+g<6O$oh2Y5zWbTDu<8Q!(w6 zL5zdWR{WbB2dCB`BZsDM5M-ms zkt4eALwyO^W%KX%5UH`iMQmt@n1-#MNvSmZOE-W8G1^1cUS;H8966dKd|@ouXJ3ok}O6!H!w!b?156LF4@<Zhz`8&}=h5OcTTebzbIAl z#cV9?vLp%AxyGe(xtlaL{`1sL`EvWE~k<@3=h`#eV=)1KKI_Q zSVDpRs#7{!tx)tSEPa3c=|+VK{fZ$~8mu>Q>`RfTK|#Gh3r9JwOarSSWU1cv+`S3g zJCHdDR*DfpT6i~?{~{Ylg#2Pxdh&I%ds%4;sDg;%u!b)v4-C*e4=5#kLhwYPi-wkq z-RHDo*P6#CrI6I?oMr%5e)r@z=*=^|*=`L@)BeTKs$Ahw=q!IipxP{oY6 z??jC6@kzIVxiM2VU;CL^l-MOy+5N7<`qRW(LFQ)8BKZ-nz#y+x!eJ|Q2F;L`5_x(K zx#dPA+xVKk2{Kvf zeM^mFoy@8@eLx-6a=z`_q=@hYU1syCuu;?EQwXK(fd)BjS``&*G2$oob)JMNbiiQB z@-&Sm^i^~T`&#^3UK6RO9!|?*Yix<0#CS}~mS<5V+eP7^nWUG82>ees!8;pFo@&?3 zk|TN-t)M_-J5xL1FRwydy_JjbEDqPSV0Q}f9^uuo8pA&B=viB^+L$iuQEKpc8s&}W z%2kdxW5uK?pMS@C-Gwf1Ncb@ld&t`RfY98cgDdIavooxxKszxJ7I>aBtx&jG$c2Z2gow1jqE)qlu!$E12r2Ki8RW zRRz-PL zmuUFwL5z37fMgrBu={MbkLqwKH2uR)Y<%ZGgP}l&CoJhkGl-edbw`A-c|xFOgY4@+ z6&F^R_z^_TJ68(bK5qz?e<{bZvLSrkM%%e0w>KG>nYK+t=v+6=M{AgioJ;g^>~x2f zBAlCBGDJ%p5mWY3LIsVP!*Csi%qU&>a12HS=Jz-K!(%AI1|RyTkaG6u4n;7zI+;y= zm2sZFD7%(#bcF}=Ji&VQD=!T##9B#a4#FHOi*(o09qoq}wfXa3JW#Q~Wpi%i{P3$| z&#rjEE0{Yvr6Y5h!!}ONbmEa1Mv3`5TtvEqbvGpvSa+Fs=thM7H^~R&mtRsJ3)bOZ?j!T_x8VJ(a}nOg4w@8W197#IAD7rkD=i$M4t$ ziFRnRX&Vu`{5BefIK{_rV1Sz;hLImqEqD4gQeR1O2A|-jfBzoY2+I#?m^8kYsrCJT zZ=d2455Wi>2Q?g1qYKXW3+(n$2<0tE#D+^=X}Au#jwC4+F{Uk(98qaMJCm$QG%gs~ejI72s4kf=>3@0?Rg3?#E=PW8&qPZMprU(a>Y?p{ zYRz+UHb5qHVO(50{NZy;%;_Wa@!*HHW0=+dh$P1oFLO?bWNRjG~ zc6x@KZK_`)agZK-o35mOv!#Q@Z$cMt*5$6xuBQod*jqPzK{+Zi>)Nw1=N5Q+Y9P1Qs9iODzKaL4ZJ8 z!aPkX&J=U;*JfV3-@m?F6jdHj_|LJCdd zw^%D%Z#V!%k+ZzrC7!C};5yM5^M$?n^)Me{GIQL|U@+k?UqOH8-4akgoXpa%H!DT( zv(G=$)PN9UkF2A2(O_K&Go$s!aZ=Z!hjcM)H}$)7ZolZP-eU{DI2h_v`L#EbJQr^& z`e7*sF4LK?UrpgrAZFaH51&7#)u~YGxlL%$|I(4YZj&n`>}wh5Z1=*0Yx&mO zTx*}N;{|~^UpxbXk?kv>n8Yk7pk13+4m#fjqln``g|I%EV?(N?)p!yzTYX?(TvR!0 z#gD$H@Czu^dD@;j2AxqoDgGHYD%nv#j!|Yo5`}HO%3j5tRwJd(0R$83Ye$F4rZ?f@gmLj(^UA{zq zrHoynA2AgBqVr=z119?bLJNt4p9BgHlx;J(7bS@=MbK&+B(89@Ps*g5acw*35IAp)Tc!k) z9SP02I{>*0SNy}^>$5`UB~Ts(Yp;SqnEZ2Yde=~}oFOo;r{ea%>tCr4F`idgdEwN|Oy~FT3dP1p8i#)7(+MuZ zL&H-abPK=5U+7TsD4KRTP%mq_h`p;jG9@}*HP)JaVTEM>`!H9zeN*kbd}%nX(BViS z*FJKywmhd%&w>q3uOS9^aC4uDfj7Hc8Y)g9F?Co=5B(r32$wG-B|rcW;=exG`%yeP zHK(H;%!cA@KyH{zCC4CmMutpqnsh7k$B&x5`KyKo9y)>u60_5 zOgr^jo5X%hnrLyzy9stbdAAh5>RbOL_)wsKX$M5a-5vBPHg=6C7NbPi^{Vka9Z$WE z=Tul;tcv@8#-)-9S9|{w%$L$c>#v1IM@L&+%k%eCE`EK$>Ar;{{1AId$Y$(IoT!$_ zjN1k)y|z`NgeMidQqdCu^GFEEclj`)&_h$OOcRpPb(!aJ}&KbQHO9( z2BNAAz$3Mhb3BCqeiHr}5vXCHD-_keN-Ly%yZBhK=WIy9aCPK`jVMC>v7vF<4ij&- zR05=Ye0^lwx!Hx*B4KhOeoc`|z~j)=pMXYlDdv2ts|%TTU(;7IQ|z+JP}_cQldIfl zw6+rMq9*3ch=|Wp^0!bi*~hZ1>?It`u0}QA(Rk#wKICYPXsJXEyZfPSjW(5#z9qA7 z8DQm|)l*k1c^lb3{PV%Dk9799MS6L!OBA;%ansEprX1m)OyAmmo$WzNz0a(EFtNmD+>OG7XZ`J*idTi%TO=@zxfHrLXPJ?~j7GE`b-+rH%{egl7 zE>VRxglWh@6qlApc$L8Z+T$T`x|(770QTz=sNwnK$l#fHtXkv^^R}Qz;y?vG-(7y2 zve9T2!l!1jK^L~+er)f3mT+&9H54k+23qW`nLf1b)}GQuJNoTaKvkY_twst0Qndyi zN~sh~T$&4XvLa)alKx}o&v&tj@jdS}0+)jHBxy zjGM1c|8T`@(M-j z&8+t$h1A|pSi(ZFa6 zyh_2sDpT?AYEKqys5j)xPuB|)u$Tkf?rENQ8W*eL*%36zH|HvmG2~l1FmpDzm+aJQ zH*-ZBnXgXt@K1I#^etB%f8RD3ma`RJ2;xp8Vt7Y^u&r5&=~dhX9j3rTcv%ImJ*~7| z>CeZU@`AdmI@rs`4jr`rplhg4gH*lOv7LNhA9L)we|H_=1><~J?Sr%Z1B~F!rbRT* z;aPi@x835jPeFje07YUsSU;^f`)ZrE!5jm-nJ5XYoBP?J^^Y zC`v5c{LDblI0<51TcRdrwt;P5#YuQ2M1@N_R*n>YeascxY0jH?EQJ`~CU>Ul74kNK z^63>7hbXw9R{2^##Y_*%rg-cx{@9vC3br{bQj~3v*G)XFG^aU)wNob@bmb!=fx&G_ z`*i?;i(|x_$B1i}OP#_i#)QFo*N>95)(x%2)3yBOyVkK;&QA#0L#8aT8sfKaYH-(#>|dq(5-02(ashdIjax)eTm4jAh&p~({I(;X;fcv8;XLR6(yX6nQZg}D6U(;T8G zLE73VXd-YaQP3hf9EzRWQTOgZEMFvtBI1j|phDN|SYGQ>C%?~hMfiRasp1%`j*$5b zqn~EDR0OiZnwm~NFX&3OOC-xB-FkVSR;Tr^s+0d28UE9%2oZi)#^sl$z!Jn;^~U_W zl^py_iO1w!piuE{RZ;9oE*Kv97V=Z3$h8`}KNzOq=u`qJ_jvz2FF|)DMeeAGZw0$B z$Ox|q4_QPdv2T2pU;M3Mw20S#{p&dKNVa8aWxYsEG1sfJ`L4sA7D2Q4nU#UDqEn-z z8`^T>x0)&|Q4P=yjW0SF=!=M`tzX5(Lj{EuU@wGVU_*a8haKtUVZ%1hvIsI#*I2`R zn(X1p72kSc%}j(7j>XnF47`+9e}^VYeU1550#361C7bT(m44_9G;e@8+|xzd@a>TF z3Uep4C-OsN&RUsAaLra2?Q-@y?tagd2KPcN?ogU-kzSKx@Y*otXH-0cqx)u167v>w zhrIi7Wn@I`R*42FeKO*iq14ts{Ma^o?ZP>D8kd-p^Lu_iw64l1i6QA3fm}kQPxI*d z$q3QVlA?{SUQx?OUhuBJAk;)XUiqUB^VgT{B<~!+ zK^F^$h102jiABY2YP}7wfuO6RM8Jhh|13-stIbyW-fXC_QddXN9q}-?!ZWk6Q@eez z63evi<#+qr^v{`s=73~(>$MqPIxk*`U)W*w?DAw&wZmwNpBnl4jdx0z__Lsem- zV(3^~0-q=lDPD9sfAfeCQ>a;(eu{~WeFFD;RrJZ{)W9=T2IKkIprTO*P+rGB$cxPd zGZ669$l*A%N;2}Zqqs@l31YKOTM%7t;)!Z|`;R!}Gu^%k#cxp(348?GJM2S^Hnk89 zTy$JKhJzLPd5B|09wz?8wYEap^R61%zw`TldGyrLaC3+-LgpDxNl}%jPXizRK5DGO zt;x@iiO-K&=bOS3)bh*_-Fu%2riFew*E1+8(CRaLOjUJs#*gjTbb%3unPiv;WJBov00 z@ymx+9l)Mju{hIZKYedkVDzhM-}xSu>)%{&$jx^FSdwq6-rH3fneW|i5#nkrX~+qz z!mWeCVBPg8-XW^3XBKp+qUy7`q0ORQnUGo)lWbuYAzjYGswyOKi?BwrJWsfVX2Ny| zw61+dWQYPtSz?Kd2fEWN2Agv@WD2d$R7N1UTXI zF#kK})SdHDef#<&*fLq#tp##4Ekk-++YGC|)uSR6b@{3QS|W`mtO_wHS!(M2hi|Ui`$`k-Z|*ntKM07- zcRrHb7(r7lP#vjWH)Y|x$+>r{3#(~##?4NPP0z&Q@;E~eqK7!93RzC_87shv8AII} z0e&U+=N4y$dlxKy!hW`frJD5nlkZQi=_Q3~hx#*(l&J!Pmg%=dYiEj}cjl z%*y&*2Fc;L)Fb>Rv$~hHGe_m?IY+=!$`eWF2^Dl&wbC|tLwg1p*mnKqC>;6V{@^;d z88F0J%+$jVQRUOdF9nPGJK$OC_KGv%jbb0V#{9$suW$2DXT4sgDclrCj0k}ZFRs7g zx22Y%(-;8PypVcXEwOr8sc^!++dmL)rwzaS*w~}2m?;bM^E+9-kQp`UzLL2Wrp@mN z`z0^lLaZu2Ma{l|{%vm$i&-~1A%t|J*^Lj$&D9vg#7;FP*ZfU^BJ#Lq%+0hnNu*0D zMYIRyZmV3BSDfc^Q6#*&|2880=+a(pvP^^d>7?4P)5*25#t(S=b*>wB4F=SbnIUqg z32H_D)(#a}*A~k`He3tRhnwslu0z6;A8btfJNK zW-K={e`H@KOrTLQetJ`m-N%~bQ2{iO=*c6RjZ3=hNgf!Tv@N5A*KkpQkiE&WR9JimZ~&TRTSlMqJ-#oZsl#algF$dc4y0B1W1Ear7CLUVe(a7a^!> z94P6qf02W4DKE_Qxyq3G8mcc9?lnPaU1<%FB;J% z@F@mUfu~yi`0Fzq0Pfkp5zX>9IaoW+O-$~kC9KlV^hRD7k<5Q?D-NnY_B%C}3L$@U zJ^uT>0xm6#h$*c958o+117JJL*sM?f<`e&w82;-B1Hbb>ED(PK@43EM|Mz$P-|PAR z`sn@NXX#(d>VLad|39sxs1;UAu8;rQs}IrvBbr!tQjG7v-WCNZnuy!Mb9%j*pp zf9`sJi4va8hn0*CN-Xw-j^%25JOQqthzK+qvf`Axy|TeoO2F&H!S(+%jQr&!HUD%mpZ4 z1Ja8HVCCfNv;upGIk2u*yR}7Zcu1VF#6p?83ZeDPo&*_6`; zvZsEplQ|nqXL`kT_%}!LUpMgv8fyf2=mIyZJ~CebbSwgVkUmUSg(QE96VL%p0M(vZ zOhjX*2%tHeN@&b?f{HOz^x{A>C3tfE_}X^v2t37cK;u2xF2sTtc^C2H`S|hf!Zh_2|y* zU%*BGz6_FaUfgM3gt#~Pf9QYy`x;Hn!V?d(SrZ}B@%Co|s*#NA4>I4Id3D%)k3HxS z^-xn8+Y<2S+0YcX?<-~hjs&Kh=zYNiU>D!NgnWISw(nF}ROCFbHa)VoqxIs&4-6Y7 z)%1wHsA)ih>}B2uQc-2Gp*tE1xpimTb%spv;SQ_hh5vc)>`R zV@>O(zGcxcIpgc@OH3&!D~}3^S@u44Ed+#N3&2pwb)6w+U}Sug?0eZTYcV)eYT6br zcCn^9;O=paciBUZG#mgkf{?w&$O`DyIhok$rd+pBLDIwOG`~wr0A6{!TjJfGw;sypI7$7A*0(*Bw&aGc++XK)93* zvZ|yA*8*W8?oykbTmI#^gIv7q&$j_3yLgtXMl|veTJ#*VaxXhd{y6f+>QcrfwzS-9;*k1f=+DA#~@)zQ>u#yIoK~FFna@#XUC8?Wl(gx45x9Pfn zVUVkhd5Fcx{EFz$F8vMkAOcF*=FZcG{ESGop@sJk5o9?B8f(=NM%p+b@m^O^v9aT^ zKRTvl7y=%Dd+_fQMLdxHTlJ5}vwqIl$3Q`9T~AcgCwdmQlHxs6DQ%$Tli@}z_obvTS!=IEHA#-Tg$@*Q>A4JmR?L)-zzI4lTuicKQ=h9+dfxGkFyF>LGSEd@%+7M9IF>mK3L2 z1alglL&Gxdv)!d`fmmpV-fnRiB69U2`3l3}nsMlcwt|gLgRGiz5=u;4(av1UHTf$mR4AlLZBO;@%tNY zXN$XlQrmx6fddde(#4&f&@?oZE01pER-=08(+gJ+hE&iM>?*2oj3 zMbBeRD&dDz9>t$W9x0}Xdg2<P^Esnh3bP}I!y!B*N z(KuLx8$~~fEW+j8fn8^GHEVB1*#bf`tp9a8LoCLMc}~aMo6B#|5F9b-9W)xJXFtdf zfLkF`tk`z8(KExIR-F2|?3*utY;64s|Add+8=6pvH!$l70^ku>RnWfieZyKdlO^!4 zaD{>d>|o<+%>A&4BKc7@XWC@zX(5C(@jvJxV@_aDW<219)tLY_YDMB>9X&m3{Kms; zywJ&Z)72$PT5Lq3x!}ihxG$7c0-n`Tz6G>EoO@0~0$J)9DsU<$^c6rWvZhmtd-)NY zWO+|?CDF0_+q+xSUJUu7K#8u->F~|xrYy{Y$s?z^3aZ>SYUJL7X$RWoKG*8oA-g6d zMHC0qJ(&WI4^lWHJRS*$UYfIa8%_3?djhNE=NG}ik{)1s-&Rc^(ANEKQ#qn-*P{-P zY1OCO!WMB^B27?Q9TKolb1eWDvfxZP-O1WI@1Ew0;HK|ZK zGOoAQc!v}ofyDYtZyg`h|5?5j=X@0An)Ktjn14y!1ae}6>J_{rf{9)M>M8$+DJ~U- zn=6JpQ$tq*AWkf5M7y;TCpUb63#>pRLS zK?Kli1GIkI4i~!7{kc^P(gn!XA;EV>HrQQi37!m^l>+zQ6mS&b60+B>QpJvfSk4BJ z>6|iNf8AR?nDOXTU2|fYX*^jb$>2zWwC!G>!(bGct2|QI6uVk9RnkY{GtA1i>)2yN z)V|{fkGJTME!*}j|L#}0gVN4KfM7Uo63CjKPPAL{`D0db170U)p%8Zg~^X;A;RbYLQ+!)ARr&#p&1Y4o%x%{4Ow z&OQbhPb&6?M*iC*u7j63f(qY|vnp?!PWJ!9v8+~zP9w{vR~F?=6`1=0b*AVERq{&; z^JmbLHdNI7S6m}53raTJ%~~G*v=kkRsxJK!cYk8Y)IhfYqHv>VAh#a$Z2K~eybw{O zO_v!>Rlxlto5oLj?z}TIP41$PDZ&Mh{`e2xMdau-I98VHhZaZT^5nafEO0$&AtHcf zz-Ck6l_>9{&?YINVPaX#qI2}l_ZNtrsLd;Zk2Eyyj0K;DR#ZXya)JD6wH~7qs1@XY zDv%`tqy2kzqG^syXlL`h3L7Zs+Zp!1S!fmDJidk@f~VT{g-w)e5wd@{Hav}&=6R>k z;L!qr3*s8ZqZ*CL@g=xmz6O7s5B<#;#~elRG@l6wZ=&+*jT99yW+4V5im-oQjZ<(n zhAg$B7%MN6CFMKy2R>2uI7=<9Ey)lUy<^zK=7U78jT=4Tpeu;xFt5&L&x1H84Los=p^FpX)N-3ux=LY z(M&Mf6ex*x)`vx_xHPI{q^l17#R5<$5bcUyS{GG&s|EMYF1yyKEjx{610KlmQ$Xk& z*vAb*MbNJUyo(`*roSIZyDWH=vxREu@g;SVD}ZK#50as7RJxZt;ua3zsBh4AK@3Ae zFi2}gS6oCBhgUmPTj35N!^K z^f}c|H=C>?0N#K3H+&J=e|#eitq%nPUwJp>E!f<;!7v#^DFQ*>STvpIsvC2Ri`G_H zZy3WhCLdAD#wqiS|7d9DS=)rMDv+1)DzT^ST%T)cCYC+%OU<7}!4AddZ(OHg4rk8?8g)RcQ-v>zxrYiwvXljlS_JCaH|yPtrO~+}iqy zEu&an6j~O3Cqn_g)fn^U4Mfmpn8@?QXCVtBW<^(t%*Ki_=4~LX4AXDjww5} zr3W*PDxvFZy|vVfX2papB~-$JddvBTURLfB$d> zRz_skj+`l9@cSKQPgE^`WqdDN42PYTv;N1RIVUE>8 zG_CXVQu!@=6D=m80U87xBcS$hi(tV7A={Fds;#Gosq8*ZmQ59dAk*?IyhfQkOyZgE z**RJOa@%GgXiezP(^_;t-)#%#)bc$C+>iG_@b*O_sr_0kW%L``vlu>~E8APC6=u_S zmYOx1#V8+*=vsol*x+`!&#jJ+w1w($w8 z54x^Tl|k*SROFfexMsQa=H;Isp5mQnkPp_2(^MwgD~eQD5zMYy|0wj{vQ`9mF8=yU zgnm3qZtv@h*DvUCU255N10MYNr%hkKj)7<54wG!(k@y{39{wYIK0k(wh0O761cb< zzQ`hKr?<1?dEE^(E1+gy8sil&@+C8BsvwG7F>4L`Ku1WFqav_`FFo2CG?K&H){P4O zySsWHoyU(pgIcIXffgxe=$O5#%%U0c$1wU16`w~D9gUJ(i^d@J4X*X}hYG zJzwVUw`#GPQ`1b#SIc}KkzM~{$c0!wk5MB9zWn4Vd@-DJNJSK!Xeib1tpOUa-s+gd zpz;yRSzC~+rH>aMsD-_pC^wK zd3!@mW%&}R%Raz8-B@CF!fl=FDz`Gu+UiPRC3*VR|5}RRi?h36^yyifAb+g_!N}o@ z>b`~D;Uf|rE47S6rekZfxCyZ8t%nzfc;cA)!6Y{MR?eb<9NTLUidBF%!EnWPGL{-h zBWee9V2eor&e`e$^R^-tFGnUHj_?!`6V#ae#IkbAezNp9DMDL@U0Fn5SNF5NUCqy2 zkx}+vXkTE#*c=D zEmPLaM8qKUu^`WgNA|)R5_n2V@ZoPw3`-n-vu0I39gq@SL`j-LgNNwD=B>;qmpq@R zAY7jGpJcIG{a$u(qxEIy1Uv5yHgx2&X^cOzK6^Rg-R=0Xf=%^Wq72J|l?#n5?uU%? zKwrD&TmCExExg`HbHhx?zS-sZ)2i7F<59`uN6ntX*KRt2BUl53WyhD}Sa+!bR~6j> z+wrBY9}T>_#uzGCQrTzxAzr*e?Ff2TRXnw3$0n8fYi0J5KAOF}^q9eC=8}PY+nZl3 z>P`c;S$#&U>4x7_{KGFELqJ{#&wTd^gnS@ene{dHD%Py80EcEWb_O zr&GiosyTVKUjaNej-rf079aCwUXT!oQm(U9ANMHa%LglhHKG*Sb3|(sl^ zI5yl^MK>+7$opKG3pWWprNf9e#*|pgE+@k*8!rF)zM=<@G4m~Rp<))wWlj%KTe39$ z8R#Iy$$(ckoL<{VLiU0BhHHWRnNpP=&=Rq8FY6H0{5nJ_@9if!sp>B_IvaC)EuV@0 zCMDMhk7fL5|JT~VM!2>ub;C8H0$K1VceUb}i{%4BC>l2D%?VqGCFSiHHfyPJKM-$g zH=UN$CqD*BZ$AMtX|sF>YJXO+-tEopb8FVgg)d+~u#^2Z1vX5ce(sZY7YE5@i!k|` znR=~tdY^%IOf-t_662tn1?j9nSk_$3f;Y*MWM*xTcA$o|xFZ+&jrfL?&_+75pk_#3 zQ$ikscWCUn4Jio;h62=u>DiyBC0G|x&+nKQcTuFcJbyL2R@+}@mOTSO$_}D1uCZQw z(`;KrTNmIJ=#`#=p=A(jC5mrZ_rj%% zsWXDtlaIYT5!!;arh5)L*w&niD!^2QQ|0L&;(^9N5smJkc;x*80@n$jbv)@ZQBT;# z;z7FCDM%l5q0>hx0&0M{*i$vr%ptm12^{82Tu%AriGVK8lRrEq&!dUEKM8r!lcMz5Ziu&wW}+ z`a^-@WGUxD@YlS%Jq?VvFm;?v7?(XYgVuRW;$4kZ3qf@(tmp?zA;=Wh8}^l{Qhv?^ zUuQ??euI^nX=qIMNm`BCi*cE(9`X5U+R*87dI(BNO0B7YkYqJu1|xVr2^9{V-ggEx zZ8{9Vt)Iigtg2&;o?pLyrLmGK6BGO-!Hh~FDP%X5-v%l@{?r33e*Jznmw7(%OtDL~ z29$Te_{HNHHV#QJR3c}3=HbSFuGhdbuJswVdVXAfJ}iJ6j`|Zl{DKjDdBoCk>%PO&;`!gOOZO6PL!l^CmhTKD z9u2&Yqza^FjqsXH9Nrr2 zP1qC=NqOgZKB^vaFnV)`checjOAXEa%H__3;K^0e;q5s7`Qxo1f+`7x-sBK2PUjm! zN%TM}TFY;nlQlcBqe>IN=GJMc^VNJLctJ^Plk=9E!$G$|hq`%FfQTirRz6Eu#kWUg z?YEByk}o9=!0`m#;&Nqi`Z=>JKAXsvdw&SPvaBVmnm;s^tZB$&pR?j2A|j%FzG%E6 zRyXQQX+_orwUul4fk8O|b^Bfe{VZ)mh@gRA-d#*Cg^K+~ogi1|oYKA|IgJIg(l?2YbC&|nh*(TT``(d3tI1f|VY|c@T|6$JufzZ5 zTNM;=dRd=^hStxy7R1aetjRg)^|7WxQ)Vsi=@GKJ+2eab=Eu{ zPk-~)Rjej5eBL|<+T z2tvm2F$Bo;2tjl_ZfRpri2(u3B3>xtxfgJ79{Yu!QP284K5Y#r=U-GEv`SHu_V0QQ z7W%zaf=e9iRq~@$7C21G1&k12hM%YU%avyPGoo@G85Y1rz`aBNf}r8;Jdz$>8$7M; z&CRY+9#d@(eNt{vC8!LcC38>usWKAW+yV{xXEcwYz zWWLSJ(OrS9V3OX|tJmrc&_LWc#rartGNPnuo+r%F)Oow*!$8YAxIW1X3%vskmhwn9 z9je*M4j`a_`IQW;-^mRA2(q09@Z!qbWa$OUzuXSL&d^}Vy<+yc26~yti}`v$M8@(J zqBxw$(^c+Ow@KN9x!-2*Ci+oAEm>;O=%ws+bai<31|VhMq(b}Z^BfDv2+p@!Icn?H zKZi8-0!rRHnhbv&x^6`bj$O@KAbc@10?!Si_BPchbBP@!nCbvNNl65^>!#(Jd>U+9 z1TaSZp#z-IF|pq!2NW&kud6rZF+MWZxJ-9q|Iz=vM7noL-jVTiA}|9}WV|+5AR;bZ zcYNb$`8}LFI4ihr_GEEtWMIFp{qU{UXMEmL-b(Z;y6f~bs)O+$+|yvw;}Rnrr-IKq z*_Z{4uB~uNDl_$_Gr=26qPfll4I-nQzgNHW0D<{o_I5h_%b%g(Zp-)8tKX@;%-?wQbtQxw zczI_sLNT#E`&~iEU)BZ{$8DF5gtfY(fiD7}qYCm=O(BW>sTjLRj zbs_AW%(qLvO3HXX>2b|fs@9ocX#q=K#qqOGxmj*^-%IaTz&wDmJo07DCpqsG-h|_x-Ww zlsZ2{okq%WN0XRQxt>2h^U|w3n~HCDuW7}xcRwTRic9MGTmb*nIs#7!ascT&Qvbhc z%b$nQ;Qi~QK`-gKDa_RX8tlwI#ad|YQM`&0Tv;N}{VaxQywxr*8rtSI5EGtl#?hRF zf2@w&X?o0gawi1WpH=u>@}v=N<9vzY zQmaL~wRmb1EiWH=gVsEZnd&71epnuS)8tZwPgj;NRKOZw(*!x39Ob*-lS3SKe&O@y zZfm9yms_sq4hx07=j3*LI-4h>KhOL}B~K*Oj5`rDAOG$nVJjB2j-c|6pIFNZP?v3y zH_o16EG0($8jVPwN6{;%i%0xOuZL(`Ut6clPvdb>KGJVrgSrD7o9kxRUG%gx+Y)zr zIzmbK>dYWf^48OyY9$7GtIr#k%_`cM&bf0}2U;jNLcyL z9kSfG$TUcC8n{VT*+cIn?$3=Q3lq54;p zjA?FG+;yx@+cQ6HADDnuU$V4F@MHTba;9w_A#es~c0Ls55tq%v1Kja_U=x0`o5GA=XNNF+FRds7;`Tj`*cpcJkTkor<0K(=`Yxvs@vJUUN}cs!P$zD1$2KWdr& zE9ZbH5NE~qy#o86bdhf!CZBEd`pvty42y>IhNREX=)qm@GNP8pht@NKB6x3w>Cwe> zbgZ?q9R)!?$K8&Ur=biQ)Qq?b45)tES{ZDVwL7qYm>hX;9r*T6%28_NA8ilOk}P5yOA2b#;MK{TjMT(_102@ zT{0z-xlvl#RlNWFrrN$jDoG7Bk%sVvO=d891M0j2cDtbz+IolX;l6N_swx>?^$(2B z8oFo^qxqKej{rBzS5nla4C?!EiAbfK^xBPouzw@reCJ{9OeO=||ExU#w%7h0etZO) z0-~fY76|c75KIz9rOY%SOkN0Hztb0qE-WN8%mGT?(9|RM#^pC$RaX$Y@z^@rWl;oC zdDpK4t+=jC(Fz4no3_1Se`0nxg#r0$)?Wj|T~}H}AFg_K582@S|LYPx-+_3KW|V)_ zk}JyBMU!B8;|O6r`p{9%lkX*$Xd#Lfiz+~rZ*}Lp`u#)LpEM_H>7{mD?t%!F*?Jqr zWyT-to8Z^)j@Tb_z7TFq$dc&pEtMxT!5y(vffv=@hfGwQ+d0U{;tLziGr5*FTRcOcxfwx!{V~!4Z#zwQ!kY9@R%kUN&dt*+G`?)#V zRc{PEW%T+_&OZVoc1FH&o9x8a=zF%(xYg>Y9p5#>3WwT!8%yV2W|RQt@sviO7SDs) z2(Shm$rjnf7t1&qtuvqXy4I;oRi#s_YRFH2xi8$k;{?4zJh#^J#s;Xk=`16S#pnJt z@59+WlJUdNZN1cgAau9`7%DN!a5T|NF7q!7Ssm#iH0&!NLboqc8>v>wI^7u2SlieQ z+Nv4SA5+U1etXB4*lFV@xu98An@@hK!p4WV z-yFA{(UhpKb+Qdbm&C|&*J8&R(rv{goL7sC9?nV_tfw8GAN@B+;^t8FbyigiC=8XG zuRUOsSs(J=9`|$SOdBMs9HodMiguaiWfRem9K<=M9{+(o4u#V%pZlxR=x|;F?Z0fL zCNF7v4Wt_F8>Yn2T62)HPB7~(_I4KQo2tpLAE4nOef2=O;{+N2fM7{n6M@S(2STiI zkoe{$U4dcf-+%)6-IWc-#`Mm?ZxS*E@vuL<>Nc8>=y|{@RMO`WS-(5i7Y)Jkj?l_Z zRrK6l9w-8ymy~$kbnPjt64#()bpdegzXl@4wJHU%FHi58f!_y1$1|o;84?Q_WgRlV zUU>QnS?XGvF_OD&=9cr8*SV!Q0<&P-rga^E8TbW#YR3#bczPJho2knB^h1G=nv`i} z^^E_#Mwv;j?SWicud72vc?ddD&7~Qrt$CV;FZQ!s=t*HW9@&{eCyj^0vF9Z6tK zIvh53XvMThtMsxzX`O%lC#DsLPAEMP~gS%f!fX5?{`~hf$?diw93jRk@2Tkyw0{-O`)7 zf7+RjiEpW{_&7JAv}|^@mbuMOeYxjuZ-AwzF$xLi9uw>@)z6g43u?U`Tx4;bw93pO zoQeOX|B~0uN%3){Up;JhKg3&hFRaHIv6=15R0hKZ=UGvonMrdERnXC1D5Comr0_Mo zV4IuTPS<=e|MizgpM^hiB?e!>B(_ZrrVZKI{z+1=U^+?DKP!p`f!EZyIkep6Saq^q zRy3U$$Rd@uuZDA&N@6pqQI#A*$j@-xr*)lR&Z$8)d*(J2w%;6!Rnb3s5)#3ld=bhX+fcX!W2~mi&x~PAmeYoqqsO7}ihK?bOUpkj;5U}q2syw-R%*jomCl-( zxVW+A9sDHew3Fz6S-mbTV(B#2(FEMTZ-O>tO%0#QOpHWylMcj9mF`^NC(B#^(Xnv3 zB!#mgpjZew9V9ik)lgP=vYn97eGA|8z*eaNfZ&!Gb4{hEpiTrHAA3MpuU+H&%7)U; zNC$sf?upSci$W<1gwOV%V=4+ZpTf$?@9dqA$NOO{=35l_+aq(+=glFY?S|^ z6oPzm^?L)yb>Fw)dI!QZbs{S2g>>@-kfm2;d;w}?K(ic@(DtJsj}Jn$)EA$8(=gm) z!J7uX46_7Y-KXOmo0T#{U;xL0Yu{%P2OTe3{iHkjoQ1S}Q`;Rt&Xt*mLZ?cBrD4ntiWq?fa0bgTB+gJ0% zXVpuDV2xz(HtjS8-_fPDm{Scw9BVz&GlNjvD2LF zwn<}mM+x}QR2ATPu3sjXw(T@(E!Dv1X|C3?Ds@1p8E2{cP0{uyp{C^fg&Q8=k@ivD zCLWthIoxu8O|&TL#)WW@Wu$;H9%FxC;13r8I_IdTMCI4s1wYxE3vL7GXjF>%ka|Jz{F{8bBA-fM^+wtZZ5k{Opt3lhG3?Vr z0y60Fs2s@-W*VL6k;Od-fnMR5?9y@$iI)*tMoD1t9Le6LA`yM9^T%;Jx{boFs3L2b- z{QI~Ttir5<`HEuECwD!$419iPpH`m5^6@Yg;+)+#gp^YP=q@3X4M*`p>)h7rq_okA zDRcTU0S-m2(el-2vKeQ@BHYeH(eghrLAo=)r_XrA zjZNV%a#%P9LK(?&S04CfN4cr4E}6G6hX3%}ol*o3WuG6k%U@(n{=$`@feo~$G*hY& z8uKHGgFo935kPthOmky7mU-aK=w8U5vhv-g*%&o;79xwtD# zgyfSoU?P`=xwBLX#RqBn`y;&oZL3@Qj3QjRC$63a<|X$haf+uFF4T;hjbzFN7g6$> zyjgMva!aAKawYv#)@9!4yC^5Obk+G(ahnUMsfl`yt#l@AsBJ+1PNPR_8SB(qv3tzK zblQYxwS<%iZW4`Fs>0LtRPKySI$5aHci2Ep*GCn^rJGVHjYH_kn2CH5AkO5p>G;^` zJifo|NNv|J6vj+HZb^pYz74C{efE$1dxu5${*$xGS$g5XpP7foxv2%Y7%UP*&MMjw zgGtI%xO7w8;SpM018u$EF=W%u-6Jb+_yg}22qTJ(2E<&IXs2(^SeYF}2z}qMd}zc1 z-g^J%coSs&qGM3W-u#Vhere4;Yf&8biYT?iHSlAgfYre)+*c2}?DZ#opv$&f6vL=l zc|whYKYzdwdbQLMqxw2DLrX{&ps}+ND$_U>hb}!|!t6Te`t|^H?^YHliIhv+)o+aZ zD_Tq)+^u_ydg%HD>L3Ivfsu)RxoWIkKu$fq#3pB#=VLIb7EDl+doxvc)kc|~v4eaH z@#RMDT7m*oCa{bCtcC8PY|4NJV=jlQfkY>y^Q&RXkJhq56+)(`;}>L0*Ty;M8+pb? z!01~1$Cd9yRV0awe!v4<$(A`)o4rIYi|qXw9^mmRCjT_P(LQ(jB_Qmbr@DrxCh3&f z^(r&chv$~^{&!>w@elj=F%COkvCD5Rhb;fQWwc-}$scJ=4g~&|L-0^&idrF!8>_`#TUny5dP-SKwd`DCVnAqUgkjESx=Iz8?G%Y(u z+#>~B+!(PnG@5W;HY9fe#y0xoy4F#sQjKw;4>t(~8nuYl2qw8e_Z%HMR!fomkSq!I zNqSNzl(8mZU>MsfF>VM`W|f6pk8_KFM-!5`chWWpsl71_MLTX1qUW)ZjI~VR@Dmd2 zW+>t1;9>2w@|>VAiQ&koFnMaUpcxr;?eMa&ncti1X8w%gh?vjDt~!RZY$MCT)4($g zAS&kh2?XHc9HLzR!QmiFrLVT72I8mvbMW_vwpM$!OBOKa$I?as)fkh)sO2no=GMnf zTA^uJ0UO^kE?NMYq;=B}^w#+U@7k2Bw&HCz*!eXic&duAmH|%6%J&{E%LR2a+>5uR0vDc=~+IXp6L zn-1KkAF(XhYIUGCR&*!LkP&0i%^r5(>oe>9Vuy~NxllKYE*XS_H1P~03^g!J4Vqg| zm%zp9oZz?mAM2h?Ro$6{eGDI4WcT;Xp6sc{G|c`;)K#bO-Dq6bhIJwRBfId&hjRde zMKok_O5(HPX3|$Bfz!zI6t+aePx|!e=yxA$n)t_L^oW>b#hmO-l1dX4ANI_1e9b>(Oa zv8w4aoE4g}@!;Z@U9Y@BLVJF2gsersx4eNSI}>=jKst};s_YvR*)MlEQL)-Pk>$r( zVbeMcpua!g9LK|XV;FJ=>e_(-G9JNRVk%6lx$%A@)<_{%;azc$c5C1543_)=3l2H#yp zDR437H4gh2g)M7|5}`~Koy!-~ld;z8l;luU{SM9wDao5uH?^(Z(?Uo&e-7V-@%%Wf zV{QwN1wge;o}om1pDNdttV#cw zaRPzZ86wXmwS%2w^w)wuRl@?99EP8jaEuG9D1>Ndb~{j!h%_F)B2*G{8!*gE<>jpv z+$zjS@Amksa5-#qBD%R~0*D(AFT@YX;no_^CY2P|Ix0C<8P1$!i7~d}w)L^W6gN(D zYnc@e;NtYwiIGgjT0U{nXl1l!9&UKj63tC;xq;knb7OV)JBCRqSHZc{M>Pj?>ke%v zx2;bU4vyd8d6w0URXaAHselK1CPnFY?vYR|f@9wk(aX~Go@-l+$gWdjJk6ihm?3(U z*5MBdnZ8_IVh6CIiq#rThG z;va^9=~FxD@=OXdE%E22=WmdOTouL_35yCLT>BMTAUM>J1Wp%-S%4JaJf3W8NRO-B zUIsJXJB%GBS;Tuk959hLcliCB!Sa07a3^l=M41V4=axv0emjwtjf0Xy_P#*6U@Igd z!g}o$nR*M;8?t`qYGCw5Jz`pPU|w0Tkdc7Eay}12^Ywsg^2jobz1p4PVUbqm-E~-S zWjas6EYT0%v94oQw;1pFF!7$9;sBH}$t*&Jn}?k}S~gCXii{5|Shk1WfGGQ8`+b9qQQ@1Q`n^kAQ za4T2~yvAd*wxZ;Taps?S?sK+^|M84FVAJCv_}CtUbQ zggcI4@quyD3zx*L`Bn}7=s6pCz7YJr7_-2DDY4AnY)x>=M8q)Z&}?x!i;~Ysbkae5 znuf8)_I#J?^yYn-yXh{TSlbDe2 z6GI@ncj-$Q{(N2A&%vpk+Hw`=$PW zgz|dcK*hLor*iYsS!(z)wv?4)BkYub+n^b{t4tN zJQU{`?$E!TwDLHZ`eO8YQ*@n1>Yapdf^8<8-BHM z4)Ji8>m;m)rN@4GkW zEVrc^S9}5~?mKJF2!BgS)174GXgD5{nDQ))E^e)}$4)k6LF1S~o%Npu-}#9T-(>nY z`l5;CF*NX{s*kY4R5uYg-WTQEjQi)LL?N`itXOy{u$g^`fBt$AL4lz%g^=A4wzvA< z3Z?!^bp5KuJ&wO2?2hd_|-*kBr>5qc4I5 z-u%{Sf*`&on8<-zhpgN++81m2`;@DJ?PG%vLj|S~vq`^2&XMZT(vrI%yJlRL!D*u^ z_L2O2muid}TG?j#2FcOuzYgjD&gT%Isc}10fQw{l@Ta1KidZ+T=3F)67C28ehv>>gQg z{9{;EE`_x7bD8~64(@yKhrhy8PsMizte+|~bFE<`L+6k~y7W)Vl)Q3uIm_iWIZ|kK zvU7;YSTVR8?K~%qd?iA!t7bp8>vmMP7LW@{6&D?NI|@3^C>AMENY<|L=*azE#mnPm zfaJ*_WkXtoZmUi7;x9Z~0O^YmeGJd)&4p}vQy0Y)Cm)m=;05QuWED2U*6`3hEGgf3 zxy{h9=-BT1ff^fReF-ZqpFb#nUk2;A3Wht>l()-!(26yG~Ei*KoyJ>}Q&J`>Fh zY>%4&nCK6j<#0p&m*g~aKA;;OTGvNBJJWS!vZ@6ZYzO6{)!Bnuf{ubDRwj^aysRj< z4Ou6nLmy^VETN%cqi`KrEofh?`}f|1D#V0a+cI8SMH|{*(ywKO0_s)ky)xt`fu-+( zikpWOD{MYc)A+J|_q5m2ki=`_=*U}> z`-x%WryG=S*JgJ~WXd8W!WURo1b^rZMI>UuCWeBU2bsM`V1QqER$ZAtD0*6r5bfNoEeO zjY@M82r!(ysJt6{y|1o_L~6XLizXw}1wbQhAq331@;K;3@0~J+H?Ghekdu4lb;H>w zVw>5+CJ)Kaq)4(IvdkPxBJm4uM5jd+<7+lOqMBUh1%;uK?4t*n-_v`pCfGd~c%bYS z#G*e7-4KU6?$hG)EUCif?#zanM*<;4c*jU{ek_s+c6Nl9=SKh^ z)f6AH#%`z3V5b+n61FIx;pLKY>Wi;@a+gL;i`45G}hJBhV@GwfyAW>L^puQhK%t+J|vE3Z<6UfLGbg0~0lbc1{l`QxiW3 zkJYT4I`-9ku#kw0ii)Ja$^-^Yh-T;I1+pcO+R`kZ$SY{|*>{0%%R>0UU#}NecUjTm zDp)mFSHD#O=cg}oAdgk-Jga`PTARDM%y?gaIzi2U5%IP%{;cP4M(G2#^T*))I()Tp zv~?1v!D`-SRWIQ!h4>~KH{QxJ6n74)Hz-j3cfS7oj<)YKiZ537wu8zGtcH1*nOD)G z#w?yz4ZC-5m#3K~-=0>Eyq3a`^&%_nFT!ssC-y*c?=M>ptD#qi7&8tV>`agw$5ySY zT~tGAx5qX_g%~2h`j*|B5^T_rYymSptXbG;cx%{xkuVuoQ2=5-3{~d)?l*!O1XFg^;wX1CzFCvsknDrnj zY3WY7cHA#_ zM|?jcCm}myD!7z&&tU6Ok`~FusP8FP-P0)SdFt2WZ975K_6K$xQ!?7J7WL2`bOVD(^R}r4CA?{hi2K&{ zoRZ>QXC8O26kJ%Fb=hb7_=tKasnMV(9UjvC!}V_tY-SrKWT;lVpMXs0+FHv1kqpYN z>I18s`dLCZ(;%|8yiNoi)I%dp+M`@b1#cE8L|bA2y9+m!Nx;XpzpJnlrimQ@FF$AP zbq?IB$b9Mk!ud?VMCbref~exW1Zq5h06xNJ-GER_U_ewIb(ug+Mu`Xzz@GOhRQ3=l z0}j^p#6#fDaA6~#gI>h9$6TyBN`S9lO5)fkAlBBzMnj^qxSu`gr{O1!Ix(NbS0;pb zrIZDq+PA{L(OBGoTjXYcVCH;tMagMYSVW>c2G_RXToPd*(&j^qfXxF7{wA!mk%m*c z(HccmRP6LNd3dDBo=!(spNNxcJ|L628VD_s?2$(4$Ney_dU1rDw!%m|9jc-i1hybF z4*mUEbsCLUcn5s>?vSVX))o!c=h-1JmdmfG=G-OL_LDdcdJ7UxJrUanovBzD>F&X(CGOo#N0-c}Gba0V3 zorfXWcWBlYY9ig3#+3K(-Q7kdG70yO+#14`?`xr`YMpfOutV9}73k#E9mP4$?C(#u z!v^;92FkA16T${gjRSKhFYCW4LmdUMX)J&A#AYF)Y*_V}4}Nq|JBsL0Tb+&DUe2J~{_+%u{dBo&oevC&W zVEeLKO>lr?e4EfeTV(}(RNwS#IxV3%uaD21fd(2nv#hM3h+N2oHpp?;0CaMHo_J@Q z`%WX~K}Tl^>YNAM)T?%iv;~CCenK2`x{3_wH45~j7Ibu^D5NTqCZbT2;(o-r*ky$d zW;O3wDdw4}uYj|QLrpJigi2y5;Sa;(9?d&`h2zv4;b3YF>Pleh+$7?Y%{e?MgF98O zg=A|r_CqS5R_CHkR7W>)MRA-ApuiN;6N;UpOeaJ;D<2$%N8O32XQUVi{h(!wh1Wp+ z#ao`=BsSt491?e?g2|?k7?+gvv?%JsA-$&zxI?-2(j=^d? z?a(&Y6F$8D$nW+hHQbha|6SecT_DOLJcJ1M&9bk8A3?$VHth5jIB13w1~k?2?s zqb^J}1hx}HLaYZe($aA2hf#BFKG-m=;j+h2lAg^Wak$4c zmQ`qPYs~a#F97RDlERv(3T3NKQqrTbGD(PKi=bfg z3tmhfWHJje%E3nfSdd6_Dv1?EUTUkrIg`li)YnKnPTHzVNnMaI+&PF)F?q z#O2h|F?!tPeENcgPP8A&!_kKPWw^Jq*DXWYzX!0`p^xq_SbaAnVPZg>`5u>DKjsZ~ z|KKE|tpQaqwaCC-yDwq<)M@kmrL3x*4(Z(nOUXzoCvDEB#Xr@Kw92Z6E5!gemh za@cl7B#(|ZVGRtYj31|L1q1m~4WUS*HVHSgGFP4Yn;?sFo8}&g!q{al_7Klb0^jDE zQ$N}=64`3P|98GF+y#Qvre@vB@#M;jh+z*uS%QadSBChtgrD`^1}Np77Ua!K=kGRk zUt7M;qat+o!}Nt8@!TLBscwvfa0_~X7LFyiElld&zeoi!^VSmNi4{ljjzccfcads2 zw4HTbJkiEBS=Hk^!V(>Yn}pSV0=%>JLPoofTGFrxyIQQB0~wK1wpyX^ao182))Yc1 zqK8GYsWRrD$Ljh4`7waLm>6^&XUfs>Jx@+%$WnPw5cIVd*|O67`MXjY&nx_cGtF-z z@7{>w!j)wQsU^&!vjo6x>_BbXFN&V`%z* zG$??N#)_y*Lqo@RzyDztUH4&*ntx(RLRLzv1A&)kIbVSjd!AHeS4+7OTBoF9eG}&E zIFAb6eZhdk*PZ&h)OVs9h4aCJ`Az#-Gq!k_&4y$+m_fM{k7bI}Yu&7(gL1$n1>%PR z&Q+$8ZM?*#bO~b@RzW%3^u{UaaqJLXylH0*3D6Zo5<*@T85AP|UU%w(aE^YvxHl)Z zo)~2KJE1Be@)}iwBV4*BH?2G5&+Lf5_3%HT#2QR8;~emQc%Un$M><5DYw-$ShLLV} zZWn7$`M-g-MT5rCI;V^lV-q8UDy7ug%U>}{L%>ih2H+FB zYVWu#vLm4=oMRI~l2Z}4tzUMGpN#BL>aZ2p>j_YnYDkAJjvXJr$-(}tSHbGRNt(Sn zw5cGZJQEXnHu+`SJ1EI5f%D#fQmB90BcCgAYjPKLcZ?2fCEUBBn~pw4kyEq_E>0yA zU94HwnjxUD`4gLt5kl=Trk5ILUFN{+Jgq+21_+h?PPUdkB^KjvB&m1RZ;t_c{Zn%- z$O%(9rBho;!G*vH$~KPd48T+(Jz`7SZDM%hl8wNz#l{w80rm_Qr;*7GI1tuvbP63^ z&WYn>V4X4K!=+o})v};1g?pC1VLh*_e7>C@p6ls=l|vSx6?QFDs*`wlejU$UUN_cZ<0vuGZBd*3C>oTRtiVDM=oB-}Vv=1^slIgJ|`~8p=YJ zUh;F*v3z50&SjTG;DmT{f=o>NoKQJ4S!zDmVLSFL1*e!Cr4hlOE+PV&VMpbH1jOI= zIe*KjY@3LbH#O)p!$;UZYCpg?k~x6MHjga0|SOtePx%NPd?{U8(6OZ?LE*1A(UYpR0Em5nBKU}B5aqm7s{h5q~ zd?Q*!+_Ei}$Y1Mv2vtCpu`44wSMgQcrC=$svwM~FOytjDrLmoY${p3We2mc3RZe=uo4^rrv3^oG_$H)I?! z{XSGlP&qXuDA|bZ+td%-0VMgPq8(Cpho(lov&j9vZ6(&J1N$I}!BDvfeN^hvqS!g0 zjA%E1cB1YHkAF~2xPm-7W*8Q58gkL9U8?|S+HR)3j9R2+zL|=xk;ExJUibmbx?{I2 z63|Js+b%{%z15*tHlS@F`)M#V7$6@1vFZU~H6(f=|&oD69`XZL;1sjxE(^G$HT1tRiUQwzfZm|BAV*40i0RRoZqx zO7Y8`{0}p=0|4V?CqSFVi4&o(B+9TKQKkI2KX(*4oKsdDq-K}nt-8wek_&JSX+F3HtZ@RS)V2_h%|9^sdsZ;NZosq=|VFu78s$&@)lOXuBUiXxkUQgLj)NLzmV zn0TXdxx7FeBUIx`xaCFjPQnR5bLI^vH+czsx~NaTks&AHyr2Hm9)2H3!bKblcF^O_ z7EMf(iIT0B3m;E-w}( zt1jaf@~Ery7f$(+%XmnVtT~K8hqTSw4{`#1Z*Lz*l;i$quRUv#${PkEm^CR>Tc+A$ zs=%+J8E&~KNQ4U+SLYY8nQ!@JDjlgGm{)(2nkH48U-Br4N~w~hNhRdgoR_GHaZlAu zGA}8wbu=Tm1=Qv6RN}tyOMLf804>mi$Q;Ce5KMG=5BgDY4W@*~kP7h=B`LDerTG#Y)e~bFz)SXbs zu1L(Z(X0t^n@f3SkKI|X5P(yOEYg%j-t<^)LbO>BdOhc5)O_bUkTyrnVwB{^HM%dR zK;P`$+5A0H`DW9&Da%|PurTEmy)4qddQ4(!A{2zS{)P=m7BVhJeREmxwKqb!kk{4F zUfhHvvQo)y{O$YJwrUkxeANH-8mCC*`WWdwVN0L-)9FambT{7o9C5e`G3BdM0N|e@ zHQuR_YjERowz4BU1)X?Do(?YDI;lAra8xf5m@bp18y6dMOI0%dEj@EZ2PQ%bFq%^= zcs6h|lPmeT5IdMkSZh)g4vy3_CLkUC98Qbmki;Y_vBx4bU&z24igK9SBoLB9PY#Jl zQzR4^5Rs{k6&q*NfdQF|ne*sf4k+o>l;IJ&t!>{HK}vf7h}mWp7h~oewUUbrdSOuX z4)p&pbB6Ll{_s9pIkMo0Dd36xvrZ6n1n!qOy1PW}!)0qp410QC_rCRD(Bu;(KrcT#NlLb0Hkj7o$MH16Rpne27^1_FwOsp%FAx~2 zGFM(yW{sVGkKBtlv??SPonb=z_4%X6Y_b3ZC}rfD?5qYr6{mmTJU&+qT%=|x8; zaC#lJo>Y%=)o7tgIh2fb$2A4Bm^V;DoNml*E&-n!Go15M?>ry<`DEcDd5AvC8UdyZ zgV0Aysgb{LN8QkrG?O`VlSP*@qsDxt@q46u zGe$NEmA}D>%vBhxfg%Y-t*43*B#w7M7mq|snpBC|!v$&XvcGBo4 zj=b0+;vbFN`reV_=5Hu00_t>e5zy{@oE)Sm$ZV9-|E2WENMLW*K{@Z_pbbsytBlL2 zJqh!-QEHk`nX@#ERr}-Zg-RUf1a*$Pm&c1${Pt0>wsp9;T9+{{0e22!B{JaFbph*o zrUNo9DY%4y!WoB|*Q>V82l$|yx3=ojhu!v~qjF=LsrE`c{7=;~6!egNZv!b=N&r)T zOOk@hAVxUA(322ba$7tuzNOWcYOC$1XCW`GaC6Sy5hMmg#D4mpbBR0}&%G-saO`0p%mdtw ze+69{e<=S9(IF$^;Sj-=AA(e4GF>1X$?5eC19_0S3?@k7gFYxm0-L!3ljCknXHy*a>D-zRwV&F z`|{ovfe6e+$`iG$|Bzvo{nvH%IQs17-i7fwE=2~!^w9`j9`c8eCJgtY%gDlf(+@u& z3s6Z={G*9}6BvABC?78yvu!6x=j2?IW6k_)$Q?*H#+XL$LAPxCU(4oM)J(LDyBWP^ zH!CpCl?^uA1JA{Rxjljko5-mqn8ZRR4?9fq662-p+02qV-4;ai1H2E1p^@dZ+R2p~ zwdF&Ag|%;wS@V(T?7|h?BtK$BG82Y8jgn# z5!0h3uQ6wl>cesJx_-h){z#Ad{R;`!20P-Bi6WD6U%3ipPHJ9pnFLd3b4cgHkJB?~ zfp!ObONADKg3-J>{HVZry*Oq^k-C&rISr!COGqSEyC`m~H1epiowv7;Qc3SsEHeSisUhX|!LL%yjNRi3=e|)`FRGjO!EgIaR2$tX) zJOqNfYjF1jx5C{C?he6&yIXK~cXuh=wXjob&pFSY>$KbM1Mk)N$LK@8K6-EZZ&i*_ADOs_Zlya`iqP~-80vEho z`BDT0Ijh?s;94UCqt6i{4s|!mybViL$RBT>Cao7xFWnqpird<=Eh{W1XolL_u^sJg`!4kYumk$b|$R2$QNa&F9C zRtDyEj7rM)M4hfE{8}byVKhG=pNfN&V4S!DHZuq5n|vHva>+1jlR9hVlmL zYTU?|3?BvjrM$kCW2*O@9gER=Tx1(>-sZ%g6D&0q2`^^8XkR#Xkjo0ODqp2L1Imn520yD|Q64uGUM^jRx#FzqHQpk@AL z(p0g*iSrppmPQjPt9l2XFatP{-4lN;)W zS5Ua$JW$tX=PmSDJ}-8l5>c)U0+Bzl@nWsF*t%-Oq*J`=UV0y_LMf%}TwD59Y(;za zhwhQ*={-0XjZN{z%fzTuI-cGVYkbB?oQaF>9I0##+Z#z<;BlT$F*TT_QQZDl$p%pS z<>66!(FqRs&AqwNK^v!1B&4cVYR)uT$Vye#9a9MJOmq7UwpJ;0#F%N~k%T%(6l^8d zL&(|q@oIO)rM-3>Ga)m>GP~uf*@fUhh2rC@YBp z>dAf7;jXUx!(qsaB%9S*$i$m>hvayq+i-U!GrFWBH)o6cK)#4MYG`BM-qYi3nAlh| zNQ*UdG}v(FSg)b$=iaFk#zmDzB@Qt36`(s9M19HV;JY!GwPeuq(m6=ayq79E5>u*G z)`u|D@iET8Wrt?n2mF>snbw+Q%$79|k0J>Ncx&GBPvI^@899|EWp%?$Kl9L1tyytf z>}j3B$Dpu_ew${QuyqAkP$`FF-$~!xgU)mlc#r?X>Wp9R9_^$MU-vc$M9=rI8yuoA zVB#6#bhPC%V!PmWRjg*!Er`J1QID{m%oR?#SAyJy5cYkwO3w`N_E45HrGP~~{ih=F z)>?jrG3PEzAnEp%Ghx1w5464b@9~Us5)=07QwLHS)y;*8C1@tt)P;!$X*``s^0=i+ z$fcZi$#C0a@$QieE$SSF2La7?*p%{m#^Xw7YP-C1iK!QtLY4_6bF;N14`UNTlQI_; zQM-ITAP;4uha3_1o@%UG`>9>JBv9v#?qapC{Itns@6_v_4|>?Rp22~MJd?Sm97d)EKeWC1kx$yFWG$P?MBN!^C7tqf`nOAD zrsxb3kc)$&$@Fgx%}GPaDRY?zYBwl&7)s3F^gh<;Q%h!k>00|P8OgxwrZkf^y-L2> zARhB`eoLIJJ*_n23wIGv@XP>wOO%K~(FYCX# zZk_9tq|@4QX`=Jyjv0!mO4ul+t*jQ)k_%ccyt=Pf$tT%G315a3RtB%>P>{_Cc7GYR5w(=$o zW5hhhtc{aWzLG%IIzA5d9MN#-xE%J7|Lm^I>$gH=j92hyR9ecbT|{G8PY>+S`sA-& zZ(7{=E~_T1Esj1{N(Y?pf3y5f=&|73+Elc>NxY`!VY9e35c&4G|D!x^j$rQv-%_S$ z$9cGYy61$PCtd8X7Rn4@-XY%~$b3B^sj~aS<b8!n~9_DWhHL9F;|uZ*{n2i z#2^0OgA>&I12gC|vhbZu7KOxcA{04xFeu`EB3%$<95cGt$KUw|;%CiKf5;v*YKp_d z8v+%EM2pC$!#*F;d`~~%)#|wPOX;lN>0WQIhx^sY+)C2KW=wjK3)NYS0R6_T-#enX zRhwmvXd_`G8_Q1}67%sTb&{#sxaWmH0CJ_k!JBmAG31It$y2NG3S6pzgUC7}sg-Gb zJZ6oi!t`5S)}lzgDyy9UCf_c%>$XR~x106!x?2KCIo>)3{?C5#yAO5D4Q5;yH>NC6 zVp$882O_+S6E{cnPtUDF~%UIQJ#!u11DPn7V&=xtbv-)3B^~rCWG_!1K64qo<#j z-Lw?XftacH;v0{+41Q|6QhZ&j7P*5MgHByN?qkgwzGdk7xy{Yy3xdcoAKgII*`ZqA z@G`^dKCq5|%0WK4u2JMjiOQ?3D;zEEtUebw#f{M~mKPam`WkqAOl%lc`1M~J(*I#k zrNd6UOC4yZt3Av;BDyPWoz+8qL>RTciZ_(5Wa~T{vKx;}Ujy$+C1p_7x{%+bI|RQo z{bqHtsapueRF1q5_N(~)9 z(T3GtCYOkfuN2u^O?d~)uSR@1QO3ydrJAOHNe%_xlB~ znKE!GO6%LP^}y=sob9WC2MFqeSX2F0ZQ42kRkjPFE)?z0>8{Uowm?L3I&yIC&qWkc zx_aj4N~G+7cZY2tpNU4Ew52iYxHU?^X1WK**Xyx`{S?jB6qj+X z6(8z}QCF63|LIK=N{(Ct*nVMYxsklGR7@HPSGC>9(Shl3k$U`9l|O0}CWuooZ^eD|}LABk_147B*9PjX9p6 zK5^1ES!&PoTn?@h+^f&lePK`qRkU&v`tZld`duiUE%YY~V>-`&2h(Zp@0kU@>2fA( z3Hp$Yo{$UxM5MkUB0`ao!Up&P0MNpMh&tb)y~(I`@tJpwOr`nVan86t|pRx9RpcAbFu&`$~AJ+JX8s7{PdT zsdg8si-DK-XGL2>ix_9E<94^S7&yw$#dNlsh8x!@LP>e1$SzlWwpGl*V!n>n&0{BA zDXedRdNMXw;$U!#!tw0c&0_I48Jp#LLMn%)nn`B=?5v7btqG%RM*p8;6)Y~|GkJYn9OJl z#xY$?=W#)2h?;J1n-^va&pzg`QdpZWQI)Blitakb;qqzl8fy6K|BvW5ji_?cQI&tI zBlX0Im)lo0z9Kg1!ka*!V=k`966)P&d8 zM5}u{L>wVNG+N;D^fEfwDI5ad;FiYqv6eK~eL*HE|97DBZ1d*I(8^;die8e@HNr{-zh zp&#rS@#*(m)h^*MWE8=}c2!(WZJBd6D>U9E#x`6swdw15+HU1Ev-zB;x(^B@IJGcB zOb|UWF4A-eiHa&SE;kTj;a~GE7j+f-M8>y$D4O%ub$xZL+jk3Q?T&{*2!88PoZX3z zbOIXb$5`oM{V=MeXdWq(8C#9=j2pZB13kf7(xTdE`MddgdLmkE0Q5<|!0C7%6Gb}} zxYmsGbGLl?lO5v3TiOLS5kD%EB|#7UgJVx5$E0Ot`*s|ndThI)p`rQkta+XJ%%?QX z6m}RGX!HKj#>3Rly3!}0szMUa3$ho82_e;;onLY?$0Dyx zZqW{QpH9tZPZs4btVesbO9pw6RHxU*c8OAwhSy_b6M_}WtpViMtGuy)GW#S092kA^ z@{Q%h4n|l7fa6JzzctG25vyGGQLevP`~J8n@_5|;J$(3pe7slB<3BVJzOhV^`Yf`I z<9uWP2ZB2Pf}r2qu*k7TJ((Yod1=AH9JEIR9HBMBmEb1p- z;k~QERcWD^($pK2YY8!u3syjV(Qqe=d>xp9augOEX=c+F@dy;^Jv`a0H7yzN#@LCU zzSx^BU7m*XxI!CdC9Jd@19ppqyXg6?094`*^FX2!$z0a&8>pgz& zdeCO!zHef#c?Urhe)QOritHYuuvlJq3oW`xBA%$E&)RAREV;ylrwS3f!(3cTH%FG0 zQ^6!&DmkaEZUS8%c1gO-arCtaJMr>zMRCtjCy$T&HymaA2^kq;#|xE>391Q^`ME4= zboQ^q2U^Z3f5Wk@8-byd|0Q1ep6#Huj z8ma+7E&wIk**bvMYcOOrwkQw-CDZJCW<2|V&ZvyoD)WSLWZ<$vqQv*DEvwXL;QKM% z6mbN(WY602EAeJek7dk^(g(hKulMELw5UuQUl}Dn{ofh_`I-uXo`qT})P>(|4}OL>6Dpn1PuFbw#< zP_NCMjL_n;uYK3&EjQ)s##BjSQ<>R@!1D!#v2mBzqSfo`t0OSlvKXb6>~>2D<z2J0yS%(SKC=NV-^;A>(Vsedz45gBua`P(hIZHGjT`gqb2Sibaa<{H zRDw8(FzltId}KYl95~z^QckKF);gRoC$Ni>Y7-N~2_LMeK|({x-ycg;h84a%igdH* z@;RC>&2?72c|LqfcKWACj{`anxu8k;zr3JuWL|qdyOoJd@#@r-P+>)pVD4-l=S6vSqG6OjeIOulx*!j z9qKQ@xjj7akQ4s2(!Y~f5Rp@!l%t8*?WsT6Oapde2;N^H_g5emEy(d}*oG%lpvz0t zcx5|=MSSefa>23!2fu;~i3cwbr1`S;rtbuTo7>)LW|NW+=r0uxPq}4MUH|l$^FN$JEIW(YAen z@lj?z=h_sURp)~5FH2aBUr+nTHZ){i;El|?Q`w4|5dg9Z)2bcK^m)fq5N9;$N@kmf z`OQHv4b#MpFf57>20v$5cX#)2x`No#{+DtxvQM|G6BE%UK37O{rNK-j5!a*;TZvVc z;I?1X!JK>UR;6#6z@-6t!vTJ23KCbrM2N{~8>?aeH<@wK&#S?$DG-l1HR9jr9dGR= zg)eS5u@VOmPfxWp!Y!-myrDYJKKuHyCOn^qO9Xf4Y07f(e0&hPco3W_x`g2Atck48D4j)1s02@=$6ZSEj^H^PjX{p#&G3BdPkf z2uBGS6@^>m(2ZuT8Y3JrY9jypTp>3Jd@^bL->m!lASD)SVK91o7_=pPtdAtkBSKJI zw9h*?^3QFUT$IWePp9`inh8-cRhj_uHfAET-z7eKZ9|pqsqj5Y|4-NXKluL{4?3lq zaj0cnt|fQ})A<)U*juFV6<>CU=SlI0``K#mpq^E&Es_`%fDoa zMeHJhRY%2i6+d^aoT~70Y=a=kq1QM9bPAJwdq4ahCRubr8?9 zDRN2sr7)aQI^CFE?=*Ix0hQz@inK)iXA#S-%jj?K2*YUxbl&scOdXmYW9r^ z+K04uir4Xx#q>K~6xyJFESk*q_4K-?U0@^-(7GxnyHbfdJ&~Val=1VSYULnHxY9|4 zFZQOtB)KMvFb}&@|8J!D>)XRX4-IfDnVB9}{RH=1SvDvAjVR3gUs*i1kxbT)D$;Ff z=*@w+HhC36tbvobTkXmB1LoMTJ$I+7)r=bmKoeQY#CZ*5YQSTz7O%5auF_9XP*7?s zty{=x?=v`Qips7*zddMi|H<_j!FoJOE>?Piw}(yMNW#>)u~sYXl?>cOkVC@Pj11T=Uj|pC2?PGdW+WZ`3aK^g4jULU|_gE>mn! z{hF|ztM)@EYEl8xp#DE4>t7w-A1lONDshGV6!cw!>X9wxK$l0qt2hf~aTO0_>jwX4 z{7M&%1!sw~DLs`K%`3lpV4Dm?!Ts`xTD*E-XP_rEu7eKuCTcTqpTa|C+N%*`YLJ*} zgkGzL42th!p#Qne3YpOAirJGh!R$!_Q6O#aw-Os|Mbv^Io6ycID<{+L&7nH2f@64c?EWgb24mhRep0y&93=i+TTXVUbwk zVXOb2v`vA5nuZZ5kZm?1Yb6SuCIx^!asVBgo1I0llDMByFzMK|_Z(P}e1;T0$!=46 zGLQjGKxxBV2>DtPX(y}DblBudr>%2%k7HR^rVDcPOz294x*AY(IaGD%{dczIchl7(C(`ERCY zUZQBp0I%A#172Q=+xht{Gs1vDiOPlK)OoK5G_%?*FOYp&dq%FftIiK*-iE4QEg8XR zn1lLUPv`*=Y+^eqQ#lN1B}2$r9)F=T#8>Kfe{bgL6NqX%R8fMoGgp;fXwD*>3@a?>6dr*jN=ThG(LXb$l_^E=`NusYWFg!Xs z$u7gN|w;myZMszJiTF%_k~k)8sJfI#o9 zb7s<`s=ttU`{xhm9$JZwcA*?my`~~Nm|sS_a`2J9Tz`rB?{%Ib7`)QgOMd z5a;fFWzE){#=CRLb0UGBTxNpISVXk&=(J%XbKiSPdkJ!EE76uH$DF}%J&Q)5|5`C|tF(MR_N1P(O(5KlaSjRaW-Ino7D6p8nkQ3%Q^l!J z1_3#Sxe7Wknq%zJV0>U|aSUdy*!))-vQX<|`q)}cuJ~Nh^D;Lvwr^|2iLNJId`Cud z;bkP&TW(t6i=m?%aRFiCKh+Bobrq7(T&DQSS7+L^MgC5bqI{_S%vr4#8Xo-z_bb{0 z9eV-^Svn)@6*BEsHun7GJPBw*?~(P{YTt>*WgrQi;{+H*{xrd|nU^?%eP54g8r%IE zkgH##ucuaAdrI7z6e5tn)H&~p%UoWEkLN=2cR>Ay_-D^H$P%b>VKG6hyt`47f==uP zGX4A!&}tIq$~65A48j82ma;sB8MPa#PAUigGyK_J{7(FEcz!OwGZ0OE=NS=#sIHeu zLHwauxSBhaVnchwZUAu0<#AW`p33EPT?FDu%VGCRb&M1BN^xawu~u0cYB??j$3?E& z`rZ@>MDNb1V>~Evo++#XmJ@s0Gi8{5yQmikEA(ianVklb#q7TqE}7aT3%x~wYxxwA zG1Lf$#p5>q%omtM1lnQO{II`Y#3$z! zA+66&2aDe^uSM(&&FcCRB!rvC+o0!=3Q*`S45ytv78tokhjVefEH>8N7Z6n3<^OVc zOn7vmTiaNZKVAQrAt7)g;z>rZLvlW$cP^j(DlRR}lymr&w>C|X%ouQfJ{u7}|9XCEoJkgQ*K#K0N!}ba(|Ghy4<_A_Y(y^3l{V;xF;NfPx zyovIg_siyzsXG{ZsRRdh=)=e>q{mMHP;!Y{s<48;Y$UM*mjf2#YZyu;HwZYa>yBOv z(yViSh@96X7#kUBASERc?I*@l%PZ=6Uw#$1!zcRk-531rp@aGm(%a_bk0fcP67ha_ zN1}uXzA5$7r+csvJ<@3c=2q6do>X4NO}0;WfS7)_PCA+sqoaAn%7s&qt!7!O%h4)Q zX6mQvx*V%AZg!h=ej*eJWKm#`1L+uKWl_g(MEf`Bb>cunyk{JYtqa&8#HVL!ECG1b z=Te+EfebatTNqSFy80OYrBP^jWX0>Q&-`_FKE-u(_&;bT8vt)pL@P7V{JP2F!SQVJ zLg-sslGYc#H=1u$y&?hnfplAb>V#;|T|RjZu|_O#>#=T5+B2J;sTY*)jr0q2yh8o^lZ&!jA zI4+e8D9;I|`|fj)<9HFYM-Z6CI9JaCzu<<$J747I+PU2v>CbnkCk+c;H@5+>NU|T*Xf5Io?gC7kl-)( z$hRqU4rKcJ$QMD}YI}Pm4WHl?BT29EP=Kvu2cX2Q(Zj$(x_B@w%~sp5YQI!6%0%!c zudH^QG}7D)G<{}k*?)yxg0OEcIQ{XMEbN0M4lY$~l#YC%+J^S9S@J-Ijjez^Xr7@N z=l;q-9o?^w6Xbc;r$f=nG!sqqgedFoT$Aq~kGRroHf7_upzBgn1Cf`|L~^J#@e;m0 zn$PF=0@F;ffFJBqSr0Y2-EWHWqf-Xk7Ay6an1odFYl2<=tM`2(g|lmK~>BLMA^Iay6@| z{_u4370di6fwq^}KYiqC<-9!?ga1L{6eKW~%9i^m@Mg61`CJ;c`_Ma3q1q}mRI1MF z$vLD9Ay#b|O!kvtAIushQ5#mXSXI*6qg zp@;;>jUg7G8CYc=q9v7i$P8QFmCiGb#=IBl>Ohkc}~VMWzv12eN`f>wa)zo=kC!x8L_)jeSlV3i*%YT#oyZSfAbHvO@sdg)!6#Nj~cDq_Ca&qnWGykrOkH< zeG6Z!l}~xkx+%Ywq?Kx|SeHV+xjoc0Wj$q&NdD-*0#e5l8m?*G5ju)z@eDz@bRJg zbqLot!Jj3UxK5hXWiO-g^-d5R2 z=TN5@+g^F-9;w=R(#K^s`8{z$am3tQwaditK-Xm|&8E$m_T{E_!mO)Xzt}i@zgL(P zrPh50rL3|8Oc&{GhMJ#WSWKtgVCAR45ppCto86m7=_;-jzKaospMPGmdd!Q^R&`jk z^~U!|DLS2$w1#8cL&VnaR#!g(8YO#0CHxYz?r!Oxs7KIXIP%X64iq1hEXPc;YN^wm zEd!nCpql3*l9D#a*i#F0PPkpX{A7yw^=5?q*;SD5AS?j^&75+$eLX$hU|Ujx3fXOgy7ZYUBXXZXE(N$o|#D$8wkq%^b&J4RY%v}ifYH) zBC=`su4T?R^GnWV_vYlC9?!>}NFD)#Jjpg2SUg6m-{mwG41WD!j!R#Ewayq0CtV(q z%wS(H>UD=|Xi0D+=a28E82n`bpB=<(bz$fVD z-LMg2Co=62SNR7Qmf{^qg&!JBsWc4Md8x5lNFdxL_I) z`XBxMe&`==5uh*c7T$lQKTS`bTPVLkp6eaVxX9tpvSM6Zv7C5heCi2LV*Ffu0tWLh zrv}Pf-$VDF<|7ikP+!Hi2i$&(Iz+X^P@Mj_bN&GoV(fkEd3x<|*P^kF&p2?umck{Y z`|t8^4!fw#V%-A>dp$KC=AFr24bJk;q0dMcxD9(x@e$o)_@#Ag*iEr!6|dJ=D|VvZ zRYL7~_p0sE&~QM@srTo4YnFFSLfgYOigZ8?_IIkUUvmRKe8g4rH}SfOb>}ar)Lw2b z^{V||FyT}jnH?INo&7_lP)@h}Pj4LD0x_SvMxw*|pwsb!c4+K#+4&own~j%uRjH9n zbVQTH2bM`#nHv`U>!VGF7=+_hsoDXF=nOan1d)XH zr4oG)f{IK54=<^dzuR-atM@e8d^9%lstVE6AauXs@4kZwj0NwuDM7KbsD0QdLfPoT zjr%pGPdmwWnni0aYVHO}`VGe!4KYqWR_z2yIqi;#!4+7hVW_ zuuBqK>L(pWvqFrPBB7GRN7K8R=z_*ypUT2L9VxUbN<;bxKkQpH$vY}p%r!`nq9iCD z!poppb=P-oh&dY~!22ew=3BC;A!vn)8I?E*bCEQo-I1h67sY^5|8_Ex1BIx))E3AA zS0-D?O29O3iU6mCfJmhsy{kYPFpmo`W|a|@T;7OzlFLe~vSh?a1(PUe`oX2K93+*# z49=9*V*ft(2S}K{CW;r5-XxivlDf8g*c6pqU97@}iCfE!WgeW#FLd?9JD^$g=Zr5{ zPMdFaZ8t7zxDp1g`ZkI%>=S0CUh?jD5nPmJ6c7e7Sj&>=r4#tIQJO}wM)K{4!*Zja zPa}E36v;TGdq9LMV<=Q=qX3*Frv#F+7C7O4>D`;(tv2(HiVtL z^$1m`F&&{xbLV(7*y->H{$b`vwn}XRy6dAs$UGl0|cJXszAX$I|OLv!b zUz5Dhy42V>2z%Q6S$mFfqjb_ftY*}Jx0Q#W=)7?rtGG3L2Deb7oxZ{ouimn*b>n_} z%2@W_3&h{7|Ct_VhQzQ2DQ-~VIM$@vozP=VFKAg@3u7=dV*;1D5@J=dYUCSp>I{i! zIP&ZC3-co#56_?AJEpjB#Io4`*x((^AEKwhb@((bsGC(0dHT8D`v!C&%p z?)FwI586G>RexwUjm;KUDzCXascHMH-Y!nd|4gDhlEipWT=;2m>}|1Kmk0bIXZK_&YZ_vpZfRav4taqN>W}tG zZ`LzB9V$L;Y^*aj)*e_{3AUIkk#fRhNxt?(C*=GsdL~^iE4FCn#rw8uWU0{8{8{#{K1hK|5e^CzaSEIhyguza*Q}_c3TlmE6hhv;h{BZ z)Db}oE&3SZKc7SRHBv(VoC7{EOA>_e0FRqzDtT&Y$l4wdV(cR+ccW*?#hM4Lkhv*E8nOpV3~4k`hX?ZZO2hM-n0zQ)N}Y*U;G4uS~)TuXP)g(otu- zGH=YmlzU)?&Kil|Cbh{0C4iI@r-$v+uHGC>xkMIRZ4^>c`3J7haTC1hG!A&hLKD3@ z6Mc4B%^&Y6m!7P^x?Q+G5TRUsB?(X2m2L7=TSxMcj8Qus9Zp)R&aK zgK1<%HTgoGJAekQKMK}7XK4nXbwKeg!U_J@4QD;FYfKNc59oinby|Ujey;XxP-*lY+pRqx-dToi(Cymxoi(cynvf+Q+em!V zOI_VCLJZehmtJpZ&iwO^{eR}{0m=`x_q*DE3WOm)Vky%Bx6iaoX6d6P7PP$PGfXw# zx}$D2=}@*ZSM;_~cl*YdX)^|93xpou*P|^%#uCqSPT7WEG%`ri z&Uw!9u%Q37cLqQw%6>P?!)W7Y{iQXxu-2)1M>@SBMqztlMBK(Jkg`ug?h9EXP1^|LV9lSn|(aEEqN?H~MX+LHCKD`?2%KTKJ!ycbL$`k?`>n znq;tINehcR0DM4FpbDZQ3zD8mFrefr>8`!*PV#g0?1e3p02rTGMGcc{+sTNBTwT#tp=m_&39D)M%a{9in*4_**~&x?#-IURx&R7vCd*!bkEmG-t(;L_Q%5;5PF#3B223^n<#`hu zF5KuF10xRCU)7K)`_&fxR9JFW`C-;yV)fP&mHlU)w~55W?o12dXSB%b36h`X_E?wn zriYavp!{LGwY|jn#laQnb0D5JKp4pHoNT7qk&lza|`RafIJaM0@$2sLwVXH(tSde^L1LG6f`p=~%^j>pF?K{OMs zQ5VlTAx)>UE4u{H zbM=k{?ZKtY$$WpJMl7G=hV_#jfaqOZ1}nCt!D`(y2|fL4LClt?o@G2rcVn&?yfIU~ zlDI&hr8KcFK(d4ggK@nPMS&cK?r`|`F zl{)iNB@8k$GU*V<;!8L)6-cUJ^VNS*)$$vwAqPzq&@W;Co!Sa?Q1Qo##j2m@>`#rn1n^C78=(2Z#_n((9TaRsRqH&^>)I^C#vhrBMRdqLP#SGEccv08{HyvEO$LTG=refdQT2#wEz2Co}BP@t- zg98E&qZpjxyMBDvMD;Wk3$1YVOaU)tFtj$;7G zZ@*NaHQ-`WHQ7qer5sPIc%dV-*tQH|#T+km*B7TGbJ-Lkh>imsUdL_^?){oBdw*EH zxfCrPR}qP7j#)ZIyIGZ!0J%(aojxZqBKEZ4Z3zR*H3JU+aPpouwtSuAP1y+Mtf+sg z#R2KGkN=1TP%b^Bn;B5r*ua6J-&ovQu3DF8S*xvsCL64D-WWq-gGu$SWS|*-c|Xca zO^8;kK$A1Bytg&LOlaeB<5%9C8hNQQzus&lu@ot*yWi5usaWi3dr2HH6<5O?gYq9{ zxw|_x8DDEg7Y1qZ2-loyjF6pNvAqDs1w3M|Tw*Jm9sz&YN)Z&N=hI(4H(z-*5-B(Q zKU_sI#L@M*?3~Lgj*P`UA>Roq35{(B`u}1$+3vlkDNa?Pz@;lQ*K4O@HO05D79;i9 z)N~!F#v%LmDLk&Vmqe?TC%l1No;Y}O6{C_L7ut-{ef=`k6=c@)C$@ z0S_u$hO+KyTnw>t9x)wS#^3 zCi9=<_okhM)@KJ9zL`6X)LL0tJ8)MkgvNr|efo9*J~y~&sztmH@Z#=DUao;)p`t6l zszSH--9D=NYsF5u-`V8riP(2)B!PxPLl7k*$^sq{{M)WsBE0r@kA@HmSd8Smp=1$ygrSQk0WwU9)9R5R?d1 zWUzyx13MSUo{!2EWoMk6k@boib}9zy2Y!;F#L3#7%?r^0Rc0tZ+pmkRfYUnd7~l?C zsL@GE_wrjYiBlUEB0qJrvrp`(xhC?XPe^(66Z;r~l20E?Y&>L?ZDakdSo&PwMgWa+Sr70iMGJ z$3(4EIb{T$+oq`v@^>7AqBN4d2v0^08FBZ_W~0{{%PVz-SZLdNF-s=PwN@0~;`B5x z&HGU6+(WcnWFU0|Fv{MDQ>#@qKejmWY^(8zEr5>D97fZ3joTeQ?cU<=w?;h^Rk2ZJk_Fh&Xw2Pk zykKDk;UO(@w$_wa`&y;>)KoP2lv`Wwir1TVwHJ7whT3U)nH)ygwf8>(loBJ`v^a!) zD?ygc<1n#LinX>nBT$?^yl+<@!qan~Qpd#zdCLnKn z{(>E*bDg}*f7-pjc1pHE?@%;?$M>f{?B;a5f#0>pfWBE4dsHJCZMJRMs25HViuNu= zsc;+oS7R&udl@;-(?SE0VNi;KqR`Gi$_|}4?nFwB#Gua{9je5f06?gL5YS%4j|7l< znE9}7=X6ObfUM`ul|sAgWWapav-2J~kjMVKIAGjN#SBvT5<#*{P_esFt+C>sza_hC zr-&X&BL^`NF?d`J_XJN?O>uo(KZ`pYNUq4xLX&Z}@uCj<$K6*)#3rZ724<2qsL}&l z>bZK2Svc)9l*im9QoHM~*gYz$lM79>_$|>5m(d?7f!CLFRakNL#tPMlZn)4@<$(zJ zX7V*o=D^y{Jhw)zb4IUY)ZUHx+fa+{ojQh6j9AHQLBsQ&NW|MAGG}E66!XEkc1JdQ zQng;WPk1Pjm<;`y_2?9NW6U_+X?hWkCZn*Uw^X~|%4+)~o5}Sl!|nKD{NqJl8%176 zwgy2Dv;o$4_Esk78O*1?W z*QFM?Q0JmGm;1AK<|CZ5E{<}pdSu?8w$36R!JEgF@7(~Fwj1p8h@fvR==HkPqh#K0 z9#cu*mfgCSQIa~2ZSnIoT!U)tyodPom+pV=I-Ez$1qM6O@LSdUubG`4d}$dI@T;28 zu}SmFtRZ~n`OS9X@4#vOrB`y42g<|9fI-u7= z@k>uP=G&p$C$Z_@GXz(54&7TyOF00!xSnG6K#}j;)dIyuq)XdG#k`c56^V=_O%z`N z6>LmJ6gbTYo#9giGB#Jf$wq7V>xhqsNEi|n0fU|n8-QEVJM3LU(i@xU`-h4U1ojw# zfI(__*r^0Dg}vETg>eJQa6dY2s%Wi8Tytt4N)KndD9Ox~x0vvAU58f*pd;=@yP$>w zjKYn`uSq`cO0J3-#BJ3T1((uv{{?m?+*@=iY?LgmEIw`U_g!7&PrM(MK*4%iJBM>8^@)dWRn~mA+N{k{or*s}~Ta~|}6b6KHpuXF- zD}Rc1c=H(YWzTJ?m$175CTebt@S}6qIE5O4OYa>2>?q`2Og`OXT=mzb3$iQ;F??5B z2=OV2VLx{on@6J0P)27Yg#(~(vZ+BES zCH@ZfPG~O66)03Z?{b**<*g*fexBN06IAPTV0ACq%gK*{{c_9uI=^zjtrrMglo>He zj%OD)dSBe!22$sKlB`iL0Mcl9d6~|00n1BG2#}MX4sp+fCRVY_UQf3yLG}9ahaY-H zCH9TIySoSSG-a+`o?!p*MWmwzP%kLtHv}P%ps|h77#Y&c)3gCV zR^fDJbB5Ips5e79OcoM&W?TycN=y&&s17p0F-8jAnM*5jp+F0B3$=LJnd_pkqx_>$cO(!*;~hD)i!IO zf;57Jgwow0DBa!NE#2KM2t0Hn($d}C3P^W%!$WuHS-!DfefRgBv(JCRx1-5$86CA(q^F*>Cn`E$&^>N` zvUxp-ppNcIRB)Q9t7%p3N zy9X0n?m?aC%+kC=I0`PQfH=C=EhU3{y}(6V=}YUqaJe$*YDZrC<~6d9oP>PKf$SAt zpRitKx~Luw(tBX>zNOG{Qz+th^eO#*Ww_6$I5P&;MGFk# z$kPj`o{cGY-T=vgmLTbIGPavbNo#c|S!U>L zzyBL5AcKF!i^0%vl$lVDMNH&qj+_&#x#f0xQWDILAy4aHu8KuIj{five0KT(SwV)( z8#Jp%IKf3a%ZbJ)(fe=>Y0uE7fG+{F5qAEq%#2JT^C@LPOJdl+?=`Nt$=CxCJ+ZD~ zE$8dzXl68hEmYAjj-Ui`j>%iPF_rRARX1I$h3glewl~2>U#GEh1y*SNvCS$|2B3mG z^I`3jshGA-`?MVWr&B&t*t3T68t+Xa7__sQEUF|QXKqnfZ+(aWC{LUcECK&g|F=1; z$QUB z*y|P_tvI2?2CE_hXdmN@C>(ESyO5Ey8QE$Thmj z7d$&~OA|llNF>}Q1h5d&&67Ak9_H>wwhY*-5y1C~uEQ*an;Ctuj^{*=+Xre|JanJL z`f6Dj)3-_`vPK^u^F^Yfbv{m4F0s8o9^j3oTdzdn@KJ<8IylVR)zpK zN=SA=Nr7*};l1q?`(!Q7X`ub1e60mxzJ=dLTelPg(l_;FotFOFrhMvz({B8xvDVO1 z&t=KiI?lhje>h(Wif>mz9(C(maM2$+|7D3$>fggDS@6f8z6rxu+Q1V_+yS46q`|tm zCHY70?+dt}T`9$roDL0nzY1y&$dwC)!FZ+Y_BQiF$7ic*hkp9zNmbK6yk7j6>w116 zT7ko!{e9d%5uKj2=fLpyBxXv&e3%=Uz?eE4l&(|q=P~oItFL1l9s1Bh#7hNGRDwPi z*fMF>vunFqnorit=;$yR8ImhPbSixsZINguaciDB{;a>g5I~DrVV6I6dt7WV|4}O> z!ji5%DWdnKoZEd8NprSN)Pn2CL@6iNq?(@5$p#!3=F_+EWn=$?Y7^aWMK)qsycmzM zS5n?M1Yq;%Xq^u00bz=mp zD!+Dh>BKM)r5we6f|P&REFUhrOyp0)4KH8JYk#u2k>QZ~0Ks3{TPxMbGX~-!;&CVy zp^Yj)C4Aux@iva1p%UUCw*{>yD38xy(5m>0NJUK;v1__d_* zIKMfa`<7=az`6x5llp8uC86voTI!|qm1vOmO9Y{OB_8@q$9t?WwV=uNdVAh8ln4-a zc-f~q$|~b^R@0Y)D7ujRp9MR24;%&phV`ztmZ@edp#GicZ1H8v;SW7ae1IM=^!;C1WWue9rB z;DcM_Y`Q7hBOS+W*I;IOqB?Ssw^;AH(zc+H{3Tug7kcI!aqCnya>& zo|h+6?L#tUH0F+$xa|U^O&L}EK<4I!LS6{4c!KhRtob}jD_irR( zJ(utPXd5eXdVK!zcuT|@j=fe<$9<%`v8k9c2we;QF-EVul7AI9lFITAN}s9;>flMvC{!-$&3Dt)yVHCCWsh&?6YAY}Ao6_WJNckCGZhVM$t^qoX< zGk4;uG&r67B)X$7Ddj?HzPXN&A$*K!2(90lR%EM*M9KgoB-*ockPxo&pzcIMF(CdJ z1l^eJA0uFBrcEGOqD7>DLj$4X2tOrnRHLmTd3nvL%Vd?SjQ0Q&%6SQe?}g{Fr%WVd zzHSSr>M_;j**g9%)Ra{qK_!6QL2HwnVvft8DkZ(@-PveY!$^M!(1f}?R?2@Vx0#YT zl=LU`*+pw9}WF~pLyGOJ}oWW5{-+O(9qDM;jBw5=B$&Ac)ZU?z&0fzy;~$o z>LMb6Yui#!R8&;9TecLuyu2n!z+fD-%muq7qVfKRO|$)7-2U;p2~^0Ri|>mlxe|jy zih;)Jzx*DCI4_HH(#e%L;2dNR0DvRbSS$E3Rr zzdV|kUC7n@1oP_kY>0K+gY)iKPSqmI5ay{v_EGCyno60Dv}7Inte~#X1Jc9!*>GG?kb|Yu?nDl(Xm~c~A-297xy5|M@FbS*Kn~EW zAaA*Ec6xc40dx?JMG@7FBYlFMS5ciW9U8SZQK0-Y?w<_&mO~;2`PxGQv++hT`emo! zOP`IRegU3umQ2P!6!qlsg~VJ1h?R=ADoi_lKJ0<21uJW$}ldVxvC=xOfxjs)1 zs$N4W?9cff;*>d6!KRbJmVe$$z8X?FBfo4|E{s{la=`FrquFy}zUI!)ABlXSLo2YQ zhewPJC63(N=PMA7(uE-B-RFhP%qP<`61NybDoZ4U9=G0~+Jf@>GL!j&# z^+vX(OrkF~{yoVFR@NF_4RKHm92_DMniqdi@qLyH*Y`-)9L}Yk_B7rIBXm3(AHktf zwOI$sr)^aoX_MjMc+u@XZhh6(PAI zp|nqO4dJym^BF?an4rTZAE<}p2N&uWTk-rGW9)rOTs|pGMsMhJE3~BNV58?NE13@P zzX8e{JA-vg3U`N%d-QLZPa((}(!456-rhFpC&ES3G`3-;}CN2KX3&{f}fchc>K$!Nb&-@P3{Bxp-J zdw#*XJaT_?wgV#Y$v#|cl9vtINWxfCKR}n|Dd_BxQPq_OYMOKAYAibRNCTEU&*(H7 zEnj<`kJ4^3_N9GIYTytpX`%fyLG<+&%~mCV<|-QMGw&LW zSuk?ZCT}rT48G;{a6$ZbE1hATmGq>+4@O99~&1`%7+ad{j zJ^HiVFoypyz;uHtWIxsl671I@EED5?`9FQUe-U{9bMn8%^L?8>=tCvtbl&Ep-8u#b z;=qiDGBoocVm<1gP;+|SR-?J}aUAVCZG}~Q*{}@3HtAluiJQu;_KJx3G0QSEHQhDX z-#@N`N3ZL>sZ1tvdwV-tU7%?8wtb(YlK1Ie@u2bXc5f#DoGwT?!9fjW4oJC~ZiUrR zy(L5$T}3c^xJ8O+q*T4Rz1UN35yf}=V%@kSLgtLKsy13;p?b?31hNEFwL}Vw*0xOs zw)@LkRqkMrvBh47hZT8n~09LtE_cy@DxzQ0<_3t4@s&!Wz+SQG>r9eACo{UqSy3ZE}VDzGBwz42d& zN{d@NloaQY?m@9fw4vNKm$OJT4V0O6g~( z*1LI2JJW>Q9z-M)=oK5DX6~eHJT4EF?^vv7#3*Fa_?B9oC0yV5dHU2ug^o?Ji4uaa zjQGuQ>|bLN->MlFeV#x{v&j;PP)c*GwMu!tK3WkudgA~#+pVUmHs7SysL&@9CTaTs zRFLgF-W}xu%^R6NyU8-@?8eC@q@}Zf_J1k{p84{$TQ{JuEic_G@KHrxz>`b3HX=K1 zT1Rr{s&_Ln_0Q;cmR598D{G$%0(=COzsygNO|Oxr~&Q9FZY`k7tT9=X2s& zyQSU=wmOfi!>s#z&+J|%ZfhRLZIlx`r~MfSHU}tY^I(ox=}2mG}h!3Vr3|W_B@mAg8USDYU((l()W9= z_Sfw!#DehNA{9A5AD5-l3r}~bsCOCWcF`=~U#bFig}JE(>udEuj>v4lZVWH?CycA= z4w3ozG-uneTn2d@-e4)2%F&P6L)p_yKHlFQskmRICQ3Aq&#`fK*=-0KLhOEe$&)>Z z!d)X*ozezO8*Q4Hc%^aNFA&0sBbqWFHU6$5|3~_Lv#0y@D&yS9XCoPB{hIf|-is{TK$YAdiT^h!)79L&C6Ecko`<&fRk+B{5^g7LIUOHZz7>x(Dnsg6m zAuLCACIepq!6D7d_)UHe{mzGp90!vofzllGGYPW>BH8qaoDNWAev+!TSG<*CUae2! zQ&q=p%5Zcz_Zy3;e7yoJhx>YsGDQl%-RUwDs%e#L>_if9tKmtdd`F=9G#*Op&3aGu z$s1;KL**aw>>5slIDcLeIV*UjS%!L;@5;GO97yA@mL>(=gaHFZR7}Iu_pb7GV07nG z49tJKQ1y`TN_i$SSm?ZnAxLkM?2m+nMb&fLbpp}JxpF#t9v^N6tF?rZS*@}ehy*HK z7Ag$7O;0z#bQf-$sV-7(2sI0SPsJMi{RvOPv?CR^^+2cftBc)vzr6QhWsaM5e?;IQm9u1_3?@gCvZ2CM2lSEfVTOkM(9ey;m z7*-3zDxIdGvw(D?r{jg+KmXs6L@s&x|gpP(r(v2#O%`N8f+JG_K^+Pt=o$LNo zbo7w3YUwTR=lB+>+1vA-lJ+0wNCx^c`O3&77Q@%r%#oVX&DE;1x?PYQh=U8Y(@rht zO}M2AETW)rL(rd|R*42u85o9YV=7UvT@ryAt7kVBw=UoAp;YHUa`q?qhWKAmEuT76 z;oiHv$}Me-J7!;M9-i-G+#n2TDXHwK63y}V{-RcLZLMhDYy_KtG|g8o_-R2oK=Y3F zoL23+NF)7v;GN@MNu3-Y-?IRJe@dJ0cI)_xkOZK>$$?qMYUgHL4ok{KH!xn|@V9S# z@gTYRr0hJ7EY_2clym!Tg zXKhb(WXQt(T{>USwi3CZ@`yl0Ad^kGOg%ll^9^*_k&llL7>Eycg@IeVtc#B5x2Zyd z$;^reGoe+~`!`rR**so%z7GfIOi-)U)k^M<4d9(war7d6wn=bU;t{29R0~OBz*2+- zehez=t$vZy5JfMhRjEbIxG~93u>NpCRT$SXVU8cqGAUvCnWY;oKIbp|Ur6RljZW%O zEySkupL(GG4x;3Op*9i~8Knpa#?R^?Hx9=wpIQMKBHgxDiSzM3w_be>ZU>+d7S5p$ zGk_}skO7i_GRzp6!pCM5a8rA{?zsA_Jrtp578GAPt(CQ$tx;nh9T{0hz2~YdTI5BW zTPRmdDJ?r(K9^_p0*6ORvj$*}jlM^91OZk4Qt?%4U90LX&CNTvdu3G-BXi3}OpdxQ%su98C?U{?^JZ(*jDG zzwAN@ypsCB*q(+5&@19H7cY1JDPJQts`q!g@YkcMWC3|!9GuP`oCt@@<)~KT9~ht! zwLkB}SK}oDhliUUO56L`x9m_Ls68M+g+LvgnK6*J zq28c6q8UrTEQ5uHR&Ni$Oh~dfW&xzJHa~ByTaM>4n-NoomZdhSg=XH?;_k+`h*))$ z1o{VV7b(x)jvJTB;jh5ii0*qreB*tlXCR4CUMgdJvc|j9aH7ikFiHZQXwir- zP`w|R2Qmxkkll1;1(LPwUWR<(e8R#f%O7k_(8zeC4 zE;rLLONNI(iHnI*5LnQUrlqFV2=DO2*DO+@n~Vu4e;T^cDp3XTdLje*EDcG0U-_R) zx*DHG6md9bGgNT7oo1s+GDj**_5|>15=qFWyjKsXZh3mVGo!V4;iwcr!YRik-R_^sQgLx<=>i4O?;NV20}hT#vRBOXP# zc{Gf|{BNf3$2gB#B^jEpiA&V0rVc6Z2K8Lk;Y#zd-Hum?lAhTJBWrVdUfa5xw?EC| zDbiTZl>7EI^CSAR##WLIRR(HrRKE8O zB)&5n-x|a`i9e%ny2a91XlKu+RoQ5IeZky$WrhECCokP>wOzL+lPQ5> zMUNej0}DQ5U$XC~JKxU^HmcQ&J{jUXlDqJ}*26!TX;3UVyXc%=r{1VHYy#M$356%H z_C}sovug$Qt>vYqxgS@KQ6h~4ZISFO!=LwU@)KWtpyeb1F=ztYQ5jF8iWf9RFp$Yj zak?#J&yy-nlRc3_EHTWG$#oBs`cFbke;(SEKB5)9w^40PzK|_1UZH--hWUOtQR)k; zJ>Lf^wK#AR28Zo0t!r#EXip)dWvJ$Y8p^*UWV1D*9x9*;)Z64@(Ka*j#8dA-oPHzkM49;#qGHo z8YBXi0j5;m$Lmkt_jdRdpnW`-7Zq^{wWkB`(CN}D7Q9ag$SX!_k#t|yEjkzFxDE(r z1-IC<8}5I48IhYSo!s8R1d>VR$l0}(86&D&HZB;Zp;0Z(1U76)f#sgpMRV$c2DjCz zH)hSPoF`0HSRzBQ1UQ(Rj#uZe* zUdm6gi3=B8L+*0AUT}z2p3(JEL=G=v6*ZU*#Bg?sxUDe!i}o#~fVfCMZ}D(0GY1+g zj&|9F6Mxkq`S-f#b3n>>N8}I9YVO&;8$xnJOS8;4el*Z4;Obh{Iy*a~Bqq+}npA!i zH|eHS?UqrJkd(~2_J@kkit70KxqB#;SC)O2oo&c=ZKP)M2bwKzg~^cIgZl+;T2-=j zBeavg8NL4i;F+2~C`R&lr^pDD8|&2o*Tj+C+k_rl>b2NU*kBug5){GnC_C?baHo|1 zG^RtevibJE2f+To{L~fSx4E0W0CgY>bkm}f=%`WJt5w%>#yiNzY>WRm_nPW*!mrGM{RWipHg?%1EK0teu0bp74H zv%&-cKfBAsVfGiP{okIZz8uP3$Ahj!vuUdxnL6w5kIN^7IEgAI4CdnZuaGiJ0xd|6jq}ucXFr zk3cQP2i1!J8MpO+d5J$Ckd2(sFWZ2nQuO}?hW`F~z6fY2{FQ#sa{k5q{>PX2i=T{u z4McR?H#7bhedftxWfFkmk`VESGGa6tvY z4eH#}|356xw*WFizm0%Rx-4Z#-@#CCtlxWsTY@hV)udRIlR1F|+ChQmQ z0R&|4;6TF)hY6EFtDXtfnjr{^Y4VtSQfvo%E;YL;$;rtby6w`iSk6R=gkck9X5)tx z|9_u^`e#suI>PnOV2K20D5Ac65d$tjZdllh)6>&TRUNk<-ol)KYzti$kSNl;48vuQ z(Wo}nn{_tMAwDa|0|k_ytamG#n^Suoe}}DYqMOHf{f>qv6rixB`}+G8A12Fm)4L+@ zEOsMY(z99n=BO$<=?D)dsQ@UuX(v)g7 zj2SV;bcY281B-(!Z)liZq!{J=f7pqSh`>p3gqX`2F?_hac<**<$l>$YoK*VG&(PA6 z7Rbw;N%TxaIIVp1rH7BfNCdIedfx!@+Ek2{7SpBgO-BeH==v27^fPQA*k z2NyT@&a6qg^4hT|ftL`VL-8&kARvCR9FiIEWSYKHxw#7It`i9uY(6L`#D6lk(|y_1&}a2ld_ug|!zD ztz~PGqxoK8Vi5Y&4!HyczxOQ|p`!4gGI1>9#@M&}!&mz}c{?fngmr-DCJT$ddW%J` zb^WxT3ZEjqiPN2~&RAK7RC#0(;veE1f;J~N7aW8le}fgzEJ;O$KqWL=X&Bn4P_RFH z<<&oA`E+#^aW&B3a+un1HI%wJbf3mEJ-c+_F|=^V-gd?n`K<#ba3l>bcBkaV0Jrqk zKOcl6CJo76J)6f`lI#@)2eZ~f0OHeejXGk8NWNJhqr-78)m zM*OGC$aJ^>F`qQK1(#I=ACp&C$r%|$yU*>IX3`fc=zg6ZE+z1>4eecTaOZmS zYU<=jC$mV$fyd&i7*MAifmFCkz3v?&*h$Oe?Lrv6ZmU*V-X!mrVc@85WJU6fP4n36 z6Z@A^5NJs{Yz;&+8gy-=d^2M)G6^N6>ID7ltA~ofD=1sp zAcs#5{tf{SA|!v0ejxn$1t$bTjPsks58TAW0!uzmUawg!zaZ=F4920@qp$J`3JN-1 zOPh=iC)X-4A*((R#!+*ve1IF>=~Ea31D*3U={}DQ)|kXN&4Ld`7&I!?Nk7d^&7t{^ zbnvqSpVMB7-Q2el9-?pbCY0OYocx;;KX`QGxrpsem0WPB(W+N=Dr2;i8TQ5~WD3Ez zv|7$G)otE;J=3=XEMBojjf6+~?Hmu(;D(UC?z}PgFIxvZx^Eon#~!CmiF0OO8girX z3g;x$kFYdC;whXdf^YsA1Sb`)z$ZH{+6`7EWQ1dXFW|V8pmGiQQsdmuy7c^~Ja_plzw^8c6?k=S#yd|6o z6S5h@##3+3aKA=Aheh7rgV=*B3Gs|Pe4(d`Duda;a8T<2me~PdT(NppSL?i93qV!6 z<79ZFUb4`=$OzIKTEECSGU$%DQ3!YXYef3rL+KQvpS4#BO!!TwhV;gSa98Y15TP6~ z20H{fi2uHU2r-GS(5L4xcaN5QvP-%lq!2?iA4L+hzeWO$T*cK`7v#TD<&}YBPc_xk-CGw)^hAkVjx| zg}jkgO32spB0Yf20fSY>ozPLp5Sh9T_rh(VOVF2$Zk2ql)6 zzfBFTFdj^rnSjA}JKaEal}%%J5CLlniK&}ZrN;s?aPIMS6Ag6M{|xE;)9P43p6DCC z67(|8?0`DIrB3iZ$BnCIkeY=frd8AK=UK@ zAJ5OHJdifC8TOV5v$fTAx@IughTyMk%;)uk@^cBx-qdW3YKO z5N9I*OGiw;sjTg>5u<0g^xV0DHPKQ4otEfw8Huj!Sq?b9*ttiMC!2 z(*9AqxUvZU3A@2!n!Z4-BJ-hqX1EtvDZB`~Pyd|cKQA~J5ef!IM@n?sM}%XhW4|8_ zL!ZMVvmo!4?63dXsTF33N67Ox>Rb6A7Xk$XUyR2361w!$)%5`RHe7O-^KE&HyW`c4 zN|z&@RNYg6wX3_#`yl~T#gteBxlhxQJVT?k&R{>T&~lSBH<8eQp@YQMm4l#$4g?Hp zQdCsbA>l>qjt&%kiuTmU>-ES}KtO%B6>#Lmf6czEl(C|5=TkZjX%^L?H%iN_oE692qV6cpfQ#J}|p zfFf|&iOHME1wxk`hPlOMrZ-gmqiXekgpl^%-hBY-Q!bad9Ja#luaO+gUPXG0Vk@c@dbT^7er9vwOXTYBa0wWqIu!Q0@%Nz>4T@4Ve!ZNn*-2&V;YGlvM-y|@75HpM+=HjuEG6= z(P1#AiV@1T)NY7M>x?)NB&O@5KrDdsJh~Ms>m89NFE^Os`PA z1|-la;J7gSeFKyW6n?CJnJrI8C&5iNc+_f_#DJt~Ump9HLt}!4@VAggns8d$$(KumL#0n3a`@hD5&nk!7DJ zZLmETU|BZ$;``quGtm49!9e$nsRSV5UPn*p7hIZw#WYDqa&nOsj0RxlO(L&PtB~-I zWw|-Q_1ksaFDFkI)4D2@iy#7TwdRZV&TF8WlJ;P}E&&GVO%GsEi~v8uq}L9$C=6KK z#gG*8d%CT4t2X2NG+Ls-b@vX?Y6=%o7t=o%@8@Z%fM0RpK1@~U@Sew`Eu&T3O{)|M z=;V*uZ(tLO&>g>zpo%UVw^Bt%((5eCs5}+AKU9zGWQU9K!INX~9eNQfjg?Yp6|jv> zt6dl<)<&)hbnrKiuv=T@4=f!iO${33U&M8(M`=|vE9q#w;>A)*ZsS#|jRPubB}|=+ zE^i)2+U@oqDUS+~bT3yIx_<kL@K5kmWJ+() z#MQkQUJi|)&Z)9ZjNuu}q95We^&OEzh}rp`?)8h|&_Mr6m^jrrUe6mO{uTSHaJVsJ?!v$ zX8>SQ86C@!lmrOs#nV7ID}h>p_c9h|pl7?0EMx9V`;osnE2ihZGiu#$^LH5YLe1f{ zO+dX1CI)1(5gR{7$t2+3>l;F2=v(^&&qxXfEqox3nyYS6TNrtfFxeDk%Vh|le7X?V28_zMeA@$KEWJjOcPycL|27T z-+yiKP2Lu1Vb*rz*JCV>I?`s&YOU5*Y+kb)9z)$@K)Mp~4G8(6^`sT&Ih=M$0dqLo zKAR~Vs?gL#JIf=z$a!o_+ip(vGpFa1GT1cS4$qURT_&f+vR9N)g&Q2Kdgv3>Q z5%}oxRu@t6_{?B1tEX9ga|^kSzel!Gisyxp0FE)2G5gKc+ns!Yf%Y_7916sEHa7(% zvgBQThrA*MHdTH3X`VI$4WWMRcr+;4@lvlHD>skDxKa=`G>gY&c^u1n!flhY_4L6j zI*kd2g9_AN5R|VgWRuI0x=x9Ec$X(qxT;VHe0BhKFn_JtxJaZEkmarfu-mK1WF%7Z zk8=4vCF(!~ba0ZSWjX=GqPrqMVL{54J}C!42GxFhht5tPi&NxPOPS2;KA$$4+G4P}5H_XqnMK{$=@s!~QHb@3zT2JJ715kJ&G+A~ zON2?~AI#3B(81Hk4pMhZD3X0>FU|jvSpwh9WkI(d-zPTB*Ok?Q`cM4Nw?+Idsw8pG z(|C85aDNAw5JLwj#ZBEH17n9eq_~&Ec-UPjN_E?GfWb4_E=Nl{EDQ72P1461|NM(T zTsst|Zy2G-VqVHBCVnt@%0fJ7A>Us7GaWV!wQHDUk&9q)SQ9zgVLj=Xr$~NWFFrL= zNOy1ekF|{@gi!^B$tw^Z8y+n$ewYoFK#PpG=B#N0E?!}KOBZ6a0}DuOoe zWN!@Fb7y*7wqMNVPdws|YMXVNvue8}r>7j~ z>VSJikAZ~APSo^-OFP*W(4VDilptuL@K|s3{jD&23*CS5I8oIUk>8W2wsYhP_(`$2$V%S%zR)o%NVUExd^fjz-C+V zEn+%bH8s;ElCf_HO5)Ik4~UdOPKX67UiKJGZTa6`#f1XnjD~vdN@bt%`dIjxCYC2y z{Aw>qqfX$C6D+zoDRAYPppuv^$gfAnBKe|;g|lszTX$HWUHWO(4-pvH`d ze)$Gkvirx$?wW@WIh=1PA&Ke+cYM}`$;c$(tUImRXB))mon$|w^_%NAPbui?HJn2D z#fO^LQ+VA1hBqhvOPq8_(T_Ci-LSGU231Pw3=^!HzV(hr;ctSfR=&v)tl=`pxSKL0`0{JwY)Xvgn-KWtim zk++AdZD5!1o<}bhEF)(gYZc8= zBnF}m^^;Vbzt@vGj0?aA#O+|?7)Vts$Ha4}IvwC=-V6bty6 zHky;ubU`A8ap4B#JS9EPlwy5fSNTb^I^angTI=RtpS(GCMy5@_h58w{@eZXkZ1%^; z0$>!bEIIC7WN>gakiHOhK3JlA`QC~;01->ZEem3zebk`)o@Wk-4{lqeS;T%WcVakj zOa`1q*a`l_F@bvqNkqgip(d8f6+^_r%{WnuOv`RLU#fuZ+(IHTwck&Uh})*C4ZQQ+S;5k# zLkr{Yco~PERlfiQX z@=e7D=Q_b5_D^`>6&MUUTGT3(4A2O#qV{L2BvJJ3$NvnZ6r?`-8HS)%{zK3Fx{@~V zD-bqfVnLluY4@n{5-LG?4m}nH^^GytjZ&i!K%)Ep}x}bWO zV!zuTw-E;SU{YWpbV;PaVO8j)-tNq87tW&;QQj)TUU?bKDjjY!9c zhMvgjVjYM=>Z5zt)Q9sW>Qg!Yr(1mZ7z-d?0+@G-{)7iwli?qsKLE<1Y6w*Y0gIXz zBMw_7LtmK6tpf?U`@V+JWJs%sD#(HNp;`^!tGZ_CYI*h@lgSY7o@;?ZPBSK{%fZ6I zh)9ro6$uG^%+yATiaq5?1(3m1sI`2ZN3uZr$GRQE0v6%%YY)r6g3~|0Z6-%4T)>L8 zQ#xrJtS)>eU!HRMg*Ksv81EK|VTgN>+ZTX9>V6m!K&o%ff`80w@AZ0*Kfr-u;q3(u^)M$kpMgoX&mwv+()^T}RDU>EnVDxE|}_JZSj%*2}4D z7eK*y50IlWu2C#;XSU!jD)kQx>{*ZGrJvT-Rmv>YiNEN3e)-M!ll={o&ZF3)5jtmG z)C$U`U6LxbYAJDa^z{5oyFcJo<@=we?)Kc_^go$8Zzut!eK{_uhzREpuOx3l{b4h{ zXJA}#+UFX0TFqK5Al3STzaGGE=2o3G(zTd;Iom#EV*RE!7H=9kI52tr7l~z5v!|${%i)w)ht^5TF4VAj{FFU)e3%z17NrqE-8Dc4r&V$c3GcbSympzEKf zVl4fcfJ;}WfBs0x<1ks`W7Rrb3Orw!VZDk8b*oJ}kC%o@nK}vRCBf%CdmW0+zJ%C0 z)}?LbPbR}@@jyzX510!9y%&Ih6;o-{*HcorR5+x(CJHi%1J95ro2n4{KolqyWNI}! zia*}o+1#8(@{$1}`qVFV)h9)`gM)%>v4;tEuj7kUH-LPL!%Umr15CUki^@^cO>VLy z4)!n%2FJJ>02y=ab0mz%^@3YjZRTjZBM1^KsXNW$sg;#_1|$IP7!_n+%5r%)PtoLj z7?axMObr9BzE;)Qw4=@2iqhW1kfO7g`ReOXRl?a?{y?WQze20m)l9ct8%Ubj#h41v3(lX0)7m58*wdKnP5=If5+1|G+6=q)B2 z^E3|>0w$fqEUL1)+i~8a?Rme1k^@`!;WG5{KXhh5?wF~_hTkEnN z>I zjQc&QG<7dtbExeWdXM)JcKPm zYHYuIQfaaA>>NZ92||NMXRxSAi&+I&{Evsq9K|;V6S+N*ch2oa$;c__*4Eqs_!1{| zvxV~x3PiShwe!%(buQ-sdMK#T6LJXJl`n{zx#lG+{>!fjVV9??Li`?5{K<9lHKM^G zBgY&c%fTaW8H6};qZZ7t4_V!_BTM|ysgxPFm@19u{{%yUM#BG0VBCV+T`UeUdQ@h6 z-X^badz63-4OKc3ogzYVx^&Sn_LM`ak8qdY(2>j>pUsxf{lar`vm$%${Cwv7C(uSt z0!JeT$tbdGwZ&ES{#?s^#w@qTl|<20WCI3?{PliAm4xX5DIzAlV}9}+j%pSz^cs$Z z2lyf>X+0DGAv$GOGNdAz!~F>iz2&PNMx(N!F}UsThIzm$VM4+|`wvf7ysw$v9b*oz z_dbY;-G`!8m|GX!A5UyivhQE5%zrOCVgj(T-{f@8-YnB-L zY=~-zZita?6Dk6qo4SmKpOS^XLe$Pyj%)pAZz@o$2CjVvXZZ={r88RuO5RIm8~PlH z_{vM&W>{1CYHkX906dk%un9iqtn01Z*{fI+Pib-LNFxhgp5 zyB7+)*SeZB#wjzqU^;`-Heq)pfdi#Rqmmg_fj#LQlEKGo^ExWUR(U;R28|{Z;%fc} z7)S;w^to5Cz+7#pH7oNk+)ngcRffF^JM%}DCHT+xy%g9e78nbEl@K`(*N zeRTfC$_mtxiE6hrw0~#~xc7zXszSQ^E|pt}hfBjj?YtCY%l+lNnf-}=JG(tw57Hm& z;`@;V2)rR&`q)1Fr!`A~T5~`Qq_QbArAg4*N->*Cj6Vr8ToQXqJp*ViPX9fjejsNU z3yeh)6NkKzL8YLkZSy=^WiYAIW7^uyXN2$u=&i=>n_>0Vd93nMbo=TY zbt%hRa<%$Kgl$&W=WdYt`O8HPC+phU27y0}9!fpbwYkPh8fV0R@=r{75OAuqm7~e@ z?^4uUh1Rqb!p@Io7h1iV1V7a=1HDE%2LLk1Ky$s}J{3ch)N-VBwK8ZygNVeJKBo3( z%|IoQhr%zhp|TsX1}L;D8;)W@+PjrcS7a`S3)G^fUlyFEQ^(5no`aZRUy{OskYN?d z0bGR%nv>*?X_G=6s&{t4GV(Z0JfP zp6&{r!_?ZHE|5`Zb2^4 zv2j2u(t5Z;ihK~vPx|D^%Q=Vj!wnIbX&fgiHCB~9^TZ^AyaovnL!V+}XTwRX8zYu( z?eJ(Sxbfa``!uPYNV8os6#3~FT2JmIPL~Z1gfwpG?@p;5Nc93W2Lr^S+IsS{*igEV zj|fw$P)YUf>5NmKA*d&#i~#vP`IkW;5rz** z%vo>VMRQ4h*cv5zsrpIyVeRRdjwv7j(60wx?xtAwT_9og=bS~q8O^U0*C)AeJ!6u4 zM~(*h2vA_P{*Xcdlnk^uj%f;m@BX31VS{@JwZK>C+1S9tcEN0=WX!}uL_neB~xW;OqF8#JBtN9`wb)O>63% zJTIR+n9JRiys{?K?Pic%PI%l2G;QP*5+9<0ED(jCbfgWkC%`;j!OczQJ7#@K)x1Z=E9euUAT@~PZRzig(>I0baC=F17mt7jMVwtAWLWElcd94?yPe!nnl z_P%G^%K3iWv$SJ8!ermCriXPVPR~6j09fz<2^QJ6y;&H>bcK-SAB%WA*;|(43sThA zva+e97+Tg0@pO@&ALAZmWD7nFM!JASNWmDCxoP^jpC<5D7%nc?_H+xDxr=Dpl@d9n z*8H3}L6l$%msaxuO5a}1GCKa@qMa3=qB?TE+s-sD$=nm;xdI1%a@(xg1vt0G)kFH zo9Ny+x+J-v)ja_Z!Xr-6Ncj&lF{|{kjvKD^b!WPhXGF#4DP46;rT3;+v6n( zK4Z3#FG9T^2Ow~|ymVV-Qs)u;XfZ#xbJX|vQvL_$hu=4x^bL|?q^!=|&L2Pisjm6Y z@sAV^_JEY{`E$w2$OVB|zctM`SeWn!4xGjMjZ;t0HLz%Uftig0GWrU#F7%YWlXtH{ zxz@onNRL4EuKk$K{Bxcyy3I_5RG_CCv7PkxP&$PNdFfE>@%T~8oj>_0zip9GAhLAi zjJaB(fO+_H=ic1O?bEq3qYmVPen1env{@RF|EJw2RC4oRsZO zSM^0vND$UBTcP+P52*z>a8$VrXxHYsyeWT1uW|QTf9${qZ|Z3LNG~~jp_a$%3e{q^ zE_*Wj*#2HTI_0A8+hwfk6kA#El&9wKJOAhP99uT%_8Uw0HzEn43*GRv!qyt;fAk6+^zs#MM@UHO`jJ4Z<+|`z zH{oSPJ(GC@)QV1QLBQpvW-tl}cck1hZH0)=#t0RPR>9rko4zy9M@vEM)S4WzNnUd-f2|F;LDXy$!YA|f9({sGgqne4o!h5LL)2_fZ7fV zEf1|2!1kiPv}uU#U0K(natvy>RJ308-s~v9tM(~h!%1|*$#AH&J%~s?FL-uiuZSa%HxMP|?tnVUuW#t=wJ5xjNruey^+k=}Ze_4^$O< zW!)g+p_rTXSKxa_f_|rGjt%_xDj5qzjp( zyq>8kb=o>9Q$sgezmw4Q}+3igEP%nX(JKxD{zNt*!mj=pN;0rt@ zbdav2U+?o?A@o|jT%T1B+_;tu#j%MH0%EO@LHwhacSqYL=th(dUQPL;H8_BBd!zG= z=k0c`WgOkGYDgob+TssPCQkt%cw6jd829~^f8A!STBNNO=~!x&z+{%7PfnOW z3ntVoTSH=Y)*3z-oA$*4hbiQnvc16rpd?- z^|Nw>t{VoLfUE>jv?%%5?2JNa)BNKHY+XJV6eKx3l-8!Dsojy>h*(-B(KM>A+85$0 zu>`gaN=-Koe*CvTRnE+my=Ifjn|Wo6Ty8l8tA0b}7B7T-mThOgdTWhZjuK?6kZ9`PCl`kAH6 z^vqgu@auB_1d{xIwjN48Adh4gjr7WgkR3`XuwN2+5j|=UBkNvVF2Yt4HNmu{H;p_> zbmgFlXs>wsw0+;GgIwjO9x!OeNtnhxsa!1SJwX4!pe`FZJ@U~-tcT!cl5m>*ck4|R z$(bFj7AEbh|8LqZG7!}1{#KfgD*x|a z5=`^9Azq=<3gB#USWsK|%Lmlrt8W=2g_>u)r{4_ck5UL$E{atb{ysS2r#}#@GP_V| zfB3J(?00R;f_u19>RI7jP_gme>-T;gPkztII@j@N{q^SmU*AaTz&xQGiRbe8J4N~r z(B>c4$Cu#+*a+fzXHyyesbl+}a{B-&ixFVE7JVs=|HD|{ztjK!moRwmB5X2gHuC@2 z^8WvJ*kK@&?5S8CnEU6Q_kaF9sSMDBCS}WW(a8Mkqh=vSN=J9EMvUQ1E5-fuy7{8Y zkv1VgT%&^!pzJJ^O?@t*3yj~f|M+`^Vx@NR%h0Y z%nS^&~7zVCAv#Y*Bs85I?!PE`EY-7!IfL7hzI7-Tn>`j@K~`2vx_;I5qi zYGPSCtUrpPwLq&m6ZS=LRBdtJs+z!)birFb#+UB`0=n0MD?^9< zxkfhk6AAt5KIFeDi|>7{S@ z)@U@JhRx>iDt5$nl3(-PRe`?OVIb~`FG8|36j}p|fY4WTy46#lSHERkpn8o+CG*#9 z?be3HE90SveKf4cv;Xxr{%84h z8^My7M8t+*HQygK+&GSb%*Cpt*S$BTRI3~T&d{K-az97GQ3tN}nPK-ctuKmX)vM6I zt`@1|WANDX4AK7|eeoYf`;R{(;gFutsVX9Q!!;&fZgE(xbX^_;Ab)4L#MYo>%Uzip zZ2E$iCn|asN|}6=w6xtZmJENjWqxY>h!tuG!btDZO8i;SB)RZ#DaPNs#f7@GG45AGbc#!2lWMhZTAIeL(Og+ z+cE!bKQv*5VRqeO;B(#kSq`uYU(d@?*gPcxL5xfxr7#j9k+c1I=6mj>>dn+exy9@l zB~?DKYODGE^m#PrC4tPYTQHAbF7ls`fCvlo&6h=r(SePj`-zV0OOqI~|dxe3K_eK2N`#QV$i{%mgbbDNp&eaBb+|9#L!TAG{L zV2lR|ss3eI19y-n%srnvQ|r(->1bZW8qcIQrF}l$8<`gGi|^Vi-JIo;E@zj8wx4{nZ+UT>@Ss4d$6d8>S7@3~oO z!P?Zn`A+^?{P*7oFJK}fAw`jiA@nK6c^v-C8#!9=msVdJ|9QD>!S;QL-N<%)!? zzSgQVo$5RKlBOv+a1f@85I9S8+CR(RrPcWF>(Sl6-f6$%-2c4HUq5Okw;ULX%?|o( z4x1inM-VHQnMhr_ABhJ!6pR-}0TrG>ZyY@h0Qeq5om%gCsWe{Kc+m7pmYWT%oaze@ zZT(j}Pr7}-`kaRZ%>R)D`n>@4u@a9?pG-FUG~X4@e-*JQRFkO&E>s02* z3(LK8-rJ0B7mGom_lVUPW+p28OS}ho(XSro>8qppBWUQ)$%}X{u#g0ao*bRU+oq}zdf=y2BK(Jh)KV21yl)OA z7+>qV&N@d=!u9|$ejj~F1NlAk3&5MYRW_eH&u{a%g#hye2)bCcX&MIf>Na3M96XuZ zTM_(6!D8$nv`e{Im*@7@cR!L4uq%WLHp@Vyd-M%~1Tnx$GvqN<77)^)j{*lFJ&-i| zw>4#PMkbg72X9?B_%*9Q@EF$`h|=c=hjK9+^MsrD-zwmJ0XVoX02eAN(+_-ZPc=4Y z>#ITO)#Z9%%b@_*1DwV^;E0tGC_BOz9XBn|-ha0Ou5OTp2e6I7L{zLWu(2tF2p5!R zdUZ|?FWhD#U>DHFvt@8E0WwLb9SCUz{=Hj#b~C^~%o}J|S#K&*D{_$%;+L1Ccx{&Q zJFEnI-ky%vZ6lC)vdqFRUP3jc~ra);4b=twg zEDeDpZ4}t+xP~@{Ks5PX=30n=)B1bsRFl{BPJN^H`RR2YFkq+)0ZEcyX-f>Q%f*4= z?d(I5YUONcbskrG#ASYqVM^DaqFdm>ySEK!PVcGT-Cf(>rdi=uFYewB%P>n-+sv*2 z^WIMwQy?jw<@k2{-;FCW8m_W#3H9N%?)ZZK|Jj2e8Kg-e#eR(*=UYMJ)UlM}84Yg7mYCfm7Og1=`X5*VCV|o+ zFITO|;SMioH1Q1_aq>&M(p{VY6e2d0;4^j6nr@(%*haWGW79ns@&&bD3g9*jtdI5G z5VN53D=pVG98$cJ(d%83rb{;b&(323nvde-d2!{J$T+yBF5T z$Y^w5%G2m%pLIw}G591^?TG472an`5W{M3l_D>t~)DZT6{}))6EU*{!KO(zf`v8BY z<+i(!&1p5pkf!ltBrlEIUKHHJtWW?o=%ss|X(<%&#>#AR6FxnD^~mjl6kWvWEm%?p zFh5$-L|ViVH3LKgB-b$fYaU{7Kw-(}O=V@nx(1B+A5RCfFKYE#|aT&fSB9f=<@R;Y^RPp*^PTS*VyB@56Sn%DET+1QQ3;R7@lfaafU?R(t$*3;g3k|um3RTT zrh78<0r;>A&VR$#kh{dcnRB$_9*B1XNxrH{YQa{u3NSgFsAtDl9lsL}`8SWVyX2IG ziJvocq$M=xMJSH`5d7Sm?nih}pXLk9HelAJ^2zjoMSf&LfN^}dKx{-AKmrwv`%}0uu=!+j@RSR5Yj=vKJRsuHftyR}Tu8bCrDxkNXJOMCLP{#$vW&7w z{^46W>hinq4;MQpA;~zOS=*87q42g7pedIIyA=_Cp{$odm&I1S_TWb$gZ;rMilDHk z9MWH%%psvb4Ccb9`E46V-w?dd%JUM*qX}N7fOxq|W`V&9|F(?A!}kWl7>)x$UbZNPEl%mq@KQZ@$- zwSdvY>z2G?|K5WbPF1})v`^z<0J()AV=wB&To3wx4Le3}lOZ`E@0xEad6$4|)}NSB zkl9#f+DC1P%&^{{lxYAJ{qgT}8( zCiyNfP!b9a?(_Kh#I+Uv?`;B1xUf++purQ^pqbzvdhiWy zKY~a7ewunNHuH7?y7luJfLmP&(Zy87i~AULs}{s2 z26l$ITxz6(zCO%w0Hq!8a4ti+acrikkN=l+)($SsT-MlU^YJ<3|P~2!A3?lYetnVl)y-92$ zBjzOtZ@k(n@Z0XS*+5wSHXrB6q^dHAi<6jpO!z&0GU#w(V1C@sVtVhJ25@bZPiu>s z*v{5fDqv9DT;7_XZA>AzW;_*{nspOVIuO58Ip{<|fcUCd8h3`3Hc)^UHBA@*seuDi z7@bcj83}(A>%TkV?iE-_I{0v}Pp|10JL+WxS7kXHp%GFy;pi9`rg-DBE-pMo|J~6J z0s-uHCCcbO22xGa6^tmwAr#3XnjkGj?7i8>Hn;N6ynGM}+^i!vW7mc@#w!l8)FBj$ zMZsT#Atbr-Y54+pi&81vDKgX0o}budKjfNZ!izbVkuLqIcj;lQ6+ z00hC&F2~NPXPl|yKj&Kp`6h!&#&%eW5)C#$FVP#|i($!t*e5U>6gN(Q<4SJm z&U~{0wOq2v`)#VD)K+>NuC4=Jaj4P3yHE2)I$S*;g__s46nok}01ZLQV+ykVZ!uWo za1D-&&Pd;|TC?bn17Coku+tm+TYP_9>cj;{;AT&mjeZJl+KleVfv59o6fn0&Tv5Kf zy1woS!b<3H4ce zK$jwDhF8zfo%Xki9)j3Xzt;=KX(TPiiYj*2njnt%+i~(B{P&JY;y-kk%n38d`EvV1 zg2V!YPZoYDq?|_USj;*{fU3EFQOj42dQ2s)+17azW=_0jj$w{sk4nb7cnQla z7GNM=Gq{499_EjLG1fua{eggM@bM%m11bMAU^1)m|2|Qy#}`W9&JqyvLQ)-ymaLeI z#|}&XGqAhLWmh}MP`Dx><5tk?O0#Qgtf-))m}?Fy7E}<(MJsNoDcxz|ykG>k`}9~f z^7(37LetULYDdsMS&>bwFb2@VW2gnk9vB5^-p)7^?AAf1~2TlukMnY;I4MEfO$kkZq}#dqNIHf&=V=NN}lF$Q`6aUzHIM zue6a;PIO4Bz^Cg#o-cY;fbOWAuZOBP!w1g+cS_*yD>G;Z+zAgl#k*w#UKIhABf7<* zN=eNHf)R^DkJo+AAAYzXrbJO?IM_|11;nTYa4SkTJLN-#Z_1;i?UOlm8Cl_t(*vwH zO!XMa;Oon?pcC6IZ9fiJuYs3~31seluSFv}nS67+HsFr6-p=$gneBq_Z8af3QzPpL z(^gIIqxY=nM7*jC_}g?d1wxuN1h$rXC^tYZbGX8n zXsjfNYi|6y-S^ph@76%VjMksVr;!lkYU1D{)=4nJa#llu^A~Og`uA}U z*v0)Cc%PBHO-O09fm59Q1XkgrAS3WR+w;AI@{paAv=bX&{IC*#2?gV&KGCydTyedb zTG_Ju?3E)&*ixfgX~o~E2*3J)G~|tOw=+^HDw#2>U@$S_K2jS7w4M~HL^=#(7xcHX zq$U8%(+mo7#u1mhzI&Q$F~qPdbh3N=yvs|^y{+xU&_=Ys%FALdtZh26^Lr5HSF6!{ zQx_WTO9pQn~%4UNCoG+ zW=5#wk}XE9Xq5325@-pzNy#iYIc7%~lC)~^d8AMEx!0lZOCDFJ#kyu$V2q>ofAq1+ zdBgM<)+GtZ=imTTT z-DU0`glGNc8D&-{17xZKh^NryjBjf4zOnXqt!T3c9;hd<2EQn7SnRiFAd@BMHwHBD zPCZu9bYLGi=F$Km%p?6&7o9Sb5O84D4>ELGeP+&VHHImTvkQcxw%QE=+@Tl^ds{#A zG8=_3>z;d@?c}`2VHtSGy!_lbEuqsG<(h0`#=eVa@I}MaSzyrS1Ea!vmbT(E#h`m?dX{~X%&}XeEvgvQjo?TVUZ0=v zQ}F(7>+X#fB=qf($~T`)S^4b;fjs;zTm;!UxfxIV66=+0uf;%I-Kxa_d0n5i>_-in zZwaG%@cD}kK{YV|fX3g{l`!$ZpcnR-jrJw{4$_I;0(Tep_+;6keQZ#-CsUQ@<0ec#`@jWAnPC7aUb}f^Ky)hlfu#e#kWA z@dCPrE^xp@zj9h!U>|w|*mvH0UH(Vat#poF4~OG5xg&?%LAKTHo-zAksQjn-6k9E$ z6)(C`)Zu{{2N^vgOV@$qO1j|@7Dig3)1T~Yj-5^-$*EyBP~wx@bM}fyAmj&b*tA9h zog`}3!=>*Kt7|0N$K^K|f*49c{IFn>$Jjsx`@D{2w%g#tRTmTKq~=W8^MbM z>egT1Ka3~w#H-5$EG1^OhE1TkVF4X%p0}ofve5IU1aOv_!m!#`xJEY@86osP$6H(7 zjCfKXyiqJy@xjG@hFISj#Kf_g_2Z3HqO<#vI6}UX^0!d*#fiMW0f8!~_Q4z=)b%Hs z6_hySjdW>U)@z~r zq@EJ32crJ7p%eP%;4ZjhajmCAB|d-MY%?$_@#5G0FYoLdCj7vSA~VyNtyPix-E-2n zjzo_i_j^X?b-RbUC)G|@I&q$Ek0*eI&=aFjb@)YMWmc!ry>ewRPDkG@yByVXh;Q+G zRv%QU@%v@Vqr-EpjSKa-m+Pa&daD9d;>F6l%UbUox8kzkH6zEm16ZHftAnDp>}h# zL05fE{=WM|gutZ#nr9cLZZ~v)xzHU&F+~8$KHr^Au-0{o;X+F{fWG>ugsSh~-2tya z9U$Vlkr7n!#k^Ca)ab>nKbFuSuglIC2W%&fAmxgH?qHUp3)WE22!J~ue-S`rq#mab zZv-scW@Nz`iQs(@14xJaY3e~c4zk2=zhUHn0H6)KXb`AhghPY*@)05F&sI;O+`hp# ze71F))Vm=eUq2(J!Q2%$V7^hSsHW~j@L%w^dX~+?y?TZHKn*H~5nh4@79S9P*jNwH7~&uw4j!GD`Y4CJi0S{f)DT(_ z5|b26;LBzfKH>^8Z@AYpGQKr&wI)kFZV}+!8>!1Tr$)pMkyK2_+Y7npG(+z>&9-A~ zg{{nf!_$VmKS@nB%b&rxPweNRfYiLzB~>D0cAWviTwC77Z|gqt<%y2mJsU`o&}Ljn z>HsMaaO9gLKE)%W2fqJKHU)BalD0z0L^H(y4$>tnydc z+-e9a4Y}MqZxRXBne%bu0ZaoN*_9);&(p5kHM=~I@<>q`(@#ksYt}lfW;qwAZ^2Db z4|a4IIHp|QV$|&pXG_b>HysW|r}DL-+zeINGPeQPb{*U6umhJc{h=HCcml6e>~dE) zeTK(d??vyP=xn;D6U|%N_44^Za9@(QU98#@Jt(F)-Y1pBYW%KHb!dqbIF#U!ael6U zZIfZ9rn7Q!+PumqobVA|jrLTr94)kP*`^Yo0NT!I1GOh?4X{9K4Ci(jxK7y1Z42cc z0tj=yd7#QlH-|(-5_?kuwou8>0lDOpxHg&DIem>m<0Z~}&I9%-;HZ3EI=S@`U?8Vp zCKU~s5)+6cM!GWTXxLf+5n6x{k1##we!kQO-%f-VARn;ll)(JG)&k19^nnJCznFA~ zCqkWzpP{t%n% z<={I4=969PI}^k6ch7IL#wuS;1${zT><>0K^C4xhr!aT;Op5!)5}*H-AvEeCvn15= z-7`2Tg^*IhzxW+eOkqTYV3mr(7Z29?sj0}g+r|ncG z=QQ>^{1A75*XdYOir~N-Z1H(NvRo5~Jck+1r6pla&4%^mReFuWOi0sp-c6E>>YkXU zon0`x4xjBD|EbdF+YA7~ouJ;VJS=K8S=!!Zc?U+FPVGk7om^TY1NOD&5@Www0+WL?0_4qZk3H4B*Y91H$qH`h0$spQxP zjMkS^ZRS_J@&${O>by=HpJI}YyXcPZfw%+$uJ{Kxq2fMeNakm9a;U;c?wm zD8?N?TjPD}&S)ldp1Q1K$Bkj&bs9G=H;t8j4v3uQ#-L*()Z@TcHa156-V7?eFkIZ7 zEG6-bI>~a4vIABRiG&%ZE3Fb_N=FSziLEaH((7Mbk;`x=KM)E7nfkD(%VR*WmZ;T~ zZDVw(EDGGZgsrbqmd!#O%RDa~8j%!i0(#GWwqU;$8CEf3koc3Yfk?taia9u}r++{$ zmxUW9)M&}&_wopT8PQ%PAG#*$Dm{Ij$a^C>@EQpzd??6oD;( zXTtTK<8NgS8o}0rk12H&V5NKs$<^MsOI3Dj)>f*D8oYjWS*6J1#MH#-K~g+c{!B01 zvaIQTTTG z=5ni6!DSPSN4W0v;`cLubbuGYVd)g)|7F!Urfv$@B`dxMeHh+q>Yt#EV|rv{a<;=` zvhdb5+xu2WEj9;*O=~sjW~(5C?bU+tGp+or8O?(Dyd?)D%u_Y&$2jMQK>J$l|7UW`9SvOyjvp zD#-*4zoAh8af~iC7K&oamf4n6RZ-PW2aIJ;?6djq5e0$lkJq2Ddj86R$d6nq>1)IjmgZAzOgFV`aDx0GHJ`g~gRlBG)nbi}MJzao=IXLI>%Zu@) zDECfD`nOs8uH7roPlKPn`OC!+GrHzqZv!`0Ngt=``7b?vw->$f^z1}C@#9zOa6x5_Z-iDPbZjkff@N*sGSyKV$ z0em!Tz;h?22*_jTS9Jd%@;RKcAYu+@6^{_l5ay?99w&e(*+s&;S*cfIhW}-Q+z07;-oW+iRB^OB@P940hpXxk)u&>(xXsq7V_SS_ofCZXFX1%F?>Q6u@yCHM))=T;}m=j>b zD)ZwYDX0$HPeRn#RL*uT7PA%>PUhvfqq=#x-((zU-T_h&G>Lhk zk{+Cc8f2O=Sd_R-+F2j*7dpULwE0TWxX*K6q9|5MyFNmo0^~D{_ zYSq*~dgALD$ISn$VN!MIC-KOl_hDF1`WpQBT7#R=mP4canM1eCd)@`Xz2l)GmuMZW zEb)F|iQQbc*e~$R>8yRQXcUA_^f`TzKX1CCIwsm}YPz(G8?qOKoC`cziB}I70_Hqck5q zKMM^mx2ISgTpjFuSs?QhH zHU`TfMnnNBh{m0stA<5I?kA&#x_UCm$Svn1(`D zRWg#2ohT%Flbk|5@>*JJp%X#B9|C9p=05Sg&O(=dEm;y2Gcy0Ez9&^ujTy+k92ArE zTSZ-2sLZsUH-}wUF9NfAFC9?HOh}#Dh`~r1#tDz9aLi*R;(4_HyBv&+mSXJ|?nC6< zn*Iurd)$n-Wr9`WrlSL}D@rnX0AzV4Sq%oBCJ3in5`Y?L;X@9TqU)v!_& z@J!0g!%H0ij!n@z&lx1I5L!2jmcLl+ zAHh;|Kq(gH0qvlodYOD>X5qZ_?R}mxNrWRugW9{V1wg9vBZw4c3XZy=2VOw{(WraW zoC^_isGzz`J5PKO0@*d&A886_3$~9?jF8;>P;=TDiqyrjcCRQ{2nphkaPfZyr-a-( z`@;&U*q)G#gG?WQ+S(}5ujh#qNEQ_jDV$s0KIHvL>)pR3f#17;K;NK7_T|bd^^CP% zr;8tR443#VWPbs3(;89hJ&6-H*Pzgu;+O`pS^C_a|YXI>} zefd-&3dv*_S^V2 zJBjtj=j4^Qb1<%}}Wp=E6E zuq0hu7q0X~HE`F7Bl*4zEBr+G@g-+Od>vPNH$L{;x1Xh zhfgm^yyjhBo|tozixeLe^PIs~b`y>aSmbE|0?ieTRh|$*z?m0Z+iT#$taz?&h9r1& zb2saeYe`-2IEOg!t^!RzcKC@#X0`jr*^c|WeXCbqD=Pt!L8ActUNorO}^yAL% z0)uCtd&d|LhmruOzj`#)PH4v*(XEj_(fq5k+FbnAI`81nLBG8L7;VeP>{VNwI=%46 z3HCm}$`?A;fOjm6jYUFYPzap1OmNgAI1P6TM8V&KiUX)s(EDP;jMrqxZCfU%yLcVM zc-Mm}625to!jPwCA=x4uvH*f0(d`-X$Zq(%cZ zs+ivq5C_Z$0`920j>*d+^lt&{q!f=OZTBVHR`$!uZHF)tFe51Uf7BSc`f*!BvFO9uz+@?kNkz3=QEkp5aR{jN>=Z9TQ*=X8PQ>_);d(3eEf zk2?+1^mX=#Qpu;Q>J6&M1jhwBW;cJ?<~OsgV(;Zx7)Tt+X9$S@Lxa2p(`W{?qnyB( zh_1w3)vB^becDe+E)gItQ$AoxFhuk!fk{7lK-#XY@r~)JXm0Mi6CT_1Umuym4^lzT zy=pNkz6vn=%}5Q%9-|0Zvo%gXmfu_+adId`b<9U9e|U$fArJ4QGKsVl_> zHX4g!MZ6H?+$FqS0YW$6USO;+S>1Y0guFrZL z*Xc17y4Ldvy5on7sr}ejSW(>OTF`) zp>tDW&j?%@U$d67OR`qiLZXp=;_FH!E*%{AW*Zod(~Vxmw+Ku}X85b=*BjF1&RT$c zuN)>Z-yA2GdzrV~O`fvcZ<%+BKlfOUoQ{|Ez?PcSd$Al}p;*Q7^6~Ad&{Dm6m!qRT zq5-mI1|Z|BSvj;C{A~aZE@( zjyPN`92W4M%cT32#is^BId0X4cJFmP*LrIh=1Wdsi@a;Ga-6MeHaQwMKoQpqjy}&1 zmVuz&@^JB&f6*$)xd9O&Wy;z3Zc9k#=V^%8*8^OK7TWsTb8PUl+}57G-O2IFZOo3vxx%6H&Pg(S!fA4UqO> zb|d<&cvYQ0_FzPcN~4pYl!YU(w>Y(tggkJi?aEtY7tKEFwgz+Utl9Re?It~nn)-V6 z_xSC2HNE-q44#RiZC923_+`G&-;$YMMcXif*m(ZgDNE-8rsBhAFyvnlrB$B1Ag1+u z8?2l~A&JQl{Fc^F^%a5mhg9%f|x(I9V6(o9l6C3}oiBAHe5zQc6huiC?b z{yGoaJRP>CUsUzW9nu&nXDLf}2dEcls5FoA)GPD*lWr>uwQF_tHI!b@oYFZC$M(sX z#zFyK?v|_b&9Bsu<8YY1mlQdg&v>H#TpgMe;?{+dW*cx_#4VN8^|K%N73nnVOOQD*M0`(q zy$!U%S2zs>h9FtyyBp01ybvoPzAQ*9$Hbl2^{M8dbcy z3Tz%^_#e(!xCR@>=D)&-*wukVnjYlFSIs2M^^a;zhv?B44U>w@G#0n++bDj{%VacY zYCTl`ybgpYW9N$>-hUBS_g`lS(2|hZ2=QQHsdXnBkRq{4Hz5;zZYyr>bHWSY!`ZU;^?CQQ@ zp}PPb*w!_B(~W5E!*3kHRuNoQOagNo76~Mnt*;V_^_=lW!Pr8&p$>i8bn>wrXRDqx zzKA`aoeBFY!G$-P2!u@U(@*bPz^9Y{mbpWrCwp&)n}km&gysH~ONXzj;?3u-V9&jz^W%aELhDs6-M zrW%q8^0xPg^;1Vlz7&U^Z*vKsfgz792ftRw4OSbK29vf#Vj%TASKx4T1Kw$U63JZeX6ErD^B5x`uAi8Qd2||NgB4|OF1_a_e5RQ zLAC<5mF9CFr*s`uinn;&Sv_d0d3fZZaY0Kr{vr-Nf-kZd)I=9U@Hb6<9CJ}>tU)7Q zDwuzL?baY+q*!zd@=TR%1eS?klp9#&2K!vs8wu_t z#d;d6RfUvX#RlVZX$MO{?-;FGCO&XDI>Q2iHiK+V(Yl+Gf>d5F>32Z(N%1ZsvTU_? zYbFDd2x!b-6yq6f$DA3s&W%a*TW*$#w$oL+&iVsmMbjIV;+oSaxPvlHo^ERBKPQY` zr#c+pJCpF)r1k@~Xh`odT(dE7C8!QzrMJ|(PJ0Zx^9}V{&Mv6EkL)_#=87eEeS#T$ z1wEV?S?^7&Ek*rJyukQgC{+8hX#dCg)v}MYz&HWo+jYP+t)+A0)A5H@uYZWLTYvxL z+l(Hy{5R(f3B+zUWW&F6*5QpS~L5na)>h?)^I6qZeb$1kbS2>zEMqo0+Vp zXJcLWBjS;hmbY*0r2>V+4g|BdeA&s$)~r1}^t@4{mNG}S(fo2tU)00gniKtk!lMpN zyO2B?noNrr(Tg5ORqDgs${5)^)9z!_GGCgjBKI?p0DDe5*Bgl zS0E{$+7mrVVp)9T_Swzxnd+CwqgVVC2x@b}0Z7Fq${%Du-qk+&P+(5iac=s{^>o5m z&g6UjzBDk!z?uTXTuDba%q2=U7`8wq;L&85{GB;g{@0Qt_EJ^qS-U?eGV9Sd?MjoS z0Hi91vCE$tmt-_@SK=OY`t|N=K?*PAhju0%C4txvYvtRCnN3xA8sQTS82Zkei)Fdf zp#@DhUKnJiq#EDCz*dc;A)vJhUu z(QD2~hNSY1$^bmAY-wyTr#ylR#Auej=^P!Wi5KjzOWxj%dw{C+*o~0vf>=Gh5T7ke z!|+|bRM7f#7k22cltZ)h*I7UUCe5;+1^06!@ipT+F-eZK9!JwHyWazTeC36IjXST0 z?-ulFe9`3lPSf_Eef}Q5{o5BTyf1(vGrV`s=KNVowY={f6C3Jy)ggsx5++hz6D*-$ z9vNaRY8f^+*s1icg%0yj)c2!|XJ{DjxBsf&kcz7>m9;J|osS6GD67%Q020E$_8`JW zCq~J9pC?Qb#a&}wxzZI4T0$A;ONk^SJ#Pm}g=&Pfp1;fyBG4dfl1ci?nRYV!`d4Pd zYSrxGSU6XcJVT=*S<8Te?oHkS6%iMALvzrfgb8yVTSbDX!>UxOKaM-ML@PlxY6-DBBNbh6z zl>q*ttAQB4YB2DMs`PV}$Ln7gAz0CjR_at0s}*_*J1rWHVkF)5Zj!4Z{61iagsLBf zgSuI7?6cCnQvutxWRpyJWa008pBo$;pK)qoXRb_v0Q}XhQ7h$7!rny5TzO{=Ni=sp z==x<4L%q_Im0D@bu!i6F5eCZ$=8Jm98uv^_nmnb~s&-Usslj~bp8%LM}h%}kN zu(5+3DZ%hYj&)kHyo;W_{_WKOsl};tVruXRo{$xUs%S4%g;Nc?B5Lq6S$sd%|Hs~0 zMpfCh?OG8Pq(Mr$1*E0BQ@UG18l)SfLAo21lx~og?w0QE?%tEfCw$)T-9PrvJ;vw2 zF%}NRweEGVIp=j<=Xsnoifk4`rwS(D6{EJSi|RkJ>zKF*&+oqoH%CK|8ZWq-$H|M0 zyAKW_68rq<2=m$JRZyLi@%uc23FWhgU5c#Lf9Gu2s63Rm_OqbAXwA1D^aVe_G;S-d zTl#>liflKrlz@N$_n6K$d6)BD_);Io;nLGORTKuPl)Tod#XmwE4(x#i|JK!qyIOvN+jA*%4XY7%;vakB!QBgopc2J66%F!sAKOC*7(St?U>{5|x; z^ZTD)B5030>NLBIdxfJ-UIs?Fje4%meh8q^emQ@t+?!sLagdRE?;S@`niKJCp znWj)TX~;j*3=T1?X7lSvFQLa2q(Ci4C$cOu-!x3bzsy6Xxo1Hlj82Z4w&6u>U(?pN zYWtiEAKUhDe{*u4cNqK_VJ+tP?F0JB8FES2<-1Z!=I_$`e;(scLh|u>5@&L(@V#lY z^HvR^+klO+MrCC3uywx3;!wrEEB#z)P)6^VzH$xEoT1T$(S=-uHMKWiAe+$V@MlyQ4cNa~{>*!j|cb#m{q%3rwIGB24w>QyH4%fzb>mg{>NLVjF~#jO$7c!2UzBG&y}L% zCaW8rFg@7N@Zsuo5;Y;R5=~BXRx^1h7?|jTkN40sw&1f4$K`%^W2F0-<+qUgA10-xJWu$~sEK^d<`M&e@4Q zGWl1uj|e;D#U{;eKBK{ZGp)G^;tRCF!@&h3FmEY&Eo;jLJsQLQfBFH!kCx=65v`%G zW}7nxKNXL?{3-`Uo%mbc7dI*JU529j@&A6O{&{bDOeX^juI!hZStV9CH)RuFli>9x zqJLhs2qmx&`7LnmhnCJ!VJBdXlnB|rxZ8P2RxJ5@-|LAxBFfn+3ATE&Ieo~=;kNR&* zn-;`DikEhqOGMTDE8TY`mCCyReh$Ql2~632D*psC{I*kFV0lc;c)qt<7Rmsa$m{6? z7F-%Ai~*6g;1dYkynptzA7%odin3;f0=shl`NO||4$l{qPajcnB`s=rw1k83aKn|w zKZjSf7+b;rqbv&J0LxfpM`*==xr(14T_hgyDPEntM@IAgA=%5ip<9`cXS=Rbe;_YH#IhxlpGhf1Rckwmgx1O$Ih6^9~0MZF}KTbKEC z;ZMafVX7QEVUoiDarO&|`RiE#{O@a#XG^)3z5nI;g$Y5oIxQ0v5%YUy4GDi5`Bjhn zx&}}@5H}~dp90$n{_FewpKl(|7erv4eofhC`F{f^{Oe!vJOX}o%>VuAf8Y6kKltA( z^Y^9rj|cyIW&Y!W{Qd3!e^+J(83F*m9@+)*XP4_%0L7OYO2E2HmR&eN*8J?xsHMObI+e^6OS=i#NuB?O+NqakoWgh{^NlI z?*fRhizX3oh~AH-j!qX2>CWtlwV?zMvMAs$7i)P2m!VSDK?3X`n&tfzd&oatVE~zI zR=#?*m};eqs@BzMtd{;LLSC;~j!Kztho_#^lvIA9nKZ{=rwBDbN?D=Od}Q|@QLw-5 zD*aIS0*3Qd*IghSLiFSH*66(+D1V*Qz8i+S(7Gk945V`NvTBMX@w6_s996$)G0ry} zN*e}fzP=nYtsGgB$?ulwyLEhRFDiAl9xg)07GdwsdqyeUfxJspx#NsKPYgW94^WYW z@=5gn>*e^)3vwDQ^g6@7BB$TQM(qOg-&DC78Ne}wi=k4IDkPm#K}x1@kOPlWiH67b zb&0T@(Y$Pll$&^vf+UaYyh8^p8uJ2tT&M?l`F1E8f0m@%>|CT}h{yKZxq{Ac=Y=KSgm(`}jqe89%9Xx3FsaIa z?tHcvy(`wq;kX43N*y8%b&i>))umSZoaf4clOgw)>v)qD&Q-e{O8x2}vr~Tspw5o~ zwYO``tWg{Q!!m%8$*O892-utj$1EoBpP%6kF4qfJXvz4nyi4V(Cr>*soNBb&O)#A- z6(l5t7YFwC2N#JfKXl1h^)%y4dkBK_!6tsIgF)WQ^LghBU*VDAyy@s>Ghk+RW zJqk4;3dN7OTce3*@3ITG%qNc$)f+8m&1b%q>0ZNE+zr(@MPKhl22x0o*O>-C1$e9{ zqj`yP({})k5i{$2HqqZQ;v*hSaX#7a_}9H2@PJaoz?u6mr|n<0i-$b%qag#}7`5Y6 zR9cc=?=KPoAyKoZ>r+*+U>eX9gvnq!K3<@a$`i(6eU@*tf9Jb1XGYTyFJ@1%-$wEHm~xsG;m^espAMoa zV0Pt?UcrBSxc>as<0nz^hd$MSkbqN7hI)A1x34`gjP^K3a-$)0?lIXdkGui8qATeI zWPg9r%|IqbfG6T2;@;^*$#SJrKfGiz2TA?B3xfwnKq+D#*R4${2ohok-(3UAjDl-j z8V5Sc3%&0M>~1&Tc?7Iq5?Ssy`y3C8JGv3Br;oztl~g&@M2piQ>l1X_?#&3sP-&SL zB+dK(A=Hi8#w*!i3DSnJ5Kjl-R z6iD8_)NNd$sc|7v#Ln9 zzC-uV)$SuPD0Rc32L4Me@~bFWKtuZe@vcr|fJE$N75n*$-el=&X-C8{f~{~pvn(2o z>g(gR{%{~jGo1FY=3<13A6y$&}NP|t9)aqfsonv~p=?a`1C$=-ryQ33>1$IwoICveV zL0_1Jk)L_6|$@=c*sogrcCH>`ys1r3vV5l%@(7LxbwSFUwuNdZfG9v?W0os#on_(Lzv?imQIA>p~jETToVw*w}b#J)0m=$D~cgR zvVf|O&hvt$_S?@7r!6bNo-jJ_X&EcDYFV9?>_4}c10@J_d4Gkx*~PGq0VkTAWd-gV zZKajNjzlp43o#wvtG+gO{L24)niU>AO~h6U$(&|O41w3JpLT8YW0wcOmP(a*vUVsl7ScH0aoe^T*FT>fVl4}*5|L}M+i;PJ3ytgf0 zP)Mj76Fi{(fyCp6%PgC#~ZUJ^ON-z zMD92xc~?K4AWS4LuXwyd=v*1#D%0S0I{DUbf${RCUhN0?hn1W?RLuM84Pd+qV298O zX7p<4n|849I4Il0&4pj|n=!gD7ie6+kLS9DnO=3hUVbWSjWpj>)p2X?SzHR>4dIlr zG-L;e!QmKkByDFHMbL>RY#y%z=B*FdJl4@IvuLv{Fj!+tnGLnZMvoC1rzC>{v?0DzR!w;V{sQb{ZXuGeQ3KE*sw;N&r2 zEFim9f?5u=fEkfB>M4x6U)c{e`&5^s05lgS1l%$_l&RQDh*H^Rv6y3(UQPB%muUJf4uHXA)zv=~^ zE#%H*_9_iOKLE#`nw3~u*{PnG_mQ9zmf~0ULr)t$xPAi3>CJ2V_NHOQFr-;u+5dJR zxT$IHxgn)uU7YUmRh@w4wM*=Cc_>+d432DrZnsyH0pTfQ!j4)&Eh>#;b&n4;fm@Y}xaHyC4z%%OO9XQh$I*-Yq)wC|fX=$=010tw(|hUYWZQfVn}2gSA@5Lbcl;(+Aei(`OE`X2w?*y&hFOye9{2(4v(d$V&fvsRg|ZyBj`UukrFpmu zL|d5cHU$n2;cu|MB9xtdVa>!9w4B@WJs6$*ZjZh0KnH?Ggy9SvMRWG&m3obGcQyK# zw-jpW^g1`R!W+b1H@$3(#Avby$--9PSm{A)R3QX^Nm_93@K>|95LnY~1W6wiEx#jy zf)?3>qXZLH$vC*CE)B2egmtgpgG8BVkWw@>n_FqsfZJJEW*R^9j$JXGD2$0rX1PaPuu5NbvP|A%1U+C0N0R53F+n0W^C>BTx8^oh`h#K~o_zi9;<9hC6=UG0igbF6HGvGOB=hdB~brCK_8zn#+$9nWh0q1GhF7UB@KkyjgD zv8AV8k%0z%Uk1qyk+&P8JvizuqrBl1#M7hggVNnpXU%&%z3z3|LesuJ$4hb!HT{|_x_~Q z+6fRkh67X%Bh@Ac6dA zGOEuS?{B5R6f#RHTx*yP`WBRnr<_n-%0zh>0a%^)Ms?hWN%%o|qb~Jlu?qdLCtlL| zK)Y0G7rnp&#OGUqZA4dBTcdd>GwVl{(G17^9G=5DRX&O5 zjg}8L24&*InC>XGKppKhL`MY!*^L8F&N~PwTpn$b|S zWDk=^b@Sotsl1>sg_(Uy0@($e4ydAbYdG>Xe}Fj0OuKQhj@vnX)NbiVjeZp_H9kv9 zBKPK==;H;RnHogYk|B89;XC*JZ?sBe&(xZ`)A9yJ1N)SU?hLk3HNV+AglUZ^4n2R~ z5rS(!*_{rb;{t*r@e|!I+Z68_D9#;E)dCA11#*W&yKf z^Rg%$fU-E7E>gY4=5IY1i(r7axbpUgXrg8^sy?>taQl{=Q4e1Ly-1+Pb==D^Tw$VA z%X|<#x{Uj3@G2A8aS9MXz8 zp)hX@=*2O)7S-m1EJ6-K95@rNj|J&M!NY0R0s`I(FsXFjV?GNT6ph5)Dn7Cu7007f z%PIn$TEgMDDaC-FHmK8pS!Nq*@R*gJV1~a_qK~$1%<>@aw|*YJ8OovUa;^RZQf|E;>f1shyH|U{GD7RVg`fK^A&IA`S>yelA{P=_qrNfWRxALQ~Y zK;s%C`e<*=$HQUL3pCtaZ9`V!>kwj7M0^JN@lHEDyt4xE!F^xIyYSXGEM>ng@_?WE z=k3;CW2M%sXUNfY6LCb{ zUZ&3>N05 zkhuHC*gFLyHMEUB)X-AHN!MPuXJ|`fZQPy8S)g$vN$d?)@iEQ zO(*11sfGwUVJu3U7= zQ!ED{FPl*q6(~w&apV)qi=9kX0cLQUP-p1bNmnf`O2zzd3ssMFJCQE8OlD6uJ)a)8 zh4U`A2e&~*WWk>yN@Es|ig|bZ+6Yp>h?Y;v@X}EQig?aHTuFh?jHs2MHG?cIo`HBS zq(wz-Pn|vA3I{)96WA0f9rEDj{6l;>0)&DD%=sKD2?p@$ur1+R{0_;ts5o>l4l2~^ z1^r9gf&4kAXtAbi+<#>s$dSh^W(eMM)KM&I0K~5g?;Vc=TJu8Av%?W|Um9Crfs6z& z)vYyre1i4t><`T`prbtBuRBma0)WY}o=N1(ru*9l-BW(-+h(Z5>wSsYoDxWtPaU!F zq#cP9m@TLQFHgoob-tXbAaoJc{|1|O<-M(bCzTQGQflq9MJ#t+(p1P44XNJb3Sm5l zl1Dnk94WOnn`x=;-myMpv<*B9xZPj!(-#|w0Ooc$wvS;+*?0Y4^UE+<$OR4iTeh~& zsHMb&UBGNprT5OW|0x`TL4CSCYF$fTM0sv zWkpp}x>sZ$NkMU9WQ^JFHJ?9IadnC-qZtWJBuTIoAsWA8uJ*S(+xHPCFOd+ zwEj#eNPvAi+jt^otTUa}tX6li6j(`3;MBC-=Z!>_wzNm2UXad=-kJlb-%{gV>+5=_ zzKNp!nspAAj({j)(>VtI`3o!3O1byq2Ly17Zx-r(5%Jm=y4K=)EWx=Ef`-9#fa^M+ z1F-S3zQZp=hua9KTRD1**rK|PDt5I!9($&Py%rpnMruI-sU0*8B|@FcUT@m^T8m8P zyp3UX*GV_+L!X-rD}27@muC@j#_&BRWl~5(joSPFaCaZ030(lop%|x!)(8y zaSUM8zBf|(ME38uk`Gd+tuwK!e?Eq$hKWaeV3x%-g@_Wp z)e2NjiD5~vEK=&hwHHI}atM1y;+3XSl{t<<)v0|Q0sph@SabB;N@{ig`{XC62UyUW z-EO<1g%3&6<3hzwUq_7znxMyNCz_rxy(aEd6~x|u{(O4A3e6XT&9eD9{rhGCm3-L% z{AR>ABDX~;$X!k+8!6gB0EH3_L9w#|)R{$A#wjI?e&`X-XD<9eM*3AY0=r71>h75~ z^_gp4sJuLlvwJ$Bc9S!$m=A7<%sq@0-T=|W`@J#iZMvztMpcDfQ5L6@YtQ+_pv5Y0 zpo|rrt~Bc6Tnhht&zlB5By|sj$(xEW8B8ACJM%{ zc0M-;=3D=G(yFgUc$d$@5SpR#*J^5=iI^6>vWj}aCcwNM?3ko*NvJKNiEs#aiF|0f z%=$^>5^yEAit{PuaUr3sJ8g|%)4tLt)dE}W9^E(nYmXPFUcDMENjaSv zsqhPf@=`WKC3=^5;F6qa_3_6wk~?1i8-P=~Ds>b}ie6;=*BSAEvg%1 z9sS8#;mZ{CgOdzf&Sk?-tyjBAeB>eVmFBFW7Hhz!9#F|`-@hZU&)<3^(AjM95@ z5~K{mOwhZ;S9l6N>I}}_wzgi3gP5V&&kTT`V@2<1%TelMESG!}P z0X=pDuF>5iFVD8a^?3SoPUt-J)_9SDWc6PFrcmhC`^MZ31(iiReAaqL#qEB4Cmz_Ti1%}@=NeShO~)vBrn8JL z2apJHG%aQqNAX7=>gn*xQZ96SrRzb!TARMvK}LZ>UJMv{2{|KC%R0UdyB{Ggsrp<7 z^&}}SzM^8x@(qGi%L7;N>If8nr^huwDa%<1Op05L>;~_B3w9k!&n|}bQXGTkCyzra zg9pEZs2UTc%4IOp+SF|sw)1-a?*#+`GA&)#reDNG>g#L@WN~FD%qv{nEN|R#T&t?} z9ao0D2okXul`9yKmF&^NBuwti4&rDE;dvZ%H`GgaG(?4Jb|gQm3m328-K-B+_o)k= zt?ok<3@gUiULp~6gyP52qMrGFg1 z@Er`lJ6r5TVzuHt+nb#}Eaei8>w6$|E_kp2<~Y^s1nf}7rl*(35%j_|tr^|RT;6yq z>FTw11t7$_JDCDE)@U?0S_20vGS&4gzW*IGFWRCpnA;ZeN-$X9I&Z(5f;r1uZR?);|k0Va}u=`k~5=PlN7~TMsos zJ0n9dFdLiZ_^%!e2jLH?Pq>RUt}j4vunH(VGs(QwpNNQ=S@p-OG-C~5a2zcJ_%pY@ zc==kJ`nnI-a}cD3+4etyHJ+`prKsZJzIWE$aIkmgXJ!G^y&C zAb5-#7p6FJ>|dz0mu>a-GAvS-OsU}2{RZI%H!1$7y6|ucEi5WC#2>1D-;%s~$>N#D z5&-}WVijb>gcAu7cg|v7Ff7CV8ac@(0=&Ra(mk@|6YWc4gV? zU^UeDAPI39zk7G0q=iWUiXKWW0OR%nMKi$7L$H&DL^NGxQN%f)KbM6lP!Ih$kg>+; zG`HXJ(Ow~}PAL+{B95Q6J!~3Udw}}0h67LWU4!mXC!#lnNHB}1>l8`;j2zG`Sp1Gq zwup-b0qcFPW!xZ^owfWpw+;-H3j-4$T!!9pmLFDoV#iGaIsRx)Qbr_I(132Y+gQ_A zFmW9Qkl)(MSF2RI#y zLE^A_SjKF;O8v!fw$y&Ue~$?UgEtuwSM{3>KW6m;W)5epw}xMYgNna}EXwxD=Wj1< zoWdXoK}8@s5gf%(D0Iu0?G`Lr5`?_szfg)qIRYuDk>DnqnJJwna?d{Gg9VuC+SsIu z4hHFmSQp?{+4Xj;g`Z)e8-RQ&%B)=i^;_5f(>NqzGs@CSDl?=X3BrOthEiSSjMn{Q z;XFCRnR**xO(C(4Zh=s5)M`%9PJ7LNU4dZ;u8Ck$xB?P{`^1 z-R7kvz7x-c$D=3!Zfi{tA94m+2=t(Rek#bsq^=LB5oWiTyvXR!U@^Yb6XUc<7iu+X zjtgV1q`h6#v@}2cI1Qq)@q4pI2bp1A=f7LFNQQZTx@<$&QVy(joyibIp%Q8KvIXsO zNgpbQVF1UKs0ygCB$LmveT0~}uxWp=z`Lzq6yka+Q9a_Qv#n9A%}d3`kCDV|kx~wz z<4tAIp@U%THZeBJkHD$N-u_Sv>4V>%Zeds_ky2bGwFqktXxad$Je1Os_2^D=VaN$c zgf0OVF%yj5mM-eP?!;=j89BquTm>y@T8-oGE?S`ITs~0Xr8o{D6DlxM6rd_P-v=PJ zVPvOcB1pf82+{lHzWQ_PSP+MR8c#s3+_&*JWkt(R?2n`q+KLU9GNZjer>!o0J4kDL z-PIkAjEo(r4Ml0^*Ik`gLgO<=jYRUaY&!J#W>s6o{k4Ey>Whf_bx&fYXRDLZG(r?F zgJPb4Za??&9p8b8Mu|;o)ZUt~bnx$#v+u~pX}T33_tfhulxB5j1!g)V;sOd`Q7@}A zSLJEC;}%8(-Kvwt4*4Fbb!Z%5uaJ_jf_Q2VH=H*q@nb6zZXWyOJV zPD>NO%sqs$1QI}}RVKx84U>wviGLTMn!`YR$8>W#n=c1|HiZ>XIZ!k^7Xr5>#AA3z z3_zI8oc6K*0G6c{K-3y-UI1)fNOdNQIn%uTuEzo;i!FX8;V7Q8R)R~f>P`{O(bqel z81wA|80J{cL9}uzBJD%0N;2LFm{zi_>+7td)UF4DQnI0HJDBM}oiEJ$^+cK=43z-? zYwy_2u>v)qRycI(ldc4)K_@CpQ`l1iWx|u~1V$5^OOUH&#EVNfA4b40A+tGEk++NS z913m*9G&aWfFE#7cXKG+4_|cj2kG@9KhOc{fyiY13gc2Q*e@fS(B8A%!Q;2a)h9@G#2@x-0;QtR z(-=r^iV79CQc9;BTP4GGDkuc{+l|}|0Mci*2@Benb}w66#hv=>D2+^a2eQkogD>OQ zlXlX!?dz1Le@N4j>LsFM_7GebA{wQQ*j!;3WR&u?ayiWEqG@Ww4347lKV;Lp^!?5;CJ&1 zc*Z?lgeUBSitfaEMh8|X4pIVYUJUhIJ~i#KSCDueCS%uyA!Q)F0L1!?r~}!%Cb$Z3ru0 zWbGN^(9lC(f$4IUlXpVN4~COyB~7~QO3u3U;L#jVCt3YlM8`#fh>DudmCBAj>M|um z7z{Usk*c%@VCS6li78Xk5D>mNeuf53}6!|*oeGzjHa=kto0k4X2H%VpVdW!SOcYI^E zBOkI2up{O9$n?$zk(Hcb@4xQ_3dOP z6^XnkhjaXykJj6Ow3)Q_h(}^?Dwa}7()o_f=|(3gj{Abg#ugiE?;fn(6VRZ9z1)Vm z`FG^3i^vZbuJiYixXh=ipIfKQEaTLJU81xU%997E6EFfHUDcZIw-iF&$ zVbxSmuBQ>9&Xdk7-b0v;dfG>1rdAtqxN5wLJZ&3wSsL&9dW<2~Q@=|K`e|(&JfXhq z^4a+HgXf$QD{-y*)9`nKbb8QzG-e5wqwpn?Rq_ryyy4~ z(8o}L!e(?y!tk4Oe{*O3^H5fAG^>|PbjT}VHz0GVyi)=2+SxsZkHbmxEf<@gChyaU z$GlO6wIj(Q$=|#Z19K0Xi7EEI@BDy(zF4FEXr5PDYsICtMggQ+c|13hm76Xz2we+F z`hs|j=r$T@fI9$pWJ8#50e092@v5k8{DPa+817tx_9K2MT?g$N`XE$-(8F^NbhsqP zu$tVS?SB2DNtWWZzl2( zH#nFqyUN=%II2cp$EVp&%crNA$dXUD4FmH;*(Leg2EL;iFWV)Vq`yn;+&l7E?!}w- zn>fj5rXjA}H(hCT^tY22OuY`hZtX?yhgE#yd@87s0K=HYQ4@|t9qzq-ELH?_psTrf zR9U~pB1-sCr^Xo}S+{cE$kA9$7bh_5$QUUtY3;l-ckaq@2WBD-ocVae-(O7w5h9YM z!#khP(OciMn=cBrDs8Zk4+P>4{Wkeqz5EgwnKNpaJwL|B#XYfLSZ3TZPfUs8zfd-9 zC8h}@D4N>XQ=kd)xqV3sI0xU zm?{?y499@9Dj5D<1SW!?2{p6zv0%*c-6eyFu^CJx+IcHUZ24R{U?{$HFJ0jY`zeDP zi4YwW5w?I)?>f<3@f|~J#R}=={SF?27$duyD3sFH+t@abIq>Yz>PaC zE3_(osU09vjfR;E*`*wA)nyJ95dib80Yg}~RJ9bx-QS1TQSNm5D*p6ze5>s^*=jf8 zDm1$EWRv0BH<{>_c*TMYyInsNoU?JQffzicqL_N;vj>^Bd`)W5mf-sE(I7uUw>3p( zIJ1!pe4f7!Xjh{OsOFt_5)Id!mO;0F>QrR-;6eh1I?*`n_FE!);M@>%E#IAHKC5}W zQSEp-I=<5FeowN|qW+_2IaTtiHR)>fE|A8cQTMQ}-e^W`kr3qY7;z&@Y=t1b& zB7et$0wh#naH1gtq0Xod5{fcfriMnLKY*SIAB)-i=b~YFY}CKYM{@BWK3lP+$x{_` zNYmGyU{D`fTB{Z*ZdSYZ_PE&C`yS@@%S>#%S1E-WT9FH3+7F`E)a;m=U};MVu#n^k zJkS;>Y&*@t2l^)T(Hs+hAA0b1SM6_8+~aHaR}{`5ym zXg%r1wonr{Iox<$QgnsfwowCtx%(ko$rkNQR(K;T{;e3;@V0J#%eyB0>Xk53s~qGP zQoSN%fhmmy)%4CZXw*|Ui3Z3nTd_fA&;Q^p@ZuF`I`gk)zGBvqy4W`pT^JFKB<67a zo&qSb<9fGOa7Qh~=XhqUIj+>85bLMxC)My~h% zt~)h<{MZ3=&IzF!SY`DDcC|O_C=`h?&(!J=H(+1>n>aR{*>itFch{9j7Rqry zV~vdViZp%RT}yak>&~f)IJMyJ$+Ing^#hxoYehT&l@ENQUfwxYc)F0y651ZCTv(-)+8;QO^0PUNE2Onx56)V|a(xl(F>Z%l;Vk_p8SZq(T z+?l9gKQG;uLQ>DQ^JRj{n+Vhw0^;p9bXFFNuj}jOiGC3XmIxd6*iZq0OW>9G%GmIC zj_5H$MS@{DcXU6&AXhu1 zM*T`Yr&};WnY_9aUq)|uP+Mv`X*Kz!{gKpnO-|>jRg4oGNyPPrxVy}q$y(vNhJ&h? z)#?7-smdxf^=G-$NFKct3-8aD5xBb%jJ>J=CdwzHzB_&5XcNr}=ty@fo{z=e)f1D5 zM@NC&u1**nHsS?O+O&}@S85Z5?j$e*G%9L~AQ8`bEqLB_&t`8&(QH0n!XHDU_4R41 z*K>HW_ozpeF4b1Ug|6%mwi*q*<8`XRb$?Grz5x6FR(cM0I#S?`&r|zOD3`h z0>P?e3X@!?vxxi?4phBKNW#)!*VF-eY1RNpfXnd%w)=Nha^xbowcK)K7#7vg09xy= z<0Wn^knCGuVXIBoA(Dx#DGrnt!QyrwuhSrMsDa$v(Z0DnE48J4h?I;m^yeQ(IJiYQ zr&EFkA`QOj=NYVYuToa7sc|0X!=KKa9Cl>191lzv>S_j}QK3OKtGP{6fJ0ft^?nhl z?e@ffq+}03wOqXU1U>-|J7_%f!s(};l;eg?yK)^3?izoIHY7tgc)vQ_+qNF==+8K zOv5Tkl;UfLbJruU3Q@f_0J0%_)xY2n$F-4Cpk_1+->6F2Xo2|6n=`WdJPMjGqxjmk zI~NgXo*!`_e&SJ_<5ouJDR!-oWQhR>f|&y7uTcYkNnzVNb%AgF$6^QZIgr9DJGCIj z7!9hRx!nh5y@J+$%Z62reay?>zs2hAhP7G;y6+)2c8e{Z-k=l>H3}@WK|!*YPs4@U zG3pwF9NEZLD6!M{VukW(GviDeTrO9@S=Y&H<7gFqWVV~%u${?##(@gz6~P{u*HV~n ze5`gj#8aWY$6~d;it6w4y8{Er?5fVhaDY;yi6=Ka+`ELQdEH-o%9t-6B=!u3M#&VE z)-ecVlEo+_RXIt)MX#ICG;L{55IiuaL-Uk+1_`_}HS3+OaJ?y@x{I?yIb#e{`T=2C z9JKOQ%E;x)&(lVi4?sL+1kM&FL<<|p7eJiER|M1-+4JRoZlGj|1}D7pIn`z`wzB*zkqjZkBx~+4)V8U+@F+~`KaC{>U96=A@o0J zFok@^|5Xy#GeecpS(i zpZDFKaPa}0ahZB?H(u39ZjWASLCNwuIc~5t@C=fYm%gFy)No}=I=+%*QHnb>CLp3x zVYy9Su4CjVE2YZW-T7Hva!0|pbKRs*(sjyoYUhY%no3KAtvODiKO+l^?82M76A?T$ z=d0$%QbG_F@Le#mvb-6gbP#Kw!DD=BZsf|?E&|>}p&*PLPYU)+UD{~Z?|vAQxeAny zTLEO{hI)0^b@3>5mH6dRI^NqW)vy}{Xw!pYe*f_)1kN`k zVlf}LEORJHju1GkBTW#WaNn(<%u4Knv>q9%9Hs%vA?#;O^@4#hssaqQ_{KV#_0Fd@ z&XVaujYU4fH_7;ot6m6W!+iwVlvdSzQ3CN?7H3Se6K91fW@?X_5jb3Z-KL5q`>u;Q zE?4Ag{NT37Hx1gRW}l;w8qy&T&_V9KV#JjmXhn@b9EE)lMandmlB=~+B- zO2THn(4#bO!^=%v5=l1bqAR;-!>-uTxxAq%Nu7=ZhqsEP=^~k)XF9}tqf|I%D8%jx zORIQfd>N&YR*BT#nkTUHB?^^gMi)yRROd<>ve)k}U>(@}qNv@kdNI2YWBHHT;ZRkT zeV%Cm5&uJ|Rn2y`8kZSXvz0B*k}NCgu=U1Z6O#q|%HXy34GV8)doYE~7AU2N!CYT; z=L%#{+TPC9J58_dn&eFRFh?PInkHuqJ`4krKeMLvZw4*-NM{tIQKghZO9B{wl&ILx zsapG@mEP!)bQO-Vka?~=AY1-)zf3R?y=T803whBVXdSFZ#V*f>8`(H^oQZ@*9+VO6 z0M0Bwm+G}TX)xW%y6RK&zD4RmvO8*-|HzLIVEl&kQLeLtj=bO6E#5p$#0NE#X)R(p zJ{zx1+p~dAU?%BWewQfr4pkPl+1MDHQGnKWFhe9)Ap?&%?>@I9wpntb4Vau*<2vtw~5!}oG(6(5MWgr zs5EMst5g;NXXS8}obrE6e459E-bznF=>!~h#={t+tK%N-t-BUUN zYgvCbIA%B=ln9mhnt9e2yrGUgW&$uEw_WJzdH5%`Xk zr)9&%yicZYXDN2bU?EUjsq>;`aV*YvBX?Fb3l_W^5(Ln5a-9Q9%&%>;DKhlAN&&hgBN@qMs#IPG5!2nb` z6~arL=X1K$+qXD^pT9*z52s`vyk+ntzR)duHPOOPC#9a!;=a_ZmDVd6-GeeF09_#z z^b`FjHzF6%;i*~Yo*#T>1ahoF^{TxQ$|5mc<~O#Ma60mGBplS5bpoqJ>ZI9HsY7$A zc?xmLruK7=*~s?XV_!eM!y>P^KkC6$<$#p)|KK<< zf`ur;77Dg>dbHZ~bFiKAu}d3JI@8mYm#WNpk^i-(3xWSwfSL24gkc)78;P0vLka>s`E zri130X!`*Mc{00dslEhToqp96v%0Txn}cG*QjG@jWk<|SxXU2ZN-Yz=a50MGzv+5^j%agzfLl`E)`Fv+o ziC~HarW$IIQmdg(HLO%#D!e7hl7Jrv>)b}tA?xbIQO>d9bo{F!n2_9<0c>E{$R zhclTXVXueXcT^d^s1 zOGOs@>L4?D`U5_qf8z|?3~m1vs9A+=vy^jW^h z%^hNK#|IuqZ`)#eB|DgVQ@UCdIzs5B{i(fYBhC!_$AwQo7>U2RHEHKeALE(A!5?ER ziO^RUW>6|NYAo5aKv?&gAZ2-y=^4T=fRF<}NHS&qsr>Jj`=5uH2R>Ewb()v8Wa+d- z!8809G4i;PB*$5bp;b!U%Fe38kZ5n>vX5S7jXy;SIXV0wWhj-O%6yx|6ISO$#S~x! zl7m>B_P##$cJ%R&XAsVh`^Z3lrvIt6*}~Un(pi<1Q)fQrz(#Td=l$EB7|J|;L&90<&x#oGMa~f8!)CwE>+fG(U^X0oo3hs@ia4|yC)7%-&7jk^LtK( zhnEnf&cd0%%FwZ3&^QQm-MNawMEsG_h@zt^yCe&u{K^gRIUYY~y1`V72nWr6e~#O1 z(EvpPKOPtBvCC64`dGsf5PzW#pV1C&dw` zMkm0Ep%0A4Yx4U&N`9C<`*QAqgyol%tT%-wW-GlTqK1t5Gw}uYuMdt8S4CV zKL3FQftZc$zHpj_GX@O{p=^@R+Q$xo!^Tm>A2J6B!lV>ZjCs*CN|LFCa(rmsD8gP7 z-h+vVtJ;7&E*pR8S>8d?N+Yb+;NsKov*Cc#{Cekn{$4sQ)U{K8CA)RPMIRhd9@qu{ zhrPcHt8#1Guwg||I;FcqNd=@E3F&TWX#wf(kZwsS0qO3PMp8PZq`UhabFHPzbwBHV zzVFBT=iRpF-vsA|b6)eBW1QnWk7GX|V1&bET%WV=M}s`n#f_Jrn<`#9oo0X1YIIgY zrNSPs>o2$0qbRbNZ@}f^%9m|w;JsVyBF5MkZt4b#1xZdoNp+Wl$|@BF!#61d6QmKAJBngIj)K+=(fLwZwXv%B|LPjBdbkM(fK09Je^y^f8EOE2|HP z2Iz`S7my=Pt2@sv6t-ORrbjLqQZ9{ahu7S8o$iEnoFF_p--EeL{bMTg{RyZZ+(e>w zexDZndhGb>UOE@8tWya6>nE=ZfvWv#wJ({Y99cIAtLf%c!|UFg?eqZR5vT_Z6kTEX zj1xo`6_`(Oqwy`z)-WP;)Q!tgw%=Y+`dI<=*GC58H_srKKa~m13)BhMM(sD6582whZv6f~rC-lN^jj+IGRibJu z&-&h;i0>OedKD*}$Z(X0x(9O(k2WI8F1=UNfZ{>bg<*H5TE-t4p9*+k#~oUow`;7+ z^j6_3wOv+=SW2}mYo-dOmgUn0VYHC7D-=FSS7Km=6Y$UxyB(K)O=gvh7dW364b>BQ zrJ0+%iN&a_nW3MNZCtEP=kT%dt;;K?zNX>w_@X3gnR)11^pjA7>!XQC@{w#a6|eOv zpjL1ycQDrpV!bFwwhAMsaPl9*6okV6#)zY;tq6;P5)ZTzn=`IGTP#E`v8m{xe-EA!EG z{g9HB)+pF&hDQB_X(lB}lieIp;_ z_Xp6om;BI*!-H4Z*ZgL?-2MUsf(Hf`zzK^=lW)p4YXg~$PvnS}j6c2lfbMGqsbdri zROLWo1gU;!SgZ_{8=b?foG>yGcWz%mK+Xh_eovC2xrNM{;_>(CS z1arUlkK-O(p{#SXz28w|Z=1T*+a6~lxfUP+4eg+UTkFur^va5%2cGDm#S);!wK`d< zKfdG~>i>ka3^>l}1{@aL7=bJ`J}?kANyRirno(T&{deDpdUAi1i43AcBkAPx^m%wp zx~y@Z!}e#E8>1VTwApPKYYM52TrtM$049>z_s-+SE-x!p-@&~5yTIW{UrI%e+19uP zwD;5P?Wt$ZI#uRsxZLYnZprd@j+cnK1l=gXCwu^}ajS9Tdil=e+o#Hgp>!W2s@q!~ z#ndX)CJo-BkW>|bX|51MM&kn-gptA-Gg?;4DoJ{Y8Oon501%e^5N=3_1&M((=imCk zx55w}p;Mf1-B+g{GWx5k4dnMqDeOai8q7$L#>#%!yu%v6A=02Ko(Cp)Xl=btBA0?7 zMCUWDoeMvElCJ`qz9q-w8dlk!?CX!tuZhz@0A=pAEUlSOD&psYkKFEn;YkvA^7?o8tq1-8vCG{)Z zjw`Rl=icHe!NE1zc2Wo>AX%;rt>IBlp3A<0Z5KLz(x#|}tXSI`huF;-qEQMM0%~P_ z>tmE0f2y`RvMQnPDA30aF~|HSaCoe+S{QgNV}qhgG|O75RHZ z{@E>q{DwpXR#;T@$>8TC>7#{gu>kYuO0fLhV7WTlk}V8C-ko@QxHgzZ_ewq!W5tI1 zQ+qCfM6%a@LJVolI_aucJeLZC#)a}AcYa4Q^IkKf-R7wD5OhOs7~LK(tXB6}!pM(} zWK_}9&+u9rxj=lVnSFddYjOwR&+7XS=UvL152{*UuWCNW^Xc#koJ%_(E^46=1`o}L z(xkELXszk4!)-g*$A#ie~kxP)Zt*Jv|A&<5tvAq*9w}34Xr;Ljd)i|$lX3}mRMNU5391cnBME-!>0y)>8*!U8uys|fg2^qA1Nk(?kZxu_npP4(nvM_ zb(7gAy$`Fl@$HKOi-cdodwKe<^AbC@*h6S<#hPZ+Ra{)XK90CUx3Yj35>M1B2(cpM z1Is7jBlGB=l^+QbgcaqFm89?+uJva*?!`}vn&iMVt^lTY5+%deY5Z^A1Re&qi=wF9 z=@e$YeBnMjnT1da{kMp#MgW|f@FP_JwX*y^j`~lmXL{F4p&HU!qaZgM8HLaer*V7! zuZu$wF%GbvueN0Ft^HGs_UAM1^WPK1X7jxt8XO$CzW%0CmzW%thE^UVh6%d1V-c9M z6-aJZj^f^T`4cen=f#5+24&a->#-L`Ki}bRCl9eqXuZY*@6l~s^yi_xP|1G;CH+;S z0aD=ioU?nH&yoKZs@`w+9+V$MX01jW_Uk(T_K*Mbn++8Kp8o&dU%wrkcWQYlXQ6wY zg;qD>5{-O6#`OMuG|UJ+fkZ{j)pRlvD0xg-=a-QTuyk}IXu_QE5|LpQ_eQd48?zd( z=9r?V`ge^S%Dv3b!Yc2Nn>p5gRjhwLIES3z+-u$>v;2Jn{Kr#%|M486 zuemLgPp1C=@9F>d*MGK?e!q&~@&8@-|F|H(e*C{H^XpRl$Aka7GXHTwe*O6W?JMK; znlJeoI8L0gdI1xYBw!D?_CgZ$Y}SWJX*Fv~Al7DHLauB?`>k<$I3%Q#OZzCjIRdF4 zAW$X>K-MHA;-1n16widz?ai5vTHU)m=!Xv_z$}UKMZ(>;y+Fdg|G8cL{+lTOdmgdU zctt&WqX1Ug3nJhcK;{2UPy$#TW>Y5srOprxtc|XKfI_TPuj8w&3^MvN6iwqcUpN-a z*%xj-z(+CsV+5oy$OAPnt*ZK3`i?S-BZ6h z+lvP_i$0(c$pTy!b&^W9-bB`X?KNPjKG?{U|Iqy6Hz0dR0o0w>Fa;HP2TrS>3gIGvym0oFUv`oF0YC0Z~1Oy%; z9%3diNH61sAa^SFK_s=aSIq|ihfLx)`X5E)t})b0Wa824G%#N<2wemm9Pjv2A8+rd z6K)QUze_qMSl<9*Eez#P=2FgLc*64CM1tMG4rvHNg0&aq(s

+r_LN9(HgOXjL2a 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ึVRFi;*sbmX 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 Date: Fri, 26 Jan 2024 10:24:27 -0600 Subject: [PATCH 86/86] Add new openCollective link to readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 048f185..4a8f228 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,9 @@ brew install --cask xcodes Xcodes.app and CLI is updated, maintained with contributors like yourself. Even open source libraries and tools come with expenses. If you would like to support Xcodes or donate to the development and maintenance of the tool, it would be greatly appreciated. There is absolutely no obligation! -[Support Now](https://opencollective.com/xcodesapp) + + + ## Development