Вы правы, что __IPHONE_OS_VERSION_MIN_REQUIRED исправлено во время компиляции. Эти константы и макросы могут стать полезными, если вы компилируете свое приложение для разных платформ и версий. Поэтому, если вы скомпилируете одну версию своего приложения для iOS 3.0 и одну для iOS 4.0, вы можете использовать __IPHONE_OS_VERSION_MIN_REQUIRED, чтобы удалить весь код iOS 4.0 из вашей версии iOS 3.0 во время компиляции.
Поскольку AppStore вынуждает вас использовать какую-то последнюю версию SDK, вы вынуждены использовать 4.0 SDK, даже если вы нацелены на устройства 3.0. __IPHONE_OS_VERSION_MIN_REQUIRED будет полезен только при использовании более старого SDK. Поскольку вы можете просто установить цель развертывания на более низкую версию, вам придется проверять версию iOS во время выполнения.
Вы можете использовать метод, описанный здесь , чтобы проверить версию iOS во время выполнения