Вызов openURL для установки приложения OTA приводит к установке кэшированного приложения
Я создаю собственное приложение для доставки обновленных приложений, которые наши бизнес-клиенты могут устанавливать по беспроводной сети.
В конечном счете, я запускаю установку так:
NSURL *otaURL = [NSURL URLWithString:@"itms-services://?action=download-manifest&url=<<my-url.plist>>"];
[[UIApplication sharedApplication] openURL:otaURL];
Это отлично работает, но мы заметили, что иногда он сохраняет кеш plist или ipa-файл и устанавливает старую версию. Мы исключили, что он не обновляется на сервере, потому что мы можем даже удалить файл ipa с сервера, и он все равно установит старую версию.
Изменение имени файла.plist и.ipa будет работать, но на самом деле не является желаемым конечным состоянием, поэтому мой вопрос: есть ли способ заставить устройство выйти и получить файл с сервера вместо того, чтобы полагаться на его кэш?
2 ответа
У меня была очень похожая проблема, и я решил ее с помощью (грязного) обходного пути; все же лучше, чем создавать разные файлы.plist для каждой новой версии.
Я вставляю некоторые случайные числа в URL, такие как:
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
Я думаю, что люди в TestFlight столкнулись с той же проблемой. Используя их сервисы, я обнаружил, что обновление приложения без удаления какой-либо существующей более старой версии может привести к очень ошибочному поведению с работающей половиной старой версии (например, значками) и половиной нового поведения.
Это было действительно странно. Ср этот другой вопрос: почему некоторые файлы не установлены правильно при установке через TestFlight?
Вам следует попытаться связаться со службой поддержки Apple или с парнями из TestFlight, чтобы узнать, исправили ли они эту проблему. Удачи с этим!