Проблема с __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
обойти ошибку, упомянутых в комментариях для «How to target a specific iPhone version?» __IPHONE_OS_VERSION_MAX_ALLOWED
может также использоваться в ограниченных условиях.
И, да, не имеет значения, на каком устройстве будет работать приложение. Эти константы определяются компилятором и не существуют на устройствах. Как только препроцессор работает, макросов не осталось. Хотя есть различия в самих устройствах, iPhone и iPad запускают iOS, и именно это вы действительно нацеливаете.
Спасибо, что именно так я и искал. –