Среда разработчика на Mac: Xcode CLT, git, версии

Рейтинг: 62.1% · 15 голосов
Подробный курс по macOS для разработчиков и админов: архитектура и Apple Silicon, терминал и zsh, Homebrew и пакеты, launchd и автоматизация, APFS и Time Machine, безопасность (SIP, Gatekeeper, TCC, FileVault), сеть, логи и диагностика, MDM и DDM, контейнеры и виртуализация, восстановление. По официальной документации Apple, актуально на 2026 (macOS 26 Tahoe).
Ответить
Аватара пользователя
Artem_MacAdmin
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Среда разработчика на Mac: Xcode CLT, git, версии

Сообщение Artem_MacAdmin »

Оглавление курса (47)
  1. Что такое macOS: Unix под капотом и место в 2026
  2. Архитектура macOS: XNU, тома и Signed System Volume
  3. Apple Silicon: ARM, Rosetta 2 и отличия от Intel
  4. Установка, обновление и восстановление macOS
  5. Finder, рабочий стол и продуктивность
  6. Системные настройки и их управление из CLI (defaults)
  7. Пользователи и группы: учётные записи и управление
  8. Терминал и zsh: командная строка macOS
  9. CLI на macOS: BSD-команды и отличия от Linux
  10. Настройка zsh: .zshrc, prompt, плагины
  11. Файловая система и права: POSIX, ACL, атрибуты, флаги
  12. Homebrew: пакетный менеджер для macOS
  13. Homebrew глубже: tap, Brewfile, services, обслуживание
  14. Другие пакеты: MacPorts, mas, Nix и App Store
  15. Установка приложений: .app, .dmg, .pkg и Gatekeeper
  16. Управление приложениями и их данные
  17. launchd и launchctl: система запуска macOS
  18. Свои службы и периодические задачи на launchd
  19. Автоматизация: Shortcuts, AppleScript и osascript
  20. Конфигурация как код: defaults, plist и профили
  21. APFS: снапшоты, клоны, контейнеры и шифрование
  22. Управление дисками: diskutil, образы и форматирование
  23. Time Machine и резервное копирование
  24. Внешние диски, форматы и сетевые тома
  25. Модель безопасности macOS: SIP и целостность системы
  26. Gatekeeper, нотаризация и защита от вредоносов
  27. Приватность и TCC: разрешения на доступ
  28. FileVault: полнодисковое шифрование
  29. Связка ключей и управление секретами
  30. Сетевой экран и защита сети
  31. Сеть в macOS: настройка и инструменты
  32. Диагностика сети на Mac
  33. Общий доступ: SSH, экран, файлы, удалённое управление
  34. Процессы и ресурсы: мониторинг производительности
  35. Логи macOS: unified logging и диагностика
  36. Производительность и энергия: powermetrics, диагностика
  37. Энергия, сон и обслуживание системы
  38. Профили конфигурации и основы MDM
  39. Управление парком Mac: MDM, DDM и zero-touch (2026)
  40. Среда разработчика на Mac: Xcode CLT, git, версии (вы здесь)
  41. Контейнеры на Mac: Docker Desktop, OrbStack, Apple container
  42. Виртуализация: Virtualization.framework, UTM, Linux и Windows
  43. Режимы загрузки и восстановление (Apple Silicon)
  44. Сброс, NVRAM, Safe Mode и сброс настроек
  45. Траблшутинг macOS: дерево решений по симптомам
  46. Место на диске и обслуживание системы
  47. Сквозной проект: настройка Mac как у профи + куда расти
Свежий Mac из коробки - это не машина разработчика, а красивая печатная машинка. Нет компилятора (точнее, он спрятан), нет нормального git, системный Python превратился в тыкву, а если ты по привычке сделаешь sudo pip install - получишь грабли, которые потом будешь выковыривать неделю. Эта глава про то, как из чистой Tahoe собрать рабочее окружение так, чтобы оно не развалилось через полгода и переносилось на новую машину за пять минут. Разберём настройку Mac для разработки по слоям: фундамент (Xcode Command Line Tools), git и ключи, версии языков через mise/asdf вместо системных, dotfiles в git и набор терминальных инструментов.

Ключевая мысль курса: на macOS есть две независимые вещи с похожими именами - полный Xcode (гигантский IDE из App Store) и Command Line Tools (CLT) - маленький набор консольных утилит. 90% бэкенд- и веб-разработчиков нужен только второй. Полный Xcode - это для iOS/macOS-разработки, симуляторов и сборки .app-бандлов. Не тащи 15+ ГБ, если пишешь на Go или Python.

Слой 1: Xcode Command Line Tools - фундамент всего

