web-dev-qa-db-fra.com

Impossible de générer l'archive d'applications iOS dans xcode

J'ai un problème à générer une archive App iOS à partir d'une application. L'application compile très bien et fonctionne même dans le simulateur. Maintenant, je voulais faire certains tests ad hoc et je ne peux pas générer l'archive d'applications iOS. Lorsque je clique sur le produit -> Archive, il génère une archive générique xcode. Quelqu'un peut-il m'aider. Je dois mentionner que j'ai déjà généré une archive d'applications iOS pour cette application. Il vient de cesser de générer iOS Archive pour une raison quelconque. Merci beaucoup.

165
Filip Majernik

Vérifier les paramètres de construction:

  1. Ignorer l’installation est NON pour la cible principale du projet
  2. Ignorer l'installation est OUI pour les objectifs du cadre (sous-projets)
  3. Dans les phases de construction de sous-projets, les en-têtes de copie doivent être dans le projet et non dans public (ne s'applique pas si vous créez une bibliothèque statique)
  4. Le répertoire d'installation sous Déploiement est valide (/ Applications par exemple)
298
Alex L

Cela peut arriver si vous avez ajouté un framework/une bibliothèque ... vous devez modifier les paramètres Cible-> Construire de cette bibliothèque et définir le paramètre 'Ignorer l'installation' sur 'Oui'. Lorsque vous archivez à nouveau, XCode devrait à nouveau produire une «archive d'applications iOS» plutôt qu'une «archive générique de xcode».

74
delany

En plus de Skip Install to Yes et si vous avez ouvert un autre projet lib/framwork dans votre projet d'application, vous devez déplacer les en-têtes (le cas échéant) de public à projet dans le phase de construction/Copier les en-têtes.

build phase of your lib/framwork target

61
ebtokyo

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

  1. J'ai eu une bibliothèque statique 320, j'ai utilisé cocoapods pour inclure les fichiers dans le projet principal
  2. suivi l'installation de saut pour tous les autres sous-projets/bibliothèques statiques et basculement des en-têtes de copie du public vers le projet comme indiqué ci-dessus
  3. le plus important: dans chaque bibliothèque utilisée par votre projet, accédez à phases de construction -> Copier les fichiers et assurez-vous que destination passe de Absolute path à products directory. Remarque: voir ci-dessous pour affiner votre recherche afin de trouver la bibliothèque à l'origine de cette erreur.

et c'était ça! 

astuce: pour avoir une idée des fichiers incriminés à l'origine de la création par votre archive d'un fichier archive plutôt que d'un ip, 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 'libraries' identifiera les bibliothèques dont vous avez besoin pour définir Skip Install sur Yes. 
  6. dans certains cas, usr/local/include identifiera les fichiers d'en-tête coupables que vous devez déplacer de public à projet ou les fichiers que vous devez modifier de chemin absolu à répertoire de produits (ou même les fichiers que vous avez oubliés de définir lors de l'installation par saut) mais ce répertoire (c'est-à-dire usr/local/include) varie en fonction de la structure de votre répertoire de sous-bibliothèque. Dans de nombreux cas, vous verrez tous les fichiers répertoriés sous Copier les fichiers à l'étape 3 ci-dessus. Si vous les trouvez ici, vous avez une réponse définitive à la cause de votre problème.

update to hint: pour vous simplifier la vie .. quels que soient les fichiers figurant à l'étape 4 de indice ci-dessus .., recherchez-le simplement dans la recherche globale de xcode .. et vous devriez obtenir immédiatement résultats pour ce que vous voulez .. par exemple, ceci était le contenu de mon dossier (en suivant les étapes de l'indice ci-dessus):

enter image description here

Je peux donc dire que cela a quelque chose à voir avec les bibliothèques crypto et ssl .. en les recherchant: 

enter image description here

m'a fait comprendre que j'avais oublié de configurer skip installer sur yes.

43
abbood

Si vous exportez l'archive, ouvrez-la et consultez /urs/local/include dans Products essayez cette suggestion :

Dans chaque module, sous Packaging, Private Headers Folder Path et Public Headers Folder Path est défini sur /usr/local/include. Si je les efface, je reçois une archive valide.

 enter image description here

A travaillé pour moi après la mise à niveau de mon application React Native en 0.11.0, Xcode 7 et CocoaPods 0.39.0.beta.4.

