42 votes

Comment utiliser optionnellement les fonctionnalités de l'iPhone OS 3.0 dans une application compatible 2.0 ?

J'aimerais utiliser certaines fonctionnalités de l'iPhone OS 3.0 dans mon application 2.0 lorsqu'elle fonctionne sur un appareil 3.0. Je ne veux pas aller jusqu'au bout de la version 3.0 parce qu'il y a des clients qui ne veulent pas encore se mettre à jour.

J'ai expérimenté un peu avec la liaison faible du MapKit.framework (-weak_framework MapKit). J'ai trouvé cela assez lourd, puisque j'ai dû tromper le compilateur/lien pour utiliser le SDK 2.0 avec tout le code sauf celui qui utilise MapKit.

Quelqu'un a-t-il plus d'expérience dans ce domaine ? Que faites-vous pour le faire compiler/lier ? Quelqu'un a-t-il déjà soumis une application à Apple, qui fait des liens faibles avec des frameworks d'autres versions d'OS ?

36voto

David Maymudes Points 5153

Apple propose un exemple de la manière de procéder, notamment en créant une application compatible avec la version 2.x qui utilise MFMailComposeViewController.....

http://developer.apple.com/iphone/library/samplecode/MailComposer/index.html

la réponse implique de compiler avec le SDK 3.0, de définir la cible de déploiement sur 2.x, de s'assurer que les frameworks 3.0 sont marqués comme références "faibles", puis de faire ce qu'il faut pour que votre code fonctionne si vous êtes sur un appareil où les nouveaux frameworks ne sont pas présents.

5voto

Ben Gottlieb Points 59900

Vous pouvez toujours créer des liens vers des frameworks qui ne font pas partie du SDK actuel en utilisant la fonction dlopen. Bien entendu, cela n'est pas recommandé pour les frameworks qui ne sont pas publics (non recommandé == interdit sur l'app store, dans ce cas). Cependant, au fur et à mesure que les nouveaux frameworks des versions non publiées du système d'exploitation deviennent publics, c'est une option. Vérifiez simplement votre numéro de version, et ouvrez les frameworks disponibles. Utile pour les fonctionnalités individuelles, mais pas tellement si vous utilisez beaucoup les nouvelles fonctionnalités.

1voto

Dan Lorenc Points 4180

Ce n'est probablement pas la réponse que vous cherchez, mais la méthode que j'utilise consiste à avoir deux applications distinctes. Plutôt que de mettre à jour mes applications existantes avec les mises à jour de la version 3.0, je publie simplement une nouvelle application. Les anciens utilisateurs peuvent utiliser l'application 2.0 aussi longtemps qu'ils le souhaitent, et ceux qui veulent les fonctionnalités de la version 3.0 peuvent la mettre à jour.

0voto

BadPirate Points 11614

Excellent guide sur les liens faibles (tant pour les bibliothèques que pour les cadres) ici :

http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html#//apple_ref/doc/uid/20002378-107262

Bien qu'il soit un peu dépassé... avec le dernier x-code, le processus de liaison faible d'un cadre entier est en fait plus facile :

  1. Cliquez avec le bouton droit de la souris sur la cible et sélectionnez Get Info
  2. Allez dans l'onglet "Général".
  3. Dans la section des bibliothèques liées, vers le bas, changez le Type de requis à faible pour toutes les bibliothèques que vous souhaitez lier.
  4. Profit

-1voto

Aftermathew Points 1108

Je ne pense pas que vous puissiez le faire. Les versions 3.0 et 2.x utilisent des kits de développement complètement différents et sont liées à un ensemble de fichiers et de bibliothèques complètement différents. Je ne suis pas certain, mais je ne pense pas que vous puissiez vous lier au SDK 3.0 tout en restant compatible avec la version 2.X.

(veuillez ajouter un commentaire si je me trompe).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X