32

我创建了一个 iOS 应用程序并希望通过无线方式分发它。我遵循了本指南:

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

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

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

无法下载应用程序

目前无法下载“您的应用程序”。

在指南中,有三个故障排除提示:

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

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

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

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

我检查了所有三件事,它们都很好。

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

4

12 回答 12

33

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

您可以通过Console对其进行诊断。将设备连接到您的桌面并从XCode 的 Organizer(仅限 mac)或iPhone 配置实用程序(mac 和 windows)访问它。但...

简直没那么简单!:-(

控制台可能还远远不够。有时那里没有相关消息

然后,最后的手段是遵循清单。再次从零开始。那里 很多...但是下面是我的通用且不详细的空中分配清单,目前。



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

    Apple 开发人员 -> 会员中心 -> 证书、标识符和配置文件 -> 配置文件 -> 添加 (+)

    PS:如果您确实想列出设备,请确保 UDID 正确。这里报告了许多问题。

  2. 在 Project -> Build Settings 下设置配置文件- 从 XCode 5 开始,情况发生了变化。您可以清除所有内容并将其设置在 *Code Signing -> *Provisioning Profile下,而不是使用身份进行代码签名。身份应自动更改为“自动”。也不再需要从第 1 步手动下载文件并安装它们。XCode 现在管理它。

    XCode 5 -> 项目导航器 -> 项目 -> 构建设置

  3. 存档- 在 Xcode 5 中,不再需要“为存档而构建”。存档就行了。它应该会出现在Organizer上,如果它是一个大项目,则需要一些时间。这一步可能会出现很多错误,但它们几乎总是与代码编译有关,而不是与 OTA 有关。

  4. 部署- 现在在Organizer -> Archives中,选择正确的存档(应该已经被选为最新的)点击“ Distribute ”,然后Save for Enterprise or Ad Hoc Deployment。现在可能要等很久了。保存文件时,有一个“保存为企业分发”选项。这是一个完全误导的名字。它真正做的是创建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 配置实用程序安装它,请跳过此步骤。你完成了。这是放在网站上的文件。“简单地”添加一个带有href链接的 HTML 页面,例如:

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

    不幸的是,处理 Web 服务器绝非易事。所以还要检查服务器 mime-type!如果您的服务器支持 php,我已经制作了几个 PHP 文件来处理它们。只需保持文件原样(plisthtmlipa)并链接到app.plist.php

    应用程序.plist.php

    $file = fopen("app.plist", "r");
    while(!feof($file)){
        $line = fgets($file);
        print str_replace(".ipa", ".ipa.php", $line);
    }
    fclose($file);
    ?>
    

    应用程序.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 中删除那些缺失的条目。下载工作不需要图标条目。

    这是一个没有图标的示例 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文件上错误链接的“简单”问题。而且,因此,很难诊断。好吧,只有做这个清单才能找到错误!它指向“another-app.ipa”而不是“app.ipa”!

于 2013-10-29T14:39:37.050 回答
12

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

诊断它的最佳方法是将设备连接到 Mac并在Organizer中查找该设备的控制台

例如,就我而言,它是:

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

于 2013-06-20T08:38:59.193 回答
7

回答我自己的问题:

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

于 2012-11-01T18:17:14.610 回答
6

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

<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://example.com/app.ipa</string>

愚蠢的小疏忽,但它让我绊倒了一段时间。

于 2014-12-23T17:28:55.973 回答
3

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

于 2012-11-01T09:53:33.553 回答
1

确保大小写在所有文件中都匹配。它们往往不区分大小写。

于 2013-12-19T02:21:45.137 回答
1

我在控制台中找到了。

installcoordinationd(MobileInstallation)[99] : ****bundleID****:5:11:1:1:Updating PlaceholderMetadata for ****bundleID**** with failure 1 _LSInstallType 1, underlyingError (Error Domain=MIInstallerErrorDomain Code=13“无法验证 /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.IoCSM9/extracted/Payload/App.app 的代码签名:0xe8008016(可执行文件已签名无效权利。)" 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>

这里我们应该看一下:
无法验证 App.app
的代码签名 可执行文件的签名无效。

就我而言,这是因为我从亚马逊下载了企业版本。但是构建它的配置文件已过期(在开发人员控制台中找到)。


另一个目的是:

“此时无法安装此应用程序。” UserInfo={NSLocalizedDescription=此时无法安装此应用程序,NSUnderlyingError=0x100cbd3c0 {Error Domain=MIInstallerErrorDomain Code=64 "升级的应用程序标识符授权字符串 (BBBUUUU.com.bundle.www) 与已安装应用程序的应用程序不匹配-标识符字符串 (CCCEEEE.com.bundle.www);拒绝升级。” UserInfo={LegacyErrorString=MismatchedApplicationIdentifierEntitlement, FunctionName=-[MIInstallableBundle _validateApplicationIdentifierForNewBundleSigningInfo:error:], SourceFileLine=878, NSLocalizedDescription=升级的应用程序标识符授权字符串 (BBBUUUU.com.bundle.www) 与已安装应用程序的应用程序标识符字符串 (CCCEEEE) 不匹配.com.bundle.www); 被拒绝

在这里,我刚刚删除了以前版本的应用程序。错误是,因为我更改了捆绑 ID 的团队,并且它安装了具有先前捆绑 ID 的应用程序。


打开控制台:

  • Xcode> Window>Devices
  • 选择设备
  • 展开一个控制台,在左下角带有一个带有箭头的框。
于 2018-03-28T09:32:35.727 回答
1

就我而言,问题出在我的设备上,同一应用程序的旧版本安装了相同的捆绑标识符(从 applstore 下载),所以现在当我尝试通过企业分发下载其新版本时,它什么也没做,根本没有错误。从设备中删除现有版本解决了我的问题。

于 2016-10-10T13:11:51.353 回答
0

尝试签bundle identifier入您的XCode.plist文件

于 2016-09-27T12:01:53.207 回答
0

就我而言,FTP 文件夹和其中的文件(清单、ipa、图像)的文件权限不正确存在问题。检查他们是否有 775 (rwx) 并且所有者/组是您的所有者。

设备控制台中的错误类似于“无法连接到 iTunes Store ”或“ bundleID 的插图失败”或“无法加载 bundleID 的占位符插图”。但这只是关于文件。

于 2018-12-29T12:43:32.937 回答
0

就我而言,在提供 ipa 共享链接后,我做了以下操作以摆脱“无法连接到 dl.dropboxusercontent”消息。1. 从 plist 中删除 md5 部分 2. 上传 512*512 和 57*57 图像到 drop box,并在 plist 中的 fill_size_image 和 display_image 中提供共享链接。

于 2017-03-03T18:24:55.880 回答
0

首先要检查的是您正在安装的设备是否具有您正在安装的应用程序的正确操作系统。例如,如果该应用程序是为 iOS 11 构建的,并且您的设备上装有 iOS 10,则该应用程序将安装,但您会看到此错误“无法下载应用程序”。

于 2018-02-13T23:41:00.253 回答