4 votes

Comment puis-je ne pas avoir installé Command Line Tools, tout en l'ayant quand même ?

$ type git
git is hashed (/usr/bin/git)
$ /usr/bin/git --version
git version 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 such file or directory

Comme vous pouvez le voir, je n'ai ni les outils de ligne de commande, ni Xcode installé, et pourtant j'ai toujours les outils de ligne de commande. Comment cela est-il possible ? Y a-t-il quelque chose qui m'échappe ?

4voto

Marc Wilson Points 3640

Le fait que Git soit là signifie qu'une partie de la CLT est là, puisque la cale n'apparaît pas, et que Xcode n'est pas installé.

C'est un problème connu que le reçu pour le CLT peut disparaître. Une documentation à ce sujet est fournie par MacPorts, dont les liens sont les suivants ici .

  • Téléchargez le paquet d'outils de ligne de commande depuis le site Apple Developer.

  • Si la version de la TLC dont vous avez besoin n'est pas répertoriée sur le site du développeur, mais qu'une version plus ancienne l'est, la réinstallation de cette dernière restaurera les reçus du paquet. Il suffit ensuite d'exécuter la mise à jour du logiciel pour déclencher la mise à jour vers la nouvelle version.

  • Ou, sur Mac OS X 10.9 ou supérieur, Software Update peut réinstaller le paquet :

    sudo touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
    softwareupdate -l
  • Exécuter la mise à jour du logiciel

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

0voto

Utku Points 344

Exactement ce que Marc Wilson a dit . Je n'avais ni Xcode, ni le com.apple.pkg.CLTools_Executables paquet :

$ pkgutil --pkg-info com.apple.pkg.CLTools_Executables
No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.
$ pkgutil --pkg-info com.apple.pkg.CLTools_Base
No receipt for 'com.apple.pkg.CLTools_Base' found at '/'.
$ ls /Applications/Xcode.app
ls: /Applications/Xcode.app: No such file or directory
$ 

Pourtant :

$ clang --version
Apple clang version 12.0.0 (clang-1200.0.32.28)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
$ git --version
git version 2.24.3 (Apple Git-128)
$ 

Confusément, Homebrew fonctionnait sans aucun problème et signalait une version pour Command Line Tools (CLT) lorsque j'ai exécuté brew config ce qui signifie qu'il pense que les CLT sont installés.

En regardant dans le code Homebrew, j'ai compris que cette méthode détecte la version du 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

où :

  • EXECUTABLE_PKG_ID est réglé sur com.apple.pkg.CLTools_Executables
  • MAVERICKS_NEW_PKG_ID est réglé sur com.apple.pkg.CLTools_Base

dans le même fichier. C'est-à-dire qu'il vérifiait la présence de ces paquets, et si aucun n'était trouvé, il exécutait la commande detect_version_from_clang_version pour détecter la version du CLT.

J'ai utilisé le Interface GitHub pour git blame sur ce fichier et a compris que le detect_version_from_clang_version a été ajoutée le cet engagement en remplaçant le detect_clang_version ligne.

Pour comprendre quand, à son tour, detect_clang_version a été ajoutée, j'ai commencé à regarder l'historique des livraisons du fichier à partir de cette livraison . En regardant l'historique des livraisons, j'ai remarqué ce message de livraison :

os/mac/xcode : repli sur la version de clang pour détecter CLT.

Pour une raison quelconque pkgutil --pkgs ne mentionne plus le CLT après le mise à jour du supplément Catalina.

Corrections #6610

J'ai ouvert qui s'engagent et compris qu'en effet c'est l'engagement qui a introduit detect_clang_version à la ligne detect_version méthode.

En résumé, il est fort probable que des mises à jour logicielles entraînent la suppression de certains reçus de paquets, bien que ces derniers soient toujours présents.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X