iOS 8 - 无法安装企业应用程序

时间:2014-09-08 21:20:24

标签: ios iphone enterprise

我们公司有一个应用程序,可以使用Enterprise Distribution通过网站下载。

Enterprise Distribution Site

在iOS 8 Beta 5中,点击下载链接会显示预期的弹出窗口(网站)想要安装(应用程序名称)"。点击安装'在该对话框上首先导致应用程序卡住"等待......"

App stuck waiting

直到它最终显示:"目前无法下载无法下载应用程序(应用程序名称)。"

Unable to Download App

使用iOS 7按预期正常安装。

在iOS 8下从Xcode运行应用程序。

我们如何支持iOS 8企业分发?

也许需要对Manifest文件进行更改?当我尝试在Xcode 6 Beta 7中构建应用程序时,Enterprise Archival进程没有提示我制作清单文件......

15 个答案:

答案 0 :(得分:62)

通过试图安装我的某个应用程序的手机控制台,我发现:

Sep  9 12:16:56 iPhone misagent[94] <Error>: attempt to install invalid profile: 0xe8008011
Sep  9 12:16:56 iPhone installd[40] <Error>: 0x100484000 -[MIInstallableBundle _installEmbeddedProfileInBundle:]: Could not install embedded profile: 0xe8008011 (Expired)

我不知道的原因,苹果使我的一半个人资料无效并且没有提醒我。进入developer.apple.com后找到任何无效的配置文件:

点击Edit - &gt; Generate - &gt; Download 使用新配置文件重建应用程序。

但是 - 至少有一个我的应用程序的坏消息是无法安装。透过控制台看我没什么。我确信这是一个苹果虫,所以提出了雷达:17622725

我希望您的问题是个人资料问题,否则我们可能需要等到今晚1800GMT才能看到苹果是否已修好它。

修改

使用iOS8 GM - 我得到Waiting... - 我会随时向您通报错误报告的进展情况。

修改

在排除故障后找到了一些修复程序:

修复1

从iOS8开始,如果您在清单plist中链接的图像不存在 - Apple将不会在手机上安装该应用程序 - 清单是您在下载页面上链接到的文件:{{1} }

确保itms-services://?action=download-manifest&url={url}full-size-image都存在:

display-image

修复2

如果由于iOS8的错误,以前在iOS7上存在企业应用程序将无法安装。控制台中出现错误:

<dict>
    <key>kind</key>
    <string>full-size-image</string>
    <key>needs-shine</key>
    <true/>
    <key>url</key>
    <string>https://{path_to_real_image}</string>
</dict>
<dict>
    <key>kind</key>
    <string>display-image</string>
    <key>needs-shine</key>
    <true/>
    <key>url</key>
    <string>https://{path_to_real_image}</string>
</dict>

这可以通过临时更改清单文件中的Ignore manifest download, already have bundleID: {bundle_id} 来解决,但是Apple知道它们将错误报告标记为重复。在进行内部测试后,您还可以通过停留主屏幕布局bundleID

来解决问题

修复3

如果您看到应用程序进入General -> Reset -> Reset Home Screen Layout阶段而不是installing...几乎肯定问题是loading...已过期,要修复下载,您需要重新归档您使用新的,更新的配置文件进行申请。

修复4

如果您看到应用程序进入embedded provisioning profile阶段且installing...有效 - 请在连接到控制台时下载应用程序。 (Xcode 6&gt; Window&gt; Devices&gt; Bottom Left Button [v]),您可能会发现安装失败并且provisioning profile稍微下面将是错误消息。在我的情况下Verification Stage Failed - 对于此错误,请转到developer.apple.com并更新您的应用程序标识符以包含正确的服务。对我来说,(Entitlements found that are not permitted by provisioning profile)需要启用。然后重新生成App Groups

答案 1 :(得分:7)

我今天遇到了同样的问题:我无法在IOs8上安装我的企业应用程序(但在IOs7上)。 经过几个小时的搜索,我终于在设备控制台上阅读了这条消息:

