Перейти к содержимому

5. Инструменты разработчика macOS

macOS предоставляет богатый набор инструментов для разработки прямо из командной строки. Эти команды специфичны для macOS и не встречаются в Linux.

Command Line Tools — минимальный набор инструментов разработчика Apple: компиляторы (clang), git, make, python и другие базовые утилиты. Это обязательный шаг для любого разработчика на macOS.

Окно терминала
# Установить Command Line Tools
xcode-select --install
# Проверить установлено ли
xcode-select -p # путь к активным инструментам
# /Applications/Xcode.app/Contents/Developer
# или
# /Library/Developer/CommandLineTools
# Версия CLT
pkgutil --pkg-info=com.apple.pkg.CLTools_Executables | grep version
# Переключить между Xcode и CLT
sudo xcode-select --switch /Applications/Xcode.app
sudo xcode-select --reset # вернуть по умолчанию
# Если Xcode не нужен — установить только CLT (быстрее)
sudo xcode-select --install

xcrun находит и запускает инструменты из активного набора Xcode/CLT:

Окно терминала
xcrun --show-sdk-path # путь к iOS/macOS SDK
xcrun --show-sdk-version # версия SDK
xcrun --find clang # найти clang
xcrun clang --version # версия компилятора
# Инструменты для iOS разработки
xcrun simctl list devices # список симуляторов iOS
xcrun simctl boot "iPhone 15 Pro" # запустить симулятор
xcrun simctl install booted app.app # установить приложение
# Компиляция
xcrun clang -o hello hello.c # скомпилировать C программу
xcrun swift hello.swift # запустить Swift скрипт

Все macOS приложения должны быть подписаны для работы на современных Mac:

Окно терминала
# Проверить подпись
codesign -dv myapp.app # подробная информация
codesign --verify myapp.app # проверить валидность
codesign -dv --verbose=4 myapp.app # максимальная детализация
# Список сертификатов
security find-identity -p codesigning -v
# Подписать приложение
codesign --force --sign "Developer ID" myapp.app
codesign --force --sign "-" myapp.app # ad-hoc подпись (локально)
# Snip атрибутов
codesign -d --entitlements :- myapp.app # список entitlements
# spctl — проверка Gatekeeper
spctl -a -v myapp.app # проверить разрешение Gatekeeper

launchctl управляет службами (LaunchAgents и LaunchDaemons) — аналог systemctl на Linux.

Окно терминала
# Список служб
launchctl list # все запущенные агенты
launchctl list | grep com.apple # системные агенты
# Управление службой
launchctl load ~/Library/LaunchAgents/com.myapp.plist # загрузить
launchctl unload ~/Library/LaunchAgents/com.myapp.plist # выгрузить
launchctl start com.myapp.server # запустить
launchctl stop com.myapp.server # остановить
# Новый синтаксис (macOS 10.10+)
launchctl bootstrap gui/$UID ~/Library/LaunchAgents/com.myapp.plist
launchctl bootout gui/$UID/com.myapp

Пример LaunchAgent для периодического запуска скрипта:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.myapp.backup</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Users/user/scripts/backup.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>9</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
</dict>
</plist>

Plist (Property List) — формат данных macOS (XML или бинарный). Используется для настроек приложений.

Окно терминала
# Конвертация форматов
plutil -convert xml1 file.plist # в XML
plutil -convert binary1 file.plist # в бинарный
plutil -convert json file.plist # в JSON
plutil -convert json -o - file.plist # JSON в stdout
# Проверка валидности
plutil file.plist
plutil -lint file.plist # то же самое
# Чтение значений
plutil -p file.plist # распечатать красиво
/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" Info.plist
# Изменение значений
plutil -replace key -string "value" file.plist
plutil -replace port -integer 8080 config.plist

defaults читает и изменяет настройки приложений macOS (хранятся в plist файлах):

Окно терминала
# Читать настройки
defaults read com.apple.dock # настройки Dock
defaults read com.apple.finder # настройки Finder
defaults read NSGlobalDomain # глобальные настройки
# Изменить настройки
# Показывать скрытые файлы в Finder
defaults write com.apple.finder AppleShowAllFiles YES
killall Finder
# Скорость анимации Dock
defaults write com.apple.dock autohide-delay -float 0
defaults write com.apple.dock autohide-time-modifier -float 0.5
killall Dock
# Снимки экрана в PNG (по умолчанию)
defaults write com.apple.screencapture type jpg
# Показывать все расширения файлов
defaults write NSGlobalDomain AppleShowAllExtensions -bool true
killall Finder
# Отключить автозамену при вводе
defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false
# Сбросить к значениям по умолчанию
defaults delete com.apple.dock autohide-delay
Окно терминала
# 1. Проверь установку Command Line Tools
xcode-select -p
# 2. Версия компилятора
xcrun clang --version
# 3. Посмотри запущенные службы (LaunchAgents)
launchctl list | grep -v "com.apple" | head -20
# 4. Измени настройку Finder — показать скрытые файлы
defaults write com.apple.finder AppleShowAllFiles YES
killall Finder
# Теперь ты видишь .DS_Store, .gitignore и прочие скрытые файлы
# 5. Вернуть обратно
defaults write com.apple.finder AppleShowAllFiles NO
killall Finder
# 6. Посмотри настройки Dock
defaults read com.apple.dock | head -30
# 7. Конвертируй plist в JSON
plutil -convert json -o - /System/Library/CoreServices/SystemVersion.plist
# 8. Создай простой LaunchAgent для напоминания
# (расширенная практика — создай plist и загрузи через launchctl)

Инструменты разработчика macOS дают глубокий контроль над системой. Особенно полезны defaults для тонкой настройки и launchctl для автоматизации!