Как подписать ipa файл ios

Обновлено: 06.07.2024

Разработчик: ILYA2606 (основано на исходниках)
Дата выпуска: 7 июля 2011
Версия: 2.6 (4 декабря 2011)
Язык: Только русский

Системные требования

  • Mac OS X 10.6 и выше(VM,Hack,Macintosh).
  • iDevice любой модели.
  • iOS 2.x или более (совместимо с iOS 5.1)
  • Файл сертификата разработчика
  • Файл профиля (провижн)

Описание

Приложение способно подписать крякнутое (ломанное или отвязанное от аккаунта) приложение под своим сертификатом и без проблем устанавливать его через iTunes на устройство без джейлбрейка!

Инструкция

1) Если вы разработчик, имеющий свой сертификат Apple.

2) Если вы не разработчик.

  1. Добавляйте UDID своего девайса к разработчику, имеющему сертификат,
  2. Возьмите у разработчика его файл профиля (провижн) *.mobileprovision, в который было добавлено ваше устройство .
  3. Возьмите у разработчика его файл сертификата *.p12, в который был добавлен провижн.
  4. Файл профиля *.mobileprovision переносите мышкой Drag&Drop в иконку iTunes, затем синхронизация с устройством. Это установит профиль на устройство.
  5. Добавляете файл сертификата *.p12 в Связку ключей в раздел Система.
  6. Запускаете айПодпись. Выбираете любой ломанный ipa, который надо подписать. Записываете в поле ввода подписи имя вашего сертификата, который указан в Связке ключей. Например, iPhone Developer: ляляля (**********).

Как создать сертификат .p12

Как это работает?

Все очень просто. Приложение подписывает ipa-файл подписью разработчика из файла сертификата. Таким образом, iTunes думает, что это обычный девелоперский билд, и устанавливает спокойно его на устройство, UDID которого занесен в этот сертификат.

Скриншоты

http://www.iguides.ru/forum/imagehosting/2011/07/09/624e187ffa469d7.jpg

http://www.iguides.ru/forum/imagehosting/2011/07/09/624e188007e9aff.jpg

http://www.iguides.ru/forum/imagehosting/2011/07/09/624e18800f23ec4.jpg

http://www.iguides.ru/forum/imagehosting/2011/07/09/624e188017150b5.jpg

Функционал постепенно добавляется.

Что нового в версии 2.0:

  • Добавлена мультизагрузка
  • Вкл/Выкл автодобавления подписанных файлов в iTunes
  • Изменены уведомления
  • Добавлен ПрогрессБар и информация по стадиям

Что нового в версии 2.1:

  • Добавлена обновлялка Sparkle
  • Баг фикс
  • Графические улучшения

Что нового в версии 2.2:

  • Проверена работоспособность обновления Sparkle

Что нового в версии 2.2.1:

  • Добавлено автосохранение настроек при выходе

Что нового в версии 2.3:

Что нового в версии 2.4:

Что нового в версии 2.5:

  • Добавлен выбор профиля для интеграции в приложение

Что нового в версии 2.6:

  • Добавлена утилита подписывания кода от Mac OS X 10.7.2
  • Переведены ошибки, и добавлены их решения

Буду признателен за дельные советы по развитию данного проекта

image

[Прим. пер.: переведя вызвавший широкое обсуждение на Хабре пост, я заинтересовался новыми правилами для разработчиков ПО, введёнными компанией Apple. В этой статье рассказывается о личном опыте освоения правил одним из разработчиков игр.]

Введение

В новой версии macOS Apple сделала обязательными некоторые требования к приложениям, которые раньше были рекомендациями: 64-битные исполняемые файлы, подписывание и нотаризация. Не удовлетворяющие этим требованиям приложения больше запускаться не будут.

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

Особенно актуально это для разработчиков игр, публикующих игры для Mac в Steam. До недавних изменений игры, запущенные из Steam, не нужно было подписывать и подвергать нотаризации, но теперь они должны подчиняться тем же правилам, что и все остальные.

Я только что закончил разбираться с тем, как реализовать соответствие этим требованиям для моей игры Airships: Conquer the Skies. Airships работают на Java, а потому требуют ещё и JVM, но в целом всё остальное будет применимо для большинства разработчиков.

