Как использовать предупреждения компилятора xcode для определения минимальной цели развертывания IOS - PullRequest
13 голосов
/ 14 января 2011

Я создаю приложение для iOS, используя Xcode 3.2.5 с базовым SDK, установленным на iOS 4.2

Я знаю, что использовал некоторые API от 4.0 и 4.1, но не уверен, что мне действительно нужно 4.2.

Согласно Руководству по разработке iOS, «Xcode отображает предупреждения о сборке, когда обнаруживает, что ваше приложение использует функцию, которая недоступна в целевой версии ОС».

Так что я надеялся использовать предупреждения компилятора для получения моего минимального требования к ОС. Тем не менее, даже когда я устанавливаю свою цель развертывания iOS на iOS 3.0, я все равно не получаю никаких предупреждений компилятора.

Должно быть, я что-то делаю не так, но не уверен, что? Может ли кто-нибудь подтвердить, что он получает предупреждения компилятора, когда цель развертывания iOS меньше базового SDK и код использует базовые функции SDK? Или предупреждения компилятора отображаются только в том случае, если вы связываете каркас, которого не было в целевой версии развертывания iOS?

Ответы [ 3 ]

3 голосов
/ 25 июля 2011

Это ведет себя как ожидалось: изменение цели развертывания только влияет на минимальную версию ОС, на которой будет работать приложение, а не на максимальную.

Если вы используете SDK 4.3 и устанавливаете цель развертывания 4.0, это просто означает, что ваше приложение будет жестко связывать любые API до 4.0 и слабое связывание любых API, представленных между 4.0 и 4.3. Вы должны проверить во время выполнения либо наличие API (например, нулевого указателя для функций C), либо версию ОС.

Цель развертывания генерирует предупреждения XCode, но для устаревших API: например, если вы используете API, устаревший в версии 4.1 и новее, а цель развертывания - 4.1 или новее, вы получите предупреждение, но если оно 4.0 или раньше, вы «т.

Похоже, что вам действительно нужно в вашем случае эквивалент MAC_OS_X_VERSION_MAX_ALLOWED (это не является частью настроек сборки по умолчанию, но вы можете определить его самостоятельно и оно должно переопределить значение, установленное SDK), но для iOS SDK. Я не уверен, что он официально существует на самом деле: мне удалось найти __IPHONE_OS_VERSION_MAX_ALLOWED, но, учитывая, что он начинается с __, я не уверен, что он действительно поддерживается.

Правильное решение, по-видимому, заключается в простой сборке с предыдущими версиями SDK (вы всегда можете сделать это в симуляторе), и вы получите ошибки XCode при использовании отсутствующих API.

Для получения дополнительной информации прочитайте эту техническую заметку: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html

2 голосов
/ 14 января 2011

временно смените базу sdk, чтобы увидеть их

0 голосов
/ 14 января 2011

Отредактировано: для обнаружения новых API, которые доступны только в новых версиях iOS, я не думаю, что XCode может сделать это автоматически для нас. Нам нужно самим думать об этом. Мой рекомендуемый источник чтения:

  1. Войдите в свою учетную запись dev и выполните поиск API diffs . Эти официальные документы API diffs должны быть тщательными и полезными.
  2. Проверьте отличный пост о том, как обернуть ваш код, чтобы сделать его совместимым на более низких версиях iOS:

===

Попробуйте очистить папку build вашего проекта. После этого вы должны увидеть предупреждения об устаревших API, используемых вашим кодом.

alt text

alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...