Учитывайте ключи подписи отдельно для каждого проекта
Храните сертификаты, закрытые ключи и логи сборки раздельно
Возможность скопировать файл сертификата не означает, что его должны читать все задачи сборки. Относитесь к материалам для подписи как к отдельному ресурсу: определите, кто их импортирует, в какой связке ключей они используются и когда их нужно отозвать или заменить.
Сертификаты и профили подготовки
Храните сертификаты, соответствующие им закрытые ключи и профили подготовки отдельно для каждого проекта. Перед импортом проверьте назначение, срок действия и подходящий target; не добавляйте файлы экспорта с закрытым ключом в репозиторий.
Для резервной копии используйте защищённый паролем файл экспорта, а пароль передавайте по другому каналу. Храните копии в месте, которым управляет команда, а не только на сборочной машине.
Отдельная связка ключей для сборок
Рекомендуем хранить учётные данные подписи для CI в отдельной связке ключей, не смешивая их с теми, что используются при повседневной работе. Настраивайте разблокировку и права доступа с учётом реальных задач сборки; не открывайте доступ к закрытым ключам всем процессам ради удобства.
Если автоматической задаче нужно разблокировать связку ключей, получайте пароль из защищённых переменных CI. Сначала проверьте подпись на контролируемой сборке и только потом расширяйте список задач runner.
Кому доступны логи и артефакты
Не выводите пароли, токены и пароли экспорта ключей подписи в скриптах. При поиске неисправности отключите подробный вывод команд для чувствительных шагов и проверьте логи на наличие учётных данных перед отправкой.
Отдельно задайте место хранения и срок хранения для archive, пакетов экспорта и отладочных символов. Успешная сборка не означает, что артефакты сохранены в резервной копии: как минимум проверьте, что нужные файлы можно восстановить из хранилища команды.
Проверьте идентификатор подписи перед запуском сборки для выпуска
Запустите эти команды только для чтения от имени пользователя, выполняющего сборку, и проверьте, что в связке ключей есть нужный идентификатор подписи кода. Вывод предназначен для локальной проверки; не публикуйте полную информацию об окружении.
security find-identity -v -p codesigning
Команда только перечисляет идентификаторы: она не импортирует сертификаты и не настраивает права доступа к связке ключей.