Вы не можете использовать макросы для этого. Макросы оцениваются во время компиляции, а не во время выполнения, что и требуется для обнаружения функций / возможностей, таких как поддержка iCloud. (В противном случае вы в конечном итоге включите его, поскольку вы компилируете для iOS 5 SDK во всех случаях)
Вам нужно просто проверить наличие методов повсеместности, которые сообщают вам, можете ли вы их вызвать, и сообщают, поддерживается ли iCloud, например ::
.
if ([[NSFileManager defaultManager] respondsToSelector:@selector(isUbiquitousItemAtURL:)])
{
// call it and do other iCloud stuff
}
Краткое замечание по поводу вашего вопроса о компиляции. Компиляция - это процесс, который превращает ваш реальный код в двоичный файл, который запускается на устройстве. Это происходит, когда вы делаете Build in Xcode, и это происходит только на вашей машине, но не в Apple или на устройстве. Вот почему проверки во время компиляции для номеров версий не будут работать - к тому времени, как вы отправите его на устройство, решение уже будет принято.