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

时间:2012-10-31 21:46:19

标签: ios enterprise over-the-air

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

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

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

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

  

无法下载应用程序

     

此时无法下载“您的应用程序”。

指南中的

有三个故障排除提示:

  

如果无线应用分发失败且“无法下载”   消息,请检查以下内容:

     

确保应用已正确签名。通过安装它来测试它   设备使用iPhone配置实用程序或Apple配置器,和   看看是否发生任何错误。

     

确保清单文件的链接正确并且清单   文件可供网络用户访问。

     

确保.ipa文件的URL(在清单文件中)是正确的   并且.ipa文件可供网络用户访问。

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

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

12 个答案:

答案 0 :(得分:33)

正如 alexey 所提到的,太多原因都可能导致该消息。 Apple将其用作“捕获所有错误”。

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

就是这么简单! : - (

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

然后,最后的手段是following a checklist。从零开始做一遍又一遍。有很多out there ...但是现在还有我的通用和非详细的 Over The Air发行清单



  1. 进行分发构建 - 这是最复杂的部分,始终在网络上完成,Apple会一直更改步骤。通常,您需要证书标识符配置文件。列出设备几乎始终是必需的。我目前的选择是“分发 - >内部”。

    Apple Developer -> Member Center -> Certificates, Identifiers & Profiles -> Provisioning Profiles -> Add (+)

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

  2. 在项目下设置个人资料 - >构建设置 - 自XCode 5以来,情况发生了变化。使用身份代替代码签名,您可以清除所有内容并将其设置为*代码签名 - > *配置文件。标识应自动更改为“自动”。也不再需要手动下载步骤1中的文件并进行安装。 XCode现在管理它。

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

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

  4. 部署 - 现在位于 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>
    
  5. 分发 - 如果要使用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);
    ?>
    
  6. 验证 - 确保资产数组中列出的所有文件都可供下载。如果这些文件中的任何一个返回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>
    
  7. 文件示例是核对清单中非常重要的部分。他们必须100%正确。

    仔细检查plist和html文件!

    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 identifierXCode文件

中的.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 ”。但这只是文件。