L'archivage du projet dans Xcode crée de manière incorrecte un bundle multi-applications

170

Archiver mon projet dans Xcode, c'est créer un bundle multi-applications, au lieu de regrouper ma cible principale pour la publication, ce que je souhaite. Plus précisément, lorsque je valide mon archive dans l'Organisateur, cela me donne le message:

"[nom du projet] ne contient pas une seule application groupée ou contient plusieurs produits. Veuillez sélectionner une autre archive ou ajuster votre schéma pour créer une application groupée unique."

Il semble qu'il y ait un paramètre dans le schéma qui doit être ajusté, mais je ne peux pas comprendre ce qui fait que d'autres cibles sont incluses.

J'utilise Xcode 4.0 au fait.

Jared Friedman
la source

Réponses:

251

OK, répondant à ma propre question. Il s'avère que c'est un problème avec les projets dépendants dans XCode 4. Si cela vous arrive, passez par les paramètres de construction pour tous vos projets dépendants (par exemple les bibliothèques statiques) et assurez-vous que l'option "Ignorer l'installation" sous "Déploiement" est définie à OUI.

Plus de détails ici: http://flakasoft.com/developer-tips/xcode-4-bug-solution-for-archiving-build-with-static-library/

Jared Friedman
la source
1
Vous, monsieur, êtes mon héros! Je n'aurais pas trouvé ça facilement: P
Andrew Natoli
6
Changé en "OUI" ... échoue toujours. :(
Joe D'Andrea
8
Ignorer l'installation doit être défini sur Oui sur la bibliothèque statique uniquement, pas sur votre projet ou votre cible. Ce billet de blog sur la distribution ad hoc s'applique également aux versions de l' App
jj0b
8
Certaines bibliothèques (comme CorePlot) vous obligent également à modifier la section Copier les en-têtes de leur phase de construction. Assurez-vous donc de regarder aussi la réponse de Ryan.
Tim Swast le
2
Je dois aussi déplacer tous les fichiers d'en-tête (de la bibliothèque statique) dans la cible "Build Phases", dans "Copy Headers" je les ai déplacés de "Public" vers "Project".
Hlung
151

Deux choses devaient être corrigées dans le (s) sous-projet (s) pour résoudre ce problème:

  1. Comme Jared l'a découvert, sous les paramètres de construction, définissez «Ignorer l'installation» sur «Oui»
  2. Sous les phases de construction, examinez la section Copier les en-têtes. S'il existe des fichiers d'en-tête répertoriés comme privés ou publics, faites-les glisser vers la section Projet.
Ryan Grimm
la source
7
Je t'aime vraiment mec! : D
arielcamus
5
J'ai corrigé tous les paramètres "Ignorer l'installation", mais il me manquait la section Copier l'en-tête, merci!
Thomas Einwaller
2
J'utilise trois20. Ce projet a des fichiers d'en-tête répertoriés comme privés ou publics, mais si je les déplace dans la section projet, il ne se compile pas. Toute suggestion?
Breezeight
19
Arrêtez d'utiliser Three20, même si vous surmontez ce problème Xcode. Je suis complètement sérieux!
Adam Eberbach
2
Si vous avez de nombreux projets de bibliothèque comme nous et que vous avez du mal à déterminer quelle bibliothèque Ignorer l'installation est définie sur Non ou quels fichiers d'en-tête sont à l'origine du problème, essayez ceci: Sélectionnez l'archive et cliquez sur le bouton Distribuer. Sélectionnez l'option «Enregistrer les produits construits». Appuyez sur Suivant et enregistrez. Parcourez le répertoire créé dans le Finder. Le sous-répertoire «bibliothèques» identifiera les bibliothèques dont vous avez besoin pour définir Ignorer l'installation sur Oui. Le usr / local / include identifiera les fichiers d'en-tête coupables dont vous avez besoin pour passer de Public à Project.
Sunil Gowda
10

J'ai fait ce qui suit pour que cela fonctionne pour moi:

  1. pour la bibliothèque statique three20, j'ai utilisé des cocoapods pour inclure les fichiers dans le projet principal .. cela m'a juste débarrassé de tous les problèmes que me posait three20 (et ils sont nombreux ..) btw j'ai essayé de remplacer three20 par Nimbus .. mais Nimbus manquait sur certaines des fonctionnalités pour lesquelles mon projet utilisait three20 .. donc Nimbus n'a pas été utile.
  2. définir skip install sur yes sous les paramètres de construction pour tous les autres sous-projets / bibliothèques statiques et basculer les en-têtes de copie de public à projet dans les phases de construction
  3. le plus important: sous les sous-bibliothèques .. dans les phases de construction, je me suis assuré que la destination des fichiers de copie était changée de Absolute pathà products directory.

et c'était tout!

astuce: pour avoir une idée des fichiers incriminés qui amènent votre archive à créer un fichier d'archive plutôt qu'un ipa, procédez comme suit:

  1. Sélectionnez l'archive et cliquez sur le bouton Distribuer.
  2. Sélectionnez l'option «Enregistrer les produits construits».
  3. Appuyez sur Suivant et enregistrez.
  4. Parcourez le répertoire créé dans le Finder.
  5. Le sous-répertoire «bibliothèques» identifiera les bibliothèques dont vous avez besoin pour définir Ignorer l'installation sur Oui.
  6. dans certains cas usr/local/include, identifiera les fichiers d'en-tête coupables que vous devez déplacer de Public vers Project ou les fichiers que vous devez changer du chemin absolu au répertoire des produits. mais ce répertoire (c'est-à-dire usr / local / include) varie en fonction de la structure de votre sous-bibliothèque