20
Josh Habdas

Si vous utilisez CocoaPods ainsi que WatchKit ou une extension Today, il y a un numéro ouvert sur le référentiel CocoaPods expliquant quel pourrait être votre problème.

La solution pour moi consistait à supprimer la phase Copy Pod Resources des cibles WatchKit Extension et Today Extension sous Build Phases. Le projet a été compilé et archivé comme prévu une fois que j’ai fait cela.

J'espère que cela aide quelqu'un, cela m'a laissé perplexe pendant une journée entière!

12
rebello95

Si l’une des réponses ci-dessus ne fonctionne pas, votre problème est probablement lié à cocoaPods. La dernière mise à jour 0.38.1 a tout gâché, mais j'ai rétrogradé à 0.37.1 et les choses sont revenues à la normale. Utiliser Xcode 6.3.1 

Later edit: la mise à jour vers 0.38.2 résoudra également ce problème. Plus d'informations sur les causes de ce problème ici: Cocoapods 0.38.1 n'a pas pu créer d'archive valide

10
Ehmad Zubair

Bien que j'utilise Xcode5 et que cela m’ait réglé pour moi, j’ai édité le schéma de construction - essayer toutes les suggestions ci-dessus qui étaient applicables n’a pas aidé dans mon cas.

J'avais deux cibles, par exemple, "App" et "App FREE". Mes problèmes avec l'archive générique sont survenus lorsque j'essayais d'archiver la version GRATUITE, que j'avais ajoutée après la version "normale" de l'application. Dans mon cas, lorsque j'ai sélectionné son modèle dans la barre d’outils et que j’ai choisi Edit Scheme ..., j’ai vu que la section Construction avait deux cibles, à savoir App et App FREE.

J'ai décoché toutes les colonnes pour App, ne laissant que les colonnes de App FREE cochées, puis j'ai cliqué sur OK. La prochaine fois que j'ai choisi Produit> Archive, j'ai obtenu mon application GRATUITEMENT au lieu d'une archive générique. :)

7
Stephen Watson

Si vous n'avez qu'un seul projet, cette solution serait peut-être utile. Ce problème s’est produit lorsque j’ai dupliqué la cible. En conséquence, deux cibles parallèles ont été construites. Cela causait le problème. L'archive générique IOS a été construite. 

Pour désactiver le parallèle construit, allez à 

  • Gérer des schémas, 
  • Modifier le schéma, 
  • Construire, 
  • Supprimer l'autre cible.
6
roman777

J'ai plusieurs projets dans mon espace de travail (GTL, Pods et mon projet principal) et voici ce qui a fonctionné pour moi: 

Sélectionnez le projet, il y aura 2 types, il y a le Projet et il y a le Cibles .

Pour les projets qui ne sont pas votre principale comme GTL ou PODS:

Projets:

Skip Install = NO
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

Cibles:

Skip Install = YES
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

Pour le projet principal (qui porte généralement le même nom que votre nom de produit):

Projets:

Skip Install = NO
Installation Directory = /Applications

Cibles:

Skip Install = NO
Installation Directory = /Applications

Vérifiez la cible de déploiement ios sur chaque projet et cible pour vous assurer qu'ils sont tous identiques.

5
Bryan P

J'ai eu ce problème après la mise à jour vers iOS 9 et Xcode 7. La solution de Josh H a fonctionné pour moi:

Dans chaque module, sous Emballage, Chemin du dossier En-têtes privés et Public Le chemin du dossier des en-têtes est défini sur/usr/local/include. Si je les efface alors Je reçois une archive valide.

J'ai également fait un script post-installation pour mon Podfile pour le faire automatiquement!

    post_install do |installer_representation|
        installer_representation.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                config.build_settings['PUBLIC_HEADERS_FOLDER_PATH'] = [""];
                config.build_settings['PRIVATE_HEADERS_FOLDER_PATH'] = [""];
            end
        end
    end

Ajoutez-le simplement au bas de votre fichier podfile et exécutez pod install

5
wyzkid207

J'ai eu ce problème. Dans mon cas, cela a été causé par le fait de garder une cible d'application Mac en tant que dépendance de l'application iOS.

C’est pour cela que l’application Mac était un outil utilisé pour générer des données pour l’application iOS, qui était ensuite incluse dans le kit.

Je devais supprimer cette dépendance et créer l'outil séparément avant de créer l'application iOS elle-même.

