2010-04-26 2 views
1

J'ai un cadre de code que je maintiens. Il a un code objectif-c mac et iphone. Et une partie est partagée. Je n'ai aucun problème avec le code. C'est un problème avec Xcode. Appelons simplement mon framework "AwesomeKit" pour ce problème."Relative to Current SDK" ne fonctionne pas mélange Mac Framework et bibliothèque statique iPhone

La première chose que j'ai faite a été de créer un projet de framework xcode appelé "AwesomeKit". Ajoutez-y des fichiers sources, un lien avec les frameworks mac courants: fondation, cacao, carbone, etc. Il compile bien.

Ensuite, ajoutez une nouvelle cible "bibliothèque statique", appelons-la "AwesomeKit-iPhone" et définissez le SDK de base dans les paramètres de construction pour iPhone device 3.1.3.

Le problème survient lorsque j'essaie d'ajouter des «cadres existants» à la cible AweseomKit-iPhone.

  • Commencez par modifier la cible de génération actuelle en AwesomeKit-iPhone.
  • Faites un clic droit sur un groupe et sélectionnez « Ajouter> Cadres existants ... »
  • Choisissez UIKit.framework

UIKit sera immédiatement affiché en rouge, comme il manque. Il est en effet manquant car Xcode utilise le paramètre "Relative SDK" du SDK "Mac OS 10.6". Quand il devrait l'utiliser par rapport à la base de la cible actuelle sdk iphone device 3.1.3.

Que diable? Quelqu'un at-il vécu cela? C'est vraiment énervant.

Répondre

0

Je pense avoir vu votre problème. Je suis toujours nouveau à ce sujet, mais ce que j'ai trouvé lorsque les bibliothèques statiques universelles pour les simulateurs et les appareils, c'est qu'il est préférable de garder le SDK Xcode Active sur "Base SDK" plutôt que de sélectionner un SDK. Dans ce mode, le SDK actuel est le SDK de la cible actuellement sélectionnée. Le SDK actif est un peu comme remplacer le sdk sur la ligne de commande. Si vous l'avez défini, les paramètres du SDK sur les cibles seront remplacés. Donc, dans mon cas, je voulais que deux cibles soient exécutées en même temps, l'une utilisant le simulateur sdk qui compile pour l'architecture i386 et l'autre pointant vers le périphérique sdk qui construit une librairie universelle pour les architectures armv6/armv7.

J'ai vu le truc rouge non trouvé et je me souviens de l'avoir fait, je l'ai fait disparaître. J'ai également fait définir le SDK du projet sur un périphérique plutôt que sur Mac. Rappelez-vous que les cibles l'emportent sur ce qui est donc un bon moyen de s'assurer que Xcode pointe vers le bon sdk sans affecter les paramètres sur les cibles et la construction finale.

+0

Merci pour la réponse Derek, j'ai donné votre avis. pas de chance. Voici quelques captures d'écran de mon installation. http://i.imgur.com/ZFRAa.png - Fenêtre xcode par défaut
http://i.imgur.com/BQGOJ.png - Fenêtre UIKit (informations) avec chemins
http://i.imgur.com/yFZf6.png - configuration actuelle des paramètres déroulants
http://i.imgur.com/ZWmty.png - paramètres de génération cible lib iPhone statique
Pouvez-vous faire Quel est le sens? Il semble qu'il y ait quelque chose d'autre dans xcode qui se souvient que le projet initial a été créé en tant que projet Framework, et utilise toujours le mac sdk comme base pour les chemins. – gngrwzrd

+0

me semble bien. Mais vérifiez les paramètres du chemin de recherche de la bibliothèque du projet et de la cible. Ils peuvent être pollués. Quelque chose est évidemment encore pointant vers le mac sdk, c'est pourquoi il ne peut pas trouver le cadre. – drekka

0

Je suis dans le même bateau en ce moment, XCode continue à virer le mauvais SDK devant les cadres. C'est un projet avec des cibles OSX et iOS. Mais il semble que quelque chose ne va vraiment pas avec mes paramètres de construction de projet. Vos captures d'écran ne les affichent pas, mais vous voudrez peut-être les vérifier. Dans mon cas, de nombreuses entrées sont des doublons. J'ai donc deux catégories "Architectures", totalement identiques. Si j'en change un, l'autre change avec lui. Cela pourrait être lié au problème avec le mauvais SDK étant choisi. Je pense que le fichier du projet est corrompu, et j'essaie maintenant de savoir si je peux le réparer manuellement.

+0

Une mise à jour de la dernière XCode a résolu le problème pour moi. Apparemment, il y avait quelque chose de bogué dedans, et ils l'ont réparé ... – zmippie

1

J'ai trouvé la solution à cela. Vous devez éditer le fichier project.pbxproj dans le répertoire project.xcodeproj. Trouver des entrées comme "SDKROOT = XXX" et le changer en racine de base réelle. Il est probablement préférable de regarder un autre projet.Fichier pbxproj qui l'a correctement défini. Je l'ai utilisé à plusieurs reprises maintenant et fonctionne comme un charme. Généralement, il y a 2 entrées SDKROOT ou plus dans project.pbxproj.

Questions connexes