Почти любая попытка что-то поставить (включая Homebrew) на чистом Mac упрётся в отсутствие компилятора. Проверим, что есть:

Код: Выделить всё

xcode-select -p
# /Library/Developer/CommandLineTools  -> стоят только CLT
# /Applications/Xcode.app/Contents/Developer  -> активен полный Xcode
Если команда ругается error: unable to find utility, значит ничего не стоит. Ставим xcode command line tools одной командой:

Код: Выделить всё

xcode-select --install
Откроется графический диалог - не пугайся, это нормально, ставится через GUI-инсталлятор и качает пакет с серверов Apple. После установки в /Library/Developer/CommandLineTools появятся clang, git, make, ld, а также SDK и заголовки системы. Проверяем:

Код: Выделить всё

clang --version
# Apple clang version 17.0.0 (clang-1700.x.x.x)
# Target: arm64-apple-darwin25.x.x   <- arm64 на Apple Silicon
git --version
# git version 2.x.x (Apple Git-xxx)
Target: arm64-apple-darwin25 - это и есть Tahoe (Darwin 25). На Intel-машине увидишь x86_64. Tahoe (macOS 26) - последняя версия с поддержкой Intel, дальше Apple оставляет только Apple Silicon, так что arm64 в таргете - норма для новых машин.

Грабли, которые ловят всех. xcode-select --install печально известен тем, что иногда тянет не самую свежую версию CLT и даже выдаёт ошибку "не удалось найти ПО". Лечится двумя путями: либо качаешь нужный пакет вручную с developer.apple.com (раздел Downloads, More), либо ставишь через GUI Software Update, где CLT приезжают как обновление системы. На некоторых ранних сборках Tahoe (26.0/26.1) установка CLT падала, пока не обновишь систему до 26.2+ - если упёрся, первым делом проверь обновления macOS.

Полный Xcode и его инструменты. Если тебе нужны симуляторы и сборка под Apple-платформы - ставь Xcode из App Store. После установки переключи активный путь, чтобы консольные команды смотрели внутрь Xcode:

Код: Выделить всё

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -license accept   # принять лицензию, иначе многое не запустится
Внутри полного Xcode живут xcodebuild (сборка проектов из консоли, основа любого CI под iOS) и simctl - управление симуляторами:

Код: Выделить всё

xcrun simctl list devices available   # какие симуляторы есть
xcrun simctl boot "iPhone 17"          # загрузить конкретный
xcrun - это диспетчер: он находит нужную утилиту внутри активного toolchain, поэтому в скриптах пиши xcrun simctl, а не голый путь. Так одна и та же команда работает и при CLT-only, и при полном Xcode.

Изображение

Слой 2: git на Mac - настройка, ключи, Keychain

git mac из CLT работает прямо из коробки, но есть нюанс: это "Apple Git", он чуть отстаёт от upstream. Если нужна свежая версия с новыми фичами - ставь из Homebrew (brew install git), и он ляжет в /opt/homebrew/bin раньше системного в PATH. Проверить, какой именно git подхватился:

Код: Выделить всё

which git
# /opt/homebrew/bin/git  -> brew-версия
# /usr/bin/git           -> Apple Git из CLT
Базовая настройка - имя, почта, ветка по умолчанию, разумные дефолты:

Код: Выделить всё

git config --global user.name "Имя Фамилия"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global pull.rebase false
git config --global core.autocrlf input   # не калечить переводы строк
Хранение паролей - вот где macOS реально помогает. У git есть credential helper, и на Mac встроен режим osxkeychain - он прячет токены в системную Связку ключей (Keychain), а не в открытый файл ~/.git-credentials. Включаем:

Код: Выделить всё

git config --global credential.helper osxkeychain
После этого при первом push по HTTPS git спросит логин и токен один раз, сложит в Keychain (зашифрованный тем же механизмом, что и пароли Safari), и больше спрашивать не будет. Если протух токен и нужно стереть запись:

Код: Выделить всё

git credential-osxkeychain erase
host=github.com
protocol=https
(введи две строки, затем пустая строка и Enter). Найти запись руками можно в приложении Связка ключей или в новом приложении Пароли - ищи github.com.

SSH-ключи - предпочтительный способ для своих репозиториев. Генерируем современный ed25519 (не RSA, он устарел):

Код: Выделить всё

ssh-keygen -t ed25519 -C "you@example.com"
Дальше - фишка именно macOS. Чтобы ключ автоматически подхватывался ssh-агентом и его passphrase лежал в Keychain, в ~/.ssh/config пиши:

Код: Выделить всё

