Ошибка no code signature found появляется при сборке или запуске приложения, когда операционная система или среда разработки не обнаруживает действительную цифровую подпись кода у исполняемого файла. Чаще всего с ней сталкиваются разработчики в Xcode при попытке установить приложение на iPhone, а также пользователи macOS при запуске программ, скачанных не из App Store.
Системы Apple проверяют подпись каждого приложения перед запуском: так macOS и iOS убеждаются, что код не был изменён после публикации разработчиком. Если подпись отсутствует, повреждена или не соответствует профилю устройства, запуск блокируется с этим сообщением. Ниже разберём, в каких сценариях возникает ошибка и что проверить в первую очередь.
Что означает ошибка no code signature found
Сообщение буквально переводится как «подпись кода не найдена». Подпись кода (code signature) — это криптографический механизм, которым разработчик подтверждает авторство и целостность приложения. В экосистеме Apple подписывание обязательно: без него система отказывается доверять бинарному файлу.
Ошибка может звучать по-разному в зависимости от контекста: «no code signature found», «a valid provisioning profile for this executable was not found» или «code signature invalid». Общий смысл один — проверка подписи не пройдена. Причины при этом различаются: от сбитых настроек проекта до повреждённого архива приложения.
⚠️ Внимание: не отключайте проверку подписей системой Gatekeeper на постоянной основе ради запуска одной программы. Это снижает защиту macOS от вредоносного ПО. Используйте обходные пути только для приложений, источнику которых вы доверяете.
Типичные сценарии появления ошибки
Понять, как исправить проблему, проще, если определить, в какой ситуации она возникла. Основные сценарии таковы:
- 🛠️ Сборка в Xcode — приложение не устанавливается на физическое устройство из-за проблем с сертификатом или профилем обеспечения (provisioning profile).
- 📦 Запуск скачанного приложения — macOS блокирует программу, у которой подпись отсутствует или повреждена при скачивании.
- 🔄 Распаковка архива — подпись теряется, если приложение было перепаковано сторонним архиватором или прошло через файловую систему без поддержки расширенных атрибутов.
- 🧪 Тестирование через TestFlight или ad-hoc — профиль не охватывает конкретное устройство или истёк срок действия сертификата.
Если ошибка возникла у конечного пользователя при запуске готовой программы, чинить её средствами разработчика не нужно — достаточно перекачать приложение из официального источника. Если же вы разработчик и видите сообщение при установке на устройство, потребуется проверка настроек подписывания проекта.
Решение для разработчиков: настройки Xcode
Когда ошибка появляется при сборке, первым делом откройте настройки таргета проекта и перейдите на вкладку Signing & Capabilities. Проверьте, что выбрана корректная команда разработчика (Team) и включён режим Automatically manage signing — Xcode сам подберёт сертификат и профиль.
Если автоматическое управление не помогает, последовательно выполните базовые шаги диагностики:
☑️ Проверка подписывания в Xcode
Нередко помогает очистка производных данных: удалите содержимое папки ~/Library/Developer/Xcode/DerivedData для проблемного проекта. Там кэшируются промежуточные результаты сборки, и повреждённый кэш способен ломать процесс подписывания. После удаления соберите проект заново.
Также проверьте связку ключей (Keychain Access): просроченные или дублирующиеся сертификаты разработчика иногда конфликтуют. Актуальный сертификат должен отображаться как действительный, без предупреждающих значков.
Решение для пользователей macOS
Если вы не разработчик, а просто запускаете программу, порядок действий иной. Первое и самое надёжное — скачать приложение заново с официального сайта разработчика или из App Store. При прерванной загрузке или перепаковке архива подпись может оказаться утраченной.
Проверить наличие подписи у приложения можно через Терминал. Выполните команду:
codesign -dv --verbose=4 /Applications/ИмяПриложения.app
Если в ответ выводится code object is not signed at all, приложение действительно не подписано. Для проверки целостности уже подписанного приложения используется команда codesign --verify --deep --strict с путём к программе. Ошибка верификации означает, что файлы были изменены после подписания.
⚠️ Внимание: приложение без подписи, полученное из неофициального источника, может содержать вредоносный код. Перед запуском таких программ убедитесь, что доверяете источнику, и по возможности сверьте контрольную сумму файла, если разработчик её публикует.
Сравнение причин и способов устранения
Соберём основные сценарии в одну таблицу, чтобы быстро сориентироваться:
| Ситуация | Вероятная причина | Что делать |
|---|---|---|
| Сборка в Xcode на устройство | Неверный профиль или сертификат | Включить автоматическое подписывание, проверить Team |
| Запуск скачанной программы | Подпись повреждена при загрузке | Перекачать с официального источника |
| Приложение после распаковки | Потеря атрибутов при перепаковке | Использовать оригинальный дистрибутив |
| Установка через ad-hoc | Устройство не в профиле | Добавить UDID устройства в профиль |
| Ошибка после обновления проекта | Устаревший кэш DerivedData | Очистить DerivedData и пересобрать |
Дополнительные причины и нюансы
В ряде случаев проблема глубже, чем настройки проекта. Например, если дата и время на Mac сбиты, проверка сертификатов может завершаться ошибкой — система считает действительный сертификат просроченным. Убедитесь, что включена автоматическая синхронизация времени в настройках системы.
Ещё одна возможная причина — модификация уже подписанного приложения. Любое изменение файлов внутри .app-пакета (замена ресурсов, патчинг бинарника) делает подпись недействительной. После любой правки содержимого пакета приложение необходимо подписать заново, иначе система откажется его запускать.
Как переподписать приложение вручную
Для переподписывания используется команда codesign с флагом --force и параметром --sign, где указывается идентификатор сертификата из связки ключей. Это инструмент разработчика: без действующего сертификата Apple Developer подписать приложение для распространения не получится. Для локального использования применяется ad-hoc-подпись (знак «-» вместо идентификатора), но такое приложение всё равно может блокироваться Gatekeeper на других машинах.
Наконец, корпоративные среды с MDM-политиками могут дополнительно ограничивать запуск приложений с определёнными подписями. Если ошибка возникает на рабочем устройстве под управлением организации, уточните у администратора, не запрещён ли запуск данной категории программ.
Часто задаваемые вопросы
Опасна ли ошибка no code signature found для системы?
Сама по себе ошибка — это защитная реакция системы, а не признак заражения. Она означает, что macOS или iOS заблокировали запуск непроверенного кода. Однако игнорировать её и принудительно запускать неподписанные программы из сомнительных источников небезопасно.
Почему приложение работало раньше, а теперь выдаёт ошибку?
Возможные причины: истёк срок действия сертификата разработчика, приложение было обновлено с нарушением подписи, либо система после обновления ужесточила проверки. Попробуйте скачать актуальную версию программы с официального сайта.
Можно ли запустить неподписанное приложение на Mac?
Для приложений, которым вы доверяете, macOS позволяет подтвердить запуск через настройки конфиденциальности и безопасности после первой блокировки. Однако делать это стоит только для программ из проверенных источников — обход защиты лишает вас важного уровня безопасности.
Ошибка возникает только на реальном устройстве, а в симуляторе всё работает. Это нормально?
Да, это ожидаемое поведение. Симулятор iOS не требует подписи кода, а физическое устройство — требует обязательно. Проверяйте настройки Signing & Capabilities и регистрацию устройства в профиле разработчика.
Поможет ли переустановка Xcode?
Как правило, переустановка не требуется: в большинстве случаев достаточно очистить DerivedData, обновить сертификаты в связке ключей и пересоздать профили. Полная переустановка оправдана лишь при повреждении самих инструментов командной строки.