Вот что я узнал о подписывании и нотаризации приложения для Mac, которое не было скомпилировано непосредственно Xcode. Учтите, что информация получена из моих собственных исследований и может быть точной не на 100%. Вопросы и поправки приветствуются.

История вопроса

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

В macOS приложения обычно упаковываются в bundle — папки, содержащие исполняемый файл, а также дополнительные ресурсы и метаданные. Подписывание бандла означает создание криптографичекой контрольной суммы содержимого бандла с последующим созданием криптографической подписи с сертификатом, которые Apple выпускает для разработчика. Подпись — это заявление о том, что вы лично гарантируете правильное поведение приложения. Если содержимое бандла меняется, то меняется контрольная сумма, и подпись перестаёт им соответствовать, предупреждая операционную систему, что в бандл внесены несанкционированные изменения.

Подписывание приложений существовало много лет. Чуть позже приложения также стало необходимо нотаризировать. Нотаризация (notarization) означает, что вы отправляете подписанное приложение Apple, а компания выполняет дополнительные проверки и регистрирует приложение. Если нотаризация завершается успешно, вы «прилепляете» нотаризацию к своему приложению, чтобы офлайн-машины без доступа к Интернету тоже могли убедиться, что приложение прошло нотаризацию.

Это своего рода метафора работы с бумажными документами. Разработчик собирает в бандл все части, из которых состоит приложение. Затем он создаёт список всех элементов бандла (контрольную сумму) и подписывает этот список (цифровой подписью), которую приклеивает к бандлу. Затем он передаёт подписанный бандл нотариусу господину Яблокову, который проверяет, всё ли в порядке с бандлом, а затем регистрирует его. Он даёт разработчику квитанцию, которую тот степлером прикрепляет к бандлу. То есть если разработчик сказал, что приложение безопасно, и господин Яблоков тоже говорит, что оно безопасно, то так скорее всего и есть. А если нехороший человек попробует изменить его содержимое, то список элементов бандла перестанет ему соответствовать, и пользователь будет знать, что использовать его не нужно.

Требования

Что необходимо для подписывания и нотаризации приложения:

  • Компьютер Mac, достаточно новый, чтобы на нём можно было запустить Xcode 11, то есть достаточно новый, чтобы запустить macOS 10.14.3. Если вы ещё не установили Xcode, то потребуется 25 ГБ свободного места для установки.
  • Если вы пока не являетесь официальным разработчиком Apple, то для членства необходим логин Apple ID и примерно 110 долларов США.

Двухфакторная аутентификация

Если у вас её ещё нет, включите двухфакторную аутентификацию для Apple ID. Это можно сделать с любого i-устройства или с Mac. На Mac перейдите в iCloud control panel настроек System Preferences. В верхней части должна быть панель, предлагающая включить 2FA.

Покупка членства

Идентификатор приложения

Возможно, вам понадобится зарегистрировать ID бандла приложения в бэкенде разработчика. ID бандла можно найти в YourApp.app/Contents/Info.plist. (Открывать бандлы приложений можно, нажав на них правой клавишей мыши и выбрав «Show Package Contents».) Идентификатор должен иметь вид com.yourcompanyname.applicationname, например, у моей игры Airships это com.zarkonnen.airships.

Для регистрации ID выполните вход в https://developer.apple.com/, выберите в левой панели «Certificates, IDs & Profiles», а затем выберите на следующей странице «Identifiers». Затем можно нажать кнопку "+", чтобы добавить идентификатор приложения.

Пароль приложения

Xcode и инструменты

Сертификат

Запустите Xcode, перейдите в Preferences, откройте вкладку Accounts. При необходимости добавьте свой Apple ID к списку аккаунтов. Затем нажмите на кнопку «Manage Certificates. » в нижнем правом углу. Отобразятся имеющиеся у вас сертификаты для подписывания приложений. Вам нужен сертификат «Developer ID Application»; если в списке его нет, то создайте его. Нажмите «Done», а затем «Download» в окне Preferences:Accounts, чтобы скачать сертификаты локально.

Подготовка приложения

Чтобы приложение правильно работало в новой системе, исполняемый файл и библиотеки должны быть 64-битными.

Кроме того, Mac OS выполняет операцию под названием «translocation»: из соображений безопасности перемещает запущенный бандл приложения в случайное место. В случае моего приложения это проявилось тем, что оно не смогло найти файлы данных, расположенные рядом с бандлом приложения. Можно получать исходное расположение бандла приложения, но я решил проблему, просто поместив всё в бандл.

