App2app provisioning что это

от admin

Разрушая мифы iOS Provisioning, часть 2: управление сертификатами и профилями.

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

  • создать App ID
  • сгенерировать development and App Store сертификаты
  • создать development и distribution provisioning профили
  • создать схему (назовем ее App Store) в Xcode проекте
  • настроить сертификаты и профили в схеме

Многие задачи выполняются в разделе Provisioning в личном кабинете разработчика на сайте Apple Developer.

Если у вас уже есть оплаченный аккаунт, откройте Apple Developer website, выберете “Account” -> “Certificates, Identifiers & Profiles.”

Создание App IDs

App ID это уникальный идентификатор для регистрации вашего приложения. Первым делом, давайте создадим его. App IDs

Шаги для регистрации на сайте apple разрабочика:

  1. Выберите “App IDs” под вкладкой “Identifiers”
  2. Нажмите “+” вверху списка
  3. Введите имя для App ID (используйте название приложения или название + дополнительное имя)
  4. Выберите “Explicit App ID” и введите ваш Bundle ID в текстовое поле
  5. Под “App Services” раздела, выберите сервисы нужные для вашего приложения (их можно будет отредактировать позже)
  6. Нажимаем “Continue”
  7. Если все хорошо — выбираем “Register”

Это все. Bundle ID зарегистрирован и можно генерировать профили на основе этого ID. Если в будущем вы измените Bundle ID, придется также удалить App ID (если он не будет использоваться) и пересоздать новый App ID.

Так, а в чем тогда разница между App ID и Bundle ID? В общем App ID это уникальный идентификатор приложения в экосистеме App Store, не может быть двух приложений там с одинаковыми App ID. Bunlde ID это идентификатор учетной записи разработчика (используется обратная доменная запись — com.mysite.appname).

Создание сертификатов

Я расскажу вам как создавать сертификат для App Store (другие сертификаты созадаются аналогично). Сертификат можно использовать для разработки и распространения всех ваших приложений.

Первое — нужно создать Certificate Signing Request (CSR) в личном кабинете разработчика, для этого:

  1. на вашем Mac откройте Keychain Access (находится тут — /Applications/Utilities).
  2. далее в Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority.
  3. в окне введите ваш email и имя, затем выберите “Save to disk” в опции “Request is”.
  4. жмите Contunue и сохраните файл на компьютере Mac. Certificate Signing Request

Теперь у на есть CSR, и мы готовы сгенерировать рабочий сертификат, для этого заходим в личный кабинет и:

  1. идем в раздел Certificates, Identifiers & Profiles > Certificates > All
  2. нажимаем “+” чтобы создать новый сертификат
  3. выбираем “iOS App Development” для создания development сертификата для отладки на зарегистрированных устройствах
  4. Continue
  5. дальше будут инструкции как сгенерировать CSR (мы уже это сделали!)
  6. загрузите запрос CSR (инструкции прилагаются)
  7. жмем на Download для загрузки сгенерированного сертификата, после этого двойным кликом мышки добавляем его в Keychain Access certificate

Для проверки что сертификат установлен в системе, зайдите в Keychain Access > Login Keychain > Certificate, вы должны увидеть публичный и приватные ключи с префиксом “iPhone Developer” (это значит что сертификат для подписки ios приложений, у сертификатов для Mac приложений будет — “Mac development”).

“App Store and Ad Hoc” сертификаты создаются аналогично (разница в п.3 только), сертификат действителен один год, по окончании срока его нужно удалить и создать новый, при этом все связанные provisioning профили аннулируются и их также придется повторно сгенерировать.

Регистрация устройств

Тестовые устройства для отладки приложений регистрируются в помощью UDID — уникального идентификатора. Он включается в provisioning профили (создадим на следующем шаге), при добавлении/удалении нового устройства нужно повторно сгенерировать provisioning профиль. Поэтому мы сделаем этот шаг первым.

