【问题标题】:Enterprise app deployment doesn't work on iOS 7.1企业应用程序部署在 iOS 7.1 上不起作用
【发布时间】:2013-12-15 03:03:54
【问题描述】:

我们通过企业帐户使用itms-services:// URL 分发应用程序。这一直运行良好,但在我们的 iPad 上安装 iOS 7.1 测试版后,它拒绝安装。相反,当下载应用程序出现任何问题时,iOS 会毫无帮助地显示通用的 Cannot connect to example.com 消息。

我在 SO、Google 或 7.1 发行说明中找不到任何内容来说明可能导致问题的原因。

【问题讨论】:

  • 这是否还包括作为 Mavericks Server 一部分的构建服务器?
  • 这在我们的 OS X 服务器上也被破坏了。
  • 也许这会有所帮助teratotech.com/blog/…

标签: ios deployment


【解决方案1】:

我通过将 iPad 连接到计算机并在尝试安装应用程序时通过 XCode Organizer 查看控制台发现了问题。错误原来是:

无法加载非 https 清单 URL:http://example.com/manifest.plist

事实证明,在 iOS 7.1 中,manifest.plist 文件的 URL 必须是 HTTPS,而我们使用的是 HTTP。将 URL 更改为 HTTPS 即可解决问题。

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

变成

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

我假设您必须拥有相关域的有效 SSL 证书。我们已经这样做了,但我想如果没有它,您会遇到问题。

【讨论】:

  • 您可以为您的网站创建自签名 SSL 证书,不要忘记使用 iPhone 配置实用程序创建配置文件以使证书在您的设备上受信任。
  • @SantaClaus 您是否检查过带有“itms-services://”的链接是否包含 https:// 而不是 http:// ?此外,请检查您的 plist 是否包含带有 HTTPS 的 IPA Url。
  • 我遇到了和@Niralp 一样的麻烦。我使用自签名 SSL 证书设置了我们的 apache 服务器。服务器似乎可以正常使用 SSL,但 OTA 链接仍然不起作用并给出上面报告的错误。我在 iOS 设备上安装了证书,但这也没有什么不同。有什么想法吗?
  • 我创建了自己的证书颁发机构并用它签署了 Web 服务器 ssl 证书。通过 Apple Configurator,您可以创建一个将该 CA 标记为受信任的配置文件。之后,安装按预期工作。
  • 值得注意的是,manifest.plist 中包含的 URL 不需要是 HTTPS。只有 ITMS URL 需要是 HTTPS
【解决方案2】:

