iOS企业OTA发行版无法下载应用程序

use*_*931 31 enterprise over-the-air ios

我创建了一个iOS应用程序,并希望通过空中分发它.我按照这个指南:

http://help.apple.com/iosdeployment-apps/mac/1.1/?lang=en-us#app43ad77ea

该应用程序使用企业证书进行签名,并包含分发配置文件.

当我尝试将应用程序下载到ipad上时(使用本指南中描述的技术),屏幕上会出现一个带有我的下载图标的方形图标,名称为"等待...",然后一秒后名称变为我的实际的应用程序名称然后再一次我收到错误消息:

无法下载应用程序

目前无法下载"您的应用程序".

在指南中,有三个疑难解答提示:

如果无线应用程序分发因"无法下载"消息而失败,请检查以下内容:

确保应用程序已正确签名.通过使用iPhone配置实用程序或Apple Configurator将其安装在设备上进行测试,并查看是否发生任何错误.

确保清单文件的链接正确,并且Web用户可以访问清单文件.

确保.ipa文件的URL(在清单文件中)正确,并且Web用户可以访问.ipa文件.

我检查了所有三件事,他们没事.

还有什么可能导致我的下载问题?

cre*_*gox 33

正如alexey所提到的,太多原因可能会导致这种信息.Apple将其用作"捕获所有错误".

您可以通过控制台进行诊断.将设备连接到桌面,然后从XCode的管理器(仅限mac)或iPhone配置实用程序(mac和windows)访问它.但...

它就不是那么简单!:-(

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

然后,最后的手段是遵循清单.从零开始做一遍又一遍.有很多 ......但以下有我的泛型和非详细清单通过无线方式分布,此刻.



  1. 有一个分发版本 - 这是最复杂的部分,总是在网上完成,Apple会一直改变这些步骤.通常,您需要证书,标识符配置文件.几乎总是需要列出设备.我目前的选择是" 分布 - >内部 ".

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

    PS:如果您确实要列出设备,请确保UDID正确无误.这里报道了许多问题.

  2. 在项目 - >构建设置 - 自XCode 5以来设置配置文件,事情发生了变化.取而代之的代码签名身份可以清除所有并设置它在*代码签名- > *供应配置文件.身份应自动更改为" 自动 ".也不再需要手动下载步骤1中的文件并进行安装.XCode现在管理它.

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

  3. 存档 - 在Xcode 5中,不再需要"Build for Archive".只需归档它.它应该在Organizer上显示,如果它是一个大项目,它将需要一些时间.这一步可能会出现许多错误,但它们几乎总是与代码编译有关,而不是与OTA有关.

  4. 部署 - 现在在管理器 - >存档中,选择正确的存档(应该已经选择为最新的存档),单击" 分发 ",然后单击"存储为企业"或"特别部署".现在可能要大了.保存文件时,可以选择" 保存企业分发 ".这是一个完全误导性的名字.它真正做的是创建plist文件.如果你已经有一个,那很好.您甚至可以手动编辑它,这通常更好.的plist中需要为步骤(5).这是一个很好的:

    <?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>
    
    Run Code Online (Sandbox Code Playgroud)
  5. 分发 - 如果要使用XCode或iPhone配置实用程序进行安装,请跳过此步骤.你完成了.这是在网站上放置文件."简单地"添加带有href链接的HTML页面,例如:

     itms-services://?action=download-manifest&url=http://example.com/app.plist
    
    Run Code Online (Sandbox Code Playgroud)

    不幸的是,处理Web服务器并不简单.所以还检查服务器mime-type!如果您的服务器支持php,我已经制作了几个PHP文件来处理它们.只需保存您的文件(plist,htmlipa)并链接到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);
    ?>
    
    Run Code Online (Sandbox Code Playgroud)

    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);
    ?>
    
    Run Code Online (Sandbox Code Playgroud)
  6. 验证 - 确保可以下载资产数组中列出的所有文件.如果这些文件中的任何一个返回404或其他(包括图标),则整个安装将失败.您必须(A)使这些文件可用或(B)从plist中删除那些丢失的条目.下载工作不需要图标条目.

    这是一个没有图标的示例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>
    
    Run Code Online (Sandbox Code Playgroud)

文件示例是清单中非常重要的部分.他们必须100%正确.

仔细检查plist和html文件!

PS:我正在写这个答案,因为在我的情况下,它是.plist文件中错误链接的"简单"问题.而且,因此,诊断很难.好吧,只有这个清单才能找到错误!它指向"another-app.ipa"而不是"app.ipa"!


ale*_*xey 12

导致此消息的原因有很多.

诊断它的最佳方法是将设备连接到Mac并在管理器中查看设备的控制台.

就我而言,例如,它是:

verify_bundle_metadata:此应用程序不是为支持此设备系列而构建的

  • 更新了Xcode 6及更高版本的答案.**设备**已与**组织者**分开.在Xcode 6或7中,进入Window> Devices,选择设备,然后在左下角有一个带箭头的框.单击它,它将展开以前最小化的控制台.我用这种方式发现了我的问题,仅供参考,这是不正确的捆绑标识符!我们更改了我们的软件包名称,但重用了以前版本的plist文件,忘了在那里更新它. (2认同)

use*_*931 7

回答我自己的问题:

问题是其中一个缩略图没有在manifest.plist中设置正确的路径 - 所以不仅ipa需要正确的路径,而且临时下载图标,否则安装将失败并显示上述错误消息.


小智 6

可能的另一个问题是.plist .ipa都需要使用HTTPS托管,而不仅仅是常规HTTP托管.软件包字符串应如下所示:

<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://example.com/app.ipa</string>
Run Code Online (Sandbox Code Playgroud)

愚蠢的小疏忽,但它让我吵了一会儿.


Chr*_*oph 3

当尝试将 iOS 5+ 应用程序安装到 iOS4.3.5 手机时,我们确实遇到了完全相同的错误消息。您是否还检查了部署/构建目标和目标架构以匹配显示该问题的设备?