web-dev-qa-db-fra.com

Les tests cessent de fonctionner sous l'erreur xcode 8 TEST_Host

Je veux commencer des tests sous Xcode 8 et cela échoue au début. Mon erreur est:

Impossible de déterminer l'identificateur de paquet pour TEST_Host: De MyProjectTest. "/Users/jakubmazur/Library/Developer/Xcode/DerivedData/MyProject-ejeepybggxvekxajlyngopeahiex/Build/Intermediates/CodeCoverage/Products/Testing-iphonesimulator/MyProject.app"

Une idée de ce qui ne va pas ici? J'essaie de nettoyer le projet - rien . Dans le Build Settings de ma cible dans Packaging je change l'identificateur de bundle de produit dépend de la configuration de mon schéma. Cela peut avoir quelque chose à voir avec cela, mais pas sûr.

-- MODIFIER

Ok comprendre comment réduire le problème. Lorsque je modifie les paramètres dans le schéma pour utiliser la configuration de construction Debug au lieu de Testing semble fonctionner, mais il me faut une configuration séparée pour les tests.

33
Jakub

Ok le comprendre. Il y a un problème avec les noms de packages. Malheureusement, il y a un problème avec Xcode. J'utilisais différents noms de modules pour différentes configurations. Allez donc dans Project -> Build Settings -> Product Module Name Changez le nom dans toutes les configurations pour le même nom sans espaces.

8
Jakub

Pour une raison quelconque, le paramètre "Application hôte" dans l'image ci-dessous était le problème pour moi. La sélection de la bonne cible a résolu ce problème.

 

Cela a fini par modifier les valeurs suivantes dans mon xcodeproj:

  • BUNDLE_LOADER = "$ (TEST_Host)";
  • TEST_Host = "$ (BUILT_PRODUCTS_DIR) /myappname.app/monappname";
45
masty

Il y a un autre cas que vous pourriez rencontrer. Si vous avez besoin de noms de produit différents pour la cible principale (par exemple, Debug, Staging, Production) et essayez d'utiliser le sélecteur Xcode Host Application, des valeurs incorrectes seront écrites dans le paramètre de construction TEST_Host.

Et bien que le message d'erreur que vous voyez concerne l'identifiant de l'ensemble dans la configuration de débogage, Xcode se plaint en réalité de TEST_Host dans Version configuration.

Je l'ai corrigé en modifiant manuellement le paramètre de construction TEST_Host. Par exemple, si vous avez défini ProductName sur la cible principale sur AppDebug dans la configuration Debug et AppRelease dans Release, votre TEST_Host devrait être le suivant:

Qu'est-ce que Xcode définit:

$(BUILT_PRODUCTS_DIR)/AppDebug.app/AppDebug

Ce que vous devez définir:

Debug configuration: $(BUILT_PRODUCTS_DIR)/AppDebug.app/AppDebug
Release configuration: $(BUILT_PRODUCTS_DIR)/AppRelease.app/AppRelease
11
DenHeadless

Mon projet a de nombreux objectifs et j'ai donc dû définir l'application hôte de la cible de tests sur 'Aucune'. (Xcode 9.2)

 enter image description here

5
mevdev

Sous Cible de test >> Paramètre de construction >> Test >> Test Host vous pouvez voir le fichier .app qui doit être utilisé pour les tests.

Pour moi **. App nom de fichier était faux. Et je l'ai remplacé par **/Build/Intermediates/CodeCoverage/Products/Debug-iphonesimulator/**. App (recherchez le fichier .app présent dans ce répertoire).

3
Suryavel TR

J'ai souvent rencontré cette erreur et j'ai finalement découvert qu'elle était due à la variation de PRODUCT_NAME entre les configurations de génération Debug et Release.

Nous faisions cela pour que les versions Debug aient un nom d'application différent lorsqu'elles sont installées sur le téléphone (ainsi qu'un identifiant de lot différent pour que nous puissions les installer côte à côte avec les versions de l'App Store).

Nous avons annulé cette modification et ajouté un nouveau paramètre APP_DISPLAY_NAME à la configuration de la construction, modifié les types de génération et modifié l'Info.plist afin qu'elle utilise $ (APP_DISPLAY_NAME) au lieu de $ (PRODUCT_NAME).

Après cela, il est important de définir la cible de test du projet et de vous assurer que le paramètre "Application hôte" de Général est bien défini pour votre application.

1
JosephH

Ce que j’ai découvert, c’est que les tests ne seront exécutés que si vous avez construit et exécuté la même cible que celle sur laquelle vous exécutez les tests sur l’appareil/sim sur lequel vous testez.

Par exemple, si j'exécute les tests sur la production cible, je devrais alors créer et exécuter la production cible sur le périphérique/sim avant de pouvoir exécuter les tests. Si je ne le faisais pas, cela me donnerait la même erreur.

Moi aussi j'ai un projet avec plusieurs schémas, et chacun d'eux construit l'application en utilisant une configuration séparée (Debug, AdHoc, etc.) et un nom du produit ​​(MyApp, MyApp_Dev, MyApp_Staging, etc.).

Heureusement, ils portent tous le même nom de module, mes fichiers de source de test unitaire peuvent simplement utiliser @testable import MyApp, quel que soit le schéma actif).

Pour surmonter l'erreur, je devais simplement m'assurer que pour chaque schéma de la cible de l'application que je voulais tester, les deux suivants correspondaient:

  1. Les App Target ​​ Paramètres de construction> Nom du produit pour cette configuration de construction (.e.g, "Debug"),
  2. Les Test Test ​​ Paramètres de construction> Test Host pour la même configuration de construction (la partie après $(BUILT_PRODUCTS_DIR)...)

Donc, si # 1 est (par exemple):

MyApp-Debug

, alors le n ° 2 doit être:

$(BUILT_PRODUCTS_DIR)/MyApp-Debug.app/MyApp-Debug

Dans mon cas, mon schéma consistait à construire la configuration AdHoc avec un nom de produit se terminant par le suffixe -DEV (développement), mais la cible de test ​​recherchait un hôte nommé avec un suffixe de -STG (mise en scène).

0
Nicolas Miari