2009-09-23 9 views
1

j'ai iphone avec os ver. 2.0 J'ai lu que pour app store toute application doit être exécutée 3.0 os.so comment puis-je faire mon application à exécuter dans les deux firmware.is là un moyen que je peux détecter si os ver.> 3.0 puis exécuter différentes déclarations alte exécuter statments pour inférieur que 3.0 os.currently je l'utilise.comment exécuter mon application iphone 2.0 dans iphone os 2.0 et aussi 3.0 et ci-dessus os

#if __IPHONE_3_0 
cell.textLabel.text=cellValue; 
[cell.textLabel setFont:[UIFont systemFontOfSize:15.0]]; 
[cell.textLabel setLineBreakMode:UILineBreakModeTailTruncation]; 
#else 
cell.text=cellValue;  
[cell setFont:[UIFont systemFontOfSize:15.0]]; 
[cell setLineBreakMode:UILineBreakModeTailTruncation]; 
#endif 

va l'exécuter à la fois firmware

je veux faire mon application à exécuter sur> = 3.0 os et inférieur à ce ... s'il vous plaît aidez-moi

comment puis-je consulter mes application pour les méthodes obsolètes ... je peux seulement voir cette ligne comme obsolète cell.text = cellValue;

est-il quelque chose à change.i ont installé un nouveau sdk nommé iphone_sdk_3.0__leopard__9m2736__final.dmg

Répondre

1

Votre code ci-dessus ne fonctionnera pas sur les deux systèmes d'exploitation. Lorsque vous utilisez des instructions #if, vous excluez essentiellement le code d'une version du système d'exploitation pour cette version particulière. En d'autres termes, chaque version que vous construisez, une lorsque vous définissez __IPHONE_3_0 et une autre lorsque vous ne le faites pas, exclura le code de l'autre.

Ce que vous faites est de construire deux exécutables, un qui est construit pour __IPHONE_3_0 et un autre pour! __IPHONE_3_0.

Si vous voulez construire un exécutable, qui est une application, qui fonctionne sur les deux, vous devez remplacer les déclarations de #if avec ifs d'exécution, compile pas #ifs de temps, comme:

if (theOS >= kiPhone3) 
    .... 
else 
    .... 

Vous pouvez également lier dans des bibliothèques qui sont 3.0 uniquement, mais tester la disponibilité de l'infrastructure lors de l'exécution, puis ignorer l'appel si les méthodes ne sont pas disponibles. Il existe différents appels que vous aurez besoin d'utiliser, un pour vérifier si une méthode est disponible, et un pour si une classe est disponible:

Class newClass = (NSClassFromString(@"NewClassName")); 
    if (newClass != nil) 

La dernière chose, il y a une version plus récente du SDK que celui que vous avez mentionné.

Bonne chance!

+0

je l'utilise float version = [[[UIDevice currentDevice] systemVersion] floatValue]; si (version> = 3.0) { cell.textLabel.text = [self.FriendName objectAtIndex: indexPath.row]; // Code iPhone 3.0 ici } { autre cell.text = [self.FriendName objectAtIndex : indexPath.row]; // Code iPhone 2.0 ici } mais il a échoué lors de la génération pour 2.0..d'erreur dans cette ligne cell.textLabel.text = [self.FriendName objectAtIndex: indexPath.row]; demande de membre "textlabel" dans quelque chose pas une structure ou un syndicat –

+0

Je veux juste exécuter mon application soit sur 2.0 ou ci-dessus et 3.0 ou au-dessus .. en utilisant un seul exécutable –

+0

Ne construisez plus pour 2.0. Vous voulez un exécutable, de sorte que vous construisez une fois avec le SDK 3.0 dans le SDK Project Base (et le SDK actif). – mahboudz

1

Il y avait un similar post il y a quelque temps. Jetez un oeil à l'exemple MailComposer d'Apple pour voir l'exemple d'une application qui supporte à la fois le firmware 3.0 et 2.x

+0

je veux courir sur plus de ou égal à 3.0 et inférieur à 3.0 –

+0

je n'ai pas inclus de cadre qui est seulement disponible en 3.0 –

+0

je veux juste être sûr que mon application 2.0 fonctionnera sur OS 3.0 ou supérieur. –

0

Si vous le construisez avec le SDK 2.0 (ou 2.1, ou 2.2.1, etc), il fonctionnera sur ce SDK et toute version ultérieure à moins qu'Apple ne supprime spécifiquement la prise en charge de ce SDK. Je vois beaucoup d'applications dans l'App Store qui disent qu'ils fonctionnent avec iPhone OS 2.x ou plus tard et ils fonctionnent bien sur mon iPhone 3G en cours d'exécution 3.1.

0

Les directives if-else masqueront une partie du code du compilateur afin qu'il ne s'exécute pas sur les deux logiciels.

Questions connexes