чат с агентомспроситьAI и агенты7 файловИнфраструктура4 файлаРазработка6 файловОбо мне5 файлов
Сборка десктопного приложения под macOS и Windows с нуля
  • CI
  • подпись
  • macOS
  • Windows

Сборка десктопного приложения под macOS и Windows с нуля

Продукт выходил только вебом, а десктопную сборку собирали руками на чьей-то машине. Это работает ровно до первого релиза, который нужно выпустить срочно и не с той машины. Поставил конвейер под две платформы целиком: сборка, подпись, публикация артефактов.

macOS

Первым делом разобрал неоднозначность подписи. В связке ключей лежали два сертификата с одинаковым именем, и сборка выбирала между ними случайно: собранное вчера приложение подписано одним, сегодня другим, и понять это можно только по жалобам пользователей. Дальше перевёл нотаризацию на профиль в связке ключей вместо переменных с логином и паролем - подписные секреты ушли из репозитория совсем, ключи живут в связке и переменных раннера.

Готовое приложение подписывается сертификатом Developer ID с промежуточным центром сертификации, уходит на нотаризацию к Apple и получает штамп автоматически, хуком сборки, а не отдельным ручным шагом после.

Windows

Здесь было четыре инфраструктурных препятствия подряд, и главное - перенаправление файловой системы для 32-битных процессов. Установщик падал под системной учётной записью, при том что под обычным пользователем собирался и ставился нормально: 32-битный процесс, обращаясь к системному каталогу, незаметно уезжал в другой, и часть путей внутри установки переставала сходиться.

Подпись - jsign через PKCS11 с аппаратным токеном: PIN приходит из окружения раннера, к подписи добавляется доверенный штамп времени, чтобы она пережила истечение самого сертификата.

Публикация

Артефакты уезжают в объектное хранилище с ротацией двух последних версий: свежая и предыдущая всегда доступны для отката, старьё не копится. Состав релиза считается от git-тега, а выкладка проходит через гейт готовности бэкенда в проде - десктоп не должен уйти к пользователям раньше, чем сервер научится с ним разговаривать.

За квартал через этот конвейер прошло около девятнадцати продовых релизов, рекорд - пять за неделю. Подпись под две операционные системы обычно оказывается той самой темой, куда на собеседовании копают глубже всего: компетенция редкая, а грабли у всех одинаковые.