<Warning>: LoadExternalDownloadManifestOperation: Ignore manifest download, already have bundleID: com.ecaste.Crew-Desk

经过长时间的搜索,我终于阅读了这篇文章: http://support.hockeyapp.net/discussions/problems/26683-not-able-to-download-apps-ios8-beta-5-autoupdate-manually-etc

到最后我只更改了plist的名称和下载ipa的链接(可能是第二个不需要),最后安装了应用程序。

最后,似乎IOs8中的一个Cache问题认为已经安装了应用程序(事实并非如此,我之前已将其卸载)。

希望这个帮助

答案 2 :(得分:7)

同样的错误,我尝试更改bundle-id,bundle-version,plist ......但错误仍然存​​在。

我知道这有点棘手,但这是唯一对我有用的东西:

http://support.hockeyapp.net/discussions/problems/30194-ios8-workaround-can-break-today-extension?full_site=1#comment_35141099

  1. 将设备连接到Mac或PC
  2. 在iTunes中创建备份

  3. 安装iExplorer:http://www.macroplant.com/iexplorer/

  4. 启动iExplorer,然后选择演示模式

  5. 在左侧边栏中,选择“媒体”,然后打开“下载”文件夹, 并删除其中的所有文件

  6. 重启设备

  7. 打开下载页面并安装最新版本的应用

  8. 实际上,我省略了前两个步骤并且它完美无缺:)

    我希望这会有所帮助

答案 3 :(得分:6)

将部署目标设置为

项目&gt;构建设置&gt; iOS部署目标

目标&gt;构建设置&gt; iOS部署目标

答案 4 :(得分:3)

我刚才遇到了这个问题,它是由mainfest plist(keys:full-size-image + display-image)指向不存在的url图像位置引起的。

看起来iOS6 / iOS7能够处理如果图像不存在但iOS8对此更具限制性。

答案 5 :(得分:3)

根据之前关于&#34;忽略清单下载的评论&#34;消息,我们尝试更改.plist中的包ID(即com.companyName.AppName)以获得唯一名称,以强制iOS 8无论如何下载/安装它。安装后,它会正确替换现有副本。

我相信这里有两个问题。如果https网站上指向企业证书签名.ipa文件的.plist具有与已安装的应用程序匹配的捆绑标识符,则不会覆盖它。 bundle-version在我们所有的.plist文件中都是不同的,因此它应该安装它。 iOS 7似乎没有这个问题。我们计划通过弄乱plist中的bundle-identifier来解决这个问题,因此它始终是构建中唯一的。

第二个问题是,当它成功安装应用程序时,它不会切换到主屏幕或指示它正在做任何事情。在iOS 7中,选择&#34;安装&#34;在提示符处按钮,将切换到图标为暗的主屏幕,进度指示器将显示下载进度。然后应用程序旁边会有一个蓝点表示它是新的。使用iOS 8,它不会切换到主屏幕,因此它似乎无法正常工作。您可以手动转到主屏幕,您应该看到带有进度指示器的暗图标(现在位于新位置,因为它不知道它将替换现有应用程序)。成功下载/安装后,它不会在替换的应用程序上放置蓝点。

希望这有帮助。

答案 6 :(得分:2)

这给我带来了巨大的痛苦。我需要在MDM解决方案之外的员工电话上安装新的应用程序OTA。我似乎尝试了在互联网上找到的所有可能的解决方案,但没有任何效果。我能得到的最接近的是应用程序进入“加载”阶段。我的解决方案需要一周的工作,尝试不同的事情。我不确定哪种方式有效,哪种方式有效,但这就是我所做的:

在我的情况下,我之前使用开发人员(而不是企业)帐户的配置文件构建了此应用程序。在Xcode中,我更改了Bundle Identifier以给它一个新名称,例如,它最初是com.mydomain.myapp并且变成了com.mydomain.mysuperapp。

应用程序中的确保代码签名有效,并包含企业帐户的分发证书

