← blog

Intégrer un Mac mini d’occasion arrivé avec deux versions de macOS de retard

20 septembre 2026 · 7 min de lecture

La machine allait bien. Seize gigaoctets, une puce Apple M4, un effacement propre. Elle était aussi sous macOS 15.6.1, et le Xcode que nous livrons à chaque client ne se lance pas en dessous de 26.2. Voici comment le savoir, et les parties de la mise à niveau qui ne sont pas évidentes. À la fin, vous trouverez la liste que nous passons désormais avant de payer un Mac d’occasion.

Lire le minimum dans Xcode lui-même

Ne devinez pas à partir des notes de version. Xcode déclare son plancher dans sa propre liste de propriétés.

$ /usr/libexec/PlistBuddy -c "Print :LSMinimumSystemVersion" \
    /Applications/Xcode.app/Contents/Info.plist
26.2

Une machine en dessous s’intègre sans problème, puis échoue au premier build d’un client. Notre script d’intégration vérifie désormais ce point avant toute autre chose. En cas d’échec, il refuse et donne la commande exacte pour récupérer une version plus récente.

Mise à jour de logiciels n’affiche que la dernière version majeure

Depuis macOS 15, Réglages Système proposait macOS 27 et rien d’autre. Les versions majeures plus anciennes existent toujours. Il faut les demander par leur nom, en ligne de commande.

$ softwareupdate --list-full-installers
* Title: macOS 27 Golden Gate, Version: 27.0, Build: 26A428
* Title: macOS Tahoe,          Version: 26.7, Build: 25G229
* Title: macOS Tahoe,          Version: 26.6.2 ...
* Title: macOS Sequoia,        Version: 15.8 ...

$ softwareupdate --fetch-full-installer --full-installer-version 26.7

La liste dépend du modèle, lancez-la donc sur la machine concernée. Sur la nôtre, seule la 27 était proposée. Nous avons donc pris la 27 par choix, et non par défaut. Sur un parc, cette nuance compte.

Avant de passer une machine du parc à une nouvelle version majeure

Chaque formule Homebrew que nous installons avait déjà une bottle pour la nouvelle version. C’est pourquoi l’intégration a pris le temps habituel, et non un après-midi à compiler Ruby.

Ce que l’intégration vérifie avant la mise en vente

Passer le contrôle de version, c’est là que le travail commence, pas là qu’il se termine. Avant d’être proposée à qui que ce soit, une machine doit prouver quatre choses. Chacune est mesurée, pas supposée.

  • Un vrai bureau. Un client VNC récupère un framebuffer et compte les couleurs. Plus de cent mille couleurs distinctes, c’est un bureau. Deux, c’est un écran noir.
  • Une vraie compilation. xcrun swiftc compile et lance un binaire avec le compte client.
  • Une session ouverte. who affiche une ligne console pour le compte client.
  • Une télémétrie qui remonte. La machine centrale voit la machine, sa version de macOS et sa session dans le tableau de bord du parc.

La nôtre a passé les quatre sous macOS 27. C’est pour cela, et non pour son numéro de version, qu’elle est en vente.

La frayeur qui n’était pas un bug

Les deux premiers démarrages après l’intégration n’ont pas ouvert la session automatiquement. Sur une toute nouvelle version majeure de macOS, cela ressemble à une régression, et nous avons failli la signaler comme telle. Ce n’en était pas une.

Le premier démarrage indexait un Xcode de 3,8 Go fraîchement copié, avec une charge moyenne au-dessus de 160. L’ouverture de session ne s’est pas terminée à temps, et macOS a activé lastLoginPanic dans les préférences de loginwindow. Ce drapeau lui fait aussi sauter l’ouverture automatique au démarrage suivant. Effacer ce verrou et redémarrer sur une machine au calme a marché, avec le même mot de passe et les mêmes scripts, à 8 comme à 32 caractères.

sudo defaults delete /Library/Preferences/com.apple.loginwindow lastLoginPanic
sudo shutdown -r now

Ce qui a prouvé que le nouvel OS n’y était pour rien, c’est un témoin. Nous avons lancé la même commande de diagnostic sur une machine saine, une version majeure en arrière, et obtenu la même erreur. Cette histoire, et quatre autres du même genre, est dans des vérifications qui ne peuvent pas échouer.

Quoi vérifier en achetant un Mac mini d’occasion

Rien de tout cela n’est propre à la CI. C’est ce que vous devriez vérifier avant de payer n’importe quel Mac d’occasion. Nous avons simplement plus de raisons que d’autres de bien faire du premier coup, car la machine part chez un client dans l’heure.

Questions

Comment installer une version de macOS que Mise à jour de logiciels n’affiche pas ?
Lancez softwareupdate --list-full-installers pour voir chaque version qu’Apple propose pour ce modèle. Puis lancez softwareupdate --fetch-full-installer --full-installer-version 26.7 avec la version voulue. L’installeur arrive dans /Applications.
Xcode 26.6 tourne-t-il sous macOS 27 ?
Oui. LSMinimumSystemVersion dans l’Info.plist de Xcode vaut 26.2, et c’est un plancher, pas une version imposée. Il se lance et compile sous 27.
Faut-il simplement prendre le macOS le plus récent sur une machine de CI ?
Seulement en connaissance de cause. Une machine sur une version majeure différente du reste du parc casse la reproductibilité pour les clients CI. Vérifiez d’abord que des bottles Homebrew existent pour la nouvelle version, sinon chaque installation compile depuis les sources.
Que vérifier avant d’acheter un Mac mini d’occasion ?
Le numéro de série et le modèle, la RAM, la vraie taille du disque, la version de macOS. Vérifiez aussi que FileVault et le verrouillage d’activation sont désactivés, que Localiser est désactivé, et qu’il n’y a aucune inscription MDM. Le nôtre était vendu avec 500 Go et en avait 256.

Faites vos propres calculs avec le calculateur ou louez un runner.