企业应用程序部署不适用于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是正确的。
- 上传你的app.plist到保pipe箱。
- 获取app.plist的共享链接,如https://www.dropbox.com/s/qgknrfngaxazm38/app.plist
- 用链接replace
www.dropbox.com
与dl.dropboxusercontent.com
,如https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist - 删除Dropbox可共享链接上的任何参数,如“?dl = 0t”(根据Carlos Aguirre Tradeco在企业应用程序部署不适用于iOS 7.1和我自己的经验)。
- 创build一个
download.html
文件,其格式为<a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist">INSTALL!!</a>
- 将您的
download.html
上传到Dropbox - 再次,获取download.html的共享链接,如https://www.dropbox.com/s/gnoctp7n9g0l3hx/download.html ,并删除任何参数。
- 将第二个链接中的
dl.dropboxusercontent.com
replace为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的客户端,如CyberDuck或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:
- 将http上的ipafile upload到你的服务器(这里没有改变)
- 上传供应(.mobileprovision)文件到你的服务器在http(这里没有改变)
- 将plistfile upload到您的保pipe箱 (在plist文件中不做任何更改,因为URL是绝对的)
-
使用选项“与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
-
将httpfile upload到您的服务器。 请注意,html文件包含指向ipa和configuration文件的链接。
- 从您的设备访问您的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,这里的链接可能对你有帮助