← На главную

Собирай и нотаризуй Mac/iOS приложения одной командой без Xcode

13.07.2026 18:22 · hackernews

Многие жалуются на Xcode — мол, сложный, непонятный, мешает «вайб-кодить». Автор статьи предлагает кардинальное решение: вообще его не открывать. Xcode.app должен быть установлен, потому что внутри него живут все нужные утилиты (xcodebuild, notarytool, stapler, devicectl), но запускать саму программу не придётся ни разу после первичной настройки.

Сначала — одноразовая возня с GUI. Нужно принять лицензию, добавить Apple ID в настройках Xcode, создать сертификат Developer ID Application (именно его, а не Apple Development) и сохранить через терминал пароль для notarytool — это xcrun notarytool store-credentials. Пароль генерируется отдельный, на сайте appleid.apple.com, и живёт до смены пароля от Apple ID. Эти шаги нельзя полностью автоматизировать, но они делаются один раз.

Дальше — всё headless. Проектом управляет XcodeGen: вместо того, чтобы хранить в гите ломающийся .xcodeproj, он генерирует папку проекта из файла project.yml. Его нужно поставить через Homebrew.

Самый важный кусок — скрипт scripts/release.sh. Он делает всю цепочку: архивирует билд через xcodebuild, подписывает Developer ID сертификатом, отправляет на нотаризацию (notarytool submit --wait), пришлёпывает билет (stapler staple), проверяет spctl и копирует готовый .app в /Applications. Если любой шаг ломается — скрипт падает с ошибкой, никаких «полусобранных» состояний.

Для быстрой проверки (тесты, компиляция под симулятор) можно вообще обойтись без подписи: флаг CODE_SIGNING_ALLOWED=NO даёт ad-hoc билд. На реальное устройство приложение ставится через xcodebuild archive + devicectl device install.

Автор объясняет, как работает подпись: приватный ключ лежит в связке ключей, а xcodebuild сам находит нужный сертификат по Team ID. Никаких секретов в репозитории. Нотаризация — это не подпись, а отдельная проверка Apple, которая для скрытых приложений (LSUIElement) обязательна, иначе Gatekeeper их удалит.

Последний штрих — файл CLAUDE.md (или AGENTS.md). В него прописываются команды для сборки и релиза. Когда LLM-агент вроде Claude Code получает задачу «собери новую версию», он читает этот файл и просто запускает ./scripts/release.sh. Всё, никаких лишних объяснений.

Итог: после часовой настройки (установка Xcode, XcodeGen, создание сертификата и скрипта) «вайб-кодинг» Mac и iOS приложений превращается в одну команду в консоли. Xcode больше не нужен.

Читать оригинал →