企业应用程序部署在iOS 7.1上不起作用


317

我们使用itms-services://网址通过企业帐户分发应用。这一直很好,但是在我们的iPad上安装iOS 7.1 beta后,它拒绝安装。取而代之的是Cannot connect to example.com,当下载应用程序时出现任何问题时,我们只会得到iOS 无法显示的一般消息。

我一直无法在SO,Google或7.1版本说明中找到任何内容来建议可能引起此问题的原因。


1
这还包括Mavericks服务器中的构建服务器吗?
2014年

在我们的OS X Server上,这对我们也很重要。
toofah 2014年

也许这将帮助teratotech.com/blog/...
HelmiB

Answers:


330

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

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

事实证明,在iOS 7.1中,manifest.plist文件的URL 必须为HTTPS,而我们使用的是HTTPS。将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证书。我们已经做到了,但我想如果没有它,您会遇到问题。


5
您可以为网站创建自签名SSL证书,不要忘记使用iPhone配置实用程序创建配置文件以使证书在设备上受信任。
Niralp 2013年

1
@SantaClaus您是否检查了带有“ itms-services://”的链接是否包含https://而不是http://?此外,请检查您的plist是否也包含带有HTTPS的IPA网址。
Niralp 2013年

3
我和@Niralp一样遇到麻烦。我使用自签名SSL证书设置了apache服务器。服务器似乎可以正常使用SSL,但是OTA链接仍然无法正常工作,并给出了上面报告的错误。我在iOS设备上安装了证书,但这也没有任何区别。有什么想法吗?
toofah 2014年

5
我创建了自己的证书颁发机构,并用它签署了Web服务器的ssl证书。通过Apple Configurator,您可以创建将此CA标记为受信任的配置文件。之后,安装将按预期进行。
Monobono 2014年

1
值得注意的是,manifest.plist中包含的URL不必是HTTPS。仅ITMS URL需要为HTTPS
Brody Robertson 2014年

233

ingconti是正确的。

  1. 将您的app.plist上载到保管箱。
  2. 获取app.plist的共享链接,例如https://www.dropbox.com/s/qgknrfngaxazm38/app.plist
  3. 在链接中替换www.dropbox.comdl.dropboxusercontent.com,例如https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist
  4. 删除Dropbox共享链接上的所有参数,例如“?dl = 0t”(根据企业应用程序部署中的 Carlos Aguirre Tradeco在iOS 7.1上无法运行,以及我自己的经验)。
  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.comdl.dropboxusercontent.com在第二个链接,以及像https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html

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

多么美好的世界!


4
这节省了我的培根!谢谢你,谢谢你,谢谢你!
宾福德2014年

13
谢谢...是苹果的忠实粉丝,但如今开始讨厌它。.这些愚蠢的事情毁了我的时间...
Karthik 2014年

1
我完成了上述所有步骤。我面临着与DanM相同的问题。下载开始,但是几秒钟后,出现“ ...当前无法下载”警报。
alper_k 2014年

1
我收到此错误:“无法连接到dl.dropboxusercontent.com”,尝试在其中安装<a href =“ itms-services://?action = download-manifest&amp; url = dl.dropboxusercontent.com/s/56ny312cwdacho7 /xxxxx.plist >与https
纳米

1
我明白了。以前我在我的私人文件夹中保存的文件,我再次更改的公用文件夹。不要忘记把文件放在公用文件夹.Cheers奥德曼
Hariprasad.J

72

进一步解决Mark Parnell的问题,解决此问题的一种快捷方法是将清单plist放入Dropbox,然后使用Dropbox Web界面直接获取https链接(“共享链接”->“获取链接”->“下载”)。

实际的ipa可以保留在您始终提供服务的任何地方。在将plist的URL插入到itms服务URL的查询中之前,您需要对plist的URL进行URL编码(尽管仅用%3D替换任何&s可能会起作用)。

缺点之一是,安装对话框现在显示为“ dl.dropbox.com要安装[任何内容]”。


我没想到这个!谢谢!
圣诞老人,

