2010-07-18 6 views
0

J'essaie de prendre en charge les anciennes versions d'iOS dans mon application. Au début, je pensais que je devais seulement mettre ces frameworks à "weak linking" qui ne sont pas présents dans l'ancien OS, par ex. le cadre iAd. Et puis assurez-vous que je n'appelle pas APIs non pris en charge dans le code. Cependant, lorsque je tente d'exécuter l'application (qui est compilé avec le cadre le plus récent) dans l'ancien simulateur, il se bloque lors du démarrage avec un message similaire àLiaison faible pour prendre en charge les versions iOS précédentes

18/07/2010 11:07:29 UIKitApplication:xxxxx[0xe006][5729] dyld: Symbol not found: _OBJC_CLASS_$_NSAssertionHandler 
18/07/2010 11:07:29 UIKitApplication:xxxxx[0xe006][5729]  Referenced from: xxxxx/Applications/23CE4978-D25F-4DB4-A486-0730EBBB501B/xxxxx.app/xxxxx 
18/07/2010 11:07:29 UIKitApplication:xxxxx[0xe006][5729]  Expected in: /Xcode3.1.4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation 
18/07/2010 11:07:29 UIKitApplication:xxxxx[0xe006][5729]  in xxxxx/Applications/23CE4978-D25F-4DB4-A486-0730EBBB501B/xxxxx.app/xxxxx 

Après avoir tous cadres de liaison faible, Je reçois toujours un message d'erreur:

18/07/2010 11:33:32 UIKitApplication:xxxxx[0xc4a7][8204] dyld: Symbol not found: __objc_empty_vtable 
18/07/2010 11:33:32 UIKitApplication:xxxxx[0xc4a7][8204]  Referenced from: xxxxx/Applications/23CE4978-D25F-4DB4-A486-0730EBBB501B/xxxxx.app/xxxxx 
18/07/2010 11:33:32 UIKitApplication:xxxxx[0xc4a7][8204]  Expected in: /usr/lib/libobjc.A.dylib 

Qu'est-ce que je fais mal?

Répondre

2

Je pense avoir trouvé la solution (s'il vous plaît quelqu'un peut-il confirmer?):

Vous ne pouvez pas utiliser le simulateur pour tester si vos applications fonctionnent avec une précédente Version iOS Il ne fonctionne que sur l'appareil, selon Apple:

iPhone OS Remarque: Mac OS X v10.6 ne prend pas en charge l'iPhone Simulator SDKs avant la version 3.0. En outre, lors de la construction avec les SDK simulateur , le binaire exécute uniquement sur la même version du système d'exploitation que le SDK, et non sur les versions antérieures ou ultérieures.

Cela semble vraiment terne. Comment suis-je censé tester la rétrocompatibilité sans avoir un iPhone physique pour chaque version du SDK? Pas bon.

+1

Pssst ... Installez un ancien SDK dans un répertoire séparé afin de pouvoir utiliser un ancien simulateur :) – iwasrobbed

0

Vous ne pouvez pas utiliser directement la nouvelle classe si vous souhaitez prendre en charge les anciennes plates-formes. Au lieu de cela, vous utilisez NSClassFromString comme ceci:

class myClass = NSClassFromString(@"NSCoolNewClass"); 
if (myClass) 
    //do stuff 
+0

Ouais .. Je le fais pour les nouvelles classes. Mais NSAssertionHandler (voir le message d'erreur ci-dessus) est présent dans le SDK depuis la version 2.0 et fait partie de CoreFoundation. – hanno

Questions connexes