2009-11-19 3 views
2

Je voudrais être en mesure de dire au moment de la compilation si je compile pour iPhone SDK 2.x ou 3.x, donc je peux laisser quelques bits (par exemple MapKit, GameKit) si besoin est. Actuellement, je le fais en utilisant un #define personnalisé. Je me demande s'il existe un moyen de détecter cela automatiquement à partir du SDK actif? Je connais TARGET_OS_IPHONE et TARGET_IPHONE_SIMULATOR, et TargetConditionals.h, mais je n'ai trouvé aucun élément lié au SDK actif.Y a-t-il un #define pour lequel SDK actif vous compilez dans le SDK de l'iPhone?

Répondre

3

Jetez un oeil à Availability.h (et AvailabilityInternal.h). Il y a __IPHONE_OS_VERSION_MIN_REQUIRED défini ici ainsi que des constantes pour la version SDK.

+0

Cela indique en fait le déploiement iOS OS cible version, pas le SDK de base actuel. –

1

Martijn est correct: __IPHONE_OS_VERSION_MIN_REQUIRED est la cible de déploiement. Le SDK de base actuel est __IPHONE_OS_VERSION_MAX_REQUIRED. Si vous essayez de l'utiliser pour déterminer quelles fonctionnalités sont disponibles sur le périphérique sur lequel votre code s'exécute, vous ne pouvez pas le faire en utilisant des macros au moment de la compilation, vous devez utiliser la détection de fonctionnalités d'exécution.

-1

Si vous souhaitez vérifier si une version spécifique (ou ultérieure) du SDK est utilisée, vous pouvez vérifier certaines définitions.

Par exemple, si vous aviez un code que vous ne vouliez compiler que si l'iOS 6.0 ou version ultérieure SDK a été utilisé, vous pouvez utiliser ceci:

#ifdef __IPHONE_6_0 
    // Some iOS 6 code 
#endif 
+0

ne peut pas faire cela parce qu'un en-tête de sdk inclura souvent un défini pour la prochaine version, par exemple iOS 9.3 SDK définit '__IPHONE_10_0' –