2009-09-03 7 views
4

J'ai vu des applications sur l'iPhone qui, si elles sont exécutées sur 3.0, utiliseront des fonctionnalités/API 3.0 telles que le composeur de courrier électronique intégré, et si en cours d'exécution sur 2.x ne pas utiliser ces fonctionnalités, et en quittant l'application pour lancer Mail à la place.Utilisation des fonctionnalités iPhone OS 3.0 si disponible, et des fonctionnalités 2.1 si non, dans un exécutable

Comment cela est-il fait?

Mes premières pensées devaient utiliser

#ifdef __IPHONE_3_0 

mais cela ne fonctionnera que si je construis en fait l'application contre le SDK 3.0 - ce qui empêche alors de courir sur les téléphones 2.x. De plus, en cours d'exécution avec cette pensée, l'application doit être liée au SDK 3.0 de toute façon pour obtenir les API 3.0 ...

Je suis un peu confus quant à la façon dont il a été atteint.

+1

Dupe de http://stackoverflow.com/questions/986589/how-do-you-optionally-use-iphone-os-3-0-features-in-a-2-0- compatible-app – fbrereto

Répondre

5

Vous définissez le SDK de base sur 3.0 et la cible de déploiement sur 2.2.

Vous encapsulez ensuite toutes les méthodes spécifiques à la version 3.0 dans les instructions NSClassFromString et respondsToSelector.

Il fonctionnera sur l'appareil en 2.2, mais pas dans le simulateur.

L'avantage de cette méthode est que vous ne liez pas votre code à des numéros de version spécifiques - que les méthodes ou les classes existent ou non.

Cette page explique assez bien.

http://www.clarkcox.com/blog/2009/06/23/sdks-and-deployment-targets/

0

Vous pouvez tester la version actuelle du système d'exploitation lors de l'exécution en utilisant:

float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 
    if (version >= 3.0) 

Ce qui vous permettra d'utiliser certains appels API lors de l'exécution si elle est disponible.

Cette question a un autre details pour compiler dans des choses spécifiques par version de l'API.

Questions connexes