web-dev-qa-db-fra.com

Xcode 7 - Échec de la génération des données de couverture du code

Lorsque j'exécute mes tests, j'obtiens une erreur:

La génération des données de couverture du code a échoué.
Impossible de récupérer les fichiers de données de profil depuis 'UIDevice'.

enter image description here

Sur la console était imprimé un avertissement:

Expiration du délai d'attente de 120 secondes pour le démarrage du simulateur, l'état actuel est 1.

Quelle est la raison?

55

Si vous intégrez votre projet avec un cadre dynamique tiers, vous devrez peut-être ajouter un chemin dans vos paramètres de génération. Recherchez -> Paramètres de construction -> "Chemins de recherche Runpath" et assurez-vous qu'il inclut le chemin d'accès au framework.

Je venais de voir ce problème moi-même après avoir mis en place un projet pour utiliser un cadre sur lequel mon équipe travaillait. Après avoir mis à jour ce paramètre spécifique, le problème a disparu. Dans mon cas, le chemin d'accès était identique à celui que j'avais déjà défini pour le paramètre "Chemins de recherche du cadre".

15
Cruinh

J'ai résolu ce problème, tout comme je résous la plupart de ces problèmes XCode:

  1. supprimez vos fichiers de projets dans votre DerivedData (Xcode>Preferences>Locations>DerivedData→ pour y sauter dans le Finder)
  2. Product>Clean
  3. (maintenez le bouton Alt enfoncé) Product>Clean Build Folder
  4. Quittez XCode
  5. Redémarrez XCode
  6. Supprimez votre application de votre appareil/simulateur

Réessayer. Si cela ne fonctionne toujours pas, utilisez un autre simulateur/appareil pour quelques exécutions. Tôt ou tard, il fonctionnera à nouveau sur l'original.

12
MarkHim

Si vous utilisez des cabosses de cacao, vérifiez ce fil sur le référentiel Cocoapods: https://github.com/CocoaPods/CocoaPods/issues/5385#issuecomment-226269847

Cela a résolu mon problème:

Copie de la réponse @dfleming:

Pour une raison quelconque, il semble que CocoaPods n'ajoute pas la phase de construction "[CP] Embed Pods Frameworks" à la cible Tests d'interface utilisateur lors de la génération de l'espace de travail du projet.

J'ai ajouté cela manuellement et les tests d'interface utilisateur ont pu être exécutés à nouveau.

Cette phase de construction doit exécuter le script suivant: (Remplacez {YourProject} par le nom de votre projet)

"${SRCROOT}/Pods/Target Support Files/Pods-{YourProject}UITests/Pods-{YourProject}UITests-frameworks.sh"

8
Nuno Gonçalves

J'ai rencontré exactement la même erreur et je l'ai finalement fait fonctionner, voici les étapes que j'ai suivies.

  1. J'ai essayé de redémarrer Xcode et le simulateur, après avoir nettoyé et supprimé l'application, cela n'a jamais fonctionné.

  2. Ensuite, j'ai redémarré le Mac comme suggéré, mais cela n'a toujours pas fonctionné.

  3. Ensuite, j'ai choisi un nouvel appareil pour tester dans le simulateur, j'utilisais auparavant 5s et je suis passé à 6, et cela a fonctionné.

Fait intéressant, lorsque je suis passé au simulateur iPhone 6, il a montré le logo Apple avec une barre de chargement, avant d'exécuter l'application et de travailler.

En revenant au simulateur 5s, il a fait exactement la même chose, avec la barre de chargement Apple, ce qu'il n'avait pas fait auparavant, puis les 5s ont fonctionné.

Il semble donc que ce soit un problème de simulateur, et le passage à un autre appareil a fonctionné. La réinitialisation du contenu et des paramètres peut être la solution pour un appareil qui ne fonctionne pas.

5
danfordham

Ce problème peut également apparaître lorsque vous utilisez des Cocoapods avec un framework où certaines dépendances sont manquantes. Par exemple, si vous utilisez Framework A et que ce framework dépend de Framework B mais dans la Podspec de Framework A la dépendance n'est pas déclarée.

3
balkoth

Cocoapodes link_with la méthode peut provoquer ce problème!

J'obtenais exactement la même erreur sur xcode 7.2 - aucun nombre de réinitialisations de simulateur ou de périphérique ne semblait le résoudre. Après avoir complètement reconstruit mes cibles UITest, les choses ont bien fonctionné. Après avoir passé beaucoup de temps dans un diff git massif du .pbxproj fichier J'ai trouvé une solution pour mon projet. Je ne sais pas si cela s'attaque à la cause première de tous ceux qui voient cette erreur, mais cela clarifie définitivement les choses pour moi.