Host github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519
UseKeychain yes - это apple-расширение OpenSSH, оно подтягивает кодовую фразу из Связки ключей, так что после первого ввода ты не печатаешь её каждый раз. Добавляем ключ в агент с записью в Keychain:

Код: Выделить всё

ssh-add --apple-use-keychain ~/.ssh/id_ed25519
ssh -T git@github.com   # проверка: Hi <user>! You've successfully authenticated
Слой 3: версии языков - руки прочь от системного Python

Главное правило, которое экономит часы боли: не трогай системные интерпретаторы. python mac - больной вопрос. Раньше в системе жил /usr/bin/python (двойка), Apple его выпилила. Сейчас python3 из /usr/bin есть, но это "stub", привязанный к CLT, обновляется как угодно и не предназначен для твоих проектов. sudo pip install в системный Python - прямой путь сломать инструменты ОС.

Что делать вместо этого. Есть два уровня решений:
  • Поставить язык целиком через Homebrew (brew install python@3.13) - просто, но даёт по одной версии на формулу и сложно держать несколько параллельно.
  • Поставить менеджер версий, который держит сколько угодно версий и переключает их по папкам. Это и есть правильный путь для разработчика.
mise asdf - современный выбор. Раньше у каждого языка был свой менеджер: pyenv для Python, nvm для Node, rbenv для Ruby. Это работает, но плодит зоопарк. asdf объединил всё под одну крышу с файлом .tool-versions. А mise (mise-en-place, написан на Rust) - это быстрый наследник asdf: совместим с его форматом, но не требует ручного добавления плагинов для популярных языков и переключает версии заметно быстрее. На 2026 mise - дефолтный выбор, если работаешь больше чем с одним языком.

Ставим mise и активируем в zsh (по умолчанию в macOS оболочка zsh, не bash):

Код: Выделить всё

brew install mise
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
exec zsh   # перезапустить оболочку, чтобы хук подхватился
Важно про eval. Без строки eval "$(mise activate zsh)" в ~/.zshrc ничего не переключается - это самая частая ошибка. mise работает через shell-хук: при каждой смене каталога он смотрит конфиг и подменяет PATH на нужные версии. Диагностика - mise doctor, она прямо скажет, активирован ли хук из ~/.zshrc.

Ставим версии глобально и пер-проектно:

Код: Выделить всё

mise use -g python@3.13 node@22   # глобальные дефолты
cd myproject
mise use python@3.11              # в этом проекте свой питон
Вторая команда создаёт в папке проекта файл mise.toml (или .tool-versions в asdf-формате):

Код: Выделить всё

[tools]
python = "3.11"
node = "22"
Теперь стоит зайти в myproject - и python автоматически станет 3.11, а на выходе вернётся глобальный 3.13. Проверяем, что переключение реально работает:

Код: Выделить всё

cd myproject && python --version   # Python 3.11.x
cd .. && python --version          # Python 3.13.x
Этот mise.toml коммитится в репозиторий - и вся команда получает одинаковые версии без переписки в чате "а какой у тебя питон". Для asdf логика та же, только команды asdf install python 3.11.x и asdf local python 3.11.x, и плагины добавляются вручную через asdf plugin add python.

Слой 4: dotfiles и терминальный тулинг

Окружение, которое ты только что собрал, надо суметь воспроизвести на другой машине за минуты, а не вспоминать по крупицам. Для этого все конфиги (.zshrc, .gitconfig, .ssh/config без приватных ключей, mise-конфиги) кладут в git-репозиторий - dotfiles. Голый подход без лишних утилит - bare-репозиторий прямо в home:

Код: Выделить всё

git init --bare $HOME/.dotfiles
alias dot='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
dot add .zshrc .gitconfig
dot commit -m "init dotfiles"
dot remote add origin git@github.com:you/dotfiles.git
dot push -u origin main
На новой машине клонируешь, и home сразу обустроен. Грабли: никогда не коммить приватные SSH-ключи и токены - в .gitignore явно исключи id_ed25519, .env и подобное. В dotfiles едут только публичные конфиги.

Терминальные инструменты, которые меняют жизнь. Стандартные BSD-утилиты в macOS (это BSD, а не GNU/Linux - ls, sed, find ведут себя иначе, чем в Linux) можно дополнить современными аналогами через Homebrew:

Код: Выделить всё

brew install ripgrep fd bat jq fzf
  • ripgrep (команда rg) - поиск по содержимому файлов, на порядок быстрее grep -r, уважает .gitignore.
  • fd - человеческая замена find: fd config вместо find . -name "*config*".
  • bat - cat с подсветкой синтаксиса и номерами строк.
  • jq - разбор и фильтрация JSON прямо в пайпе, незаменим при работе с API.
  • fzf - интерактивный нечёткий поиск; после установки запусти $(brew --prefix)/opt/fzf/install для горячих клавиш (Ctrl-R по истории, Ctrl-T по файлам).
