企业应用程序部署不适用于iOS 7.1

我们使用itms-services:// URL通过企业帐户分发应用程序。 这一直运行良好,但在我们的iPad上安装iOS 7.1 beta后,它拒绝安装。 相反,我们只是得到通用Cannot connect to example.com iOS的消息,当没有任何问题下载应用程序时, Cannot connect to example.com显示的消息。

我一直无法在SO,Google或7.1发行说明中find任何可能导致问题的信息。

我试图安装应用程序时,通过将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证书的问题。 我们已经这样做了,但是我可以想象没有它会有问题。

ingconti是正确的。

  1. 上传你的app.plist到保pipe箱。
  2. 获取app.plist的共享链接,如https://www.dropbox.com/s/qgknrfngaxazm38/app.plist
  3. 用链接replacewww.dropbox.comdl.dropboxusercontent.com ,如https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist
  4. 删除Dropbox可共享链接上的任何参数,如“?dl = 0t”(根据Carlos Aguirre Tradeco在企业应用程序部署不适用于iOS 7.1和我自己的经验)。
  5. 创build一个download.html文件,其格式为<a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist">INSTALL!!</a>
  6. 将您的download.html上传到Dropbox
  7. 再次,获取download.html的共享链接,如https://www.dropbox.com/s/gnoctp7n9g0l3hx/download.html ,并删除任何参数。
  8. 将第二个链接中的dl.dropboxusercontent.comreplace为www.dropbox.com ,例如https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html

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

世界多么精彩!

除了Mark Parnell的回答之外,解决这个问题的一个快捷方式是将清单plist放入Dropbox,然后使用Dropbox Web界面获得直接的https链接('Share link' – >'获取链接' – >'下载')。

实际的ipa可以保留在任何你经常使用的地方。 在将plist的URL插入itms-servivces URL的查询之前,您需要对plist的URL进行URL编码(尽pipe只需用%3Dreplace任何&s就可以)。

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

确实,在未来,你将有望通过https7进行所有的OTA部署,使用iOS7.1。 对苹果公司的耻辱没有logging在案。

对于那些正在寻找一个更好的内部解决scheme,而不是依赖保险箱,或者需要为证书提供现金的情况下,如果您按照第5条提到的步骤操作,可以有一个解决scheme: http:// blog。 httpwatch.com/2013/12/12/five-tips-for-using-self-signed-ssl-certificates-with-ios/

其要点是:

  • 创build您自己的CA Authority证书,您可以在完全信任的设备上安装证书(我只需通过电子邮件将其安装)
  • 根据根证书创buildkey / cer对并将其安装到您的服务器上
  • 确保您的networking服务器使用与CA机构根证书匹配的密钥/证书对
  • 在这一点上,你应该可以像往常一样通过https安装你的应用程序
  • 所有这些都可以在OSX上使用openssl在默认情况下已经安装完成

这与仅执行自签名证书不同,在此解决scheme中,您也是作为您自己的私人证书颁发机构。 如果您的Apple设备上安装的根证书没有标记为可信(绿色),则说明有问题。 做完了。

这绝对有效。

更新:2014年3月13日 – 我提供了一个简单的命令行工具,简化了整个过程。 你可以在: https : //github.com/deckarep/EasyCert/releases

我有同样的问题,虽然我已经使用SSL服务器,只是改变链接到https不工作,因为有一个潜在的问题。

在这里输入图像描述 点击这里查看图片

这突出的一点告诉我,我们应该给予select信任证书,但由于这是应用程序商店,通过Safari工作,恢复build议只是没有提出。


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

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

我终于find了一个解决scheme,通过创build一个自签名的根证书颁发机构并使用它来生成我们的服务器的SSL证书。

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


创build一个证书颁发机构

从我所收集的证书中可以看出证书是真实的。 由于我们要自己创build一个,所以它不是完全安全的 ,但这意味着您可以信任来自给定权威的所有证书。 这些权限列表通常默认包含在浏览器中,因为这些权限实际上是可信的。 (GeoTrust Global CA,Verisign等)

  • 打开钥匙串并使用证书助手创build一个权限

在这里输入图像描述

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

在这里输入图像描述

  • 我不知道是否有必要,但是我让权威值得信赖。

在这里输入图像描述


生成证书签名请求

在我们的例子中,证书签名请求是由服务器pipe理员生成的。 简单地说,这是一个文件,询问“我可以为我的网站有这个信息的证书”。

  • 接下来,你将不得不创build你的证书签名请求 (我使用OSX服务器的证书pipe理器这一点

在这里输入图像描述

  • 填写你的证书信息(只能包含ascii字符,谢谢@Jasper Blues)

在这里输入图像描述

  • 保存生成CSR的地方

在这里输入图像描述


创build证书

再次作为证书颁发机构,由您来决定派遣您CSR的人是否真实,而不是假装别人。 真正的权威人士有自己的做法,但是由于你确信你是你,所以你的validation应该是肯定的:)

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

在这里输入图像描述

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

在这里输入图像描述

  • 点击“让我覆盖此请求的默认值button”

在这里输入图像描述

  • 我喜欢增加有效期。

在这里输入图像描述

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

在这里输入图像描述

  • 点击此屏幕上的继续

在这里输入图像描述

  • 请确认您单击SSL服务器authentication ,这一个让我头痛。

在这里输入图像描述

  • 您可以通过其余的选项点击继续。

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