ingconti 是对的。

  1. 将您的 app.plist 上传到 Dropbox。
  2. 获取app.plist的共享链接,如https://www.dropbox.com/s/qgknrfngaxazm38/app.plist
  3. 将链接中的www.dropbox.com 替换为dl.dropboxusercontent.com,例如https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist
  4. 删除 Dropbox 可共享链接上的所有参数,例如“?dl=0t”(根据 Enterprise app deployment doesn't work on iOS 7.1 的 Carlos Aguirre Tradeco 和我自己的经验)。
  5. 创建一个download.html 文件,其链接格式为<a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist">INSTALL!!</a>
  6. 将您的 download.html 上传到保管箱
  7. 再次,获取download.html的共享链接,如https://www.dropbox.com/s/gnoctp7n9g0l3hx/download.html,并删除所有参数。
  8. 在第二个链接中也将www.dropbox.com 替换为dl.dropboxusercontent.com,例如https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html

现在,在您的设备中访问https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html,您可以像以前一样安装应用程序。

多么美好的世界!

【讨论】:

【解决方案3】:

除了 Mark Parnell 的回答之外,解决此问题的一种快速而简单的方法是将清单 plist 放入 Dropbox,然后使用 Dropbox Web 界面获取指向它的直接 https 链接(“共享链接” -> '获取链接' -> '下载')。

实际的 ipa 可以保留在您始终提供服务的任何地方。您需要先对 plist 的 URL 进行 URL 编码,然后再将其插入到 itms-servivces URL 的查询中(尽管将任何 &s 替换为 %3D 可能有效)。

一个缺点是安装对话框现在将显示“dl.dropbox.com 想要安装 [whatever]”。

【讨论】:

  • 我没有想到这个!谢谢!
  • 花了很多时间来获得一个值 URL(编码),但它终于开始工作了。谢谢!
  • 聪明的解决方案:D 谢谢!
  • 非常感谢 Mike,终于搞定了!救命稻草!
  • 我制作了一个工具来帮助解决这个问题:otter-ota.herokuapp.com。它会自动调整您的 Dropbox 共享 url,生成一个 plist(因为 xcode 不再这样做了?)并创建所需的 itms 链接和 html。如果您愿意,它还可以托管一个登录页面。
【解决方案4】:

是的,从 iOS7.1 开始,您应该通过 https 进行所有 OTA 部署。对 Apple 没有记录这一点感到羞耻。

对于那些正在寻找比依赖保管箱更好的内部解决方案或不得不为证书支付现金的人,如果您按照此处提示 #5 中概述的步骤操作,您可以获得解决方案:http://blog.httpwatch.com/2013/12/12/five-tips-for-using-self-signed-ssl-certificates-with-ios/

它的要点是这样的:

  • 创建您自己的 CA 授权证书,您可以将其安装在完全受信任的设备上(我通过电子邮件简单地安装了它)
  • 根据根证书创建密钥/cer 对并将其安装在您的服务器上
  • 确保您的网络服务器使用与 CA 授权根证书匹配的密钥/cer 对
  • 此时您应该能够像往常一样通过 https 安装应用程序
  • 所有这些都可以在 OSX 上使用默认已安装的 openssl 完成

这与仅仅做一个自签名证书不同,在这个解决方案中,您还充当您自己的私有证书颁发机构。如果安装在 Apple 设备上的根证书未标记为受信任(绿色),则说明有问题。重做。

这绝对有效。

更新:2014 年 3 月 13 日 - 我提供了一个小型命令行实用程序,可以简化整个过程。你可以在:https://github.com/deckarep/EasyCert/releases

【讨论】:

  • 非常好。感谢总结和 CL 工具。
  • 我只花了一个小时弄清楚这一点。为 CA 证书使用 8192 位密钥将失败。 iOS 将导入您的证书,但无论出于何种原因都不会信任它。 4096 位 CA 密钥确实有效。
  • @EmeraldD。代码中没有任何地方:github.com/deckarep/EasyCert/blob/master/EasyCert.go 使用 8192 位密钥。事实上,该工具使用 2048 的密钥,就像文章演示的那样。对不起,您耽误了时间。
  • @ZhaoXiang 我可以考虑添加这个。您是否介意在此处提交问题:github.com/deckarep/easycert/issues,如果可能,请发布您用于根据需要转换所有文件的所有命令。
  • 这是真正的答案,伙计们,+1 :))
【解决方案5】:

我遇到了同样的问题,虽然我已经在使用 SSL 服务器,但仅仅将链接更改为 https 并不起作用,因为存在潜在问题。

Click here for image

该突出显示的部分告诉我,我们应该可以选择信任证书,但由于这是应用商店,因此通过 Safari 工作时不会提供恢复建议。


我对现有的解决方案不满意,因为:

  • 某些选项需要依赖第三方 (Dropbox)
  • 我们不愿意为 SSL 证书付费
    • 免费 SSL 证书只是一个临时解决方案。

我终于找到了一个解决方案,方法是创建一个自签名根证书颁发机构,并使用它生成我们服务器的 SSL 证书。

我使用了 Keychain Access 和 OSX Server,但每个步骤都有其他有效的解决方案


创建证书颁发机构

据我所知,证书颁发机构用于验证证书的真实性。由于我们将自己创建一个,它并不完全安全,但这意味着您可以信任来自给定机构的所有证书。这些权限的列表通常默认包含在您的浏览器中,因为它们实际上是受信任的。 (GeoTrust Global CA、威瑞信等)

  • 打开 Keychain 并使用证书助手创建权限

  • 填写您的证书颁发机构信息

  • 我不知道是否有必要,但我让权威机构信任。


生成证书签名请求