我使用了错误的配置文件(一个没有相关的身份)因此,因为我选择了'自动'它构建得很好但是永远不会安装。因此,我将Release的代码签名更改为我的分发配置文件(而不是开发配置文件)

确保应用程序的部署目标设置得足够低,以便下载它的设备

归档文件&amp;导出用于企业部署

清单必须包含57x57 png和512x512 png图像,否则安装不会超过“等待”阶段

我创建了一个如下所示的index.html文件:

<html>
    <body>
        <a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/dw80wahlwupkyd5/MyApp.plist">
            Install Learning Chunks App from Dropbox</a>
    </body>
</html>

我使用过我在网上找到的plist样本,它包含了一些可选设置。当我离开这些时,下载不起作用。我拿出来了。我的清单plist文件名为:MyApp.plist,看起来像这样:

<!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>https://dl.dropboxusercontent.com/s/r1bljbkcows7sje/mysuperapp.ipa</string>
                    </dict>
                    <dict>
                        <key>kind</key>
                        <string>display-image</string>
                        <key>needs-shine</key>
                        <true/>
                        <key>url</key>
              <string> https://dl.dropboxusercontent.com/s/ujk9ipcv2naltut/logo57.png</string>
                    </dict>
                    <dict>
                        <key>kind</key>
                        <string>full-size-image</string>
                        <key>needs-shine</key>
                        <true/>
                        <key>url</key>
                  <string>https://dl.dropboxusercontent.com/s/gpebomok83mp9d5/logo512.png</string>
                    </dict>
            </array>
            <key>metadata</key>
                <dict>
                    <key>bundle-identifier</key>
                    <string>com.mydomain.mysuperapp</string>
                    <key>bundle-version</key>
                    <string>1.0</string>
                    <key>kind</key>
                    <string>software</string>
                    <key>title</key>
                    <string>My Super App</string>
                    <key>subtitle</key>
                    <string>My Super App</string>
                </dict>
        </dict>
        </array>
    </dict>
</plist>

我将MyApp.plist,index.html,logo57.png,logo512.png和MyApp.ipa上传到DropBox。我与那些需要下载应用程序的人分享了index.html。

然后,用户可以单击电子邮件中的共享链接,应该安装应用程序。

答案 7 :(得分:1)

编辑:下面的问题是一个红鲱鱼。正如上面提到的Dylan Hand,我的问题是我在清单文件中破坏了图像链接。显然这对于​​ios7并不重要,但如果确实如此,ios8将无法完成安装。当我删除这些引用时,它工作得很好。


