iOS Enterprise OTA分发无法下载应用程序
我创build了一个iOS应用程序,并希望将其分发到空中。 我遵循这个指南:
http://help.apple.com/iosdeployment-apps/mac/1.1/?lang=en-us#app43ad77ea
该应用程序使用企业证书进行签名,并包含分发configuration文件。
当我尝试下载应用程序到iPad(使用本指南中描述的技术)时,带有我的下载图标的正方形图标出现在屏幕上,名称为“正在等待…”,然后一秒钟后名称变为我的实际应用程序的名称,然后再次一秒后我收到错误信息:
无法下载应用程序
“您的应用程序”目前无法下载。
在本指南中,有三个故障排除提示:
如果无线应用程序分发失败并显示“无法下载”消息,请检查以下内容:
确保应用程序签署正确。 使用iPhoneconfiguration实用程序或Apple Configurator将其安装到设备上进行testing,然后查看是否发生错误。
确保清单文件的链接是正确的,清单文件可供networking用户访问。
确保.ipa文件(在清单文件中)的URL正确,Web用户可以访问该.ipa文件。
我检查了所有三件事,他们都很好。
还有什么可能导致我的下载问题?
正如alexey提到的,太多的原因可能会导致这个信息。 苹果使用它作为“捕获所有错误”。
您可以通过控制台进行诊断。 将设备连接到桌面,并通过XCode Organizer (仅限Mac)或iPhone Configuration Utility (Mac和Windows)访问设备。 但…
这不是那么简单! 🙁
控制台可能远远不够。 有时候那里没有相关的信息 。
然后,最后的手段是跟随一个清单 。 再次从零做起。 在那里有很多…但是下面是我的通用和非详细的空中发行清单,目前。
-
有一个发行版本 – 这是最复杂的部分,总是在网上完成,苹果公司总是改变步骤。 一般来说,您需要证书 , 标识符和configuration文件 。 清单设备几乎总是需要的。 我目前的select是“ 分配 – >内部 ”。
PS:如果你想列出设备,确保UDID是正确的。 这里报告了很多问题。
-
在Project – > Build Settings下面设置configuration文件 – 由于XCode 5,事情发生了变化。 您可以清除所有的代码,并将其设置在*代码签名 – > *configuration文件中 。 身份应自动更改为“ 自动 ”。 也不再需要手动从第1步下载文件并安装它们。 XCode现在pipe理。
-
存档 – 在Xcode 5中,不再需要“为存档构build”。 只是将其归档。 它应该显示在组织者旁边,如果这是一个大项目,这将需要一些时间。 这一步可能会出现很多错误,但是它们几乎总是与代码编译相关,而不是OTA。
-
部署 – 现在在pipe理器 – >存档中 ,select正确的存档(应该已经select为最近的存档)点击“ 分配 ”,然后单击保存以进行企业或即席部署 。 现在可能会很大。 保存文件时,可以select“ 保存为企业分配 ”。 这是一个完全误导的名字。 它真正做的是创buildplist文件。 如果你已经有了,那很好。 你甚至可以手动编辑它,这通常更好。 步骤(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或iPhoneconfiguration实用程序安装,请跳过此步骤。 你完成了。 这是在网站上的文件 。 “简单地”添加一个带有href链接的HTML页面,例如:
itms-services://?action=download-manifest&url=http://example.com/app.plist
不幸的是,处理Web服务器绝非易事。 所以也检查服务器MIMEtypes ! 如果你的服务器支持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); ?>
-
validation – 确保assets数组中列出的所有文件都可以下载。 如果这些文件中的任何一个返回404或这样(包括图标),则整个安装将失败。 您必须(A)使这些文件可用或(B)从plist中删除这些缺less的条目。 下载工作不需要图标条目。
这是一个没有图标的示例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%正确。
仔细检查plist和html文件!
PS:我正在写这个答案,因为在我的情况下,这是.plist文件中错误链接的“简单”问题。 而且,因此,诊断很难。 那么,只有做这个清单,我可以find错误! 它指向“另一个app.ipa”而不是“app.ipa”!
这个消息有很多原因。
诊断它的最佳方法是将设备连接到Mac,并在Organizer中查看设备的Console 。
就我而言,例如,它是:
verify_bundle_metadata:这个应用程序不是为了支持这个设备系列而构build的
回答我自己的问题:
问题是其中一个缩略图没有在manifest.plist中设置正确的path – 所以不仅ipa需要正确的path,而且临时下载图标,否则安装将失败,并提供错误消息。
另一个问题是,.plist 和 .ipa需要使用HTTPS托pipe,而不是普通的HTTP。 软件包string应如下所示:
<key>kind</key> <string>software-package</string> <key>url</key> <string>https://example.com/app.ipa</string>
愚蠢的小监督,但它绊了我一会儿。
尝试将iOS 5+应用安装到iOS4.3.5手机时,我们确实遇到了相同的错误消息。 你是否还检查部署/构build目标和目标体系结构以匹配显示该问题的设备?
确保所有文件的shell都匹配。 他们倾向于不区分大小写。
尝试检查XCode
和.plist
文件中的bundle identifier
在我的情况下,问题是在我的设备上,同一个应用程序的旧版本安装了相同的包标识符(从applstore下载),所以现在当我试图通过企业分布下载其新版本时,它什么也不做,没有任何错误。 从设备上删除现有的版本解决了我的问题。
在我的情况下,我做了以下摆脱“不能连接到dl.dropboxusercontent”消息后提供Ipa共享链接。 1.从plist中删除md5部分2.上传512 * 512和57 * 57图像到下拉框中,并在plist中的fill_size_image和display_image中提供共享链接。