web-dev-qa-db-fra.com

XCTest / XCTest.h introuvable sur les anciens projets construits dans Xcode 6

J'ai quelques projets que je tente de construire avec Xcode 6 Beta 2. Les projets ont tous un type de bibliothèque qui utilise XCTest (Kiwi/XCTest et Specta) qui ne construit pas dans Xcode 6 car XCTest/XCTest.h ne peut pas être trouvé.

fatal error: 'XCTest/XCTest.h' file not found
#import <XCTest/XCTest.h>

J'ai remarqué que XCTest.framework n'est plus dans la liste de phase de construction "Bibliothèques de liens avec binaires", mais c'est correct car lorsque je crée un projet nouvea avec Xcode 6, il apparaît que la bibliothèque est liée automatiquement.

Peut-être d'une certaine pertinence, mes dépendances nécessitant XCTest sont toutes importées via Cocoapods.

Y a-t-il quelque chose que je ne sache pas que je dois mettre à jour avec mon projet?

80
Erik Kerber

Remarque: Cela peut ne pas être nécessaire pour les projets créés dans Xcode 7.

CocoaPods avait un correctif pour cela ici et ici


Afin de résoudre ce problème pour toutes les dépendances CocoaPod, vous devez ajouter le texte suivant à FRAMEWORK_SEARCH_PATHS Dans toute cible de pod nécessitant XCTest (par exemple, Kiwi, Specta, FBSnapshotTestCase, etc.).

$(PLATFORM_DIR)/Developer/Library/Frameworks

screenshot

Cela vous permettra de référencer XCTest dans toutes les dépendances que vous pourriez avoir. Ce problème pourrait être résolu dans une future mise à jour de CocoaPods ou du pod que vous référencez. Vous souhaiterez donc peut-être le supprimer ultérieurement.

Il n’est pas préjudiciable aux versions précédentes de Xcode et devrait donc être utilisé en toute sécurité.

137
squarefrog

Je déplaçais des fichiers dans un projet. Tout ce que vous avez à faire, sélectionnez vos fichiers de test xxxTests.m etc. et dans file inspector sélectionnez target comme test et non comme cible normale.

37
Jakub Truhlář

J'ai remarqué que XCTest est disponible pour une cible de test uniquement (dans Xcode 6). Si vous utilisez XCTest pour une autre cible (quelle que soit la raison), vous verrez le XCTest.h not found Erreur.

17
Mustafa

@squarefrog a le bonne réponse mais vous devrez continuer à le faire manuellement chaque fois que vous mettrez à jour vos pods :(

Si vous ajoutez ceci à votre podfile, il ajoutera automatiquement le chemin supplémentaire pour vous. Par exemple. si vous vouliez ajouter $(PLATFORM_DIR)/Developer/Library/Frameworks à FRAMEWORK_SEARCH_PATHS pour Specta:

post_install do |installer|
    target = installer.project.targets.find { |t| t.to_s == "Pods-Tests-Specta" }
    if (target)
        target.build_configurations.each do |config|
            s = config.build_settings['FRAMEWORK_SEARCH_PATHS']
            s = [ '$(inherited)' ] if s == nil;
            s.Push('$(PLATFORM_DIR)/Developer/Library/Frameworks')
            config.build_settings['FRAMEWORK_SEARCH_PATHS'] = s
        end
    else
        puts "WARNING: Pods-Tests-Specta target not found"
    end
end
11
deanWombourne

Cette erreur survient lorsque vous avez ajouté un fichier dans lequel XCTest est utilisé en dehors d'une cible de test. Pour résoudre ce problème dans AppCode, vous pouvez cliquer avec le bouton droit de la souris sur tout fichier suspect et sélectionner "Gérer les cibles", puis vous assurer que seule la cible de test est cochée.

9
Tash Pemhiwa

J'ai rencontré le même problème après avoir importé depuis un certain temps le framework XCTest à partir des phases de construction et résolu le problème.

Les phases de construction-> XCTest.Framework> sont nettoyées et exécutées. J'espère que cela sera utile à quelqu'un ..

pour votre référence ... Importer XCTest dans un projet existant

2

La meilleure façon d’avoir un XCTest est de l’ajouter à partir de Test Nagigator (5ème icône dans le volet de gauche).

En agissant de la sorte, le nouveau fichier de test xx.m ne cible pas (dans le volet de droite) une application (dans le volet de gauche> Cible, Wrapper Extension: app), mais un ensemble (Wrapper Extension: xctest)

  • le XCTest.framework reste en rouge,
  • à cause de quelques modifications, vous pouvez avoir l’erreur 'XCTest/XCTest.h' file not found, c'est parce que votre fichier devait cibler une application.
1
tontonCD

Au moment de la rédaction de cet article, la dernière version de Cocoapods (0.33.1) n’a pas de solution à ce problème.

Mais la version tranchante fait.

Suivez ce guide pour définir la dernière version de Cocoapods à partir de la source. J'appelle le mien pod-dev (couvert dans le guide) pour le distinguer de la version de pod installée sur gem.

L'avantage de cette approche est que vous n'avez pas besoin de script supplémentaire dans votre Podfile. Vous devez juste vous rappeler de faire un pod-dev install au lieu des habituels pod install.

1
fatuhoku

Sur un projet sans Cocoapods (donc pas pour répondre directement à la question du PO mais peut-être utile pour moi ou d'autres à l'avenir), nous avions le même problème. Le problème a été résolu en remplaçant nos précédents éléments OCTest par XCTest. Par exemple, un fichier MyApp.xcodeproj/project.pbxproj a ceci diff (raccourci); - path = MyAppUnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + path = MyAppUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };

0
AnneTheAgile

C'est la solution la plus simple que j'ai trouvée. Aucun changement de projet n'est nécessaire. Et ce changement persistera jusqu'à votre prochaine mise à jour Xcode:

cd /Applications/Xcode6-Beta7.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/Developer/Library/Frameworks
ln -s ../../../../../Library/Frameworks/XCTest.framework
0
Steven Kramer