Разрешения (Entitlements)

Для создания нового файла plist с помощью Xcode выберите «New File», а затем в появившемся списке нажмите на «Property List». Добавьте в корневой словарь элементы с названиями entitlements, которые вам нужны; они имеют значения boolean:YES.


В случае моей игры, поскольку она написана на Java, мне понадобились следующие разрешения, чтобы работала JVM: com.apple.security.cs.allow-jit, com.apple.security.cs.allow-unsigned-executable-memory, com.apple.security.cs.disable-executable-page-protection, com.apple.security.cs.disable-library-validation, com.apple.security.cs.allow-dyld-environment-variables. Для пользователя они выглядят пугающе, поэтому если вам они не нужны, то не добавляйте их.

Далее в статье мы будем считать, что вы поместили свои entitlements в файл под названием entitlements.plist.

Подписывание

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

Также это означает, что ваше приложение при работе не должно менять ничего в содержимом бандла приложения, например, не помещать туда кэш.

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

Грубым, но эффективным способом будет принудительное глубокое подписание, то есть ваша подпись будет применена ко всем элементам бандла приложения, заменив все предыдущие подписи. Именно так мы и поступим, потому что это проще и потому, что предыдущие подписи могут быть недействительными или недостаточно сильными.

Вам понадобится следующая пугающая команда:

codesign -s "Developer ID Application: <YourName>" --timestamp --options runtime -f --entitlements entitlements.plist --deep YourApp.app

Опция --timestamp означает, что вместе с подписью встраивается действительная метка времени, которая необходима для успешной нотаризации.

Опция --options runtime означает, что подпись включает «hardened runtime», что также необходимо для успешной нотаризации.

Изучить подпись можно командой

codesign -d -vvvv YourApp.app

Также следует запустить приложение, чтобы убедиться, что оно продолжает работать после подписывания.

Если вы хотите подписывать элементы более вежливым образом, то уберите из команды -f и --deep , сначала подпишите все исполняемые файлы и библиотеки внутри приложения, а потом всё приложение.

Нотаризация

Подписав приложение, нужно предоставить его системам Apple для нотаризации, чтобы сказать: «смотрите, я подписал вот эту штуку».

Для этого надо сначала сжать приложение в специальный файл zip с помощью команды ditto:

/usr/bin/ditto -c -k --keepParent YourApp.app YourApp.zip

Простая упаковка приложения в zip при помощи Finder или командной строки не подойдёт.

xcrun altool --notarize-app --primary-bundle-id "<id>" -u "<appleid>" -p "<app-specific password>" --file YourApp.zip

xcrun altool --notarize-app --primary-bundle-id "com.zarkonnen.airships" -u "dave@hotmail.com" -p "bwnh-pbbt-llpt-xxxx" --file Airships.zip

ID бандла можно найти, заглянув в YourApp.app/Contents/Info.plist. (Открывать бандлы приложений можно, нажав на них правой клавишей мыши и выбрав «Show Package Contents».)

Нотаризация может занять довольно много времени. Обычно это несколько секунд или минут, но иногда может быть и час. Налейте себе ещё чая, или чего покрепче, выбирайте сами. Рано или поздно вы получите нечто подобное:

No errors uploading 'YourApp.zip'.
RequestUUID = 29926ae6-f551-4d54-b283-e29d6f9b9156

Теперь мы можете использовать следующую команду для проверки состояния переданного бандла:

xcrun altool --notarization-info <RequestUUID> -u -u "<appleid>" -p "<app-specific password>"

xcrun altool --notarization-info 29926ae6-f551-4d54-b283-e29d6f9b9156 -u "dave@hotmail.com" -p "bwnh-pbbt-llpt-xxxx"

На экран будет выведено нечто подобное:


Повторюсь, подтверждение обычно занимает около 15 минут, но иногда на то же самое приложение требуется несколько часов. Ага, вот так.

Если status имеет значение failure, то посмотрите ошибки, перечисленные по URL файла лога. Если вы получили success, то всё равно взгляните, потому что там могут быть предупреждения, и эти предупреждения вполне могут стать ошибками, когда Apple снова ужесточит свои требования.

Прикрепление

