L'espace de travail avec l'iOS de projet et liées à un projet de bibliothèque statique
Je me bats avec Xcode 4 espaces de travail. Actuellement Xcode 4 victoires. Donc, ma situation:
J'ai l'espace de travail grâce à l'application iOS du projet. Il y a également le projet de bibliothèque statique de l'application iOS dépend du cet espace de travail.
Solution #1
J'essaie de le configurer comme ceci:
- l'application du projet:
- ajouter à la cible Phases de construction > Lien Binaire Avec la Bibliothèque d'un produit (
libmystaticlib.a
); - ensemble
USER_HEADER_SEARCH_PATHS
à$(TARGET_BUILD_DIR)/usr/local/include $(DSTROOT)/usr/local/include
;
- ajouter à la cible Phases de construction > Lien Binaire Avec la Bibliothèque d'un produit (
- le projet de bibliothèque statique:
- ajouter quelques fichiers d'en-tête de la cible Phases de construction > Copie des en-Têtes > Public;
- ensemble
SKIP_INSTALL
àYES
.
Et chose importante: les deux projets doivent avoir des configurations avec le même nom. Sinon, si j'ai, par exemple, la configuration nommé de Distribution (Ad Hoc) pour l'application et Libération pour la bibliothèque statique, Xcode ne pouvez pas lier l'application à la bibliothèque.
Avec cette configuration de l'archivage des résultats d'une archive à l'application et au public les en-têtes de la statique de la bibliothèque de projets. Bien sûr, je ne suis pas en mesure de partager *.ipa
dans ce cas. 🙁
Solution #2
J'ai aussi essayé une autre configuration:
- Xcode préférences:
- ensemble arborescence des sources de la bibliothèque statique, e.g,
ADDITIONS_PROJECT
;
- ensemble arborescence des sources de la bibliothèque statique, e.g,
- l'application du projet:
- ajouter à la cible Phases de construction > Lien Binaire Avec la Bibliothèque d'un produit (
libmystaticlib.a
); - ensemble
USER_HEADER_SEARCH_PATHS
à$(ADDITIONS_PROJECT)/**
;
- ajouter à la cible Phases de construction > Lien Binaire Avec la Bibliothèque d'un produit (
- le projet de bibliothèque statique:
- ne pas ajouter tous les fichiers d'en-tête du Public!;
- ensemble
SKIP_INSTALL
àYES
.
J'ai encore besoin de se soucier de la configuration des noms pour les deux projets. Mais en conclusion, je peux construire et archive avec succès. Dans le résultat-je obtenir de l'archive et je peux partager *.ipa
.
Je n'aime pas la deuxième solutions, parce que, dans ce cas, je n'obtiens aucun avantage réel de l'Xcode 4 espace de travail. Le même effet je peux ajouter, si je ajouter la lib statique projet à l'intérieur de l'application du projet. Donc, je pense que quelque chose est incorrect avec ma solution.
Toute suggestion quoi de mieux pour un lien bibliothèques statiques?
Je n'aime pas du cadre de la solution, car il est un peu hacky, car il n'est pas officiellement pris en charge par Apple pour iOS.
OriginalL'auteur Aleksejs Mjaliks | 2011-03-22
Vous devez vous connecter pour publier un commentaire.
J'ai aussi trouvé une solution qui fonctionne avec de construire et d'archives.
Dans votre bibliothèque statique définir les en-Têtes Publics Chemin du Dossier de
../../Headers/YourLib
Dans votre application de config définir l'en-Tête des Chemins de Recherche pour
$(BUILT_PRODUCTS_DIR)/../../Headers
Dans votre application, vous serez en mesure de code
#import <YourLib/YourFile.h>
N'oubliez pas le
Skip Install = YES
option dans votre lib statique.Sont privés des en-têtes qui ne doit pas être référencé par le public en-têtes de la bibliothèque statique? Je demande car une fois que j'changer les en-Têtes de Chemin d'accès au Dossier, ils ne peuvent plus trouver le Privé, les en-Têtes.
OriginalL'auteur morel sebastien
Nous avons trouvé une réponse, enfin. Bien, genre de. Le problème est survenu parce que Xcode 4 lieux publics dans les en-têtes de InstallationBuildProductsLocation dossier lors de la construction de l'archive. Apparemment, lors de l'archivage, il voit les en-têtes et essaie de les mettre dans l'archive. Changer les en-Têtes de Chemin d'accès au Dossier de la lib de quelque part à l'extérieur de InstallationBuildProductsLocation, par exemple, $(DSTROOT)/../public_folders et l'ajout de cette voie à en-Tête de la Recherche de Chemin de résoudre le problème.
Cette solution n'est pas très élégant, mais pour nous, cela semble être la seule option. Peut-être que vous trouverez ce utile.
Cette "œuvres" qu'il construit et compile mais après la fermeture et de l'ouverture du projet (ce qui est en XCode4) je perds le sens du code de la navigation.
Si vous perdez le code du sens, en particulier lorsque vous êtes à l'aide d'une "marche arrière" dans votre chemin d'accès du type $(SOURCE_ROOT)/../otherlib alors assurez-vous de ne pas utiliser la recherche récursive dans les chemins. Au lieu de $(SOURCE_ROOT)/../otherlib/** ajouter chaque dossier individuel: $(SOURCE_ROOT)/../otherlib/système $(SOURCE_ROOT)/../otherlib/système/sous-système $(SOURCE_ROOT)/../otherlib/système/de la plate-forme ios, Il n'est pas idéal et crée long des chemins de recherche, mais il fixe toutes mes sens du code questions.
OriginalL'auteur mike
Voici une solution a obtenir d'Apple DTS. Je ne l'aime pas, parce qu'il est propose d'utiliser le chemin absolu. Mais je continue de le publier ici, peut-être quelqu'un se sent il est bon pour lui.
Comment configurer la bibliothèque statique:
Comment mettre en place le projet de liaison à l'encontre de la bibliothèque:
OriginalL'auteur Aleksejs Mjaliks
Je n'étais pas vraiment heureux avec les autres solutions qui ont été fournis, j'ai donc trouvé une autre solution que je préfère. Plutôt que d'avoir à utiliser les chemins de mettre le répertoire /usr/local/include dossier en dehors du répertoire d'installation, j'ai ajouté un pré-action à l'Archive étape dans mon schéma. Dans le pré-action, j'ai fourni un script qui supprime le répertoire usr avant l'archivage.
Cela supprime le répertoire usr avant l'archivage de sorte qu'il ne se retrouve pas dans le bundle et la cause Xcode pour penser il est doté de plusieurs modules.
rm -fr "${DSTROOT}/include/"
qui trie le problème pour moi. (En Utilisant Xcode 6.3)OriginalL'auteur Nate
jusqu'à présent j'ai aussi été aux prises avec le même problème, mais n'a pas abouti à une solution avec un minimum de compromis:
Cela nécessite Dervied Données de votre Emplacement de génération.
J'ai mis le Public en-Têtes chemin du Dossier ../usr/local/include
Cela permettra de s'assurer que les en-têtes ne sera pas placé dans l'archive.
Pour l'application, j'ai la Tête Chemin de Recherche de:
$(OBJROOT)/usr/local/include
$(SYMROOT)/usr/local/include
Il y a 2 entrées nécessaires puisque les chemins de changer légèrement lors de la construction d'une archive et je n'ai pas compris comment le décrire avec une seule variable.
La bonne chose ici est, qu'il n'a pas le code de saut de sens. Donc sauf pour avoir 2 entrées plutôt que de un, cela fonctionne parfaitement bien.
OriginalL'auteur Daniel
Je suis aux prises avec le même problème pour le moment. Je n'ai pas progresser beaucoup plus loin que vous. Je peux seulement ajouter que dans la deuxième solution, vous pouvez faire glisser les en-têtes, vous devez utiliser à partir de la bibliothèque de l'application du projet, plutôt que de les ADDITIONS_PROJECT et USER_HEADER_SEARCH_PATH. Cela permettra de les rendre visibles dans l'application du projet. La valeur de SKIP_INSTALL drapeau n'a pas d'importance dans ce cas.
Pourtant, cette solution n'est pas d'aller travailler pour moi, parce que je me déplace projet assez grand, avec des dizaines de bibliothèques, de Xcode 3 à Xcode 4, et il faut vraiment beaucoup de glisser-déposer pour faire mon projet de construction et d'archiver correctement. S'il vous plaît laissez-nous savoir si vous trouvez une meilleure façon de sortir de cette situation.
OriginalL'auteur mike
Je pourrais utiliser de Base de l'Intrigue comme une bibliothèque statique et de l'espace de travail de la fratrie, avec deux configurations de build:
De presse:
AdHoc (configuration de build pour "Archive" étape de Régime, produit une partageable .ipa):
Espère que ça aidera quelqu'un de ne pas perdre un jour sur ce.
OriginalL'auteur Clement Barry