Проблема с __IPHONE_3_0
и т. П. Заключается в том, что они определены, даже если они предназначены для других версий iOS; это константы идентификации версии, а не константы, идентифицирующие целевую версию iOS. Используйте __IPHONE_OS_VERSION_MIN_REQUIRED
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0
#elif __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_3_0
#else
#endif
или даже:
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 40000
#elif __IPHONE_OS_VERSION_MIN_REQUIRED >= 30000
#else
#endif
чтобы обойти ошибку, упомянутую в комментариях к " Как настроить таргетинг на определенную версию iPhone? " __IPHONE_OS_VERSION_MAX_ALLOWED
также может быть полезен, в некоторых случаях.
И, да, не имеет значения, на каком устройстве будет работать приложение. Эти константы определяются компилятором и не существуют на устройствах. После запуска препроцессора макросы не остаются. Хотя в самих устройствах есть различия, iPhone и iPad работают под управлением iOS, и это именно то, на что вы нацелены.