企业应用部署无法在iOS 7.1上运行

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

我无法在SO,谷歌或7.1发布说明中找到任何东西来建议可能导致问题的原因。

119679 次浏览

我通过将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证书。我们已经做过了,但我想没有它你会有问题。

进一步Mark Parnell的回答,一个快速而又不太规范的解决方法是将manifest plist放入Dropbox,然后使用Dropbox的web界面来获得直接的https链接(“分享链接”->“获取链接”->“下载”)。

真正的ipa可以保留在你经常饮用的地方。在将plist的URL插入itms- services URL的查询之前,您需要对其进行URL编码(尽管只是将任何&s替换为%3D也可以)。

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

我可以确认它的工作,但你必须把html和plist在dropbox上。 它也适用于非企业OTA,即你想要与你的开发团队共享应用程序

我做了:

a)在我的网站上,我用这个链接做了一个页面:

.. href="https://dl.dropboxusercontent.com/u//(your DB id)/ipa.html">MyApp

.html

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

< p > . .https://dl.dropboxusercontent.com/u/(your DB id)/MyApp.plist"> . DB id " 点击安装MyApp

c)在DropBox上移动plist,但让它指向我的旧服务器(没有https)

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”(根据Carlos Aguirre Tradeco在企业应用部署无法在iOS 7.1上运行和我自己的经验)。
  5. 创建一个带有<a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist">INSTALL!!</a>格式链接的download.html文件
  6. 上传你的download.html到dropbox
  7. 同样,获取download.html的共享链接,如https://www.dropbox.com/s/gnoctp7n9g0l3hx/download.html,并删除任何参数。
  8. 在第二个链接中用dl.dropboxusercontent.com替换www.dropbox.com,比如https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html

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

多么美好的世界啊!

这是真的,在iOS7.1下,所有OTA部署都将通过https进行。苹果没有记录这一点,真可耻。

对于那些正在寻找比依赖dropbox或必须支付现金获得证书更好的内部解决方案的人来说,如果你遵循提示#5中列出的步骤,你可以有一个解决方案:http://blog.httpwatch.com/2013/12/12/five-tips-for-using-self-signed-ssl-certificates-with-ios/

它的要点是:

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

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

这绝对有效。

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

除了使用Dropbox进行企业推广,你还可以使用TestFlight进行企业签名应用的推广。

https://www.testflightapp.com/

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

我也遇到了同样的麻烦,照上面说的做了。

  • 把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无法安装该应用程序。

我创建了一个新问题:升级后的adhoc应用部署在7.1之前的ios上无法工作

这两个问题紧密相关,也因缺乏官方参考而联系在一起。

一些好人通过使用Class 1 StartSSL证书和共享Apache配置来处理这个问题,该配置添加了证书支持(将与任何证书一起工作)和更改现有*中的链接的代码。Plist自动文件。太长了,不能复制,所以这里是链接: http://cases.azoft.com/how-to-fix-certificate-is-not-valid-error-on-ios-7/ < / p >

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

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

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

我找到了解决这个问题的办法。您需要上传扩展名为'的证书文件。Crt ',并在移动safari中输入它的地址。系统询问您是否将证书添加到受信任证书列表。在此操作之后,您将能够安装您的特别应用程序。

我也遇到了同样的问题,尽管我已经在使用SSL服务器,但简单地将链接更改为https是行不通的,因为有一个潜在的问题。

enter image description here 点击此处查看图片 < / p >

