无线 iphone 应用程序分发 - itms 服务协议问题

2024-02-16

我已经遵循了所有的指示Apple http://developer.apple.com/library/ios/#featuredarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html和其他一些博客posts http://jeffreysambells.com/posts/2010/06/22/ios-wireless-app-distribution/。我已经归档了该应用程序,制作了 .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 文件,它会显示为文本)。


答案其实很简单:URL 需要“双重转义”,即

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

这是因为该值得到未逃脱的 to https://example.com/My%20App.plist在被视为另一个 URL 之前。这不会被服务器转义example.com到一个空间。

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

顺便说一句,它看起来像 itms-services 使用+[NSURL URLWithString:] to validate URLs: 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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无线 iphone 应用程序分发 - itms 服务协议问题 的相关文章

随机推荐