在我们的例子中,证书签名请求是由服务器管理员生成的。简单地说,它是一个询问“我能否为我的网站提供包含此信息的证书”的文件。

  • 接下来,您必须创建 证书签名请求(我为此使用了 OSX Server 的证书管理器

  • 填写您的证书信息(必须只包含 ascii 字符!谢谢@Jasper Blues)

  • 将生成的 CSR 保存在某处


创建证书

再次充当证书颁发机构,由您决定向您发送 CSR 的人是否真实,并且他们没有假装是其他人。真正的权威有他们自己的方法,但既然你很确定你就是你,你的验证应该很确定:)

  • 返回钥匙串访问并打开“创建证书..”选项,如图所示

  • 将您保存的 CSR 拖到指示的框中

  • 点击“让我覆盖此请求的默认设置”按钮

  • 我喜欢延长有效期。

  • 由于某种原因,我们不得不重新填写一些信息

  • 点击此屏幕上的继续

  • 确保您点击 SSL SERVER AUTHENTICATION,这让我有些头疼。

  • 您可以在其余选项中单击继续。

  • Mail 应用程序将打开,让您有机会发送证书。不要发送电子邮件,而是右键单击它并保存。


安装证书

我们现在需要设置服务器以使用我们刚刚为它的 SSL 流量创建的证书。

  • 如果您使用的设备您的服务器,您可能会发现证书已经安装。

  • 如果没有,请双击 Pending 证书并将我们刚刚保存的 PEM 文件从电子邮件中拖到指定的空间中。 (或者,如果您没有保存 PEM,您可以从钥匙串中导出它。)

  • 更新您的服务器以使用此新证书。如果您发现新证书不会“粘贴”并继续恢复,请返回 BOLD ITALIC CAPS 中的位


设置设备

您需要在其上安装应用程序的每台设备都需要拥有此证书颁发机构的副本,以便他们知道他们可以信任来自该颁发机构的 SSL 证书

  • 返回 Keychain Access 并将您的证书颁发机构导出为 .cer

  • 然后我把这个文件和我的OTA应用程序放在我的服务器上,用户可以点击这个链接下载授权证书。将证书直接通过电子邮件发送给用户也是一种有效的选择。

  • 在您的设备上安装证书。


测试

  • 确保您的 plist 链接是 https

    • 尝试安装应用程序!它现在应该可以工作了。证书颁发机构是受信任的,并且 SSL 证书来自该颁发机构。

【讨论】:

  • 我不太明白你回答的最后一部分,这是否意味着我必须将 .cer 文件放在我的服务器上,用户应该先通过 HTTP 下载 .cer 才能安装ipa 通过 HTTPS,我的理解正确吗?
  • 请注意,.cer 不必通过 HTTP,因为 Safari 会显示应用商店忽略的“您愿意信任此证书”界面。
  • 我已经用一个只需要两个参数的易于使用的命令行工具完全自动化了这个过程。请参阅我的回答:github.com/deckarep/EasyCert/releases
  • 我在 Windows Server 上使用 IIS,我已经生成了一个 .cer 文件并将其放在我的 iPhone 上,但它仍然无法正常工作,不知道为什么。我想我现在宁愿花一些钱在认证上。
  • 另请注意,必须在设备上安装的证书是Certificate Authority 证书,而不是我最初错误安装的自签名 SSL 证书
【解决方案6】:

我可以确认它有效,但是您必须将 html 和 plist 放在 Dropbox 上。 它也适用于非企业 OTA,即您想与您的开发人员共享应用程序。团队。

我做到了:

a) 在我的网站上,我使用此链接创建了一个页面:

.. href="https://dl.dropboxusercontent.com/u//(你的数据库ID)/ipa.html">MyApp

b) 在 DropBox 上我写了另一个 HTML 页面:

.. https://dl.dropboxusercontent.com/u/(你的数据库ID)/MyApp.plist"> 点按即可安装 MyApp

c) 在 DropBox 上移动了 plist,但将它留给 POINT 到我的旧服务器(没有 https)

【讨论】:

  • 我不需要放置 html,它似乎工作得很好。只需 plist 就足够了。
  • 顺便说一句,这是哪个plist?是 app.plist 还是构建 IPA 文件时生成的那个?
【解决方案7】:

打开终端并运行命令: curl -i https://(.ipa 文件路径不是 plist)

这将告诉您安装程序是否可以看到 IPA 文件。如果您使用“-i”运行 curl 命令,您将看到完整的响应,它可能不是 IPA 文件。 这是安装程序看到的响应,所以如果它没有返回 HTTP 200 和 IPA,您需要在最后返回它。