突出显示的位告诉我,我们应该被给予信任证书的选项,但由于这是应用程序商店,通过Safari工作,恢复建议只是没有提出。


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

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

    我最终通过创建自签名根证书颁发机构并使用此生成我们服务器的SSL证书找到了解决方案。

    我使用了钥匙链访问和OSX服务器,但每个步骤都有其他有效的解决方案


    创建证书颁发机构

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

    • 打开Keychain并使用证书助手创建一个权威

    enter image description here

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

    enter image description here

    • 我不知道是否有必要,但我让权威得到了信任。

    enter image description here


    生成证书签名请求

    在本例中,证书签名请求由服务器管理员生成。简单地说,它是一个文件,询问“我可以为我的网站获得一个包含此信息的证书吗?”

    • 接下来,你必须创建你的证书签署请求(我使用OSX服务器的证书管理器

    enter image description here

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

    enter image description here

    • 将生成的CSR保存在某个地方

    enter image description here


    创建证书

    再次作为证书颁发机构,由您来决定向您发送CSR的人是否真实,他们是否假装是其他人。真正的权威有他们自己的方法来做这件事,但因为你希望非常确定你是你,你的验证应该非常确定:)

    • 返回“Keychain Access”,如图所示打开“Create A Certificate..”选项

    enter image description here

    • 将保存的CSR拖到指定的框中

    enter image description here

    • 点击“让我重写此请求的默认值”按钮

    enter image description here

    • 我想延长有效期。

    enter image description here

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

    enter image description here

    • 在此屏幕上单击continue

    enter image description here

    • 这个问题让我头疼。

    enter image description here

    • 您可以单击继续查看其余选项。

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

    enter image description here


    安装证书

    现在我们需要设置服务器来使用我们刚刚为它的SSL通信创建的证书。

    • 如果你在服务器上工作的设备,你可能会发现证书已经安装。

    enter image description here

    • 如果没有,双击Pending证书,并将刚才从电子邮件中保存的PEM文件拖到指定的空间中。(或者,如果你没有保存PEM,你也可以从keychain中导出它。)

    enter image description here

    • 更新您的服务器以使用这个新证书。如果你发现新的证书不“粘”,并一直还原,返回BOLD ITALIC CAPS中的位

    enter image description here


    安装设备

    你需要安装应用程序的每个设备都需要有这个证书授权机构的副本,这样他们就知道他们可以信任来自该授权机构的SSL证书

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

    enter image description here

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

    enter image description here

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

    enter image description here


    测试

    • 确保你的plist链接是https

      • 尝试安装一个应用程序!现在应该可以工作了。证书颁发机构是受信任的,SSL证书来自该颁发机构。
      • 李< / ul > < / >

进一步解释之前关于Dropbox的问题,我实现了以下文件树,比如只有PLIST文件必须上传到Dropbox:

  1. 以HTTP方式将ipa文件上传到服务器(此处没有更改)
  2. 以HTTP方式将供应(.mobileprovision)文件上传到服务器(此处没有更改)
  3. 将plist文件上传到你的dropbox(在plist文件中不需要做任何改变,因为url是绝对的)
  4. 使用“与Dropbox共享链接”选项将链接复制到剪贴板。这个链接必须复制到你的html文件到itms- services URL的查询后,用dl.dropboxusercontent.com改变部分www.dropbox.com。注意,我URL编码的链接由@Mike建议,但我不测试没有这样做。现在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提供下一个应用版本给你的测试人员。直到苹果改变安全规则。

我在这里加入我使用的非常简单的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>

如果你碰巧有AWS S3,它也很有魅力。好。相对而言:-)

在AWS中为您的ad hocs创建一个bucket,添加一个索引文件(它可以只是一个空白的index.html文件),然后使用一个可以连接到S3的客户端,如CyberDuck或Coda(我使用Coda -在那里您可以选择添加站点以获得连接窗口),然后设置连接如下所示:

.

然后在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,所以你可能需要做一些不同的事情。

我决心尝试让詹姆斯·韦伯斯特的解决方案凌驾于工作之上,但我无法让它与普雷斯克一起工作。

打开终端,执行如下命令: Curl -i https://(。Ipa文件路径不是plist)

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

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

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,这里是这个链接可能对你有帮助

通用的解决方案是将你的设备连接到Mac上,然后观察安装过程中发生了什么。我得到一个错误:

无法加载带有潜在错误的下载清单:错误 域=NSURLErrorDomain Code=-1202 "无法连接到存储" UserInfo=0x146635d0 {NSLocalizedDescription=无法连接到 Store, NSLocalizedRecoverySuggestion=你想连接到 服务器呢?, NSLocalizedFailureReason=安全连接不能 建立。请检查您的Date &时间设置。, NSErrorFailingURLStringKey = https://myserver.com/app/manifest.plist, NSUnderlyingError=0x14678880 "此服务器的证书是 无效的。您可能正在连接到一个假装是服务器的服务器 " myserver.com "可以把你的机密信息放在 风险。”NSURLErrorFailingURLPeerTrustErrorKey =, NSErrorFailingURLKey = https://myserver.com/app/manifest.plist} < / p >

错误中甚至有检查日期设置的建议。不知什么原因,那天是1970年1月1日。设置正确的日期就解决了这个问题。