iOS9: "Невозможно загрузить приложение"
Мы разрабатываем внутреннее iOS-приложение для нашей компании. Мы создаем локальную ссылку для распространения в форме
itms-services://?action=download-manifest&url=https://INTERNAL-PATH/manifest.plist
Долгое время он работал нормально, включая iOS8 и все бета-версии iOS9.
Однако теперь для каждого устройства, обновленного до официальной iOS9, при попытке установить по вышеуказанной ссылке мы получаем следующее диалоговое окно:
Я захватил журнал от нажатия "установить" до получения этой ошибки. это показано здесь. С самого начала есть подозрительное "ios8fix", которое мы не помещаем, и один из выходных данных об ошибке утверждает, что BundleValidator: Failed bundleIdentifier: MY_APP_ID.ios8fix не соответствует ожидаемому bundleIdentifier: MY_APP_ID
Обратите внимание, что "создание нового профиля обеспечения" не является хорошим решением, поскольку я пытаюсь распространить обновление по существующему приложению.
Я уже сжег дурацкий день (ок. Полный день), пытаясь решить эту проблему, и был бы признателен за любую подсказку здесь!
itunesstored[123] <W>: LoadExternalDownloadManifestOperation: Canceling failed manifest download for replace: MY_APP_ID.ios8fix
itunesstored[123] <W>: [Download]: Adding download(s): -4949958484440492382
itunesstored[123] <W>: LaunchServices: installing placeholder for <LSApplicationProxy: 0x148840860> MY_APP_ID.ios8fix <(null) *Not found in database*>
installd[47] <N>: 0x16e087000 -[MIClientConnection installPath:withOptions:completion:]: Install of "/var/mobile/Library/Caches/com.apple.itunesstored/AppPlaceholders/-4949958484440492382.app" type Placeholder requested by itunesstored (pid 123)
installd[47] <N>: 0x16e12f000 -[MIInstaller performInstallationWithError:]: Installing <MIInstallableBundle ID=MY_APP_ID.ios8fix; Version=8.38.5, ShortVersion=(null)>
installd[47] <N>: 0x16e12f000 -[MIContainer makeContainerLiveReplacingContainer:reason:withError:]: Made container live for MY_APP_ID.ios8fix at /private/var/mobile/Containers/Data/Application/A64E6947-B7E7-46A9-B517-4887AB890E97
installd[47] <N>: 0x16e12f000 -[MIContainer makeContainerLiveReplacingContainer:reason:withError:]: Made container live for MY_APP_ID.ios8fix at /private/var/mobile/Containers/Bundle/Application/A1ED6552-6C73-4DDE-8CE7-ED10F1BB0553
itunesstored[123] <W>: [Download]: Starting task: 4 with priority: 300 for download: -4949958484440492382 bundleIdentifier: MY_APP_ID.ios8fix in session: com.apple.itunesstored.default
installd[47] <N>: 0x16e12f000 -[MIInstaller performInstallationWithError:]: Install Successful; Staging: 0.00s; Waiting: 0.00s; Preflight/Patch: 0.00s, Verifying: 0.00s; Overall: 0.12s
itunesstored[123] <W>: LaunchServices: Creating installProgressForApplication:<LSApplicationProxy: 0x148ac35f0> MY_APP_ID.ios8fix (Placeholder) <file:///private/var/mobile/Containers/Bundle/Application/A1ED6552-6C73-4DDE-8CE7-ED10F1BB0553/-4949958484440492382.app> withPhase:3
itunesstored[123] <W>: LaunchServices: installPhaseFinishedForProgress: MY_APP_ID.ios8fix.InstallingPlaceholder - <NSProgress: 0x148a7a8c0> : Parent: 0x0 / Fraction completed: 0.0000 / Completed: 0 of 100 called, removing progress from cache
lsd[175] <W>: LaunchServices: Updating installPhase for parent <NSProgress: 0x127d3a430> : Parent: 0x0 / Fraction completed: 0.6000 / Completed: 60 of 100 to 3
ondemandd[192] <E>: Application with ID: MY_APP_ID.ios8fix was installed, but it doesn't appear to have a bundle URL, we are taking no action on this.
itunesstored[123] <W>: LaunchServices: updating placeholder for <LSApplicationProxy: 0x146eb9100> MY_APP_ID.ios8fix (Placeholder) <file:///private/var/mobile/Containers/Bundle/Application/A1ED6552-6C73-4DDE-8CE7-ED10F1BB0553/-4949958484440492382.app> with icons
installd[47] <N>: 0x16e12f000 -[MIClientConnection installPath:withOptions:completion:]: Install of "/var/mobile/Library/Caches/com.apple.itunesstored/AppPlaceholders/-4949958484440492382.app" type Placeholder requested by itunesstored (pid 123)
installd[47] <N>: 0x16e2d3000 -[MIInstaller performInstallationWithError:]: Installing <MIInstallableBundle ID=MY_APP_ID.ios8fix; Version=8.38.5, ShortVersion=(null)>
installd[47] <N>: 0x16e2d3000 -[MIInstallableBundle _refreshUUIDForContainer:withError:]: Data container for MY_APP_ID.ios8fix is now at /private/var/mobile/Containers/Data/Application/20871483-6F78-424D-8ED1-BA18BD2959BA
installd[47] <N>: 0x16e2d3000 -[MIContainer makeContainerLiveReplacingContainer:reason:withError:]: Made container live for MY_APP_ID.ios8fix at /private/var/mobile/Containers/Bundle/Application/D1ABD072-5949-452A-A20E-50F5C10310AA
installd[47] <N>: 0x16e2d3000 -[MIInstaller performInstallationWithError:]: Install Successful; Staging: 0.00s; Waiting: 0.00s; Preflight/Patch: 0.00s, Verifying: 0.00s; Overall: 0.06s
ondemandd[192] <E>: Application with ID: MY_APP_ID.ios8fix was installed, but it doesn't appear to have a bundle URL, we are taking no action on this.
SpringBoard[54] <W>: FBApplicationPlaceholder We received a nil BSCFBundle back, which means _CFBundleCreateUnique. Here's what -[NSFileManager attributesOfItemAtPath:error:] is giving us: (null)
here's the error we got back (if any): Error Domain=NSCocoaErrorDomain Code=260 "The file “-4949958484440492382.app” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/private/var/mobile/Containers/Bundle/Application/A1ED6552-6C73-4DDE-8CE7-ED10F1BB0553/-4949958484440492382.app, NSUnderlyingError=0x12a552020 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
SpringBoard[54] <W>: -[FBBundleInfo _initWithBundleURL:] ERROR: Unable to create bundle at path: /private/var/mobile/Containers/Bundle/Application/A1ED6552-6C73-4DDE-8CE7-ED10F1BB0553/-4949958484440492382.app
ondemandd[192] <E>: An object with ID [0x12de8a220 <x-coredata:///AssetDownloads/tAC876614-AA9B-432E-9691-02EE36693D1013>] has already registered.
itunesstored[123] <W>: LaunchServices: Creating installProgressForApplication:<LSApplicationProxy: 0x148a553a0> MY_APP_ID.ios8fix (Placeholder) <file:///private/var/mobile/Containers/Bundle/Application/D1ABD072-5949-452A-A20E-50F5C10310AA/-4949958484440492382.app> withPhase:0
lsd[175] <W>: LaunchServices: Updating installPhase for parent <NSProgress: 0x127d3a430> : Parent: 0x0 / Fraction completed: 0.6000 / Completed: 60 of 100 to 0
<-- 19 seconds gap -->
itunesstored[123] <W>: [Download]: Download task did finish: 4 for download: -4949958484440492382
itunesstored[123] <W>: [ApplicationWorkspace] Installing download: -4949958484440492382 with step(s): Install
itunesstored[123] <W>: [ApplicationWorkspace]: Installing software package with bundleID: MY_APP_ID.ios8fix: bundleVersion: 8.38.5 path: /var/mobile/Media/Downloads/-4949958484440492382/-5671360055536325805
itunesstored[123] <W>: BundleValidator: Failed bundleIdentifier: MY_APP_ID.ios8fix does not match expected bundleIdentifier: MY_APP_ID
itunesstored[123] <W>: [ApplicationWorkspace]: Bundle validated for bundleIdentifier: MY_APP_ID.ios8fix success: 0
itunesstored[123] <W>: LaunchServices: Uninstalling placeholder for app <LSApplicationProxy: 0x14884ffc0> MY_APP_ID.ios8fix (Placeholder) <file:///private/var/mobile/Containers/Bundle/Application/D1ABD072-5949-452A-A20E-50F5C10310AA/-4949958484440492382.app>
itunesstored[123] <W>: LaunchServices: Uninstalling app <LSApplicationProxy: 0x14884ffc0> MY_APP_ID.ios8fix (Placeholder) <file:///private/var/mobile/Containers/Bundle/Application/D1ABD072-5949-452A-A20E-50F5C10310AA/-4949958484440492382.app>
installd[47] <N>: 0x16e087000 -[MIClientConnection uninstallIdentifiers:withOptions:completion:]: Uninstall requested by itunesstored (pid 123) with options: {
}
installd[47] <N>: 0x16e087000 -[MIUninstaller _uninstallBundleWithIdentifier:error:]: Uninstalling identifier MY_APP_ID.ios8fix
installd[47] <N>: 0x16e087000 -[MIUninstallNotifier performRemovalWithCompletionBlock:]: Destroying container with identifier MY_APP_ID.ios8fix at /private/var/mobile/Containers/Bundle/Application/D1ABD072-5949-452A-A20E-50F5C10310AA
installd[47] <N>: 0x16e087000 -[MIUninstallNotifier performRemovalWithCompletionBlock:]: Destroying container with identifier MY_APP_ID.ios8fix at /private/var/mobile/Containers/Data/Application/20871483-6F78-424D-8ED1-BA18BD2959BA
itunesstored[123] <W>: LaunchServies: No app bundle to remove for MY_APP_ID.ios8fix
lsd[175] <W>: LaunchServices: Updating identifier store
itunesstored[123] <W>: LaunchServices: clearing created progress for MY_APP_ID.ios8fix
itunesstored[123] <W>: [ApplicationWorkspace]: Uninstalling application placeholder for bundleIdentifier: MY_APP_ID.ios8fix; success: 1
itunesstored[123] <W>: [ApplicationWorkspace]: Failed to install application: MY_APP_ID.ios8fix; /var/mobile/Media/Downloads/-4949958484440492382/-5671360055536325805; Error Domain=SSErrorDomain Code=143 "(null)"
itunesstored[123] <W>: [ApplicationWorkspace] Install complete for download: -4949958484440492382 result: Failed
itunesstored[123] <W>: [Download]: Fail download: -4949958484440492382 after error: Error Domain=SSErrorDomain Code=143 "(null)"
7 ответов
MY_APP_ID.ios8fix
Ваш идентификатор пакета должен быть правильным сейчас.
Это было сделано для исправления старой проблемы в 8.2. В моих приложениях также были некоторые из этих расширений ios8fix, которые сломали OTA для 9.0 GM. Да, это работало через все бета-версии.
Так что проверьте ваш manifest.plist, чтобы убедиться, что он действительно соответствует вашему действительному идентификатору приложения... исправьте эту запись в plist.
Кстати, вы можете легко обновить этот список с помощью любого текстового редактора.
мои точки входа в itms к списку я тоже работаю в моей компании, вот весь старый список
<?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>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>http://removed.cachefly.net/noname.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>dupuy.robert.APPNAME.ios82fix</string>
<key>bundle-version</key>
<string>1.0.7</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>Appname 1.0.7</string>
</dict>
</dict>
</array>
</dict>
</plist>
Видите идентификатор пакета? dupuy.robert.APPNAME.ios82fix является поддельным! Это было добавлено для исправления более ранней проблемы с яблоком.
Но с GM 9.0 - этот идентификатор пакета должен быть строго правильным.
Так что либо исправьте свой список, либо укажите новый правильный список. Эти списки просто файлы... должно быть легко исправить! В моем случае "dupuy.robert.APPNAME.ios82fix" был просто изменен на "dupuy.robert.APPNAME" и список был восстановлен. Хотя если ваш веб-сервер кеширует списки, это еще одна головная боль, если он продолжает обслуживать старый, если вы можете переименовать файл, тем лучше.
Кажется, это ошибка в iOS9, где она кэширует все предыдущие ошибки OTA.
Я снова установил мои установки, используя комбинацию удаления приложения на устройстве, изменения manifest.plist
и затем перезагрузите устройство. Это, казалось, очистило кеш, и приложение было установлено.
Проверьте ваш manifest.plist.
Я встретил ту же проблему и исправил ее в трехдневной борьбе. Для устройств iOS8 вы должны использовать старый plist. Для iOS9 вы должны использовать новый (Xcode7 made) plist. Это стандарт. Файл ipa такой же (сборка архива Xcode7).
Новый plist требует двух установочных образов. 57x57.jpg и 512x512.jpg. Вы должны организовать их тоже. Идентификатор пакета должен быть правильным (такой же, как Xcode7 > TARGETS > General > Идентификатор пакета).
Я протестировал 4 устройства.
iPad Air (iOS9.0.1) -> ОК (по списку iOS9)
iPad 3 (iOS8.4.1) -> ОК (по списку iOS8)
iPad 2 (iOS9.0) -> ОК (по списку iOS9)
iPad mini (iOS9.0) -> ОК (по списку iOS8)
Процесс установки OTA делает ваше устройство запутанным. В этой ситуации перезагрузка полезна. Надеюсь, поможет.
Та же проблема, с перезагрузкой устройства была решена.
Шаги:
Удалить старое приложение
Перезагрузите устройство
Установите новое приложение
Ранее я изменил имя ipa и идентификатор пакета, чтобы загрузить его в ios 8.2. Сейчас в ios 9 просто используется оригинальное имя ipa и имя предыдущего пакета идентификатора. Оно работает.
У меня была та же проблема, но в моем случае имя приложения содержало пробел, и, удалив пробел, все было хорошо.
Моя проблема была исправлена после добавления новых свойств изображения display-image и full-size-image в файл.plist:
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>linktoyouripa</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>url</key>
<string>someimage.png</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>url</key>
<string>someimage.png</string>
</dict>