调用openURL来安装App OTA会导致安装缓存的应用程序

时间:2012-09-06 13:21:11

标签: ios uiapplication

我正在创建一个内部应用,以提供我们的业务客户可以无线安装的更新应用。

最终我启动安装的方式是:

NSURL *otaURL = [NSURL URLWithString:@"itms-services://?action=download-manifest&url=<<my-url.plist>>"]; 
[[UIApplication sharedApplication] openURL:otaURL];

这很好但我们注意到它有时会保留plist或ipa文件的缓存并安装旧版本。我们已经排除它没有在服务器上更新,因为我们甚至可以从服务器删除ipa文件,它仍然会安装旧版本。

更改.plist和.ipa文件名将起作用,但实际上并不是理想的最终状态,所以我的问题是:有没有办法强制设备出去从服务器获取文件而不是依赖于它的缓存?

2 个答案:

答案 0 :(得分:3)

我有一个非常类似的问题,我用一个(脏的)解决方法解决了它;仍然比为每个新版本创建不同的.plist文件更好。

我在网址中插入一些随机数,例如:

 NSURL *otaURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-services://?action=download-manifest&url=myapp.%d.plist", arc4random() % 10000]; 
 [[UIApplication sharedApplication] openURL:otaURL];

另一方面,我在.htaccess中添加一条规则(假设Apache,配置了mod_rewrite):

AddType application/octet-stream ipa
AddType text/xml plist

RewriteEngine on
RewriteRule (.*)\.\d+\.plist $1.plist

答案 1 :(得分:0)

我认为TestFlight的人遇到了同样的问题。在使用他们的服务时,我发现更新应用程序而不首先删除任何现有的旧版本可能导致一个非常错误的行为,一半的旧版本运行(例如图标)和一半的新行为。

这真的很奇怪。参看另一个问题:Why are some files not correctly installed when installing via TestFlight?

您应该尝试与Apple的支持人员或TestFlight人员取得联系,看看他们是否解决了这个问题。祝你好运!