Развертывание корпоративного приложения не устанавливается на iOS 8.1.3

После обновления iOS 8.1.3 я попытался загрузить, но появляется сообщение об ошибке " Не удается загрузить приложение " и " Не удается установить в это время ".

Какие изменения между 8.1.2 и 8.1.3 я должен принять во внимание?

Режим загрузки:

Спасибо!

8 ответов

После нескольких часов работы со скобками, вот как я это сделал:

ПРИМЕЧАНИЕ. В настоящее время я не проверял это на iOS 8.1.2 или ниже (действуйте с осторожностью!)

Для приложений, которые УЖЕ были подписаны с вашим СОБСТВЕННЫМ корпоративным сертификатом, все, что вам нужно сделать (как упомянуто RAStudios в его редактировании), это отредактировать manifest.plist:

До:

<key>bundle-identifier</key>
<string>uk.co.acme.AcmeApp</string>

После:

<key>bundle-identifier</key>
<string>S836XXACME.uk.co.acme.AcmeApp</string>

Для приложений, которые были подписаны третьей стороной, которую вы подписываете с помощью корпоративного сертификата (в этом пошаговом руководстве предполагается, что файл ipa - это AcmeApp.ipa, ваш файл разрешений - authorlements.plist, а ваш профиль обеспечения - provProvile.mobileprovision; все файлы; находятся в папке Desktop (Mac OSX), а S836XXACME - это идентификатор вашей команды):

Создайте новый файл authorlements.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>S836XXACME.uk.co.acme.AcmeApp</string>
<key>get-task-allow</key>
<false/>
</dict>
</plist>

Разархивируйте ipa:

cd ~/Desktop

unzip AcmeApp.ipa 

Удалить подпись кода:

rm -r Payload/AcmeApp.app/_CodeSignature/ 

Скопируйте в файл mobileprovision:

cp provProfile.mobileprovision Payload/AcmeApp.app/embedded.mobileprovision 

CodeSign:

codesign -f -s "iPhone Distribution: ACME Corporation Limited" --entitlements entitlements.plist Payload/AcmeApp.app

Застегните его как ушедший в отставку ipa:

zip -qr AcmeApp_resigned.ipa Payload/

Вам также необходимо изменить файл manifest.plist в соответствии с ранее подписанной частью "УЖЕ":

<key>bundle-identifier</key>
<string>S836XXACME.uk.co.acme.AcmeApp</string>

После расследования..

Изменить: После дальнейшего тестирования я обнаружил, что просто совпадает с идентификатором пакета в Info.plist и идентификатор пакета в manifest.plist работал над установкой приложений по беспроводной сети на iOS 8.1.3. Если это решение не работает, попробуйте решение ниже.


Оригинальное решение

Исправить проблему:

Ваша заявка должна иметь действительный entitlements.plist, который включает в себя правильный действительный идентификатор пакета приложения.

Если вы распространяете приложение, подписанное с помощью сертификата разработки для iOS, то вот пример списка liclements.plist, который вы должны включить в свое приложение.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>com.yourbundleidhere.mycoolapp</string>
    <key>com.apple.developer.team-identifier</key>
    <string>com.yourbundleidhere.mycoolapp</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>com.yourbundleidhere.mycoolapp</string>
    </array>
</dict>
</plist>

Если вы используете подстановочный профиль, замените com.yourbundleidhere.mycoolapp с yourwildcardappid.*, В обоих случаях вы можете использовать iResign для правильной отставки приложений и включить требуемый теперь файл rightlements.plist.

Объяснение проблемы

Из-за исправлений безопасности (см. Здесь, под CVE-2014-4493), без файла rightlements.plist приложение не будет установлено. Это исправление безопасности не позволяет приложениям переопределять существующие приложения и устанавливать поверх них / заменять их.

Я провел немало экспериментов с этим. По моему опыту идентификатор пакета в файле manifest.plist на самом деле не так критичен. Самая важная вещь, которую нужно сделать, - это правильно настроить файл rightlements.plist.

Вместо того, чтобы создавать это вручную, я бы порекомендовал сгенерировать его из профиля обеспечения с помощью следующего скрипта ( кредит):

# Create an entitlements file
# parse provision profile
security cms -D -i "provProfile.mobileprovision" > ProvisionProfile.plist 2>&1

# generate entitilements.plist
/usr/libexec/PlistBuddy -x -c "Print Entitlements" ProvisionProfile.plist > Entitlements.plist 2>&1

Затем вы можете использовать этот файл разрешений с параметром --entitlements в утилите codeign.

Я справился с этой проблемой.

  1. Поскольку Apple изменила профили предоставления, ЗАМЕНИТЕ профили предоставления (Файл 1) и скопируйте его в "Полезные данные /".
  2. Убедитесь, что в "Payload/" есть Entitlements.plist (файл 2), и этот plist-файл ДОЛЖЕН быть PLAIN TEXT, который создается текстовым редактором.
  3. Убедитесь, что в "Payload/" есть Info.plist (файл 3), и он создан XCode;
  4. Скопируйте Entitlements.plist (файл 4) в любое другое место, кроме "Payload/".
  5. Убедитесь, что "Идентификатор пакета" в файле 1-4 должен быть одинаковым.
  6. Используйте этот Entitlements.plist (файл 4) для повторной подписи файла IPA.

Вы можете оставить это так

codesign -fs "iPhone Distribution: Your Company Name" --entitlements=/Users/SenTR/Downloads/codesign/Entitlements.plist /Users/SenTR/Downloads/codesign/Payload/Your_Project_name.app

Пример Entitlements.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>application-identifier</key>
        <string>PREFIX.yourappBundleID</string>
        <key>aps-environment</key>
        <string>production</string>
        <key>get-task-allow</key>
        <false/>
        <key>keychain-access-groups</key>
        <array>
            <string>PREFIX.yourappBundleID</string>
        </array>
    </dict>
</plist>

Если вы знаете китайский язык, это будет полезно.

http://hennry.com/2015/03/fail-to-resign-ipa-since-ios8/

В дополнение к ответам @Mark и @RaStudio я видел еще две причины появления сообщения "Невозможно загрузить приложение"; один из которых является новым для iOS 8.1.3.

Новая причина сбоя на iOS 8.1.3

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

Старая причина отказа

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

Убедитесь, что устройство добавлено в профиль обеспечения

У меня та же проблема, и это происходит для приложений, которые не имеют никаких прав.

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

Это странная проблема, потому что эти приложения, которые потерпели неудачу для меня, не используют ничего вроде обмена цепочками ключей или push-уведомлений и, следовательно, вообще не нуждаются в правах (согласно моему пониманию). Теперь, когда я просто добавляю права с разделением ключей, оно начинает работать.

Я ответил на это здесь, это сработало для меня без необходимости делать что-либо еще

iOS 8.1.3: внутреннее приложение нужно распространять вместе с MDM.

MobileInstallation

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

Описание. В процессе установки приложения существовала уязвимость. Это было решено путем предотвращения переопределения корпоративных приложений существующими приложениями в определенных сценариях.

из примечания к выпуску Apple

Другие вопросы по тегам