J'ai un projet Xcode qui ne semble pas vouloir compiler ma cible principale de l'application pour générer un produit avant de tenter de l'utiliser comme hôte d'application lors de l'exécution de tests unitaires. De Xcode, je tente d'exécuter des tests unitaires avec ⌘ + U
.
J'ai immédiatement un dialogue qui dit: Could not determine bundle identifier for [app name] TEST_Host
(Remplacez [nom de l'application] par le nom réel de l'application)
Cette boîte de dialogue inclut également un chemin d'accès à mon répertoire de produits de données dérivés local: "/Users/***/Library/Developer/Xcode/DerivedData/Lowes-aymgdtrbrarmcidtkxoqxeafmxmj/Build/Products/Debug-iphonesimulator/[app name]"
J'ai des tests unitaires configurés avec le paramètre TEST_Host pointant sur $(BUILT_PRODUCTS_DIR)/[app name].app/[app name]
. La cible de test unitaire a une dépendance de cible par rapport à la cible principale de l'application. Le paramètre BUNDLE_LOADER est défini sur $(TEST_Host)
. Si je compile d'abord la cible principale de l'application en appuyant sur ⌘ + B
, la structure de répertoires et l'application appropriées sont créées, puis sur ⌘ + U
bootstraps et exécute correctement les tests unitaires. Si je nettoie et réessaye, cela échoue immédiatement. Je n'ai jamais rencontré ce problème auparavant, et il semble avoir surgi après la conversion de l'application en Swift 3. Cela peut ou non avoir une incidence sur le problème, pas vraiment sûr.
J'ai lu plusieurs réponses ici et essayé beaucoup de suggestions, mais elles ne semblent pas avoir le même problème fondamental que moi. Pour la plupart des gens, il semble que le réglage de l'application hôte sur Aucun et le retour à la cible principale résolvent le problème. Ce n'est pas le cas pour moi.
J'ai essayé de nouvelles caisses, en reconvertissant l'application et les cibles de test en Swift 3, ainsi que le dossier de nettoyage/nettoyage standard/les données dérivées. Aucun de ceux-ci ne semble avoir aucun effet.
Quelqu'un d'autre a-t-il rencontré ce problème et trouvé une solution?
J'ai trouvé une résolution pour cela. Cela peut ne pas s'appliquer à tous les scénarios, mais cela corrige le mien. Dans les principaux paramètres du projet de l'onglet Info, il existe une option permettant de sélectionner la configuration à exécuter lors du démarrage de la génération en ligne de commande. Le mien était sur le point de libérer. Faire basculer cela vers Debug a corrigé mon problème.
Supprimer le Test Host
complètement du Build Settings
de votre cible de test résoudrait ce problème
Xcode 9.2, Swift 4
Dans mon cas, le "Types d'URL" que j'avais précédemment ajouté dans Info.plist, puis supprimé à nouveau d'Info.plist a laissé les traces dans l'onglet INFO de cette cible. J'ai donc dû le supprimer manuellement à nouveau.
Il ne permet pas de supprimer des types d'URL à partir de l'onglet Info, alors revenez dans le fichier Info.plist et supprimez-le à nouveau.
Il semble que le paramétrage de "Bundle Loader" dans la configuration de la version résolve le problème.
Je ne comprends pas très bien pourquoi, mais pour moi cette erreur est toujours apparue dans notre système CI, où nous exécutons la construction depuis la ligne de commande. Dans les paramètres du projet, nous avons défini "Utiliser Valider pour les constructions en ligne de commande". Par conséquent, je pense que même si nous avons défini la configuration de construction sur Debug via des arguments de ligne de commande, xcodebuild
ignore l’argument de configuration et utilise partiellement les paramètres "Release". Il s’agit peut-être d’un bogue avec le système xcodebuild
(je suppose que cela mérite un radar), si quelqu'un peut trouver une meilleure explication de la raison pour laquelle cela résout le bogue, j'aimerais en entendre parler.
J'espère que cela t'aides.
Mon problème était que le paramètre Info.plist File
dans Build Settings
était inexistant. La mise à jour du paramètre dans le fichier de plist droit a résolu le problème.
XCode 9.4.1, Swift 4
Nettoyer les données dérivées, quitter Xcode, relancer le Xcode, a été décisif pour moi cette fois-ci.