花了很多时间获得了一个值URL(已编码),但是它终于开始工作了。谢谢!
David Dunham 2014年

聪明的解决方案:D谢谢!
MobileGuy 2014年

迈克非常感谢,终于解决了!救命!
adamteale 2014年

我制作了一个工具来解决这个问题:otter-ota.herokuapp.com。它将自动调整您的保管箱共享网址,生成plist(因为xcode不再这样做了?)并创建所需的itms链接和html。如果需要,它还可以托管目标页面。

36

没错,展望未来,iOS7.1会要求您通过https进行所有OTA部署。对Apple感到遗憾的是没有对此进行记录。

对于那些寻求更好的内部解决方案而不是依赖于保管箱或必须掏出现金来获得证书的人,如果您按照此处提示#5所述的步骤进行操作,则可以找到解决方案:http:// blog。 httpwatch.com/2013/12/12/five-tips-for-using-self-signed-ssl-certificates-with-ios/

要点是:

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

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

这绝对有效。

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


1
非常好。感谢您的摘要和CL工具。
Alex Zavatone 2014年

我花了一个小时才弄清楚这一点。为您的CA证书使用8192位密钥将失败。iOS会导入您的证书,但由于任何原因将不信任它。4096位CA密钥确实起作用。
EmeraldD。

1
@EmeraldD。代码中没有位置:github.com/deckarep/EasyCert/blob/master/EasyCert.go使用8192位密钥。实际上,该工具使用的密钥为2048,就像本文演示的那样。抱歉,您浪费了时间。
拉尔夫·卡拉维奥2014年

@ZhaoXiang我可以考虑添加它。您介意在这里提交问题:github.com/deckarep/easycert/issues,如果可能的话,发布所有用于转换所有文件的命令(如果需要)。
Ralph Caraveo 2014年

1
这是实际的答案,+ 1 :))
Tech_Intelliswift

33

我遇到了同样的问题,尽管我已经在使用SSL服务器,但是仅更改指向https的链接是行不通的,因为存在一个潜在的问题。

在此处输入图片说明 点击这里查看图片

突出显示的一点告诉我,应该给我们选择信任证书的选项,但是由于这是应用程序商店,因此通过Safari浏览器无法显示恢复建议。


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

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

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

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


创建证书颁发机构

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

  • 打开钥匙串并使用证书助手创建授权

在此处输入图片说明

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

在此处输入图片说明

  • 我不知道是否有必要,但我使权威受到信任。

在此处输入图片说明


生成证书签名请求

在我们的情况下,服务器管理员会生成证书签名请求。只是它是一个文件,询问“请问我能为我的网站提供一个包含此信息的证书”的文件。

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

在此处输入图片说明

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

在此处输入图片说明

  • 将生成的CSR保存在某处

在此处输入图片说明


创建证书

再次充当证书颁发机构,由您决定向您发送CSR的人是否真实,并且他们不假装是其他人。真正的当局有他们自己的方式来做,但是由于您希望自己非常确定自己,因此您的验证应该非常确定:)

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

  • 我想增加有效期。

在此处输入图片说明

  • 由于某些原因,我们必须再次填写一些信息

在此处输入图片说明

  • 单击此屏幕上的继续

在此处输入图片说明

  • 确保您单击SSL服务器认证,这使我有些头疼。

在此处输入图片说明

  • 您可以单击其余所有选项中的继续。

  • 邮件应用将打开,使您有机会发送证书。右键单击并保存,而不是通过电子邮件发送。

在此处输入图片说明


安装证书

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

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

在此处输入图片说明

  • 如果不是,请双击“待处理”证书,然后将刚刚从电子邮件中保存的PEM文件拖到指示的空间中。(或者,如果没有保存,则可以从钥匙串中导出PEM。)

在此处输入图片说明

  • 更新您的服务器以使用此新证书。如果您发现新证书不会“保留”并继续还原,请返回到粗斜体大写字母

在此处输入图片说明


设置设备

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

  • 返回到“钥匙串访问”并将证书颁发机构导出为.cer

在此处输入图片说明

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

在此处输入图片说明

  • 在设备上安装证书。

在此处输入图片说明


