Развертывание корпоративного приложения не устанавливается на iOS 8.1.3
После обновления iOS 8.1.3 я попытался загрузить, но при этом появляется сообщение об ошибке " Невозможно загрузить приложение" и " не было установлено в это время".
Каковы изменения между 8.1.2 и 8.1.3, которые я должен учитывать?
Режим загрузки:
< href= "ITMS-услуга://действие = скачать-манифест & URL = https://****.plist" >
Спасибо!
Ответы
Ответ 1
Спустя несколько часов, сражаясь со страйками, вот как я это сделал:
ПРИМЕЧАНИЕ. Я не тестировал это в настоящее время в отношении 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, ваш файл прав является правами .plist и ваш профиль обеспечения ProvProvile.mobileprovision, все файлы находятся в папке "Рабочий стол" (Mac OSX), а S836XXACME - это ваш идентификатор вашей команды):
Создайте новый файл 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>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>
Ответ 2
После исследования..
Изменить:. После дальнейшего тестирования я обнаружил, что просто сопоставление идентификатора пакета в Info.plist
и идентификатора пакета в manifest.plist
работало для установки приложений по радио на iOS 8.1 0,3. Если это решение не работает, попробуйте решение ниже.
Исходное решение
Исправить проблему:
Ваше приложение должно иметь действительный entitlements.plist
, который включает в себя исправление действительного идентификатора пакета для приложения.
Если вы распространяете приложение, подписанное с сертификатом разработки iOS, вот пример права. 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 для правильного увольнения приложений и включения требуемого теперь права .plist.
Объяснение проблемы
Из-за патчей безопасности (см. здесь под CVE-2014-4493), без права .plist, приложение не будет установлено. Патч безопасности позволяет приложениям переопределять существующие приложения и устанавливать их поверх них/заменять.
Ответ 3
Я провел немало экспериментов с этим. По моему опыту идентификатор пакета в файле manifest.plist на самом деле не критичен. Самое главное, чтобы сделать правку .plist правильной.
Вместо того, чтобы создавать это вручную, я бы рекомендовал создать его из профиля подготовки, используя следующий script (кредит):
# 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 в утилите codesign.
Ответ 4
У меня такая же проблема, и это происходит для приложений, которые не имеют никаких прав.
Повторное подписание приложения с правами разрешило проблему для меня, но это будет больно, поскольку все приложения, которые уже развернуты, должны быть повторно подписаны и развернуты.
Это странная проблема, потому что эти приложения, которые не сработали для меня, не используют ничего подобного совместному использованию ключей или push-уведомлений и, следовательно, не требуют права вообще (согласно моему пониманию). Теперь, когда я просто добавляю право на совместное использование ключей, он начинает работать.
Ответ 5
Я ответил на это здесь, это сработало для меня, не делая ничего другого
Ответ 6
В дополнение к ответам @Mark и @RaStudio, я видел еще две причины для сообщения "Невозможно загрузить приложение"; один из которых является новым для iOS 8.1.3.
Новая причина сбоя на iOS 8.1.3
Эта ошибка возникает при попытке установить приложение с истекшим профилем подготовки. При подписании приложения как сертификат, так и профиль подготовки должны быть действительными и не истекли. Кажется, что приложение с устаревшим профилем подготовки и сертификатом без истечения срока действия может быть установлено на iOS 8.1.2 в некоторых случаях. Убедитесь, что профилирующий профиль не истек, перейдя в Центр разработчиков Apple.
Старая причина сбоя
Эта ошибка возникает при попытке загрузить приложение, подписанное с сертификатом разработки и профилем подготовки, если устройство не было добавлено в профиль разработки для Apple центр разработчиков.
![Ensure device is added to provisioning profile]()
Ответ 7
Я рассмотрел эту проблему.
- Поскольку Apple изменила профили настройки, пожалуйста, обновите профили подготовки (файл 1) и скопируйте их в "Полезная нагрузка /".
- Убедитесь, что в разделе "Полезная нагрузка /" указан файл Entitlements.plist(Файл 2), и этот файл plist ДОЛЖЕН быть ТЕЛЕФОНОМ PLAIN, который создается текстовым редактором.
- Убедитесь, что в "Полезной нагрузке /" создан Info.plist(файл 3), и это создается XCode;
- Скопируйте файл Entitlements.plist(файл 4) в любом месте, кроме "Payload/".
- Убедитесь, что идентификатор Bundle в файле 1-4 должен быть тем же.
- Используйте этот файл 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
Пример с правами доступа.
<?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/
Ответ 8
ios 8.1.3: приложение для работы в сети должно распространяться с помощью MDM.
MobileInstallation
Воздействие. Вредоносное приложение, подписанное корпорацией, может управлять локальным контейнером для приложений, уже находящихся на устройстве.
Описание. Уязвимость существует в процессе установки приложения. Это было устранено, если корпоративные приложения не переопределили существующие приложения в определенных сценариях.
из заметки о выпуске Apple