ITMS 安装程序不会从 Safari 保存任何上下文。如果您在 Safari 中通过安全门户进行身份验证,则身份验证 cookie 不会传递给安装程序。即安装程序需要能够在没有身份验证的情况下查看应用程序,这可能是您收到“无法连接到服务器”的原因。

【讨论】:

  • 这对我很有帮助。谢谢!
  • 您要求从 iPhone 或 MACBook 的终端应用程序运行命令?看来我也面临同样的问题。
【解决方案8】:

我遇到了同样的问题,按照上面提到的做了。

  • 将 plist 放入 Dropbox。
  • 在下载文件按钮上方的文档图像下方,用鼠标右键选择复制链接操作。这个链接已经像 https://dl.dropboxusercontent.com/s/xyz123/app.plist?stuff=stuff 有很多参数。
  • 删除参数(仅保留 https 和 .plist 之间的地址)
  • 在线浏览 url 编码,选择其中一个链接,复制、粘贴、执行,然后将生成的文本复制并粘贴到我有 itms-services 链接的 html 中。 顺便说一句,我在两个不同的位置有这个 html,其中一个是 ipa 所在的位置。
  • 确保 plist 包含对 ipa 文件的绝对引用。

两个页面都成功地在带有 ios 7.1 的 iphone 中安装了该应用

但是,现在 ios 7.0x 的 iphone 无法安装该应用程序。

我创建了一个新问题:upgraded adhoc app deployment doesnt work on ios previous to 7.1

这两个问题密切相关,并且由于缺乏官方参考资料而紧密相连。