我有与OP相同的症状(即#34;无法下载应用程序&#34;消息,但仅限于iOS 8)。当我尝试验证(即管理器 - &gt;验证)时,我收到以下消息。

Screenshot of the result of validation

这导致我发表这篇文章:https://stackoverflow.com/a/25757196/751136

它声称重新生成您的配置文件应该会产生一个名为beta-reports-active的新权利。当我尝试在我的企业帐户中执行此操作时,新配置文件没有新的权利。但是,当我在另一个非企业帐户中重新生成配置文件时,新配置文件DO具有该字段。

答案 8 :(得分:1)

如果您使用构建脚本构建iOS应用程序,并且之前使用的是带有--sign标志的PackageApplication,则可能会导致问题。在10.10上构建时, - sign标志不再起作用,删除它会让我们的所有iOS应用再次安装。

请参阅:https://devforums.apple.com/thread/251624?tstart=0

答案 9 :(得分:1)

这个问题让我抓狂 只有这对企业分销有帮助: 执行所有必需的构建设置,然后单击“存档”。执行企业分发流程。您将看到管理器窗口。在Mac机器上,通过选择KRelease并选择“Show in finder”找到.xcacrchive文件。

用户导航到.xcarchive文件所在的文件夹。右键单击.xcarchive文件,然后选择“显示包内容”选项。

在打开的查找程序窗口中,转到产品/应用程序 选择并复制.app文件

在磁盘上的某处创建一个名为“Payload”的新文件夹注意:文件夹名称区分大小写。 将复制的.app文件粘贴到“Payload”文件夹中。 压缩Payload文件夹以获取Payload.zip文件 将Payload.zip文件重命名为.ipa并将其与.plist捆绑在一起 完成!!! .ipa文件已准备好安装在.xcarchive生成中使用的配置文件中注册的设备上。

答案 10 :(得分:0)

我已经解决了这个问题。

  1. 由于Apple更改了配置文件,请更新配置文件(文件1)并将其复制到&#34; Payload /&#34;。
  2. 确保&#34; Payload /&#34;中有一个Entitlements.plist(文件2),这个plist文件必须是 PLAIN TEXT ,这是由一个文本编辑器。
  3. 确保&#34; Payload /&#34;中有一个Info.plist(文件3),这是由XCode创建的;
  4. 将Entitlements.plist(文件4)复制到除&#34; Payload /&#34;以外的任何其他位置。
  5. 确保&#34;捆绑标识符&#34;在文件1-4中应该是相同的。
  6. 使用此Entitlements.plist(文件4)重新签名IPA文件。
  7. 你可以像这样辞职

    codesign -fs "iPhone Distribution: Your Company Name" --entitlements=/Users/SenTR/Downloads/codesign/Entitlements.plist /Users/SenTR/Downloads/codesign/Payload/Your_Project_name.app
    

    Entitlements.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>application-identifier</key>
            <string>PREFIX.yourappBundleID</string>
            <key>aps-environment</key>
            <string>production</string>
            <key>get-task-allow</key>
            <false/>
            <key>keychain-access-groups</key>
            <array>
                <string>PREFIX.yourappBundleID</string>
            </array>
        </dict>
    </plist>
    

    如果你懂中文,这将有所帮助。

    http://hennry.com/2015/03/fail-to-resign-ipa-since-ios8/

答案 11 :(得分:0)

这些答案是值得检查的有效内容,但是如果其他人像我一样尝试过这些答案并且STILL遇到问题,make sure your app contains the proper plist setting that allows the exported archive to be compressed correctly这个即使按照上述所有步骤操作也是如此。另外值得注意的是,关于确保网站的plist包含有效图像链接的答案似乎不会影响任何事情,至少对于我们使用XCode 6.3来导出档案。无论这些链接是否正确,它都有效/无效。尽管如此,让这些信息正确显然是一个好主意。另一个有趣的说明是,如果我们使用XCode 5导出,则ipa总是以正确的格式出现(参见上面链接的SO文章);看来XCode 6+现在对它很挑剔。

答案 12 :(得分:0)

我的问题已经通过删除所有内置的outut,然后完全重建来纠正。

答案 13 :(得分:0)

此安装问题的另一个可能来源是项目与配置文件之间的情况不匹配(特别是在自动或其他命令行构建中)。捆绑包ID区分大小写。例如,如果配置文件中的应用程序包标识符为com.example.MyApp且项目配置和/或Info.plist使用com.Example.Myapp,则Xcode 7.1将因代码签名错误或回退到通用配置而失败配置文件(一个带有* bundle id,这可能本身就是一个问题),但xcodebuild命令将成功。例如,Jenkins还会将错误签名的构建上传到Hockeyapp。构建将下载到客户端设备,但由于案例不匹配而无法安装。

因此,

修复0

检查应用程序包标识符在项目和Apple Developer门户中的设置方式是否相同。

避免此特定问题的最简单方法是始终在捆绑标识符中使用小写字符。从Apple Developer门户复制捆绑包ID并将其粘贴到项目构建设置(PRODUCT_BUNDLE_IDENTIFIER)当然也有帮助。

虽然我遇到了企业帐户的问题,但事实上它可能并不特定于此类分发。

修复0'

请务必查看Apple的技术说明Installation Failure Troubleshooting for iOS

答案 14 :(得分:0)

我的问题是我的ipa文件名和我的plist中对ipa的引用都有空格。删除两者中的空间允许安装