abbood
la source
Je vous donnerais 10 étoiles, le nombre de solutions que j'ai lues jusqu'à trouver celle qui a aidé. J'ai juste cliqué sur les fichiers que j'ai trouvés à l'étape 6 et les ai marqués dans la zone d'adhésion cible du public au projet, pas besoin de quoi que ce soit.
Cristi Băluță
heureux d'avoir pu aider! la raison pour laquelle je l'ai écrit est que b / ci est passé par ce que vous avez fait .. j'ai lu comme peut-être 20 réponses avant de commencer à comprendre ce qui se passait .. :)
abbood
Quelqu'un peut-il expliquer l'étape 6? Je ne comprends pas ce que signifie "usr / local / include identifiera les fichiers d'en-tête coupables" et où / comment dois-je vérifier ces fichiers
Andrei F
@ CristiBăluță Comment avez-vous trouvé les fichiers exactement et où dans les paramètres / menus? J'ai le même problème avec XCode 11.2.1 et je n'ai pas beaucoup d'expérience avec xcode. Je vous remercie.
Andrei F
Ce que j'ai trouvé, c'est que / usr / local / include est un dossier dans l'archive (avec le dossier des bibliothèques), mais mon archive générique n'en contient aucun
Andrei F
1

J'ai eu une phase de construction de fichiers de copie que j'avais oubliée (copié certaines polices dans ~ / Library / Fonts). Après avoir supprimé cette phase de construction, cela a bien fonctionné.

Si aucune des réponses ci-dessus ne résout le problème, je recommande d'exporter l'archive vers le Finder et de jeter un œil à ce qui se trouve en dehors du bundle .app.

Edit: voir https://github.com/RestKit/RestKit/wiki/Xcode-4-Archiving-Issue:--'Does-not-contain-a-single-bundle '

Auco
la source
0

J'ai également eu le même problème "[nom du projet] ne contient pas une seule application groupée ou contient plusieurs produits. Veuillez sélectionner une autre archive ou ajuster votre schéma pour créer une application groupée unique." après la mise à niveau vers xcode5.

le problème était qu'un tas de champs dans mes paramètres de construction pour «release» étaient vides. Je suppose que xcode4 est automatiquement passé au paramètre de débogage.

anwyays - ma solution était de trouver tous ces paramètres de «release» qui étaient vides et de les définir sur le paramètre de débogage. En particulier, il s'agissait du paramètre de fichier Info.plist.

Roocell
la source