UDID устройства можно найти в iTunes или в Xcode (подключите устройство к Mac запустите Xcode, найдите в Window > Devices > ваше устройство и скопируйте UDID строку в разделе “Identifier”), это уникальный идентификатор вашего физического устройства.

Для регистрации UDID:

  1. идем в Certificates, Identifiers & Profiles > Devices > All (личный кабинет разработчика)
  2. жмем “+” для добавления нового устройства
  3. вводим имя, мы рекомендуем формат для этого “Имя/Тип устройства/Добавлен или Изменен/Дата”, удобно для больший команд
  4. вводим UDID
  5. нажимаем “Contunue” UDID

Теперь устройство зарегистрировано в вашей учетной записи, также можно добавить его у нескольких разработчиков. После регистрации устройство можно включать в provisioning профиль для запуска приложения на нем.

Создание профилей

Provisionig профиль это ключевой момент для подписи приложения. Он определяет какие устройства имеют право запускать подписанное приложение, указывает на сертификат для подписи приложения, а также какие сервисы будут доступны для приложения на этом устройстве (iCloud, APNs и т.д).

Создать provision профиль довольно просто в личном кабинете разработчика, для этого:

  1. идем в Certificates, Identifiers & Profiles > Provisioning Profiles > All и видим список созданных профилей
  2. жмем “+” для добавления нового профиля
  3. выбираем из списка “iOS App Development” и жмем на Continue
  4. далее выберите App ID (созданный ранее) и опять Continue
  5. на этом экране вам предлагают выбрать сертификат для подписи профиля, указываем только что созданный сертификат, и жмем Contunue (можно выбрать несколько сертфикатов для профиля, каждый из них может подписать приложение)
  6. на экране “Select Devices” укажите устройства, на которых вы будете запускать приложение
  7. экран “Generate” предлагает дать профилю читаемое имя, в MartianCraft мы обычно используем формат: [App Name]: [Profile Type] Profile (например “MartianApp: Development Profile”), жмем по привычке Continue
  8. итак на последнем экране (вы тоже не любите неуместное употребление “крайний”?) можно загрузить созданный профиль. После загрузки перетащите его на иконку Xcode в доке (быстрый способ добавить файл в

Для создания App Store профиля повторяем весь процесс, но на шаге 3 выбираем “App Store”, это профиль для распространия приложений в AppStore, и поэтому в него нельзя добавить устройства.

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

Provisioning profile details

Процесс обновления профиля простой: идем в Certificates, Identifiers & Profiles in the provisioning portal > Provisioning Profiles > All, находим нужный профиль и жмем Edit для изменений App ID, настроек сертификата или списка устройств.

Работа с схемами и сертификатами в Xcode

Наконец-то у нас есть все для подписи iOS приложения, мы соберем все вместе внутри Xcode и свяжем сертификат и provisioning профиль в особую схему.

По умолчанию, XCode автоматически создает две схемы: Debug и Release. Воспользуемся ими, для Debug схемы мы будем использовать Development профиль и сертификат, для Release — AppStore профиль и сертификат. Открываем “General” вкладку и ищем там “targets” (помним что для этого используем сертификаты добавленные в Keychain и Provisioning profiles это папка в XCode см. выше).

Снимаем галочку “Automatically manage signing”, так как мы будем подписывать “самостоятельно”. После этого появятся две секции: “Signing (Debug)” и “Signing (Release).” Manual signing

В Signing (Debug) > Provisioning Profile выставляем Development профиль, а в Signing (Release) — AppStore профиль.

Это все что нужно сделать для работы с профилями в “ручном” режиме. Мне кажется не так уж и сложно 🙂 Теперь можно и поработать.

Частые ошибки и как их исправить

Provisioning Profile doesn’t match bundle ID Это значит что provisioning профиль был сгенерирован с неправильным App ID/Bundle ID и профиль содержит Bundle ID от другого проекта.

Code Signing Entitlements file do not match those specified in your provisioning profile Локальные права не соответствуют профилю (посмотрите Capabilites вкладку). При добавлении сервисов типа iCloud, Keychain они должны быть зарегистрированы в профиле.

No Matching Provisioning Profiles Found случается когда сертификату не имеет связанных профилей для подписи приложений. Проверьте что профиль импортирован в Xcode (можно вручную открыть папку:

/Library/MobileDevice/Provisioning Profiles), посл этого в личном кабинете убедитесь, что профиль использует необходимый сертификат, в случае необходимости обновите профиль.

Более подробно ошибки описаны на сайте для разработчиков Apple Developer.

Сборка и подпись приложения

С нашими настройками удобно создавать сборки приложения и запускать на зарегистрированных устройствах. Для выпуска приложения под AppStore следует выбрать “Generic iOS Device”, затем Product > Archive, будет создан архив, подписанный профилем-сертификатом “AppStore Provisioning”.

Отправка приложения происходит в Xcode Organizer (Window > Organizer), выбирайте архив для отправки в AppStore и следуйте инструкциям в окне. Не забываем выбрать “Use local signing assets” при выборе команды разработчиков.

Выводы

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

What is a provisioning profile & code signing in iOS?

If somebody ask you about the iOS app deployment process, you can easily give the answer . But when they ask a level deeper, you may not have an answer. The above question is one such thing which every ios developer should know. Let’s see what it is.

Source: Stackoverflow and internet ��.

Apple’s definition: A provisioning profile is a collection of digital entities that uniquely ties developers and devices to an authorized iPhone Development Team and enables a device to be used for testing.

Why Provisioning Profiles?

Unlike Android, you can’t install any app on an iOS device. It has to be signed by Apple first. However, when you’re developing an app, you probably want to test it before sending it to Apple for approval. Provisioning profile act as a link between the device and the developer account. During development, you choose which devices can run your app and which app services your app can access. A provisioning profile is downloaded from your developer account and embedded in the app bundle, and the entire bundle is code-signed. A Development Provisioning Profile must be installed on each device on which you wish to run your application code. If the information in the provisioning profile doesn’t match certain criteria, your app won’t launch.

Each Development Provisioning Profile will contains:

  • Development Certificates —development certificate. These are for developers who want to test the app on a physical device while writing code.
  • Unique Device Identifiers (List of devices that the app can run on)
  • an App ID (this can include a * wild card to be used for many applications with similar bundle identifiers). —An App ID is a two-part string used to identify one or more apps from a single development team.

Devices specified within the provisioning profile can be used for testing only by those individuals whose iPhone Development Certificates are included in the profile. A single device can contain multiple provisioning profiles.

So, What is happening when we connect the device to xcode and installs the app??

When you install the application on a device the following things happens:

  • the provisioning profile in the Mac goes to the developer certificate in your key chain.
  • xcode uses the certificate to sign the code.
  • device’s UUID is matched with the IDs in the provisioning profile.
  • AppID in the provisioning profile is matched with the bundle identifier in the app.
  • The entitlements required are associated with the App ID.
  • The private key used to sign the app matches the public key in the certificate.

Here is a screenshot from xcode signing section:

SO, from the above image, you can see that AppID is checked, certificate is validated, Team is matched, capabilities and entitlements are matched .

If all the above steps are successful the signed binary is sent to the device and is validated against the same provisioning profile in the app and finally launched. If anyone of these conditions fail, then the app will not install — and you’ll see a greyed-out app icon.

The difference between Development and Distribution Profiles is that Distribution Profiles don’t specify any Device IDs. If you want to release an App which should be limited to a number of registered devices, you need to use an Ad-Hoc profile for that.

Distribution Profiles is used to submit app to the App Store for distribution. After the app is reviewed by apple they sign in the app with their own signature that can run on any device.

That’s all fine, But what is code signing?

Signing your app allows iOS to identify who signed your app and to verify that your app hasn’t been modified since you signed it. The Signing Identity consists of a public-private key pair that Apple creates for you.

Asymmetric cryptography

Asymmetric cryptography uses a public key and a private key. The users have to keep their private key for themselves, but they can share the public key. And using those public and private keys, a user can prove that he is indeed himself.

How asymmetric cryptography works??

Assume there is a UserA and UserB .

  • UserA create a PrivateKeyA + PublicKeyA.
  • UserB create a PrivateKeyB + PublicKeyB.

To secure the communication between UserA and UserB,

  • UserA shares his PublicKeyA with UserB .
  • UserB shares his PublicKeyB with UserA.

… and both users keep the private key with themselves.

When UserA sends a message to UserB,

  • UserA encrypts the message with UserB’s PublicKeyB and send the message.
  • This message can only be decrypted using UserB’s PrivateKeyB.

… The same thing happens when the UserB sends a message to UserA.

Watch this video for more understanding about asymmetric cryptography : Youtube video by savjee.

What is CSR(Certificate Signing Request) in iOS ??

CSR is not something that is used only in iOS. It is used in many places.

A CSR or Certificate Signing request is a block of encoded text that is given to a Certificate Authority when applying for a certificate.

Here , we create a CSR and give it to apple which will create the certificate for you. It also contains the public key that will be included in the certificate. A private key is usually created at the same time that you create the CSR, making a key pair. A certificate authority will use a CSR to create your certificate, but it does not need your private key. You need to keep your private key secret. The certificate created with a particular CSR will only work with the private key that was generated with it. So if you lose the private key, the certificate will no longer work.

(optional — refer this link to understand how CSR works for SSL certificates. The procedure and working is almost similar)

The process :

  • Create a Certificate Signing Request (CSR) through the Keychain Access Application.
  • Keychain Application will create a private key (private key will be stored in the keychain) and a certSigningRequest file which you’ll then upload to Apple.
  • Apple will proof the request and issue a certificate for you. The Certificate will contain the public key that can be downloaded to your system. After you downloaded it you need to put it into your Keychain Access Application by double clicking it. The Certificate will be pushed into the Keychain and paired with the private key to form the Code Signing Identity.
  • Finally, at the time of app installation, the private key used to sign the app matches the public key in the certificate. If it fails, app is not installed.

If you enjoyed reading this post, please share and give some clapps so others can find it ���������� .

If you have any comment, question, or recommendation, feel free to post them in the comment section below!

Русские Блоги

Подробно поговорите о сертификатах и ​​профиле Provisioning Profile

Большинство программистов iOS были ошеломлены сертификатами и профилями Provisioning Profiles. Пришло время разобраться в своих идеях и прояснить эту проблему. Все конфигурации находятся вhttps://developer.apple.com, Каждый может подняться и исследовать.

свидетельство

включить Доступ к связке ключей Вы можете видеть, что есть свидетельство с участием Мой сертификат Два, из которых свидетельство Содержит все сертификаты, установленные системой, Мой сертификат Он содержит только сертификаты с закрытыми ключами на компьютере.

screenshot.png

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

Эмулятор не требует подписи для запуска приложения. Отладка на реальном компьютере и загрузка пакета AppStore должны быть подписаны. Основная программа и все динамические библиотеки должны быть подписаны.

Разархивируйте ipa и обнаружите, что есть _CodeSignature/CodeResources File, это файл XML, откройте его, чтобы увидеть содержимое внутри.

Интересно то, что у динамических библиотек тоже будут свои _CodeSignature/CodeResources , Но содержание внутри очень простое, только Info.plist Да, результат подписи такой же, как и внешний.

Для подписи можно использовать любой действующий сертификат. Так что это ненадежно, правда? Когда Symbian была на Сайпане, было очень легко изменить бронирование и легко установить различные программы. Apple хочет быть более вдумчивой, например в отношении профиля Provisioning Profile, упомянутого ниже. Конечно, можно уволиться, не соблюдая правил, но это лишь немного увеличивает сложность.

Provisioning Profile

Разархивируйте файл ipa, вы можете найти его в каталоге Payload embedded.mobileprovision файл.

Provisioning Profile — это очень сложная штука, содержит много чего, вы можетеhttps://developer.apple.comЯ проводил собеседование, чтобы создать профиль обеспечения, чтобы увидеть, что нужно заполнить на каждом этапе. Профиль Provisioning Profile содержит всю информацию, относящуюся к тому, можно ли запустить приложение в обычном режиме, такую ​​как сертификат (открытый ключ), идентификатор приложения, права, список устройств и т. Д. Сертификат подписан на ipa и работает, когда он упакован; а профиль Provisioning Profile должен быть введен в ipa, и он работает при запуске 。

screenshot.png

screenshot.png

screenshot.png

Найдите несколько переподписанных статей для iOS:Поговорим об отставке iOS, Оказывается, перед повторной подписью скопируйте свой mobileprovision в указанный каталог ipa.

Чтобы упростить настройку, Xcode разработал командную концепцию. Покаhttps://developer.apple.comApple ID добавляется, и пользователь входит в Xcode. Если вы столкнулись с проблемой подписи, просто устраните ее напрямую. В этом процессе выполняется конфигурация, связанная с сертификатом и профилем обеспечения.

Пользователь может присоединиться к нескольким командам. Как отличить App ID, созданный этим пользователем в разных командах? Чтобы решить эту проблему, Apple разработала Team ID 。 Team ID Плюс Bundle ID Составить полный App ID 。

screenshot.png

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

screenshot.png

Отправить сертификат

Сервер push для отправки сообщений в точки доступа Apple требует аутентификации. Apple предоставляет следующие два метода аутентификации.

screenshot.png

screenshot.png

Потому что мы используемТолкающая платформа Agoo, Так что поставьте соответствующие сертификаты на платформу Agoo. Но у Agoo проблема в том, что каждый AppKey поддерживает только один сертификат, поэтому мы не можем com.aliyun.wstudio.amc.AliyunMobileApp с участием com.aliyun.wstudio.amc.AliyunMobileAppDevelop Установите push-сертификат отдельно.

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

Для получения более подробной информации, пожалуйста, обратитесь к:Local and Remote Notifications Overview。

Push-тест

Командная строка

Используйте Houston для передачи информации в приложение iOS, После получения сертификата и токена вы можете выполнять автоматические push-операции из командной строки.

Графические инструменты

Easy APNs Provider — очень хороший инструмент, который можно загрузить из Mac App Store. Просто используйте cer непосредственно для сертификата. Хьюстону необходимо преобразовать сертификат в формат pem.

Snip20161130_3.png

Конфигурация на колесе обозрения

Когда колесо обозрения упаковано, необходимо настроить сертификат и профиль обеспечения.

screenshot.png

У студентов колеса обозрения есть корпоративный аккаунт, поэтому они могут самостоятельно оформить корпоративные сертификаты. Потому что наша учетная запись уже зарегистрирована com.aliyun.wstudio.amc.AliyunMobileApp Это идентификатор приложения, поэтому тестовый пакет больше не может использовать этот идентификатор приложения. Чтобы решить эту проблему и удовлетворить потребности черного ящика, колесо обозрения автоматически установит идентификатор пакета на com.aliyun.wstudio.amc.AliyunMobileApp.xxx . Zhongyu поможет нам беззвучно сгенерировать соответствующий профиль обеспечения в Центре разработчиков и бросить его на колесо обозрения.

К счастью, теперь есть инструмент:fastlane, Вы можете использовать сценарий для создания сертификата. Колесо обозрения рассматривает возможность использования скоростной трассы для оптимизации упаковки. Если вы можете протестировать корпоративный пакет на колесе обозрения, вы также можете распечатать пакет выпуска и загрузить его в AppStore, он будет идеальным.

Особенности AppStore

После того, как приложение будет отправлено в Apple на рассмотрение, Apple повторно подпишет приложение. Вы можете видеть через codeign, что пакеты, набранные mtl, подписаны нашими собственными сертификатами, а пакеты, подписанные AppStore, подписаны Apple.

Как на iPhone установить любое приложение без App Store. Самый простой и быстрый способ

Favorite В закладки

Как на iPhone установить любое приложение без App Store. Самый простой и быстрый способ

Недоступность некоторых приложений и игр в российском магазине App Store вынуждает пользователей искать новые способы установки приложений.

Сейчас расскажем про самый простой метод, пусть и со своими преимуществами и недостатками.

Работать он будет на любом гаджете Apple с операционной системой iOS 13 и новее.

Предупреждение: всё описанное ниже вы делаете на свой страх и риск. Мы ответственности не несём. Способ не является официальным и может нести с собой неизвестные опасности и проблемы.

Что нужно сделать в iOS 16 перед установкой любого стороннего приложения

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

Для запуска потребуется включить Режим разработчика. Делается это следующим образом:

► Откройте Настройки – Конфиденциальность и безопасность.

► Найдите и активируйте опцию Режим разработчика.

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

Как загрузить сторонний установщик приложений Scarlet на iPhone

Разработчики данного проекта позволяют загрузить на iPhone специальный установщик и с его помощью добавлять любые игры и приложения на свой смартфон или планшет.

1. На iPhone или iPad перейдите на сайт сервиса в браузере Safari.

2. Нажмите кнопку Alpha Build (Signed).

3. Подтвердите установку приложения Scarlet в диалоговом окне.

На сайте встречается реклама, всплывающие баннеры и перенаправление на сторонние ресурсы. Если это произошло вместо появления окна установки, просто вернитесь на сайт и нажмите на кнопку снова. Иногда это нужно будет сделать 3-5 раз.

4. После загрузки программы перейдите в Настройки – Основные – VPN и управление устройством и подтвердите использование нового сертификата для приложения.

5. Теперь можете запустить приложение Scarlet с рабочего стола.

Как устанавливать приложения через Scarlet


Установка приложения из каталога Scarlet

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

◈ В первом случай откройте основную вкладку приложения Scarlet, найдите программу в каталоге и подтвердите установку на смартфон.


Установка загруженного приложения со смартфона

◈ Во втором случае нажмите среднюю кнопку в нижней панели и добавьте загруженный файл в формате *.ipa, который будет подписан и установлен после импорта в Scarlet.

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

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

Сколько будет работать данный способ

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

Данный сертификат используется всеми пользователями Scarlet, что может вызвать определенные подозрения у компании Apple. Такие сертификаты периодически отзываются или блокируются .

Для конечных пользователей ничего страшного не произойдет. Перестанут работать только установленные через Scarlet приложения и сам магазин. Потребуется загрузить его обновленную версию с новым корпоративным сертификатом и переустановить уже загруженные программы и игры.

Если сравнивать способ с менее удобным AltStore, то получите такие преимущества:

✅ Можно устанавливать неограниченное количество программ (в AltStore лимит в 3 приложения);

✅ Не придется вводить свой Apple ID и пароль для установки приложений;

✅ Вам не нужен компьютер со специальной утилитой для работы способа, все действия осуществляются прямо на iPhone;

✅ Не нужно переподписывать приложения каждую неделю.

Однако, и недостатки у этого способа имеются:

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

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

В любом случае на данный момент это самый простой и быстрый способ заполучить нужную программу, которую удалили из App Store.

Favorite В закладки

Читать:
Com avito android что это за площадка

Похожие статьи