4
Tomas Andrle

Dans mon scénario, je ne récupérais les "Archives génériques" erronées qu'après avoir commencé à inclure du code Swift dans mon projet principalement Objective-C. Après de nombreux dépannages et examens du fichier archive que Xcode crachait, j'ai remarqué que le dossier SwiftSupport (avec les dylibs requis pour l'exécution de Swift) se trouvait dans un endroit différent de celui d'une application de projet Swift flambant neuve de Vanilla. archiver.

J'ai trouvé le paramètre de construction Installation Directory et remarqué qu'il était défini sur un chemin personnalisé dans mon projet. Je l'ai tout simplement supprimée (en lui attribuant la valeur générique /Applications) et la prochaine version -> Archive que j'ai effectivement utilisée a fonctionné comme prévu et m'a fourni une archive iOS app appropriée.

TL; DR: Assurez-vous que votre paramètre de construction Installation Directory est défini sur sa valeur par défaut /Applications lorsque vous incluez du code Swift dans votre application, en particulier si vous démarrez avec un fichier de projet plus ancien pouvant comporter des paramètres de génération hérités inattendus.

4
Ryan Dorshorst

Laissant ceci ici pour sauver d'autres du même voyage. 

J'ai également constaté que je devais également supprimer la même phase de construction de Copy Pod Resources d'une bibliothèque statique cible dans mon espace de travail.

3
Michael

Ajout à la réponse de Alex L.

Point 3. Changer "Paramètres de construction" -> "Chemin du dossier d'en-tête public" en "include/xxx" fonctionne également.

2
CopperCash

Si rien de ce qui précède ne vous a aidé ... après beaucoup de temps .......

J'ai supprimé la valeur dans Info.plist for Bundle Version parce que j'étais assez content de Bundle Version Short 1.0. Mal. Ne fais pas ça.

* Remarque: je l'ai fait en le modifiant dans l'interface utilisateur à droite, sans réaliser que cela placerait une clé vide dans le fichier Info.plist. Je pense que cela le rend invalide. Mon paquet est apparu sous forme d’autres éléments lors de l’archivage et n’avait pas d’icône, et je ne pouvais pas télécharger vers n'importe où.

Cela revient à des valeurs non valides dans Info.plist. Si ce n’est pas une archive valide, essayez de décompresser une ancienne archive et d’écraser/écraser votre archive actuelle pour voir si elle la corrige lors de la reconstruction de l’archive.

2
ohc192
  1. Allez dans Paramètres de construction et ajoutez 

    yourAppName/Resources/dist.plist au droits de signature de code

  2. Appuyez sur cmd + B avec Périphérique iOS ou a Périphérique réel sélectionné comme cible de construction

  3. Une fois que vous avez terminé -> faites défiler jusqu'au dossier "Produits" et cliquez-droit sur votreNomApp.app

  4. Choisissez "Afficher dans le Finder"

  5. Créez un dossier avec Nom Charge utile ( majuscule "P" )

  6. Copiez votreNomApp dans votre dossier Payload

  7. Créez un zip à partir de votre dossier de charge utile

  8. Renommez le fichier Zip en yourAppName.ipa

TERMINÉ

1
LoVo

Après avoir essayé à peu près tout:

  • Nettoyer, archiver
  • supprimer DerivedData, Archive
  • redémarrer Xcode (j'utilisais XCode7), archiver
  • combinaisons de ci-dessus ...

J'ai alors remarqué que ma partition de démarrage était «à court d'espace disque libre»… environ 1 Go environ… .. J'ai redémarré, puis environ 18 Go d'espace disque disponible.

Puis Xcode et le projet ouverts, exécutés Archive ... et étonnamment (après une heure d'essayer de construire une archive), j'ai finalement obtenu une archive non générique.

Aucune idée si c'est un problème de disque libre qui l'a corrigé ou un redémarrage du macOS qui l'a corrigé, mais cela a fonctionné pour moi.

1
Peter Li

Si vous avez des fichiers .xcodeproj dans Projet> Cibles> Phases de construction> les dépendances de cible, supprimez-les de là, puis créez votre ipa. Ça marche pour moi. À votre santé

Vous pouvez obtenir une réponse ici: xcode crée une archive générique xcode au lieu de iOS App Archive

1
Kalpesh Panchasara

Dans mon cas, j'avais un script personnalisé qui copiait certains fichiers temporaires dans:

${TARGET_BUILD_DIR}/myTempDir

Cela signifie qu'après avoir examiné l'archive pour en examiner le contenu, j'ai trouvé un dossier myTempDir juste à côté du fichier .app. Une fois que j'ai modifié le script pour sauvegarder ailleurs, les choses ont été triées.

0
Eli

Dans mon cas, aucune des 30 autres réponses ne fonctionnait. L'emplacement pour les archives (Préférences -> Emplacements) a été défini sur un chemin personnalisé pointant vers notre serveur (Windows Server 2008 si cela fait une différence). 

Une fois que j'ai redéfini l'emplacement par défaut sur l'ordinateur local, une archive d'appli iOS régulière a été générée. Je ne sais pas pourquoi cela fonctionne, mais j'espère que cela aidera aussi quelqu'un d'autre.

Maintenant, nous stockons devons déplacer manuellement les fichiers .xcarchive sur le serveur pour le stockage, mais au moins, nous n'avons aucun problème avec les archives génériques.

0
alera729

J'ai résolu cette erreur par ouvrant uniquement le projet d'application} dans XCode, c'est-à-dire. ne pas ouvrir un espace de travail} comprenant l'application et d'autres projets/bibliothèques/cadres.

Ayant 2 projets distincts, un framework ou une bibliothèque partagée et une application iOS, je devais ouvrir 2 fenêtres XCode différentes, chacune en ouvrant directement le fichier .xcodeproj au lieu du fichier commun .xcworkspace, afin de construire chacun d’abord.

En tant qu'effet secondaire sympa, XCode ne reconstruit plus chaque cible de chaque projet après un nettoyage de Clean, ce qui entraîne des temps de construction raccourcis.

Arrière-plan: Je crée un SDK open source et une application iOS de démonstration. J'avais ouvert les deux dans un seul espace de travail . Définir Skip install sur YES sur les cibles du SDK empêcherait quiconque de créer une archive, car celle-ci serait vide. option. Si vous utilisez Project au lieu des en-têtes Public, les fichiers d’en-tête à distribuer ne seront pas archivés. Il ne s’agit donc pas d’une option.

0
ofavre

Dans mon cas, j'avais des fichiers dans la copie des fichiers. Je les ai juste retirés, puis tout fonctionnait bien et j’ai réalisé l’application iOS App Archive. Allez dans Build Phases-> Copy Files et supprimez les fichiers. J'espère que cela résoudra votre problème. :)

0
S_J

Ceci est destiné aux âmes pauvres comme moi pour lesquelles aucune de ces solutions ne fonctionnait, où même une nouvelle application à vue unique construit sans aucune erreur mais ne parvient pas à archiver.

Allez dans le chemin des emplacements d’archives (disponible dans Xcode -> Préférences -> Emplacements -> Chemin d’archive) et supprimez les dossiers des jours problématiques!

Bon sang Apple!

0
Dhilip

C’est parce que je travaillais dans un espace de travail . Le projet était archivé, mais ne pouvait pas être affiché dans la fenêtre de l’organiseur . J'ai fermé l’espace de travail et ouvert le projet lui-même. ouvert dans l'organisateur ... espérons que c'est une aide.

0

Une autre raison possible est d'avoir dans les "Dépendances cibles" des références aux projets d'une autre plateforme. Dans mon cas particulier, je travaillais sur un projet qui partage le code pour OSX et iOS. Dans l'une des cibles iOS, j'avais accidentellement ajouté une cible OSX en tant que dépendance.

0
miguelSantirso

Une solution de plus, puisque tout ce qui précède n'a pas fonctionné pour moi ...

Changé le User Header Search Paths (je suppose que Header Search Paths fonctionnerait tout aussi élégamment) en "$(BUILT_PRODUCTS_DIR)/BlocksKit".

Contexte :

Dans BlockKit, les développeurs ont structuré les en-têtes du projet principal différemment de la structure en cours de déploiement. Par conséquent, vous ne pouvez pas référencer les en-têtes du projet et vous devez référencer les en-têtes copiés dans le répertoire de construction.

0
Mazyod

Si vous utilisez Xcode 7 avec cocoapods v.0.38.2. Essayez de supprimer copy pod resources de votre cible d’extension Today.

 enter image description here

0
CoderPug

La façon dont cela fonctionnait pour moi dans (Xcode 5), j'avais 2 cibles et lorsque je modifie le schéma, dans le volet de gauche de l'éditeur de schémas, vous verrez apparaître [BUILD, RUN, TEST, PROFILE XXX.APP, ANALYSE, ARCHIVE ] dans le volet CONSTRUIRE, vous verrez vos cibles de projet répertoriées dans une liste. À l'extrême droite, vous verrez les sélections ARCHIVE. Assurez-vous qu'une seule cible est sélectionnée pour l'archivage.

Deux de mes cibles ont été sélectionnées dans mon projet, je n’ai vérifié que la cible que je voulais dans le produit et cela a fonctionné!

0
dexyjones

Dans mon cas, j'avais deux cibles (Target1 et Target2) et la première d'entre elles pouvait être archivée dans "l'application iOS", mais en second lieu dans les "autres éléments" uniquement. Ainsi, pour moi, le moyen le plus rapide de résoudre ce problème a été de remplacer mon Target2 par une copie de Target1 en procédant comme suit:
1. Renommez Target2 en Target2_old
2. Faites une copie de Target1 et renommez-la Target2 .
3. Remplacez le lien par le fichier .plist approprié (de l'ancienne cible) pour la nouvelle cible 2 et cochez la case "Adhésion à la cible" dans vos classes .
4. Ouvrez "Manage Schemes ..." et supprimez le schéma pour Target2_old, puis ajoutez un nouveau schéma pour le nouveau Target2
5. Sélectionnez ce nouveau schéma, puis Produit -> Archive.

0
Pavel Kataykin

Dans mon cas, j'ai dû déplacer FMDB et BlocksKit vers des bibliothèques statiques. Auparavant, ils étaient construits en tant que sous-projets. N'oubliez pas que vous pouvez utiliser lipo pour créer des bibliothèques universelles. Lors de la construction des produits finaux, le code du simulateur sera supprimé automatiquement.

0
Maciej Swic

Cela m'est arrivé sur une application où la version a été définie avec une variable non définie $

J'ai défini la version et j'ai pu générer une application iOS.

0
Fred

Essayez de définir les en-têtes $ (PROJECT_NAME) dans le chemin du dossier des en-têtes publics du projet Framework. Vous devez créer les paramètres de la cible de la bibliothèque, puis modifier le chemin du dossier des en-têtes publics en tant qu'en-têtes $ (PROJECT_NAME). 

0
Inco Mob

J'ai rencontré ce problème après avoir ajouté un outil de ligne de commande OS X au projet de mon application iOS et l'option Ignorer l'installation était définie sur NO par défaut pour la cible de l'outil de ligne de commande. Comme vous ne pouvez évidemment pas installer un binaire OS X sur un périphérique iOS, l'archivage par défaut est une archive Xcode générique. La définition de Skip Install sur YES pour cette cible a résolu le problème.

0
Brian Stewart

J'ai rencontré un problème similaire, mais dans une application WatchKit sans pod. Ignorer l'installation a été défini correctement sur NO pour l'application iOS, mais incorrectement sur NO pour l'application WatchKit. 

La modification de l'option Ignorer l'installation sur OUI pour l'application WatchKit (tout en maintenant NON pour l'application iOS) a résolu le problème et Xcode a correctement généré une archive d'application iOS au lieu d'une archive Xcode générique.

0
StevenHolland

Afin d'être complet, je publie ma solution.

J'ai rencontré exactement le même problème en essayant de créer une archive d'un projet iOS dans Xcode 5.1.1 (5B1008). Aucune des suggestions ci-dessus n'a résolu le problème, et la plupart d'entre elles étaient sans intérêt (je n'avais ajouté aucun cadre et aucune entrée publique dans la section Copier les en-têtes de mes phases de construction).

Dans mon cas, résoudre le problème consistait simplement à fermer mon projet, à supprimer toutes les archives que j'avais précédemment constituées, à aller dans Préférences> Comptes, à supprimer mon compte développeur, à quitter Xcode, à relancer, à rajouter mon compte développeur, à démarrer le processus d'archivage. encore. Cela a résolu mon problème immédiatement.

0
Ade Ward

Dans mon cas, la suppression d'un trait de soulignement du nom de la cible l'a corrigé.

Je ne sais pas si c'est le soulignement ou le changement de nom qui a fait l'affaire.

0
Mathijs