Вызов 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, чтобы узнать, исправили ли они эту проблему. Удачи с этим!

Другие вопросы по тегам