4 votos

¿Cómo es posible que no tenga instaladas las Herramientas de línea de comandos, y aún así las tenga?

$ type git
git está alojado (/usr/bin/git)
$ /usr/bin/git --version
git versión 2.24.3 (Apple Git-128)
$ pkgutil --pkgs | grep ^com.apple
com.apple.update.fullbundleupdate.19H2
com.apple.pkg.update.os.10.15.7Supplemental.19H15
com.apple.pkg.EmbeddedOSFirmware
com.apple.update.fullbundleupdate.19H15
com.apple.update.fullbundleupdate.19G2021
com.apple.pkg.update.os.10.15.7.19H2
com.apple.pkg.SecureBoot
com.apple.pkg.update.os.SecUpd2020-001Catalina.19H114
com.apple.pkg.update.os.10.15.6Supplemental.19G2021
com.apple.pkg.Core
com.apple.update.fullbundleupdate.19H114
com.apple.pkg.XProtectPlistConfigData_10_15.16U4147
com.apple.files.data-template
com.apple.pkg.XProtectPlistConfigData_10_15.16U4145
com.apple.pkg.MRTConfigData_10_15.16U4142
com.apple.pkg.MRTConfigData_10_15.16U4146
com.apple.pkg.IncompatibleAppList.10_15.16U1923
com.apple.pkg.Pages10
com.apple.pkg.iMovie_AppStore
com.apple.pkg.Keynote10
com.apple.pkg.Numbers10
$ ls /Applications/Xcode.app
ls: /Applications/Xcode.app: No existe el archivo o directorio

Como puedes ver, no tengo instaladas ni las Herramientas de línea de comandos ni Xcode, sin embargo aún tengo las Herramientas de línea de comandos. ¿Cómo es posible esto? ¿Me estoy perdiendo algo?

0 votos

¿Qué te hace pensar que tienes herramientas de línea de comandos instaladas?

4voto

Marc Wilson Puntos 146

El hecho de que Git esté presente significa que parte de la CLT está instalada, ya que el software de transición no se activa, y dado que Xcode no está instalado.

Es un problema conocido que el recibo de la CLT puede desaparecer. Una documentación de esto se encuentra en MacPorts, enlazada aquí.

  • Descarga el paquete de herramientas de línea de comandos desde el sitio web de Apple Developer.

  • Si la versión de la CLT que necesitas no se encuentra listada en el sitio del desarrollador, pero hay una versión anterior, reinstalarla restaurará los recibos del paquete. Luego solo ejecuta Actualización de Software para activar la actualización a la versión más reciente.

  • O, en Mac OS X 10.9 o superior, Actualización de Software puede reinstalar el paquete:

    sudo touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
    softwareupdate -l
    sudo rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress

0voto

Utku Puntos 137

Exactamente lo que dijo Marc Wilson. No tenía ni Xcode ni el paquete com.apple.pkg.CLTools_Executables:

$ pkgutil --pkg-info com.apple.pkg.CLTools_Executables
No se encontró el recibo de 'com.apple.pkg.CLTools_Executables' en '/'.
$ pkgutil --pkg-info com.apple.pkg.CLTools_Base
No se encontró el recibo de 'com.apple.pkg.CLTools_Base' en '/'.
$ ls /Applications/Xcode.app
ls: /Applications/Xcode.app: No such file or directory
$ 

Sin embargo:

$ clang --version
Versión de Apple clang 12.0.0 (clang-1200.0.32.28)
Objetivo: x86_64-apple-darwin19.6.0
Modelo de subprocesos: posix
Directorio instalado: /Library/Developer/CommandLineTools/usr/bin
$ git --version
Versión de git 2.24.3 (Apple Git-128)
$ 

Confusamente, Homebrew funcionaba sin problemas y estaba reportando una versión para las Herramientas de Línea de Comandos (CLT) cuando ejecuté brew config, lo que significa que cree que las CLT están instaladas.

Investigando en el código de Homebrew, entendí que este método detecta la versión de CLT:

def detect_version
  version = nil
  [EXECUTABLE_PKG_ID, MAVERICKS_NEW_PKG_ID].each do |id|
    next unless File.exist?("#{PKG_PATH}/usr/bin/clang")

    version = MacOS.pkgutil_info(id)[/version: (.+)$/, 1]
    return version if version
  end

  detect_version_from_clang_version
end

donde:

  • EXECUTABLE_PKG_ID está configurado como com.apple.pkg.CLTools_Executables
  • MAVERICKS_NEW_PKG_ID está configurado como com.apple.pkg.CLTools_Base

en el mismo archivo. Es decir, estaba verificando la presencia de estos paquetes y, si ninguno se encuentra, ejecutaba el método detect_version_from_clang_version para detectar la versión de CLT.

Utilicé la interfaz de GitHub para git blame en ese archivo y entendí que la línea detect_version_from_clang_version se agregó en este commit, reemplazando la línea detect_clang_version.

Para entender cuándo, a su vez, se agregó la línea detect_clang_version, comencé a revisar el historial de commits del archivo comenzando desde ese commit. Mientras revisaba el historial de commits, noté este mensaje de commit:

os/mac/xcode: fallback to clang version for detecting CLT.

Por alguna razón, pkgutil --pkgs ya no lista el CLT después de la actualización complementaria de Catalina.

Corrige #6610

Abrí ese commit y entendí que efectivamente es el commit que introdujo la línea detect_clang_version al método detect_version.

Por lo tanto, probablemente algunas actualizaciones de software están causando que algunos recibos de paquetes sean eliminados, aunque el paquete siga estando presente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X