À partir des informations sur le projet ci-dessous "cible de déploiement", "Configurations" répertoriera toutes les configurations possibles pour votre application. Développez la configuration que vous essayez d'exécuter et vous devriez voir une liste de toutes vos cibles. Dans mon cas, les cocoapods avaient automatiquement ajouté une configuration de base pour la cible UITest:

enter image description here

Définissez ce paramètre sur none dans la liste déroulante.
Ensuite, dans le menu de gauche, sélectionnez votre cible UITest puis build phases Vous devrez supprimer check pods manifest.locklink binary with librariesemebd pods frameworks et copy pods resources.

Enfin, accédez à votre fichier pod et vérifiez les mentions de votre ou vos cibles UITest. Dans mon cas, j'avais spécifié en haut de mon podfile:

platform :ios, '8.4'
use_frameworks!

link_with 'My App', 'My UITesting Target' 

pod 'A Pod', '~> 1.0'

Au lieu de cela, le fichier pod doit répertorier les dépendances spécifiques pour chaque cible:

platform :ios, '8.4'
use_frameworks!

target 'My App', :exclusive => true do
    pod 'A Pod I want to use in my app', '~> 1.0'
end

En supposant que vous n'utilisiez aucun module dans vos UITests, la cible devrait se reconstruire sans erreurs et les tests s'exécuteront!

Ma compréhension de la racine de ce problème est que chaque cible UITest crée deux bundles distincts, un pour l'application et un pour le contrôleur UITest. Malheureusement, les cocoapodes link_with la logique modifie toutes les cibles spécifiées pour attendre le pods.framework dans leur bundle. Les scripts de phase de construction ajoutent le framework au bundle d'application mais pas au bundle de contrôleurs UITest.Ainsi, lorsque vous lancez vos tests, le bundle de contrôleurs UITest semble manquer de frameworks et xcode abandonne l'installation.

Si vous utilisiez des pods dans vos UITests, vous devriez pouvoir les spécifier de la même manière:

target 'My UITesting Target', :exclusive => true do
    pod 'Another Pod I want only for UITesting', '~> 1.0'
end

Et lorsque vous exécutez pod install tout doit se connecter correctement.

3
Tucker Sherman

Mon problème est dû à une version de déploiement incorrecte de la cible la plus instable. La version de déploiement de l'application testée était 7.0, mais celle qui n'était pas la plus installée n'était pas configurée correctement automatiquement. Il était réglé sur 10,0, tandis que la version de mon simulateur était de 8,4. Changez la version de déploiement de la cible UT target) en 8.0 dans les paramètres de build, puis tous les problèmes ont disparu.

2
Henry Sou

J'ai essayé un tas de ces solutions sans succès. J'ai désactivé l'option Code Coverage dans la section Test de mon schéma, ce qui a supprimé l'erreur mais les tests ne s'exécutaient pas. Ensuite, j'ai remarqué pas mal de choses dans la console NSLog. Quelque part là-dedans, il a fait référence à un cadre que je n'utilisais plus et que j'essayais de charger.

J'ai recherché l'application, et Build Settings -> Other Linker Flags essayait de charger le framework qui n'était plus là.

J'ai supprimé: -framework 3rd_party_libname

Ensuite, les tests ont de nouveau fonctionné. C'était déroutant, mais veuillez vérifier les messages NSLog. J'utilisais XCode 8.3

2
Miro

Cela peut se produire si l'application hôte que la cible de test teste n'est pas liée aux bonnes dépendances. Par exemple, si vous testez un framework, assurez-vous que l'application Host est liée à ces frameworks et également intégrée. enter image description here

2
Mustafa

Dans mon cas, j'avais ajouté des fichiers Swift à un framework qui était (jusque-là) purement Objective-C. Le bundle de test n'en avait pas en avait Swift code dedans.

Une fois que j'ai ajouté un fichier Swift au bundle de test, Xcode a automatiquement mis à jour certains paramètres du projet et l'erreur a disparu.

Vous devez conserver le fichier Swift dans le bundle de test, même s'il ne peut contenir aucun code. Les codes Xcode ou Cocoapod utilisent évidemment l'existence de fichiers Swift dans l'ensemble de tests pour déterminer s'il faut exécuter les tests en "mode Swift".

1
aapierce

Un ou plusieurs de vos simulateurs sont bloqués. La seule chose qui fonctionne toujours pour résoudre ce problème pour moi est de réinitialiser le contenu et les paramètres du simulateur à partir du menu Simulateur.

Reset Content and Settings...

Remarque: cela supprimera toutes les données d'application du simulateur.

1
phatblat

Après avoir longtemps essayé de comprendre cela, il s'est avéré que je devais créer une toute nouvelle cible de test. Ensuite, après le redémarrage de l'appareil, le problème n'a plus refait surface.

1
Pellet

La cause première est probablement l'échec du simulateur. Les problèmes avec le simulateur sont courants, en particulier au premier lancement.

Si le problème se produit même après le lancement et la connexion du simulateur, veuillez publier les détails de l'erreur.

