无线iphone应用程序分发 - itms-services协议的问题

时间:2011-01-14 19:41:34

标签: ios distribution

我已按照Apple和其他博客posts的所有说明进行操作。我已经存档了应用程序,制作了.plist和.ipa文件,将它们放在服务器上并链接到它们。我可以很好地安装配置文件。但是当我点击链接安装应用程序时(在iphone上的safari中),没有任何反应。没有错误消息。没有。这就是链接的样子:

<a href="itms-services://?action=download-manifest&url=http://mydomain.com/test/myApp.plist">Install the app</a>

知道为什么这不起作用?似乎itms-services协议已经死了。 MIME类型很好(我可以指向地址栏中的plist文件,它显示为文本)。

17 个答案:

答案 0 :(得分:16)

当我在清单文件和应用程序归档文件的文件名中有空格时,我有类似的症状。我删除了所有空格,无线安装为我工作。看起来你的清单没有空格,所以也许你的app文件可以吗?

答案 1 :(得分:15)

答案实际上非常简单:URL需要“双重转义”,即

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

这是因为在将其视为另一个URL之前,该值将未转义转移到https://example.com/My%20App.plist。这将由example.com处的服务器转义为空格。

解析器特别处理:...&url=https://.../test/a+b导致Apache日志中出现"GET /test/a+b HTTP/1.1"。 (假设所有查询字符串都是application/x-www-form-urlencoded是不明智的;这只是在HTML中标准化。)

顺便说一句,看起来itms-services使用+[NSURL URLWithString:] 验证网址:url=.../My%20App.plist没有请求,因为[NSURL URLWithString:@"https://.../My App.plist"]返回nil。然而,NSURL中存在一个长期存在的错误:它将在末尾转义一个无效(BMP)字符而不是返回nil。我的测试用例

  • url=.../test/%3c会生成日志"GET /test/< HTTP/1.1"(这绝对是无效的HTTP!)
  • url=.../test/%0a导致设备出错但没有日志消息(因为Apache将其视为格式错误的请求)
  • url=.../test/%0d会生成日志"GET /test/\r HTTP/1.1"

答案 2 :(得分:4)

itms-services是一个标识符,apple / iphone将通过该标识符识别它应该验证证书并且应该安装。

要在安装ipa文件之前验证配置文件,它将连接到“ax.init.itunes.apple.com”和“ocsp.apple.com”。

如果您使用任何内部网连接,请检查这些链接是否可访问?如果没有,您无法通过无线方式安装应用程序。

&安培;设备上的最小操作系统应为4.0

答案 3 :(得分:3)

我正在使用IIS 6.0并且index.html页面正在加载但是当用户点击苹果设备(即)iphone 4的.plist链接时,我不断收到“无法连接www.mywebsite.com”。除了添加MIME类型之外的解决方案是共享.plist文件所在的Web共享,最重要的是:更改清单.plist文件的安全访问权限。完全控制默认的Windows用户

答案 4 :(得分:2)

答案 5 :(得分:2)

看起来你有几个指针可能会出现问题,下次是:从Xcode Organizer检查设备控制台,它通常包含有关失败的OTA分发的有用信息。

答案 6 :(得分:1)

确保所有网址都完全合格。包括png文件的那些。

答案 7 :(得分:1)

我遇到了和上面相同的问题。在完成上述所有操作并失败之后,我发现当我存档我的应​​用程序时,我没有在设置中放入应用程序URL,因此这个URL从未在我的plist文件中。确保在查看plist文件时应用程序URL所在的位置。

答案 8 :(得分:1)

对于有兴趣动态生成plist的人,这个例子是PHP:

$appUrl='itms-services://?action=download-manifest&url=http://server/iOSpList.php?'.
                'url%3D'.$app['url'].
                '%26bundle%3D'.$app['bundle'].
                '%26version%3D'.$app['version'].
                '%26name%3D'.$app['name'];

另外,请确保将mime类型返回为application/xml

答案 9 :(得分:1)

与之前的许多其他人一样,我也遇到过这个问题的守护进程。在我的情况下,问题是plist文件没有正确格式化。请确保该文件遵循文档中列出的确切模式:http://developer.apple.com/library/ios/#featuredarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html

答案 10 :(得分:0)

使用AdHoc配置文件分发我的应用时出现类似问题。我尝试删除旧的配置文件,生成新的配置文件,重新启动Xcode,清理和重建,检查URL路径名称等。该应用程序将安装在某些设备上但不安装在其他设备上。

对我来说有用的是更改应用版本并构建更新的数字。

答案 11 :(得分:0)

如果您是通过电子邮件发送链接,则无法在电子邮件中使用HTML格式。您必须使用“富文本”格式

不知道为什么,但那是怎么回事(至少用Outlook)

答案 12 :(得分:0)

正确的解决方法是用“+”(加号)替换空格为... url = ...表示它是查询字符串参数,它们在编码时应编码为表单数据参数对于URL。

从这里W3.org - Forms in HTML documents

  

“控制名称和值被转义。空格字符被'+'替换,然后保留字符被转义,如[RFC1738]中所述”

P.S。这解决了我们在icenium.com开发过程中遇到的同样问题。 您可以检查在那里签名的AdHoc配置,并查看它如何适用于名称中包含空格的项目。

答案 13 :(得分:0)

我同时尝试了一些,所以我不确定哪一个是好的。

创建了一个通配符应用程序ID(名称通配符,Bunde标识符*),为此应用程序创建了一个配置文件,并使用此配置文件对ipa签名。

在配置门户上注册了一个设备。

将我链接应用程序dev.html的文件命名为index.html

答案 14 :(得分:0)

我发现'无法使用index.html'来安装ios 6。通过从'index.html'更改为'dev.html'来修复。希望能帮到某人

答案 15 :(得分:0)

我完全按照你所描述的那样遇到了这个问题,我的问题结果是我错过了网址中的“http://”。将此部分添加到.plist文件的url字段后,一切正常。希望它有所帮助!

答案 16 :(得分:-1)

我认为您还需要将其设为https,如同 https://mydomain