Мы проверяем наличие обновлений, запрашивая у сервера значение хеша в заголовке plist, который выкладывается через php-файл, который запрашивает базу данных сервера. Вы можете сохранить этот хеш локально и сравнить его с последним запуском приложения. Таким образом, телефон узнает, устарела ли его версия. Затем мы загружаем новый plist в фоновом режиме и обновляем базу данных на телефоне.
EDIT:
В конце нашего php мы получаем MD5 XML-вывода plist, который мы генерируем на сервере, вот так:
header("MD5-Hash: ". md5($xml_output));
echo $xml_output;
Затем мы получаем хэш plist на iPhone от userDefaults, например, так:
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
curHash = [defaults stringForKey:kUpdateUserDefault];
И хеш сервера от NSURLRequest, вот так:
NSString *hash = [[[res allHeaderFields] objectForKey:kUpdateHeaderField] retain];
Затем мы сравниваем их и начинаем загрузку, только если хэши не совпадают:
if (![curHash isEqualToString:hash]) {
[self performSelector:@selector(sendUpdateStarted) onThread:[NSThread mainThread] withObject:nil waitUntilDone:NO];
... download the file and save it as the new iPhone's plist
}
Этот код написан моим очень способным партнером, Оливером Райсом.