Наконец, «пристеплерим» подтверждение нотаризации к бандлу приложения, чтобы её мог проверять даже Mac без подключения к Интернету. Для этого необходимо выполнить на удивление короткую команду:

xcrun stapler staple "YourApp.app"

Поздравляю, вы подписали и нотаризировали приложение для Mac. Теперь вы можете распространять бандл приложения любым удобным вам способом, если он не будет изменяться в процессе.

Если вы оказались в одной лодке со мной и вам нужно добавить в бандл с приложением JVM, то продолжайте чтение.

Следуйте инструкциям в документации на странице github для настройки бандла. Лично я использую NetBeans, и для решения задачи я вставил в build.xml следующие строки:


Это задача, выполняемая после создания файла jar. Она использует appbundler-1.1.0.jar для создания бандла приложения со встроенной JVM.

Также есть более юридически свободные JVM от OpenJDK, но мне не удалось заставить их работать с app bundler.

Примечание: JVM — это «Java Virtual Machine». JRE — это «Java Runtime Environment», которая включает в себя JVM плюс дополнительные элементы, например, Java updater. JDK — это «Java Development Kit», который состоит из JRE плюс вещей, необходимых для написания программ на Java, например, компилятора. До Java 8 JRE была доступна для конечных пользователей отдельно, но с тех пор доступен только JDK, и поэтому мы связываем среду разработки Java с компьютерной игрой.

Вы должны получить возможность глубокой подписи и нотаризации получившегося бандла. В документации к AppBundler есть целая куча дополнительных опций, например, добавление иконки, ассоциации типов файлов и генерация урезанной JVM для приложения.

После запуска ядро iOS или iPadOS определяет, какие процессы пользователей и приложения могут быть запущены в системе. Чтобы помочь проверить, что все приложения получены из известного и утвержденного источника и не подделаны, iOS и iPadOS требуют, чтобы весь исполняемый код был подписан с помощью выпущенного компанией Apple сертификата. Установленные на устройстве приложения, такие как Почта и Safari, подписаны Apple. Приложения сторонних разработчиков также должны быть проверены и подписаны с помощью выпущенного компанией Apple сертификата. Обязательная подпись кода расширяет концепцию цепочки доверия с операционной системы на приложения. Она помогает принять меры, чтобы приложения сторонних разработчиков не загружали неподписанные фрагменты кода или не использовали самомодифицирующийся код.

Процесс подписания приложений разработчиками

Разработчики могут подписывать свои приложения с помощью сертификатов (в рамках программы Apple Developer Program). Они также могут встраивать в свои приложения различные программные среды и использовать сертификаты, выданные Apple, для проверки кода (с помощью строки идентификатора команды).

Проверка сертификата. Для разработки и установки приложений на устройствах iOS или iPadOS разработчики должны зарегистрироваться в Apple и присоединиться к программе Apple Developer Program. Перед выдачей сертификата компания Apple проверяет личность каждого разработчика, будь то частное лицо или компания, в реальном мире. Используя эти сертификаты, разработчики могут подписывать приложения и отправлять их в App Store для распространения. В результате все приложения в App Store отправляются идентифицированными людьми и организациями, что выступает в качестве сдерживающего фактора для создания вредоносных приложений. Кроме того, Apple проверяет все приложения, что помогает выявить явные ошибки или другие заметные проблемы и определить, соответствуют ли приложения своему описанию. Эта проверка дает пользователям дополнительную уверенность в качестве приложений, которые они покупают.

Проверка подписи кода. Разработчики приложений для iOS и iPadOS могут встраивать в свои приложения различные программные среды, используемые самим приложением или встроенными в него расширениями. Чтобы защитить систему и другие приложения от загрузки стороннего кода в их адресное пространство, в момент загрузки система выполняет проверку подписи кода для всех динамических библиотек, на которые ссылается процесс. Эта проверка выполняется с помощью идентификатора команды (Team ID), который извлекается из выпущенного компанией Apple сертификата. Идентификатор команды представляет собой десятизначную буквенно-цифровую строку, например 1A2B3C4D5F. Приложение может ссылаться на любую библиотеку платформы, поставляемую вместе с системой, и любую библиотеку с таким же идентификатором команды в подписи кода, как у основного исполняемого модуля. Поскольку исполняемые модули, поставляемые с системой, не имеют идентификатора команды, они могут ссылаться только на библиотеки, которые также поставлялись с системой.

