9
votes

Comment relier différentes bibliothèques précompilées pour différents profils de construction dans Xcode pour iPhone?

Mon client me fournit deux bibliothèques précompilées, Blah-Device.A et blah-simulator.a. Comment puis-je dire à Xcode d'utiliser Blah-Device.A en mode de compilation de périphérique et simulateur en mode de compilation Simulator?

Mon client me donne ces instructions

  1. Ouvrez le groupe cibles (dans le panneau Groupes et fichiers), cliquez avec le bouton droit de la souris sur la Icône de projet, puis sélectionnez Ajouter> Cadres existants.
  2. Dans la section Bibliothèques liées, cliquez sur l'icône Ajouter des bibliothèques (+), puis cliquez sur Ajouter Autres.
  3. Sélectionnez soit bla-périphérique.a (pour se développer directement sur l'iPhone appareil) ou bla-simulator.a (pour développer sur le simulateur iPhone), puis cliquez sur Ajouter.

    J'ai déjà copié le fichier d'en-tête de là, mais ces instructions ne permettent pas de construire facilement avec différents profils.

    Comment obtenir Xcode pour lier le lien BLAH-Device.Une lorsque vous construisez avec les profils de périphérique et BLAH-SIMULATOR.A lors de la construction des profilés de simulateur?

    Toute aide est grandement appréciée.


0 commentaires

4 Réponses :


2
votes

Le moyen le plus simple serait de créer deux cibles distinctes en dupliquant votre existant. Nom un "FOO Device" et l'autre "FOO Simulator". Ensuite, cliquez avec le bouton droit de la souris sur le périphérique BLAH.A en Xcode, sélectionnez l'onglet Cugets et assurez-vous que la cible "FOO Périphérique" est cochée et la cible "FOO Simulator" est cochée.

Répéter pour balah-simulator.a mais cette fois "FOO Périphérique" Cible est éteint et "FOO Simulator" est cochée.

Maintenant que lorsque vous souhaitez effectuer une version simulatrice, assurez-vous de sélectionner le simulateur à partir de la fenêtre contextuelle SDK active et du "FOO Simulator" de la fenêtre contextuelle cible. Pour tester le périphérique, sélectionnez le périphérique et la cible "FOO Périphérique".


2 commentaires

Merci! Quoi qu'il en soit pour accomplir cela sans une autre cible et simplement utiliser les profils Xcode Construire des paramètres?


Le problème est de savoir si Blah-Device.A et Blah-Simulator.a exporter les mêmes symboles. Une solution autour de cela est de tester sur la base de #IF ci cible_iphone_simulator ... dans l'en-tête et définissez FOO comme une macro de préprocesseur pour FoodEvice vs. Foosimulateur. Ensuite, vous pouvez inclure à la fois des bibliothèques et le bon symbole est lié. Mais si les deux bibliothèques incluent les mêmes symboles de liaison, vous obtiendrez des erreurs de symboles en double. Dans ce cas, la seule façon est d'exclure l'une de la liaison sous une seule situation contre l'autre. Vous pouvez jouer des valeurs de chemin de liaison, mais il est beaucoup plus facile d'aller avec plusieurs cibles.



7
votes

Il y a un moyen plus facile de le faire. Vous pouvez dupliquer les «chemins de recherche de la bibliothèque» sous une cible et définir une architecture différente pour chacune d'elles. Vous pouvez ensuite définir un chemin différent pour le simulateur et les périphériques.


1 commentaires

Sur Xcode 10, il est sous n'importe quel SDK IOS Simulator SDK pour simulateurs et n'importe quel SDK iOS pour "Périphériques".



17
votes

Pour la référence future, un bon moyen de gérer les situations comme celle-ci est de glober la différence d'architecture .a en un seul que vous pouvez inclure dans Xcode. Vous pouvez le faire avec l'outil Lipo Lipo Lipo:

lipo libx.a liby.a -create -Outputputputputputpongement libz.a

Si libx.a est armv6 et armv7 et liby.a est i386 par exemple, la bibliothèque résultante, la libz.a, sera armv6, armv7 et i386.

Vous pouvez également inspecter un fichier .a via Lipo -Info.

J'espère que cela aide. :)


0 commentaires

2
votes

Vous pouvez utiliser différents chemins de liaison pour différentes bibliothèques reliant le chemin


1 commentaires

Sur Xcode 10, il est sous n'importe quel SDK IOS Simulator SDK pour simulateurs et n'importe quel SDK iOS pour "Périphériques".