Pour lancer le simulateur, je dois souvent annuler la première exécution (après avoir lancé Xcode proprement), et essayer de relancer plusieurs fois.

Si cela est reproductible, se produit sur plusieurs projets et persiste après la relance et le nettoyage des projets, pensez à soumettre un défaut à Apple si la communauté Stack Overflow ne peut pas vous aider.

0
rholmes

J'ai eu ce même problème, mais cela était dû au fait d'avoir une cible de test et de renommer la cible de l'application. Assurez-vous que vous disposez d'un ensemble d'applications hôte valide.

  • Choisissez la cible de test sur la page du projet
  • Sous l'onglet Général, il devrait y avoir une boîte de sélection d'application hôte
  • Choisissez la cible que vous souhaitez tester
0
Jason

J'ai également rencontré le même problème:

J'ai essayé les choses suivantes pour différents projets:

1.Pour un projet où j'avais des frameworks tiers, le problème était que le bundle de test ne pouvait pas trouver le framework au moment de l'exécution. Pour cette mise à jour, testez les paramètres de construction des chemins de recherche de la cible Runpath en ajoutant $(PROJECT_DIR)/Frameworks (en supposant que vous gardiez vos cadres à cet emplacement)., Il a résolu mon problème pour ce projet.Vous pouvez le rechercher à l'emplacement ci-dessous:

Project file -> Test target -> Build Settings -> Runpath Search Paths
  1. Dans un autre espace de travail, lorsque j'ai changé mon appareil de test en un autre simulateur ou changé l'appareil lui-même. ça m'a aidé.

  2. Redémarrez le xcode ou votre système mac.

j'espère que cela vous aidera

0
Aks

Étapes qui ont fonctionné dans mon cas Supprimez le schéma et cliquez sur Gérer le schéma -> Générer automatiquement le schéma pour résoudre le problème dans mon cas.

Le problème a été causé par l'installation du certificat dans le simulateur et dans le trousseau

0
Priya

J'avais ce problème sur Xcode 8.3 sur Sierra 10.12.4

J'ai ouvert l'application Keychain Access sur mon Mac

Après quelques secondes, j'ai reçu plusieurs fenêtres contextuelles du système demandant mon mot de passe pour accorder des autorisations aux éléments du trousseau.

J'ai entré mon mot de passe dans les fenêtres contextuelles, puis mes tests ont commencé à fonctionner.

0
Chris

tilisateurs de Carthage:

Cela m'est arrivé après avoir ajouté un nouveau cadre à mon Cartfile.

Iran carthage update mais j'ai oublié de faire glisser le .framework fichier du Finder dans la section Embedded Binaries de la cible de mon application!

Une fois que j'ai fait ça, le problème a disparu.

(Notez qu'il s'agit d'un cas spécifique du problème général mentionné par @Mustafa ci-dessus.)

0
Mike Taverne

En utilisant Xcode 9.1 avec plusieurs cibles de construction et un compilateur standard, nous travaillions sur des tests d'interface utilisateur et j'ai commencé à voir ce problème. Donc, vous me détesterez probablement pour cette réponse, et je m'attends à ce qu'elle soit rétrogradée, MAIS cela a réellement fonctionné pour moi: j'ai dû supprimer complètement Xcode et mon projet de ma machine pour faire disparaître cette erreur.

J'ai essayé toutes les suggestions de ce fil, plusieurs fois, j'ai essayé d'effacer les fichiers de cache, de supprimer les données dérivées, de bricoler les paramètres de construction, de mettre à jour les fichiers pods, de nettoyer, de reconstruire après chaque tentative, de nettoyer le simulateur, de recréer manuellement les simulateurs dans `` gérer les appareils '' . Après des heures et des heures de frustration, la raison pour laquelle cette machine ne construisait pas notre test d'interface utilisateur restait un mystère complet. Cela semblait bien fonctionner sur d'autres machines et sur notre CI. En plus des éléments de ce fil, j'ai modifié manuellement le fichier pbxproj pour définir toutes les options liées à la couverture du code sur "NON".

Enfin, j'étais à un pas de reformater la machine entière. J'ai décidé de supprimer complètement Xcode en suivant les suggestions ici: Stackoverflow: Comment désinstaller complètement Xcode .

Plus précisément, j'ai jeté notre espace de travail, quitté tous les programmes, supprimé tous les fichiers répertoriés, effacé le contenu et les paramètres du simulateur, supprimé le simulateur, éteint la machine pendant 20 minutes, suis revenu, réinstallé Xcode, cloné le référentiel et le tour est joué ! Pas d'erreur.

J'espère que cela résout le problème pour quelqu'un. C'est l'option "nucléaire", et vous ne devriez jamais avoir à le faire, mais comme je l'ai dit, c'est la seule chose qui a fonctionné pour moi.

0
Brooks DuBois