У меня есть статическая библиотека iOS, которую я компилирую с iOS 6.1. Что я хотел бы сделать, так это запустить проверку во время компиляции, чтобы увидеть, скомпилировано ли приложение iOS, которое ссылается на мою статическую библиотеку, с iOS7 (и выполнить некоторый код в этом событии). Есть ли способ сделать это? Я пробовал:
Любая помощь с благодарностью. Спасибо!
РЕДАКТИРОВАТЬ: По запросу, здесь больше информации о том, что я пытаюсь сделать.
Моя статическая библиотека, скомпилированная в iOS6, предоставляет полноэкранные рекламные объявления С изменениями iOS7 в отображении строки состояния мои объявления (UIViews w / UIWebViews) отображаются под элементами строки состояния. Итак, я пытаюсь определить, скомпилировано ли приложение, использующее мою статическую библиотеку, с iOS7, поэтому я могу сделать такие вещи, как отрегулировать источник вышеупомянутого UIWebView вниз, добавив 20-точечный серый объект UIView в верхнюю часть моего главный объект UIView, чтобы элементы строки состояния были видны и т. д. Кроме того, также важно проверить, скомпилировано ли приложение с iOS6, поэтому я не применяю исправления пользовательского интерфейса неправильно. Проверка свойства systemVersion в UIDevice не сработает, поскольку она выдаст одно и то же независимо от того, скомпилировано ли приложение, использующее мою библиотеку, на iOS6 или iOS7.
Я вижу ваше затруднительное положение. Вы должны знать, активен ли режим совместимости или нет. В любом случае, я бы рекомендовал обновить вашу библиотеку до версии iOS 7, так как если целевое приложение создано для iOS 7, ваши представления библиотеки будут выглядеть неправильно, даже если вы созданы для iOS 6, поскольку среда выполнения динамически связана и ее характеристики определяются хост-приложение, а не ваш SDK.
Во всяком случае, вот как я бы сделал, чтобы убедиться, что ваше веб-представление отображается правильно:
Получить границы для окна. Окно всегда представляет размер экрана в портретной ориентации. Взгляды превращаются в это пространство. Ключевым моментом здесь является окно в iOS 6, в котором размер его контроллера представлений учитывается для строки состояния (кроме приложений со скрытой строкой состояния), но в iOS 7 его размер соответствует размеру строки состояния. Затем вы можете найти ориентацию строки состояния, взять необходимые 20px с высоты (или ширины) окна и использовать UIKit для преобразования прямоугольника в координаты в вашем локальном представлении.
CGRect windowBounds = [[[UIApplication sharedApplication] keyWindow] bounds];
CGRect advertRect;
if ([[UIApplication sharedApplication] isStatusBarHidden]) {
advertRect = [[[UIApplication sharedApplication] keyWindow] convertRect:advertRect
toView:self.view];
}
else{
//status bar is not hidden
CGRectEdge edge;
switch ([[UIApplication sharedApplication] statusBarOrientation]) {
case UIInterfaceOrientationLandscapeLeft:
edge = CGRectMinXEdge;
break;
case UIInterfaceOrientationLandscapeRight:
edge = CGRectMaxXEdge;
break;
case UIInterfaceOrientationPortraitUpsideDown:
edge = CGRectMaxYEdge;
break;
case UIInterfaceOrientationPortrait:
default:
edge = CGRectMinYEdge;
break;
}
CGRect statusBarRect;
CGRect remainingRect;
CGRectDivide(windowBounds, &statusBarRect, &remainingRect, 20.0, edge);
//converts from window co-ordinates to view co-ordinates
advertRect = [[[UIApplication sharedApplication] keyWindow] convertRect:advertRect
toView:myView];
}
Этот прямоугольник будет прямоугольником всего оставшегося пространства окна в области строки состояния независимо от того, на какой iOS вы работаете. Вы должны быть в состоянии использовать это для позиционирования вашего веб-просмотра.
Возможно, вы сможете найти в заголовках Mach-O приложения LC_VERSION_MIN_IPHONEOS, который сообщит вам версию SDK, с которой связано приложение.
Вы должны использовать самоанализ во время выполнения для селекторов, которые вы хотите вызвать.
Например.
if ([self.navigationController.navigationBar respondsToSelector:@selector(barTintColor)]) {
[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
}
Или, если вам нужно, вы можете использовать проверку версии системы
if ([[UIDevice currentDevice] systemVersion].floatValue < 7.000000) {
[[UIBarButtonItem appearanceWhenContainedIn:containerClass, nil] setTintColor:tintColor];
}
Самоанализ лучше, так как он гарантирует, что метод доступен, и вышеупомянутый метод проверки системы не является надежным при сравнении младших версий системы.