Я думаю, что это способ обратной совместимости со старым iOS SDK и использования нового API при использовании более нового SDK. Также без предупреждений об устаревании в коде с использованием устаревшего класса.
if ([UIAlertController class]) {
// Use new API to create alert controller, add action button and display it
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"CityBoard" message:error.errorDescription preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction actionWithTitle: @"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
[alertController dismissViewControllerAnimated:YES completion:nil];
}];
[alertController addAction: ok];
[self presentViewController:alertController animated:YES completion:nil];
} else {
// We are running on old SDK as the new class is not available
// Hide the compiler errors about deprecation and use the class available on older SDK
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"CityBoard"
message:error.errorDescription
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
#pragma clang diagnostic pop
Администратор развертывания - одна из тех служб компендиума OSGi, которая, похоже, привлекла относительно мало внимания. Очевидно, что существует спецификация и, следовательно, предположительно эталонная реализация и тесты на соответствие. Реализация была внесена в проект Apache Felix, но, похоже, она почти бесследно затонула.
Я изучал Deployment Admin при разработке поддержки файлов PAR в SpringSource dm Server, но модель не подходила для наших случаев использования. В частности, пакет с данным символическим именем (и любой версией) не может находиться в двух разных пакетах развертывания, которые установлены в одной и той же среде OSGi.
Напротив, два файла PAR, установленные в одном экземпляре сервера dm, могут оба содержат пакет с данным символическим именем пакета (и той же самой или другой версией пакета). Мы рассматриваем это как требование масштабирования приложения: мы не хотели, чтобы большие приложения «сталкивались» просто потому, что их разработчики упаковали один и тот же пакет. Службы также охватываются файлами PAR.
В dm Server 2.0 мы обобщили концепцию PAR на «планы», которые представляют собой файлы, ссылающиеся по имени типа и версии на устанавливаемые артефакты. План может быть ограниченным (например, PAR) или неактивным и может быть атомарным (это означает, что жизненный цикл его содержимого атомарно привязан к жизненному циклу плана, как PAR) или неатомарным.
Вложенные структуры также могут быть исследован как возможный будущий стандарт OSGi для удовлетворения требований к определению области действия приложений, но с точки зрения дизайна, несколько отличной от области действия сервера dm. Вложенная платформа не может автоматически видеть пакеты и службы в своей родительской платформе. Таким образом, по умолчанию модель является изолированной, будь то изоляция дочерних фреймворков друг от друга или изоляция дочерних и родительских фреймворков. Области действия сервера dm намеренно изолируют дочерние элементы друг от друга, но изолируют дочерний элемент от его родителя только в одном направлении: дочерний элемент может видеть все пакеты и службы своего родителя.
Возможно, вам будет интересно узнать, что Apache Ace (который в настоящее время находится в стадии инкубации и наращивания) может динамически создавать пакеты развертывания для администратора развертывания и использовать (по умолчанию, при обеспечении целевой OSGi) Администратор развертывания Феликса.
Поскольку веб-сайт находится в стадии разработки: Apache Ace - это среда распространения программного обеспечения, которая позволяет централизованно управлять и распространять программные компоненты, данные конфигурации и другие артефакты в целевые системы. Он построен с использованием OSGi и могут быть развернуты в различных топологиях. Целевые системы обычно также основаны на OSGi, но не обязательно.