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?
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
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é.
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.
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.
@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
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.
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
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)
'XCTest/XCTest.h' file not found
, c'est parce que votre fichier devait cibler une application.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
.
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; };
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