Question

J'essaie de mettre à niveau une application ( Clarke ) afin de fournir une compatibilité 10.6.

Mon plan est d'utiliser deux chemins de code différents selon la version d'OSX utilisée.

Sur la version 10.5, il utilisera un contrôleur, qui consiste en un code entièrement personnalisé qui ne dépend pas d’une API Cocoa spécifique. Sur la version 10.6, il utilisera un autre contrôleur, qui encapsulera la nouvelle API CoreLocation dans une interface identique, basée sur la même classe abstraite. Au moment de l'exécution, l'application basculera entre les contrôleurs en détectant la version du système d'exploitation.

Cela fonctionne très bien sur 10.6 construit pour le SDK 10.6, mais la même construction explose sur 10.5 avec:

10/09/2009 18:30:50 [0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575] dyld: unknown required load command 0x80000022 
10/09/2009 18:30:51 com.apple.launchd[403] ([0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575]) Exited abnormally: Trace/BPT trap 

Si je construis pour 10.5 SDK, il ne peut évidemment pas compiler le contenu de CoreLocation.

J'espérais pouvoir fournir un seul fichier binaire pour cette application. Existe-t-il un moyen de "masquer" l’API CoreLocation à partir de 10.5?

Était-ce utile?

La solution

Vous devriez pouvoir résoudre ce problème en modifiant les paramètres de construction de votre cible:

  1. Définissez le SDK de base sur 10.6
  2. Définissez le SDK de déploiement sur 10.5

Autres conseils

L'astuce du SDK de déploiement ne fonctionne que si vous avez le même framework sur les deux plates-formes mais de nouveaux appels dans le plus récent. Pour CoreLocation, la totalité de la structure est manquante sur la version 10.5; par conséquent, le chargement de votre application échouera, car elle ne peut pas se lier dynamiquement à la structure.

Vous devez faire ce qui précède, en plus d'ajouter CoreLocation en tant que framework faible. Sélectionnez votre phase de construction des structures de liens et des fichiers binaires, recherchez CoreLocation dans la vue Détails et modifiez-le dans la colonne du milieu, puis cliquez sur "Required". à "faible".

Lors de la création de votre application, Xcode passera -weak_framework CoreLocation à l'éditeur de liens et votre application se chargera sur tous les systèmes 10.5 et 10.6, que CoreLocation soit présent ou non. Assurez-vous cependant de ne pas appeler de méthode CoreLocation à moins que vous ne fonctionniez réellement sur 10.6.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top