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

sol*_*sol 23 distribution ios

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

<a href="itms-services://?action=download-manifest&url=http://mydomain.com/test/myApp.plist">Install the app</a>
Run Code Online (Sandbox Code Playgroud)

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

ptr*_*ico 16

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

  • 我从Jenkins构建服务器安装 - 您需要确保项目名称(因此URL)没有空格,因为iOS中的itms-services处理程序即使正确URLencoded也不能处理空格. (4认同)
  • @jhabbott谢谢你...我花了2个小时调试并尝试使用不同的url编码`itms-services``url`参数.将空间完全取出名称固定它... Apple再次失败. (2认同)

tc.*_*tc. 15

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

itms-services://?action=download-manifest&url=https://example.com/My%2520App.plist
Run Code Online (Sandbox Code Playgroud)

这是因为该值被转义,以https://example.com/My%20App.plist被视为另一个URL之前.这被服务器example.com转移到空间.

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

顺便说一下,它看起来像ITMS服务使用+[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"


CKT*_*CKT 4

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

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

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

设备上的最低操作系统应为 4.0