Пример связки, которая реально экономит время - найти все TODO и сразу открыть в редакторе:

Код: Выделить всё

rg -n "TODO" --type py | fzf
Редакторы. Из консольных - vim идёт в комплекте, neovim ставится brew install neovim. Из GUI популярны VS Code и Cursor (форк VS Code с ИИ). У VS Code есть бесценная штука - команда code в терминале: открой палитру (Cmd+Shift+P) и выполни Shell Command: Install code command in PATH, после чего code . открывает текущую папку проектом. Это и есть мостик между терминалом и редактором.

Типичные грабли - чек-лист
  • sudo pip / sudo gem в системный интерпретатор - так не делают, ломает ОС. Только через mise/brew в свой профиль.
  • xcode-select --install падает - сначала обнови macOS (на ранней Tahoe была проблема), потом качай CLT вручную с developer.apple.com.
  • Поставил полный Xcode, но xcodebuild ругается - забыл sudo xcodebuild -license accept и xcode-select --switch.
  • mise/asdf не переключает версии - нет строки eval с activate в ~/.zshrc; проверь mise doctor.
  • git каждый раз спрашивает пароль - не включён credential.helper osxkeychain или для SSH нет UseKeychain yes в ~/.ssh/config.
  • Команды Homebrew "не находятся" - на Apple Silicon brew в /opt/homebrew, а не /usr/local; нужен eval "$(/opt/homebrew/bin/brew shellenv)" в профиле.
Мини-лаба: собери окружение руками
  • Проверь xcode-select -p и при необходимости поставь CLT. Убедись, что clang --version и git --version отвечают.
  • Настрой git: имя, почту, init.defaultBranch main, включи credential.helper osxkeychain.
  • Сгенерируй ed25519-ключ, пропиши ~/.ssh/config с UseKeychain yes, проверь ssh -T git@github.com.
  • Поставь mise, активируй в ~/.zshrc, выполни mise use -g python@3.13 node@22. Создай папку, в ней mise use python@3.11 и докажи через python --version, что версия меняется при cd внутрь и наружу.
  • Поставь ripgrep fd bat jq fzf, прогони rg "TODO" по любому проекту.
  • Заведи bare-репозиторий dotfiles, закоммить .zshrc и .gitconfig, не забыв исключить ключи.
Контрольные вопросы
  • Чем Xcode Command Line Tools отличаются от полного Xcode и когда хватает только CLT?
  • Почему нельзя ставить пакеты в системный python3 из /usr/bin и что использовать вместо этого?
  • Какую строку и зачем нужно добавить в ~/.zshrc, чтобы mise начал переключать версии по папкам?
  • Как заставить git и ssh не спрашивать пароль каждый раз, используя именно механизмы macOS?
Итог

Машина разработчика на Mac собирается слоями: CLT дают компилятор и базовый git, Homebrew - свежий софт, mise/asdf - изоляцию версий языков без боли с системным Python, Keychain - безопасное хранение секретов, а dotfiles в git превращают всё это в переносимый артефакт. Собери один раз правильно - и переезд на новую машину или ввод в строй нового члена команды станет делом пятнадцати минут, а не дня раскопок.
👍2 ❤️3 🔥 😄 🤔
Аватара пользователя
sleepyphoenix
Сообщения: 1
Зарегистрирован: 19 май 2026, 08:54

Re: Среда разработчика на Mac: Xcode CLT, git, версии

Сообщение sleepyphoenix »

Спасибо, давно мучился что git на каждый push токен спрашивает - оказалось просто osxkeychain не включил. А про UseKeychain yes в ssh config вообще не знал.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
vimgeek
Сообщения: 1
Зарегистрирован: 27 май 2026, 06:11

Re: Среда разработчика на Mac: Xcode CLT, git, версии

Сообщение vimgeek »

А mise лучше pyenv+nvm ставить или можно их параллельно держать? У меня уже pyenv стоит для пары старых проектов, боюсь конфликта PATH.
👍 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Управление парком Mac: MDM, DDM и zero-touch (2026)
Следующая глава →
Контейнеры на Mac: Docker Desktop, OrbStack, Apple container

Все главы курса «macOS для профи: администрирование, терминал и Homebrew»

Поделиться темой: ✈ Telegram VK
Похожие запросы: Среда разработчика на Mac

Вернуться в «macOS для профи: администрирование, терминал и Homebrew»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость