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)访问设备。 但…

这不是那么简单! 🙁

控制台可能远远不够。 有时候那里没有相关的信息

然后,最后的手段是跟随一个清单 。 再次从零做起。 在那里有很多…但是下面是我的通用和非详细的空中发行清单,目前。



  1. 有一个发行版本 – 这是最复杂的部分,总是在网上完成,苹果公司总是改变步骤。 一般来说,您需要证书标识符configuration文件 。 清单设备几乎总是需要的。 我目前的select是“ 分配 – >内部 ”。

    苹果开发者 - >成员中心 - >证书,标识符和配置文件 - >配置文件 - >添加(+)

    PS:如果你想列出设备,确保UDID是正确的。 这里报告了很多问题。

  2. 在Project – > Build Settings下面设置configuration文件 – 由于XCode 5,事情发生了变化。 您可以清除所有的代码,并将其设置在*代码签名 – > *configuration文件中 。 身份应自动更改为“ 自动 ”。 也不再需要手动从第1步下载文件并安装它们。 XCode现在pipe理。

    XCode 5  - > Project Navigator  - > Project  - > Build Settings

  3. 存档 – 在Xcode 5中,不再需要“为存档构build”。 只是将其归档。 它应该显示在组织者旁边,如果这是一个大项目,这将需要一些时间。 这一步可能会出现很多错误,但是它们几乎总是与代码编译相关,而不是OTA。

  4. 部署 – 现在在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> 
  5. 分发 – 如果要使用XCode或iPhoneconfiguration实用程序安装,请跳过此步骤。 你完成了。 这是在网站上的文件 。 “简单地”添加一个带有href链接的HTML页面,例如:

      itms-services://?action=download-manifest&url=http://example.com/app.plist 

    不幸的是,处理Web服务器绝非易事。 所以也检查服务器MIMEtypes ! 如果你的服务器支持php,我已经做了几个PHP文件来处理它们。 只要保持你的文件( plisthtmlipa ),并链接到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); ?> 
  6. 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中提供共享链接。