【讨论】:

    【解决方案9】:

    一些好人通过使用 Class 1 StartSSL 证书和共享 Apache 配置解决了这个问题,该配置添加了证书支持(适用于任何证书)和用于自动更改现有 *.plist 文件中的链接的代码。复制太长了,链接如下: http://cases.azoft.com/how-to-fix-certificate-is-not-valid-error-on-ios-7/

    【讨论】:

      【解决方案10】:

      如果您碰巧有 AWS S3,它也可以像魅力一样工作。好吧。相对而言:-)

      在 AWS 中为您的 ad hoc 创建一个存储桶,添加一个索引文件(它可以只是一个空白 index.html 文件),然后使用可以连接到 S3 的客户端,例如 Cyber​​Duck 或 Coda(我使用 Coda - 你在哪里d 选择添加站点以获取连接窗口)然后设置连接,如下所示:

      然后在 XCode 中构建您的临时企业,并确保使用 https://s3.amazonaws.com/your-bucket-name/your-ad-hoc-folder/your-app.ipa 作为应用程序 URL,并将其上传到新的 S3 存储桶目录。

      您的 itms 链接应该匹配,即 itms-services://?action=download-manifest&url=https://s3.amazonaws.com/your-bucket-name/your-ad-hoc-folder/your-app.plist

      然后瞧。

      这仅适用于通用 AWS URL - 我没有尝试在 AWS 上使用自定义 URL,因此您可能需要做一些不同的事情。

      我决心尝试让 James Webster 的上述解决方案发挥作用,但我无法让它与 Plesk 一起工作。

      【讨论】:

        【解决方案11】:

        作为使用 Dropbox 进行企业分发的替代方法,您可以使用 TestFlight 分发企业签名的应用程序。

        https://www.testflightapp.com/

        这是一项非常棒的服务,用于托管和分发临时开发版本和企业版本。

        【讨论】:

        • 讽刺的是,Testflight 显然被苹果收购了techcrunch.com/2014/02/21/…
        • 另外,现在 Testflight 被 Apple 收购了,他们正在放弃对 Android 的支持。
        【解决方案12】:

        进一步关于 Dropbox 的先前答案,我实现了以下文件树,例如只需将 PLIST 文件上传到 Dropbox:

        1. 通过 http 将 ipa 文件上传到您的服务器(此处没有更改)
        2. 通过 http 将配置 (.mobileprovision) 文件上传到您的服务器(此处没有更改)
        3. 将 plist 文件上传到您的 dropbox(在 plist 文件中无需做任何更改,因为 URL 是绝对的)
        4. 使用“与 Dropbox 共享链接”选项将链接复制到剪贴板。在将www.dropbox.com 部分更改为dl.dropboxusercontent.com 之后,必须将此链接复制到您的html 文件中到itms-servivces URL 的查询中。请注意,我按照@Mike 的建议对链接进行了 URL 编码,但我不会在不这样做的情况下进行测试。现在 itms-services URL 的查询应该是这样的:itms-services://?action=download-manifest&url=https%3A%2F%2Fdl.dropboxusercontent.com%2Fs%2FYourShortDropboxLink.plist

        5. 以 http 格式将 html 文件上传到您的服务器。请注意,html 文件包含指向 ipa 和配置文件的链接。

        6. 从您的设备访问您的 html 文件,现在 ipa 可以像往常一样通过 OTA 安装。

        从现在开始,只需更改 ipa 文件,即可通过 OTA 向您的 Beta 测试人员提供下一个应用版本。直到 Apple 尚未更改安全规则。

        我在使用非常简单的 HTML 文件后加入这里:

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
        <title>iPhone app for test</title>
        </head>
        <body>
        <h1>iPhone app for test</h1>
        <br/>
        <ul>
            <li><a href="http://www.yourdomain.com/with/directories/provision/v.last/yourprovision_adhoc.mobileprovision">
                    Install Provisioning File</a></li>
            <li><a href="itms-services://?action=download-manifest&url=https%3A%2F%2Fdl.dropboxusercontent.com%2Fs%2FYourShortDropboxLink.plist">
                    Install Application</a></li>
        </ul>
        </body>
        </html>
        

        【讨论】:

        【解决方案13】:

        我们的团队使用 Dropbox 进行使用 https 的临时分发,但我们的应用仍然无法安装。经过多次故障排除后,我们意识到 title 字段也是必需的。每当我们发送一个没有此字段的链接时,Safari 都会忽略该链接并且没有提示用户安装。有时为了快速开发测试,我们跳过了 xml 中的标题节点而不填充它。如果这对遇到此问题的任何人有帮助,请确保您的 .plist 包含以下填充节点:

              ....
             <string>software</string>
            <key>title</key>
             <string>Your App Name</string>
              ...
        

        【讨论】:

          【解决方案14】:

          阅读这篇文章后,我仍然无法下载我的应用程序。问题是因为自签名 SSL 证书。

          我找到了解决这个问题的方法。您需要在网络上上传扩展名为“.crt”的证书文件,并在您的移动 safari 中输入它的地址。系统询问您是否将您的证书添加到受信任的证书列表中。完成此操作后,您将能够安装您的 ad-hoc 应用程序。

          【讨论】:

            【解决方案15】:

            通用解决方案是将您的设备连接到 Mac 并观察安装过程中发生的情况。我收到一个错误:

            无法加载下载清单并出现基础错误:错误 Domain=NSURLErrorDomain Code=-1202 "无法连接到商店" UserInfo=0x146635d0 {NSLocalizedDescription=无法连接到 Store, NSLocalizedRecoverySuggestion=你想连接到 还是服务器?, NSLocalizedFailureReason=无法建立安全连接 成立。 请检查您的日期和时间设置。, NSErrorFailingURLStringKey=https://myserver.com/app/manifest.plist, NSUnderlyingError=0x14678880 "此服务器的证书是 无效的。您可能正在连接到假装的服务器 “myserver.com” 可以将您的机密信息放在 风险。", NSURLErrorFailingURLPeerTrustErrorKey=, NSErrorFailingURLKey=https://myserver.com/app/manifest.plist}

            该错误中甚至建议检查日期设置。由于某种原因,日期是 1970 年 1 月 1 日。设置正确的日期可以解决问题。

            【讨论】:

              【解决方案16】:

              Apter 尝试将 itms-services://?action=download-manifest&amp;url=http://.... 更改为 itms-services://?action=download-manifest&amp;url=https://....。它也无法正常工作。警报是cannot connect to my domain。我发现也需要更新网页。

              问题不在于主 URL 是 HTTPS,而是页面内链接中的一些 HTML 代码。您需要您的开发人员更新网页。我还注意到您的暂存域上没有有效的 SSL 证书,因此您需要安装一个或使用 Dropbox,这里是the link maybe helpful for you

              【讨论】:

                猜你喜欢
                • 2023-04-10
                • 2018-07-05
                • 1970-01-01
                • 1970-01-01
                • 2015-03-27
                • 2014-06-29
                • 2023-03-03
                • 1970-01-01
                相关资源
                最近更新 更多