Matrice de décision : comparaison des miroirs (vitesse et stabilité)
Le choix du miroir dépend de la localisation du nœud et de la stabilité CI. Tableau récapitulatif pour Homebrew, npm et CocoaPods :
| Type / Région | Vitesse | Stabilité | Recommandation |
|---|---|---|---|
| Homebrew – Nœuds hors Chine | Élevée (CDN officiel) | Très bonne | GitHub / Fastly par défaut |
| Homebrew – Chine continentale | Bonne (miroirs Tsinghua, USTC) | Variable (synchronisation retard possible) | Tsinghua ou USTC ; vérifier la fraîcheur |
| npm – Global / Europe | Élevée (registry.npmjs.org) | Très bonne | Registry officiel ou npmmirror si timeout |
| npm – Asie /跨境 | Variable (latence vers npmjs) | Bonne avec miroir | registry.npmmirror.com ou miroir entreprise |
| CocoaPods – Specs repo | CDN officiel rapide | Bonne | CDN par défaut ; miroir gitee en Chine si besoin |
| CocoaPods – Sources des pods | Dépend de GitHub / hébergeur | Reprise après coup limitée sans cache | Cache CI + shallow clone quand possible |
Règle : Europe/US → miroirs officiels ; Chine → Tsinghua, USTC, npmmirror ; transfrontalier → proxy HTTP avec cache.
Configuration Homebrew, npm et CocoaPods : étapes et commandes exécutables
1. Homebrew — Miroir (ex. Tsinghua) :
# Miroir bouteilles (formulaires) export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles" # Ou pour le dépôt Git principal (clone/update) export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git" export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git" # Puis mise à jour brew update
2. npm — Registry et options CI :
# Miroir (ex. npmmirror pour l’Asie) npm config set registry https://registry.npmmirror.com # Timeout et reprise (réduire les échecs réseau) npm config set fetch-retries 5 npm config set fetch-retry-mintimeout 20000 npm config set fetch-retry-maxtimeout 120000 # En CI : install reproductible npm ci
3. CocoaPods — CDN par défaut (Pod 1.8+). En CI : cache ~/Library/Caches/CocoaPods et Pods ; pod install --repo-update avec parcimonie.
pod install --repo-update # rarement en CI ; préférer cache Pods + ~/Library/Caches/CocoaPods
Reprise après coup et stratégie de cache
Étapes recommandées :
- Git : utiliser
git clone --depth 1ougit fetch --depthpour limiter la taille ; en cas d’échec, relancergit fetch(reprise native). - npm : conserver
node_modules(ou le cache npm) entre les jobs CI ; utilisernpm ciavec unpackage-lock.jsonà jour. - CocoaPods : mettre en cache
~/Library/Caches/CocoaPodset le répertoirePods(ou au moins les archives) ; éviter--repo-updateà chaque run si les specs sont déjà en cache. - Homebrew : mettre en cache
$(brew --cache)en CI pour réutiliser les bouteilles déjà téléchargées.
Paramètres CI : npm config set prefer-offline true ; en script CI, pod install sans --repo-update si le cache est présent.
Points clés transfrontaliers et proxy
Runners dans une autre région que les dépôts : utiliser un proxy HTTP avec cache (cache npm/PyPI interne). Sur le Mac distant, définir HTTP_PROXY / HTTPS_PROXY. Vérifier certificats et timeouts (npm, Git, curl). Homebrew : miroir interne des bouteilles pour éviter les blocages.
Dépannage et FAQ
-
1
« brew update » lent ou en échec. Miroir proche (Tsinghua, USTC) ; en CI, cache
$(brew --cache)et repo Git Homebrew. -
2
« npm install » timeout en CI. Augmenter
fetch-retry-maxtimeout, registry miroir (npmmirror), cache npm ounode_modulesentre jobs. -
3
« pod install » refait tout. Cache
~/Library/Caches/CocoaPodset le dossierPods. N’utilisez--repo-updateque lorsque les specs doivent être rafraîchies. -
4
Erreurs SSL ou certificats. Vérifiez
npm config get ca,git config --global http.sslVerifyet les variables d’environnement proxy. En environnement d’entreprise, un proxy peut remplacer les certificats.
Mac vs Windows : avantages du Mac pour la pull de dépendances et le terminal
Sur Mac, Homebrew, npm et CocoaPods sont des outils de premier plan avec support natif des miroirs et une excellente intégration terminal (bash/zsh, SSH). La reprise après coup et le cache (Git, npm, CocoaPods, Homebrew) sont bien documentés et homogènes. Pour la CI iOS/macOS, les runners Mac sont indispensables ; la configuration des miroirs et du cache y est simple.
Sous Windows, la pull de dépendances pour du code ciblant iOS/macOS nécessite souvent WSL ou des runners Mac dédiés ; les miroirs (notamment Homebrew, CocoaPods) et les stratégies de cache sont moins standardisés. L’expérience terminal et le comportement des scripts (paths, droits) diffèrent. En résumé : pour du tirage de code et de dépendances à grande échelle (notamment CI), le Mac distant offre de meilleures garanties de vitesse, de stabilité et de reproductibilité que Windows pour ces écosystèmes.
| Critère | Mac (distant) | Windows |
|---|---|---|
| Support Homebrew / CocoaPods | Natif | WSL ou runners Mac requis pour iOS |
| Miroirs et documentation | Très bonne (officiel + communautaire) | Variable (npm ok ; CocoaPods/Homebrew limités) |
| Reprise après coup / cache | Homogène (Git, npm, Pods, brew) | Moins homogène |
| Terminal et scripts CI | Unix natif (bash/zsh) | PowerShell / CMD ou WSL |
Conclusion
Choisir les bons miroirs (Homebrew, npm, CocoaPods) et activer la reprise après coup ainsi que le cache réduit les échecs et accélère les builds sur Mac distant. Utilisez la matrice de ce guide pour adapter la config à la région du nœud et à votre CI. Pour une machine dédiée sans gestion matérielle, consultez nos nœuds et notre centre d’aide (sans connexion requise).
Passez à l’action
Louez un Mac distant pour vos pulls et votre CI : nœuds multiples, SSH/VNC, livraison rapide.