<a href="itms-services://?action=download-manifest&url=http://mydomain.com/test/myApp.plist">Install the app</a>
你知道为什么这个不起作用吗?看起来itms-services协议已经失效了。MIME类型没问题(我可以在地址栏中指向plist文件并将其显示为文本)。
<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
这是因为该值在被视为另一个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: url=.../My%20App.plist
结果没有请求,因为[NSURL URLWithString:@"https://.../My App.plist"]
返回nil
。然而,NSURL存在一个长期存在的bug:它会转义末尾的单个无效(BMP)字符而不是返回nil。我的测试案例:
url=.../test/%3c
结果在日志中显示为"GET /test/< HTTP/1.1"
(这绝对是无效的HTTP!)url=.../test/%0a
导致设备上出现错误,但没有日志消息(因为Apache将其视为格式不正确的请求)url=.../test/%0d
结果在日志中显示为"GET /test/\r HTTP/1.1"
当我在清单文件和应用程序归档文件的文件名中有空格时,我遇到了类似的症状。我从它们中删除了所有的空格,然后无线安装就可以使用了。看起来你的清单没有空格,所以可能你的应用文件有空格呢?
itms-services
url
参数。将名称中的空格完全去掉解决了问题...苹果再次失败。 - chownitms-services是苹果/iphone用于识别并验证证书以及安装应用的标识符。
在安装ipa文件之前,为了验证预配配置文件,它会连接到“ax.init.itunes.apple.com”和“ocsp.apple.com”。
如果您正在使用任何内部网络连接,请检查这些链接是否可访问?如果不行,您将无法通过空中安装方式安装该应用程序。
& 设备上的最低操作系统版本应为4.0。
确保您的服务器MIME设置正确。
在Google上搜索,您会找到正确的方法。
看起来你这里有几个指针可以找到问题所在,下次可以检查一下从 Xcode 组织器查看设备控制台,通常会包含有关 OTA 分发失败的有用信息。
如果有人对动态生成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'];
application/xml
。和许多人一样,我也遇到了这个麻烦的问题。在我的情况下,问题是plist文件格式不正确。请确保该文件遵循文档中概述的精确模式:
http://developer.apple.com/library/ios/#featuredarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html