Проверка корпоративных приложений

У компаний есть возможность разрабатывать корпоративные приложения для внутреннего использования и распространять их среди своих сотрудников. Предприятия и организации могут подать заявку на участие в программе Apple Developer Enterprise Program (ADEP), указав свой номер D-U-N-S. Apple проверяет личность заявителей, их соответствие условиям программы и утверждает заявки. Став членом ADEP, организация может зарегистрироваться для получения профиля обеспечения, который разрешает запускать собственные приложения компании на указанных в нем устройствах.

Для запуска корпоративных приложений у пользователей должен быть установлен профиль обеспечения. Эта мера направлена на то, чтобы только санкционированные организацией лица могли загружать приложения на устройства iOS и iPadOS. Приложения, установленные через систему управления мобильными устройствами (MDM), по умолчанию считаются доверенными, поскольку взаимосвязь между организацией и устройством уже установлена. В противном случае пользователям необходимо авторизовать профиль обеспечения приложения в Настройках. Организации могут запретить пользователям авторизовывать приложения неизвестных разработчиков. При первом запуске любого корпоративного приложения устройство должно получить подтверждение от Apple, что приложение разрешено запускать.

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

Подписывание файлов

Центр приложений не поддерживает подписывание файлов специальными символами или символами в имени. Например, диакритические знаки, такие как c, вложенный или символы, такие как / .

Сертификаты (. p12)

  • Разработка Apple: Используется для включения определенных служб приложений во время разработки и тестирования.
  • Распространение Apple: Для отправки в магазин приложений, прямое или корпоративное распространение.

Профили подготовки (. mobileprovision)

Подписывание кода для расширений app и watchOS

Отправьте дополнительный профиль подготовки для каждого расширения приложения в приложении. Профили подготовки должны иметь один и тот же тип.

Отправка файлов подписывания

Убедитесь, что отправляемые вами активы подписывания являются теми, которые вы собираетесь подписать в приложении. Идентификатор пакета и идентификатор команды в приложении будут перезаписаны ресурсами подписи.

Домашняя страница для разработчиков Apple

Чтобы подписать сборки iOS, передайте профиль подготовки ( .mobileprovision ) и сертификат ( .p12 file ) при настройке сборки, а также пароль, заданный для сертификата. Эти файлы можно найти в центре разработчиков Appleв разделе Сертификаты, идентификаторы & профили.

Поиск профилей подготовки

Вариант 1. получение профиля подготовки (. mobileprovision) из центра разработчиков Apple

Вариант 2. получение профиля подготовки (. mobileprovision), автоматически создаваемого Xcode

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

 Xcode подготовки.

  1. Включите параметр автоматического подписывания в Xcode. См. статью Настройка Xcode для автоматического управления профилями подготовки
  2. Отправьте изменения проекта в репозиторий.
  3. Получить созданный профиль подготовки из

Получение сертификата из центра разработчиков Apple (. p12)

  1. На странице сертификаты, идентификаторы & профиля щелкните Сертификаты.
  2. Выберите сертификат, который будет использоваться для подписи приложения в центре приложений, и скачайте его. Убедитесь, что выбран правильный тип сертификата (разработка или рабочая) и что выбранный ранее профиль подготовки содержит этот сертификат. Кроме того, вам потребуется закрытый ключ сертификата, установленного на компьютере Mac. он не включается, если вы просто скачиваете сертификат из центра разработчиков Apple, поэтому необходимо открыть скачанный сертификат.
  3. После скачивания сертификата перейдите на компьютер Mac и откройте его. Откроется приложение "доступ к цепочке ключей".
  4. Если нужный сертификат не выбран в поле "доступ к цепочке ключей", выберите "Мои сертификаты" слева и перейдите к скачанному сертификату.
  5. Разверните сертификат, чтобы просмотреть соответствующий закрытый ключ.
  6. Выберите сертификат и закрытый ключ, а затем щелкните правой кнопкой мыши контекстное меню в элементах и выберите пункт "экспорт 2 элементов. ".
  7. Выберите расположение на диске, чтобы сохранить файл как, .p12 — рекомендуется использовать надежный пароль для файла.
  8. После того как экспорт профиля подготовки выполняется локально, его можно передать в центр приложений при настройке ветви.

Читайте также: