我创建了一个iOS应用程序,并希望通过空中分发它。我遵循了这个指南:
http://help.apple.com/iosdeployment-apps/mac/1.1/?lang=en-us#app43ad77ea
应用程序使用企业证书进行签名,并包含分发配置文件。
当我尝试将应用程序下载到ipad上时(使用本指南中描述的技术),屏幕上会出现一个带有我的下载图标的方形图标,名称为“等待...”,然后一秒钟后出现名称更改我的实际应用程序名称,然后再一次我收到错误消息:
指南中的无法下载应用程序
此时无法下载“您的应用程序”。
有三个故障排除提示:
如果无线应用分发失败且“无法下载” 消息,请检查以下内容:
确保应用已正确签名。通过安装它来测试它 设备使用iPhone配置实用程序或Apple配置器,和 看看是否发生任何错误。
确保清单文件的链接正确并且清单 文件可供网络用户访问。
确保.ipa文件的URL(在清单文件中)是正确的 并且.ipa文件可供网络用户访问。
我检查了所有这三件事,他们没事。
还有什么可能导致我的下载问题?
答案 0 :(得分:33)
正如 alexey 所提到的,太多原因都可能导致该消息。 Apple将其用作“捕获所有错误”。
您可以通过 控制台 进行诊断。将设备连接到桌面,然后从 XCode的管理器(仅限mac)或 iPhone Configuration Utility (mac和windows)访问它。但...
控制台可能远远不够。有时候没有相关的消息。
然后,最后的手段是following a checklist。从零开始做一遍又一遍。有很多out there ...但是现在还有我的通用和非详细的 Over The Air发行清单。
进行分发构建 - 这是最复杂的部分,始终在网络上完成,Apple会一直更改步骤。通常,您需要证书,标识符和配置文件。列出设备几乎始终是必需的。我目前的选择是“分发 - >内部”。
P.S。:如果您确实要列出设备,请确保UDID正确无误。这里报告了许多问题。
在项目下设置个人资料 - >构建设置 - 自XCode 5以来,情况发生了变化。使用身份代替代码签名,您可以清除所有内容并将其设置为*代码签名 - > *配置文件。标识应自动更改为“自动”。也不再需要手动下载步骤1中的文件并进行安装。 XCode现在管理它。
存档 - 在Xcode 5中,不再需要“Build for Archive”。只需归档它。它应该显示在管理器的下一个,如果它是一个大项目,它将需要一些时间。这一步可能会出现很多错误,但它们几乎总是与代码编译有关,而不是与OTA有关。
部署 - 现在位于 Organizer中 - >存档,选择正确的存档(应该已被选为最新的存档),单击“分发”,然后单击保存企业或临时部署。现在可能要大了。保存文件时,可以选择“保存企业分发”。这是一个完全误导性的名字。它真正做的是创建 plist 文件。如果你已经有一个,那很好。您甚至可以手动编辑它,这通常更好。步骤(5)需要 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>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>http://example.com/app.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<false/>
<key>url</key>
<string>http://example.com/FullSizeImage.png</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<false/>
<key>url</key>
<string>http://example.com/Icon.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.example.app</string>
<key>kind</key>
<string>software</string>
<key>subtitle</key>
<string>for iOS</string>
<key>title</key>
<string>My App</string>
</dict>
</dict>
</array>
</dict>
</plist>
分发 - 如果要使用XCode或iPhone配置实用程序安装,请跳过此步骤。你完成了。这是在网站上放置文件。 “只需”添加带有 a href 链接的HTML页面,例如:
itms-services://?action=download-manifest&url=http://example.com/app.plist
不幸的是,处理Web服务器并不简单。同样check the server mime-type!如果您的服务器支持php,我已经制作了几个PHP文件来处理它们。只需按原样保存文件( plist , html 和 ipa ),链接到app.plist.php
相反:
<强> app.plist.php 强>
$file = fopen("app.plist", "r");
while(!feof($file)){
$line = fgets($file);
print str_replace(".ipa", ".ipa.php", $line);
}
fclose($file);
?>
<强> app.ipa.php 强>
<?php
header('Content-type: application/octet-stream');
$file = fopen("app.ipa", "r");
while(!feof($file)){
$line = fgets($file);
print $line;
}
fclose($file);
?>
验证 - 确保资产数组中列出的所有文件都可供下载。如果这些文件中的任何一个返回404或其他(包括图标),则整个安装将失败。您必须(A)使这些文件可用或(B)从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>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>http://example.com/app.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.example.app</string>
<key>kind</key>
<string>software</string>
<key>subtitle</key>
<string>for iOS</string>
<key>title</key>
<string>My App</string>
</dict>
</dict>
</array>
</dict>
</plist>
文件示例是核对清单中非常重要的部分。他们必须100%正确。
P.S。:我正在写这个答案,因为在我的情况下,这是 .plist 文件中错误链接的“简单”问题。而且,因此,诊断很难。好吧,只有这个清单才能找到错误!它指向“another-app.ipa”而不是“app.ipa”!
答案 1 :(得分:12)
有很多理由导致此消息。
诊断它的最佳方法是将设备连接到Mac ,并在管理器中查看设备的控制台。
就我而言,例如,它是:
verify_bundle_metadata:此应用程序未构建为支持此设备系列
答案 2 :(得分:7)
回答我自己的问题:
问题是其中一个缩略图没有在manifest.plist中设置正确的路径 - 所以不仅ipa需要正确的路径,而且临时下载图标,否则安装将失败,并提到错误消息。
答案 3 :(得分:6)
另一个问题可能是.plist AND .ipa都需要使用HTTPS托管,而不仅仅是常规HTTP托管。软件包字符串应如下所示:
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://example.com/app.ipa</string>
愚蠢的小疏忽,但它让我吵了一会儿。
答案 4 :(得分:3)
我们在尝试将iOS 5+应用安装到iOS4.3.5手机时遇到了同样的错误消息。 您是否还检查了部署/构建目标和目标架构以匹配显示该问题的设备?
答案 5 :(得分:1)
确保所有文件中的外壳匹配。它们往往不区分大小写。
答案 6 :(得分:1)
在我的情况下问题是在我的设备上安装了同一个应用程序的旧版本,其中包含相同的包标识符(从applstore下载),所以现在当我尝试通过企业发行版下载新版本时,它什么也没做,没有错误一点都不从设备中删除现有版本解决了我的问题。
答案 7 :(得分:1)
我在控制台找到了。
installcoordinationd(MobileInstallation)[99]: **** bundleID ****:5:11:1:1:正在更新PlaceholderMetadata **** bundleID ****失败1 _LSInstallType 1,underlyingError (错误域= MIInstallerErrorDomain代码= 13&#34;无法验证代码 签名 /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.IoCSM9/extracted/Payload/App.app :0xe8008016(可执行文件使用无效的权利签名。)&#34; 的UserInfo = {LibMISErrorNumber = -402620394, LegacyErrorString = ApplicationVerificationFailed,SourceFileLine = 147, FunctionName = + [MICodeSigningVerifier _validateSignatureAndCopyInfoForURL:withOptions:error:],NSLocalizedDescription =无法验证代码签名 /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.IoCSM9/extracted/Payload/App.app :0xe8008016(可执行文件使用无效的权利签名。)}), 来源17&gt;
我们应该看看:
无法验证App.app的代码签名
可执行文件使用无效的权利签名。
在我的情况下,这是因为我从亚马逊下载了企业版。但是,它所构建的配置文件已过期(在developer console中找到)。
另一个有另一个目的:
&#34;目前无法安装此应用。&#34; UserInfo = {NSLocalizedDescription =此应用无法安装在 这次。,NSUnderlyingError = 0x100cbd3c0 {错误 Domain = MIInstallerErrorDomain Code = 64&#34; Upgrade&#39; s application-identifier权利字符串(BBBUUUU.com.bundle.www) 与安装的应用程序的应用程序标识符字符串不匹配 (CCCEEEE.com.bundle.www);拒绝升级。&#34; 的UserInfo = {LegacyErrorString = MismatchedApplicationIdentifierEntitlement, FunctionName = - [MIInstallableBundle _validateApplicationIdentifierForNewBundleSigningInfo:error:],SourceFileLine = 878,NSLocalizedDescription = Upgrade&#39; s application-identifier权利字符串(BBBUUUU.com.bundle.www) 与安装的应用程序的应用程序标识符字符串不匹配 (CCCEEEE.com.bundle.www);拒绝
在这里,我刚删除了以前版本的应用。错误是,因为我更改了团队的捆绑ID,并且安装了具有先前捆绑ID的应用程序。
Xcode
&gt; Window
&gt; Devices
答案 8 :(得分:0)
尝试检查bundle identifier
和XCode
文件
.plist
答案 9 :(得分:0)
在我的情况下,我在提供ipa共享链接之后做了以下操作以摆脱“无法连接到dl.dropboxusercontent”消息。 1.从plist中删除了md5部分 2.将512 * 512和57 * 57图像上传到丢弃框,并在plist中的fill_size_image和display_image中提供共享链接。
答案 10 :(得分:0)
首先要检查的是,您安装的设备具有正在安装的应用程序的正确操作系统。例如,如果应用程序是针对iOS 11构建的,并且您的设备上安装了iOS 10,则应用程序将安装,但您将看到此错误&#34;无法下载应用程序&#34;。
答案 11 :(得分:0)
就我而言,FTP文件夹和其中的文件(清单,ipa,图像)的文件权限不正确存在问题。检查它们是否具有775(rwx),并且所有者/组是您的所有者。
设备控制台中的错误类似于“ 无法连接到iTunes Store ”或“ bundleID失败的图稿”或“ 无法为以下项加载占位符图稿” bundleID ”。但这只是文件。