mas : sans lui, le Brewfile oublie les apps du Mac App Store
💡 Sujet
brew bundle dump est censé photographier tout ce qui est installé sur la machine. En réalité il
ignore silencieusement les applications venues du Mac App Store si l'outil mas n'est pas là :
pas d'avertissement, pas d'erreur, juste des lignes absentes du Brewfile. On croit avoir une
sauvegarde complète, et Xcode, Keynote ou Slack manquent à l'appel sur la machine suivante.
mas (Mac App Store CLI) est le chaînon manquant.
📦 Installation
brew install mas🔍 Pourquoi le dump est silencieux
Le code de Homebrew ne cherche mas qu'au moment de lister — s'il ne le trouve pas, la liste
d'applications reste vide et la boucle d'écriture n'a rien à écrire :
# Library/Homebrew/bundle/extensions/mac_app_store.rb
@apps = if (mas = package_manager_executable)
`#{mas} list 2>/dev/null`.split("\n").filter_map do |app|
# ...Aucun else, donc aucun message. C'est un oubli par omission, le pire à diagnostiquer.
Avec mas installé, le dump produit une ligne par application, nom et identifiant numérique :
mas "Xcode", id: 497799835
mas "Keynote", id: 361285480
mas "The Unarchiver", id: 425424353🔄 L'asymétrie : nécessaire au dump, pas à l'installation
Côté restauration, brew bundle install se débrouille seul — s'il rencontre une ligne mas sans
avoir mas, il l'installe lui-même :
unless package_manager_installed?
puts "Installing mas. It is not currently installed." if verbose
Bundle.system(HOMEBREW_BREW_FILE, "install", "mas", verbose:)Autrement dit : mas doit être présent sur la machine qui génère le Brewfile, pas sur celle qui
le rejoue. C'est bien à l'écriture qu'on perd de l'information, jamais à la lecture.
⚠️ Le vrai piège : la liste n'est pas portable d'un Apple ID à l'autre
mas n'installe que ce que le compte connecté possède déjà :
mas install <id>— « Install previously gotten apps » : l'app doit avoir été acquise avec l'Apple ID connecté ;mas get <id>— « Get & install free apps » : uniquement les applications gratuites.
Une app payante jamais achetée sur cet Apple ID est donc impossible à installer via mas, quel
que soit le Brewfile. Sur un second Mac avec un autre compte Apple, les lignes mas du premier
échoueront : il faut régénérer le Brewfile depuis cette machine plutôt que recopier celui de l'autre.
À noter aussi, get et install demandent les droits root depuis mas 7.
🛠️ Commandes utiles
mas list # les apps App Store installées, avec leur id
mas outdated # celles qui ont une mise à jour en attente
mas upgrade # tout mettre à jour
mas search xcode # trouver un id avant de l'ajouter au Brewfile
mas lookup 497799835 # l'inverse : à quoi correspond cet idEt pour piloter le dump :
brew bundle dump --file=Brewfile --force # inclut les apps App Store si mas est là
brew bundle dump --no-mas # les exclure explicitement🧩 Résumé
- 📥 Sans
mas,brew bundle dumpomet sans rien dire les apps du Mac App Store. - 🔄
masest requis sur la machine qui génère le Brewfile, pas sur celle qui l'installe :brew bundle installl'installe tout seul au besoin. - 🔑
masne pose que ce que l'Apple ID connecté possède déjà (install) ou ce qui est gratuit (get) — les lignesmasne se transposent pas d'un compte Apple à un autre. - 🧾 Format de la ligne :
mas "Nom", id: 123456789, l'id se retrouve avecmas search.