在这里输入图像描述


安装证书

我们现在需要将服务器设置为使用我们刚创build的SSLstream量的证书。

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

在这里输入图像描述

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

在这里输入图像描述

  • 更新您的服务器以使用此新证书。 如果您发现新证书不会“粘住”并保持还原状态,请返回BOLD ITALIC CAPS

在这里输入图像描述


设置设备

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

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

在这里输入图像描述

  • 然后我把这个文件放在我的OTA应用程序服务器上,用户可以点击这个链接下载权限证书。 直接向用户发送证书也是一个有效的select。

在这里输入图像描述

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

在这里输入图像描述


testing

  • 确保你的plist链接是https

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

我可以确认它的作品,但你必须把HTML和plist放在保pipe箱。 它也适用于非企业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)

打开terminal并运行命令:curl -i https://(.ipa文件path不是plist)

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

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

我有同样的麻烦,做了上面提到的。

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

这两个页面都成功地安装了应用程序在与iPhone 7.1的iPhone手机

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

我创build了一个新问题: 升级的adhoc应用程序部署不适用于7.1以前的ios

这两个问题都是紧密相关的,并且由于缺乏官方的参考资料而受到保护。

一些不错的人通过使用Class 1 StartSSL证书和共享的Apacheconfiguration来处理这个问题,该configuration添加了证书支持(将与任何证书一起使用)以及用于自动更改现有* .plist文件中的链接的代码。 太长的副本,所以这里是链接: http : //cases.azoft.com/how-to-fix-certificate-is-not-valid-error-on-ios-7/

如果您碰巧拥有AWS S3,就像魅力一样。 好。 相对而言:-)

在AWS中为您的Ad hoc创build一个存储桶,添加一个索引文件(它可以只是一个空白的index.html文件),然后使用可以连接到S3的客户端,如Cyber​​Duck或Coda(我使用的是Coda – 站点获取连接窗口),然后像连接一样设置连接:

然后在XCode中构build特定的企业,并确保使用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

和瞧。

这只适用于通用的AWSurl – 我还没有在AWS上尝试使用自定义url,所以您可能需要做一些不同的事情。

我决心试着让詹姆斯·韦伯斯特(James Webster)的解决scheme工作,但是我无法将它与Plesk合作。

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

https://www.testflightapp.com/

这对于特定开发版本和企业版本的托pipe和分发来说是非常棒的服务。

进一步的关于Dropbox的回答,我实现了以下文件树,例如只有PLIST文件必须上传到Dropbox:

  1. 将http上的ipafile upload到你的服务器(这里没有改变)
  2. 上传供应(.mobileprovision)文件到你的服务器在http(这里没有改变)
  3. 将plistfile upload到您的保pipe箱 (在plist文件中不做任何更改,因为URL是绝对的)
  4. 使用选项“与Dropbox共享链接”,将链接复制到剪贴板。 此链接必须通过dl.dropboxusercontent.com更改零件www.dropbox.com后,才能复制到您的html文件中,并复制到itms-servivces URL的查询中。 注意我URL编码@Mikebuild议的链接,但我不testing没有这样做。 现在,itms-services URL的查询应该如下所示: itms-services://?action=download-manifest&url=https%3A%2F%2Fdl.dropboxusercontent.com%2Fs%2FYourShortDropboxLink.plist

  5. 将httpfile upload到您的服务器。 请注意,html文件包含指向ipa和configuration文件的链接。

  6. 从您的设备访问您的HTML文件,现在的IPA可以通过OTA像平时一样安装。

从现在开始,只有ipa文件需要更改,以便通过OTA向您的Beta版testing人员提供下一个应用程序版本。 直到苹果还没有改变安全规则。

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

我们的团队使用Dropbox进行临时分发,使用https,但是我们的应用程序仍然无法安装。 经过很多麻烦,我们意识到标题字段也是必需的。 每当我们发送一个没有这个字段的Safari浏览器忽略链接,并没有提示用户安装。 有时为了快速开发testing,我们跳过了XML中的标题节点,而不是填充它。 如果这有助于任何人遇到此问题,请确保您的.plist包含以下填充的节点:

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

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

我find了解决这个问题的方法。 您需要上传带有“.crt”扩展名的证书文件,并在您的移动Safari中键入地址。 系统询问您将证书添加到可信证书列表中。 在这个操作之后,您将能够安装您的临时应用程序。

通用的解决scheme是将您的设备连接到Mac,并观察安装过程中发生了什么。 我得到一个错误:

无法加载下载清单与基础错误:错误域= NSURLErrorDomain代码= -1202“无法连接到存储”UserInfo = 0x146635d0 {NSLocalizedDescription =无法连接到存储,NSLocalizedRecoverySuggestion =你想连接到服务器呢,NSLocalizedFailureReason =无法build立安全连接。 请检查您的date和时间设置。 ,NSErrorFailingURLStringKey = https://myserver.com/app/manifest.plist,NSUnderlyingError = 0x14678880“这个服务器的证书是无效的,你可能连接到假装为”myserver.com“的服务器,机密信息处于危险之中。“,NSURLErrorFailingURLPeerTrustErrorKey =,NSErrorFailingURLKey = https://myserver.com/app/manifest.plist }

甚至有错误的build议检查date设置。 由于某种原因,date是1970年1月1日。设置正确的date解决了这个问题。

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