Подтвердить что ты не робот

IOS Xcode: Предупреждать о методах не в минимальном целевом SDK

Есть ли способ, чтобы Xcode сказал мне, когда я вызываю метод, который недоступен в SDK для минимально поддерживаемой цели?

Например, метод [NSURLConnection sendAsynchronousRequest: queue: completeHandler:]. Этот метод доступен на iOS5 и выше. Но моя минимальная цель для приложений - iOS4.

Если я использую этот метод (sendAsync), мне бы хотелось, чтобы Xcode сказал мне, что этот метод недоступен для минимальной цели, которую я пытаюсь поддерживать.

Я попытался установить __IPHONE_OS_VERSION_MAX_ALLOWED = 40000 в настройках препроцессора, но это просто вызывает кучу ошибок Apple SDK, которые не помогают. (Возможно, потому что мой активный SDK - iOS5.1)

Является единственным решением для хранения старых SDK и их установки в Xcode?

Есть ли более простые решения?

4b9b3361

Ответ 1

После некоторых исследований, прочитав Apple Doc об этом и попробовав несколько вещей. Решение - это загрузка старого Xcode DMG из Apple, захват файла .pkg для того же SDK в качестве цели развертывания и установка его в вашей версии Xcode. Вот как:

  • Загрузите старый Xcode.dmg из Apple
  • Откройте DMG
  • В терминале перейдите в пакеты: "cd/Volumes/[DMG]/Packages; open."
  • Найдите SDK, который вы хотите, что-то вроде iPhoneSDK_4.0.pkg
  • Установите этот пакет, но измените каталог установки на /Applications/Xcode/Contents/Developer
  • Перезагрузите Xcode, если он был открыт.

Теперь, когда у вас есть тот же SDK, что и цель развертывания, установите для него BaseSDK то же самое. Когда вы будете строить, вы получите предупреждения о недостающих методах. Ваш проект может или не может успешно работать с более старым BaseSDK в новой версии Xcode, но это не имеет значения - вы только что нашли вызовы методов, которые вам нужно обернуть в проверку функций с помощью responseSoSelector:.

Ответ 2

К сожалению, нет стандартного способа сделать это. Установив целевую ОС на меньшее число, чем базовый SDK, Xcode будет слабо связывать библиотеки и фреймворки. При выполнении этого Xcode не будет предупреждать вас об использовании методов, которые могут быть недоступны на целевой ОС.

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

Я не думаю, что для этого существуют какие-либо инструменты для статического анализа, ни от Apple, ни от сторонних разработчиков.

Ответ 3

Как и в Xcode 7.3, компилятор теперь может генерировать эти предупреждения для вас. Все, что вам нужно сделать, это установить флаг -Wpartial-availability в настройках сборки, как описано в этом ответе.