Почему моя сборка устанавливается на симулятор, но не хочет устанавливаться на физическое устройство? Где я могу найти сертификат разработчика? Какая еще команда разработчиков? Эти вопросы рано или поздно возникают у разработчиков и начинающих лидов, сопровождающих релиз или настраивающих CI. Я Никита Коробейников, руководитель группы iOS. в серфинге .
Вдохновленный возможностями Соответствовать — утилиты для управления сертификатами и профилями.
В этой статье я расскажу о типах сборок и дистрибутивов в iOS, какие спицы Apple ставит для нас в колеса нашего рабочего локомотива и чем нас может выручить утилита с парой команд.
Типы сборки
Каждое приложение имеет уникальный идентификатор — BundleID. В зависимости от целей разработчика одно и то же приложение может быть собрано по-разному.Существует два принципиально разных типа сборок:
- Разработка - для отладки.
- Распределение - для распространения.
- Сертификат (.
cert) — он идентифицирует нас с учетной записью разработчика.
- Профиль (.
provisioningprofile) — включает информацию о том, кто и на каких устройствах может запускать приложение.
Разработка
Отладка на симуляторе не требует никаких сертификатов.Сертификат и профиль потребуются, если речь идет о сборке на реальном устройстве.
По правилам Apple профиль разработки может включать несколько сертификатов и до 100 устройств.
Регистрация устройств, сертификаты и профили создаются через портал.
apple.com .
Этот портал служит местом для синхронизации команд разработчиков и гарантирует уникальность сертификатов, профилей и идентификаторов приложений.
Распределение
Существует несколько типов распространения.
Далее, говоря о распространении, мы будем иметь в виду тип AppStore — как наиболее распространенный и отличающийся от девелоперской сборки.
Проблемы с управлением сертификатами и профилями
При использовании портала разработчиков Apple мы сталкиваемся с недружественным интерфейсом, который порождает множество проблем.
Часто приходится зайти и выполнить ритуал добавления устройства в профиль: по сути, поставить галочки на этом экране.
Это рутинная операция.
И разработчики здесь не для того, чтобы ставить галочки.
В нашей компании более двадцати iOS-разработчиков и столько же пишут во Flutter. Все они являются членами одной команды разработчиков, зарегистрированной под учетной записью apple.developer.com. Количество сертификатов ограничено: однако сведения об этом противоречивы, и точную цифру назвать сложно.
Некоторые разработчики используют опцию автоматически управлять кодированием : автоматически создает и отзывает персональные сертификаты.
Проблема в том, что вы можете случайно отозвать чужой сертификат, который действительно использовался в каком-то профиле.
В результате профиль отваливается и сборки перестают соединяться.
Сертификат состоит из пары файлов, один из которых является закрытым ключом.
С портала можно получить только открытый ключ (cer).
Частная часть остается у человека, создавшего сертификат. Он может поделиться им, экспортировав ключ в файл с расширением p12. Так уж получилось, что поиск подходящего ключа для выбранного типа дистрибутива может занять время, если проектов много и их ведут разные разработчики.
Если вы введете общее хранилище ключей, путаницу можно решить, но вы захотите автоматизировать процесс поиска.
Общий.
При управлении сертификатами и профилями мы:
- Мы тратим время на рутину.
- Мы нажимаем на лимиты и периодически видим отозванные сертификаты.
- Мы не всегда знаем, где найти ключ сертификата.
Матч – наш герой
Соответствовать позволяет собирать сертификаты и профили одного проекта в едином репозитории: вы можете решить проблемы при управлении сертификатами и профилями и практически забыть о портале разработчиков Apple. Эта утилита является частью полоса обгона , мультиплатформенный инструмент для CI/CD с понятной разработчикам объектно-ориентированной конфигурацией.Матч использует API подключения к магазину приложений через Космический корабль -client и сохраняет созданные сертификаты в безопасном хранилище.
Spaceship — это оболочка нескольких документированных и недокументированных API-интерфейсов, а также часть Fastlane, как и Match.
Конфигурация матча
У Match есть отдельный файл конфигурации, который устанавливает соединение между репозиторием и учетной записью команды разработчиков на портале разработчиков Apple. Конфигурация выполняется в меньшей степени в файле Fast, но в большей степени в файле Match. Он создается командой:Файл появится в папке {ваш проект}/fastlane/Matchfile.fastlane match init
git_url("[email protected]:your_company/ios-certificates.git")
git_branch("project/app/your_project")
clone_branch_directly(true)
storage_mode("git")
type("development") # The default type, can be: appstore, adhoc, enterprise or development
app_identifier(["com.your_project.debug"])
team_id("EFAAG9GXN4")
- git_branch — ветка проекта.
- clone_branch_directly — флаг для экономии времени клонирования.
- Storage_mode — тип хранилища.
Можно использовать репозиторий git, Google Cloud Store или Amazon.
- type — тип сборки или дистрибутива.
- app_identifier — набор идентификаторов (bundle_id), для которых будут созданы профили.
Их может быть несколько при условии, что оба идентификатора принадлежат одной команде разработчиков.
- team_id — идентификатор команды разработчиков.
Значения можно переопределить при вызове команды.
Если у вас несколько команд разработки — например, заказчик добавил вас в свою команду, с которой будет проходить релиз — вам понадобятся два Matchfiles. Параметры git_branch, app_identifier, team_id из файла нужно будет заменить: сертификаты и профили одной команды разработчиков не могут лежать рядом с сертификатами другой.
Независимо от типа хранилища, записанные в него файлы сертификатов и профилей будут зашифрованы секретным паролем MATCH_PASSWORD. Это гарантирует защиту ваших файлов.
Приватные ключи p12 необходимо экспортировать без p12. При инициализации Match запросит секретный пароль, но важно понимать, что каждая ветка или корзина может иметь свой секретный пароль.
Импорт сертификата и профиля
В случае миграции вам понадобится команда импорта для добавления существующих сертификатов.
fastlane match import
Эта команда загрузит существующие файлы в репозиторий и зашифрует их.
Интересно, что у команды нет параметра типа: при добавлении нового типа распределения необходимо изменить тип, указанный в Matchfile. Вы можете пропустить импорт профилей.
Сертификаты необходимо указывать вместе с закрытыми ключами.
Ээкспортировать сертификат и профиль без изменений
Чтобы получить скачанный сертификат и профиль из хранилища, используйте команду: fastlane match $(type) --readonly
Параметр type соответствует типу распределения.
В нашем случае мы просто заходим в репозиторий и расшифровываем необходимые сертификаты и профили.
После выполнения команды они уже будут установлены в связке ключей.
Если вы удалите флаг «только для чтения», в процесс будет добавлена проверка сертификата через AppStore Connect API.
Ээкспортировать сертификат с обновлением профиля
Команда обновления полезна в случаях, когда:- вам необходимо добавить новое устройство в профиль разработки,
- профили истекли,
- профили еще не созданы.
fastlane match $(type) -u $(user) --force --include_all_certificates
Параметр type соответствует типу распределения.
Параметр user соответствует AppleID аккаунта с доступом к команде разработчиков.
Команда запросит пароль и код 2FA для AppleID, указанного в параметре пользователя.
Он проверит актуальность сертификата и профиля в хранилище и при необходимости создаст новый профиль.
Флаги Force и include_all_certificates инициируют принудительное обновление профиля разработки.
Они необходимы, потому что количество сертификатов разработок в нашей команде больше одного.
К сожалению, другого способа гарантировать, что профиль, созданный методом match, будет содержать сертификат, добавленный в ветку проекта, не существует. Если вы удалите ненужные сертификаты с портала разработчиков Apple, необходимость в принудительном использовании отпадет.
Опыт миграции в Match
На момент написания мы перенесли два проекта в Match. Конечно, не все прошло гладко.Мы не сразу это поняли:
- Сертификаты с разными team_ids должны находиться в отдельной ветке, иначе будет выбран не тот сертификат.
- Импортировать закрытый ключ сертификата необходимо без пароля, иначе он не будет правильно расшифрован.
- Рутина установки галочек исчезла.
- Проблемы с истекшими или отозванными сертификатами можно решить с помощью одной команды обновления.
- Все разработчики знают, как установить на свое устройство сертификаты, необходимые для сборки.
В наших планах — перевести проекты студии на использование Match и очистить сертификаты разработки.
Мы считаем, что это возможно с Match. Теги: #iOS #разработка iOS #разработка мобильных приложений #программирование #разработка приложений #сборка #обеспечение #fastlane #surf #surfstudio #сертификат разработчика
-
Обзор Dell Vostro V1373-R23G
19 Oct, 24 -
Ruvds Запускает Партнерскую Программу
19 Oct, 24 -
Основы Flutter Для Начинающих (Часть V)
19 Oct, 24 -
Google Построит Соцсеть На Контактах Gmail
19 Oct, 24 -
Обзор: Эффект Интернет-Рекламы
19 Oct, 24 -
Как Нам Дали Задание Сравнить Ежа Со Змеей
19 Oct, 24