Познакомьтесь с Бобом, опытным разработчиком iOS, и Алисой, не менее опытным тестировщиком.
Это было вечером, это было в пятницу.
Боб исправил ошибку и, видимо, протестировал ее на своих устройствах.
Затем Боб запускает команды, которые уже доведены до автоматизма:
Нажатие на сервер инициируется jenkins/teamcity/travis, который запускает сборку.git checkout develop git merge bug_fix_#999 git checkout master && git merge develop --no-ff .
git push .
При этом наш Боб пишет Алисе, что скоро поедет домой, и хочет, чтобы аппа сегодня пошла в магазин приложений на одобрение, чтобы выиграть лишнюю пару дней, так как скоро выходные, если, конечно, приложение проходит ручное тестирование Алисы.
Приложение Боба вполне обычное: пара сотен скомпилированных файлов классов, еще десяток зависимостей Cocopods и куча раскадровок — Боб ценит свое время и время своих коллег, поэтому не пишет UI в коде.
Боб знает, что его приложение с чистого старта на сервере собирается за 4 минуты для девелоперской версии, которая идет на тест Алисы, и столько же или чуть больше для производственной версии.
Боб также знает, что ему нужно около 10 минут, чтобы дождаться завершения полной сборки, прежде чем сообщить Алисе, что она может начать тестирование.
Боб ответственный человек, поэтому через 10 минут после пуша он проверяет статус сборки, потому что знает, что сервер — это отдельный параллельный мир со своими правилами, законами и странностями.
Вечером пятницы Бобу осталось всего 10 минут до долгожданных выходных, после которых он передаст эстафету Алисе.
Боб едет на сафари bobcompany.ci/dashboard , где он видит перед своим заявлением красный свет, у Боба потемнели глаза, разочарованию не было предела.
Боб нажимает на показать больше , где встречается ошибка: Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings (“com.company.bob”) were found.
Тут нервы Боба окончательно сдали:
*Коротко об ошибке, она появляется, когда мы пытаемся подписать приложение несуществующим сертификатом, под несуществующим имеется в виду либо он не установлен на машине, либо он устарел и для mobileprovision установлено более последняя версия сертификата той же учетной записи для того же пакета.
И самое обидное, что эта ошибка только для производство версию сборки, которая запускается второй после версии development, причем сначала xcode компилирует зависимости (cocoapods) и только потом проверяет валидность подписи, то есть только тогда, когда компилирует основное приложение.
Поэтому ошибка появляется примерно во второй половине процесса сборки, из-за чего первые 6-7 минут тратятся впустую, что еще больше расстраивает Боба.
Наш разработчик Боб уже не первый раз сталкивается с этой проблемой, ведь он работает в крупной компании с несколькими командами iOS-разработчиков, где нормальной практикой разработки является использование одной учетной записи Apple для нескольких человек.
Да, Боб знает о плагине Xcode. https://github.com/neonichu/FixCode , но всех не заставишь, разработчики - существа нежные, не всем нравится, когда их заставляют что-то делать против воли, сам Боб такой.
Боб настолько устал от всего этого, что уже забыл, что 10 минут назад шел домой; вместо этого Боб заказывает пиццу, открывает свой MacBook, который уже упаковал, наливает кофе, просит админов дать доступ к серверу, подключается туда по ssh и начинает выяснять, в чем именно проблема и как ее решить.
ХОРОШО.
Прежде всего, Боб проверяет, какие сертификаты на самом деле имеет машина: security find-identity -v login.keychain
Что это показывает? 1) 40948A3CA3527F580B9ECB2131DE6B1938FB3D7C "iPhone Developer: Mike .
(KSDA3C3QF2)" 2) 0279CB81AEAD8CE015282DD1FA76CE520A815C4D "iPhone Developer: Bob .
(4WT74HLM2M)" 3) 79A2544B1A63C3F9D3DA3FFAB199FEAADB7EC306 "iPhone Developer: Alica .
(VJ53F2J4EK)" .
24 valid identities found
Итак, как минимум связка ключей, которая по умолчанию используется на сервере, имеет 24 сертификата.
Боб знает, что каждый файл mobileprovision создается для одного конкретного сертификата.
Вам необходимо узнать, на каком сертификате создан файл mobileprovision, для которого вылетела сборка, и понять, что произошло с сертификатом.
В общем, нужно понимать, как файл mobileprovision связан с сертификатом.
Боб знает, что разработанная версия приложения уже собрана, поэтому на сервере определенно есть этот сертификат, и теперь нам нужно понять, как он связан с файлом mobileprovision. Для этого Бобу необходимо найти файл mobileprovision и данные сертификата, чтобы начать поиск совпадений между ними.
Ищем файл mobileprovision по его бандлу (если ваш бандл — wildcard, то можно искать по любому другому критерию): cd ~/Library/MobileDevice/Provisioning Profiles
find .
-name "*.
mobileprovision" -type f -exec grep -H -n -a {} -e "com\.
company\.
bob" \;
Отлично, мы нашли наш файл: .
/f98a06f3-21c2-4de0-975f-5df74197c731.mobileprovision:30:
Теги: #iOS #xcode #подпись кода #разработка iOS #xcode
-
Преимущества Ремонта Экранов Ноутбуков
19 Oct, 24 -
10 Гаджетов Для Домашних Животных
19 Oct, 24 -
Ipsec Против Tls/Srtp В Безопасности Voip
19 Oct, 24 -
Jd.com Россия - Началось Самоуничтожение
19 Oct, 24 -
«Пиратов» Снова Гонят С Российских Улиц
19 Oct, 24