测试

  • 确保您的plist链接为https

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

我对您答案的最后部分不太了解,是否意味着我必须将.cer文件放在服务器上,用户应该先通过HTTP下载.cer文件,然后才能通过HTTPS安装ipa,这是我的理解吗? ?
赵翔

请注意,.cer不必通过HTTP,因为Safari会显示应用商店忽略的“您想信任此证书”界面。
James Webster

1
我使用了一个仅需两个参数的易于使用的命令行工具,就使该过程完全自动化。看到我关于以下问题的答案:github.com/deckarep/EasyCert/releases
Ralph Caraveo 2014年

我在Windows Server上使用IIS,我已经生成了一个.cer文件并将其放在我的iPhone上,但是它仍然无法正常工作,不知道为什么。我想我现在想花一些钱在认证上。
赵翔

1
还要注意,必须在设备上安装的Certificate Authority证书是证书,而不是我最初错误安装的自签名SSL证书
NSTJ 2014年

6

我可以确认它是否有效,但是您必须将HTML AND plist放在保管箱上。它也适用于非企业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)将Droplist上的plist移到了我的旧服务器上(没有https)


7
我不需要放HTML,它看起来也很好。只是列表就足够了。
Ben G

这是哪个plist?是app.plist还是构建IPA文件时生成的文件?
user1872384 '18

3

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

这将告诉您安装程序是否可以看到IPA文件。如果使用“ -i”运行curl命令,则会看到完整的响应,并且可能不是IPA文件。这是安装程序看到的响应,因此,如果未返回HTTP 200和IPA,则需要在其端将其返回。

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


这对我很有帮助。谢谢!
Stanislav Pankevich 2014年

您是否要求从iPhone或MACBook中的终端应用程序运行命令?看来我也面临着同样的问题。
user867662

2

我遇到了同样的麻烦,并且如上所述。

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

这两个页面均能成功在iOS 7.1的iPhone中安装应用程序

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

我创建了一个新问题:7.1之前的ios上升级的即席应用程序部署不起作用

这两个问题密切相关,并且也由于缺乏官方参考而受到约束。



2

如果您碰巧也拥有像魅力一样的AWS S3。好。相对来说:-)

为AWS中的临时文件夹创建一个存储桶,添加一个索引文件(它可以是一个空白的index.html文件),然后使用一个可以连接到S3的客户端,例如Cyber​​Duck或Coda(我使用的是Coda-在其中选择Add网站以获取连接窗口),然后设置连接,如下图所示:

然后在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一起使用。



1

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

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

  5. 将html文件上传到http中的服务器。请注意,html文件包含指向ipa和供应文件的链接。

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

从现在开始,只需更改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>

1
仅供参考,以下链接可用于编码URL:w3schools.com/tags/ref_urlencode.asp
Lisarien 2014年

0

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

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

0

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

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


0

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

无法加载带有潜在错误的下载清单:错误域= NSURLErrorDomain代码= -1202“无法连接到商店” UserInfo = 0x146635d0 {NSLocalizedDescription =无法连接到商店,NSLocalizedRecoverySuggestion =您是否仍要连接到服务器?NSLocalizedFailureReason =无法建立安全连接。 请检查您的日期和时间设置。,NSErrorFailingURLStringKey = https://myserver.com/app/manifest.plist,NSUnderlyingError = 0x14678880“此服务器的证书无效。您可能正在连接到假装为“ myserver.com”的服务器,这可能会使您的服务器机密信息有风险。“,NSURLErrorFailingURLPeerTrustErrorKey =,NSErrorFailingURLKey =https://myserver.com/app/manifest.plist }

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


-1

Apter尝试更改itms-services://?action=download-manifest&url=http://....itms-services://?action=download-manifest&url=https://....。这也行不通。警报为cannot connect to my domain。我发现也同样需要更新网页。

问题不是主要URL是HTTPS,而是页面链接中的一些HTML代码。您需要开发人员来更新网页。我还注意到您的登台域上没有有效的SSL证书,因此您需要安装一个证书或使用Dropbox,以下链接可能对您有所帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.