it-swarm.com.de

XCTest / XCTest.h wurde in alten Projekten, die in Xcode 6 erstellt wurden, nicht gefunden

Ich habe ein paar Projekte, die ich mit Xcode 6 Beta 2 erstellen möchte. Alle Projekte haben eine Art Bibliothek, die XCTest verwendet (Kiwi/XCTest und Specta) und die nicht in Xcode 6 erstellt werden, da XCTest/XCTest.h dies nicht kann gefunden werden.

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

Ich habe festgestellt, dass XCTest.framework nicht mehr in der Erstellungsphasenliste "Bibliotheken mit Binärdateien verknüpfen" enthalten ist, aber das ist in Ordnung, da beim Erstellen eines neuen Projekts mit Xcode 6 die Bibliothek automatisch verknüpft wird.

Vielleicht von einiger Relevanz, werden meine XCTest-benötigten Abhängigkeiten alle über Cocoapods eingespielt.

Gibt es etwas, von dem ich nicht weiß, dass ich es mit meinem Projekt aktualisieren muss?

80
Erik Kerber

Hinweis: Dies wird möglicherweise nicht für Projekte benötigt, die in Xcode 7 erstellt wurden.

CocoaPods hatte einen Fix für diese hier und hier


Um dies für alle CocoaPod-Abhängigkeiten zu beheben, müssen Sie FRAMEWORK_SEARCH_PATHS In jedem Pod-Ziel, für das XCTest erforderlich ist (z. B. Kiwi, Specta, FBSnapshotTestCase usw.), Folgendes hinzufügen.

$(PLATFORM_DIR)/Developer/Library/Frameworks

screenshot

Auf diese Weise können Sie XCTest in eventuellen Abhängigkeiten referenzieren. Dies wird möglicherweise in einem zukünftigen Update von CocoaPods oder dem Pod, auf den Sie verweisen, behoben, sodass Sie ihn möglicherweise später entfernen möchten.

Es ist nicht schädlich für frühere Versionen von Xcode und sollte daher sicher in der Anwendung sein.

137
squarefrog

Ich habe Dateien in einem Projekt verschoben. Alles was Sie tun müssen ist die Auswahl Ihrer Testdateien xxxTests.m etc. und in file inspector Wählen Sie target als test und nicht als reguläres Ziel.

37
Jakub Truhlář

Ich habe festgestellt, dass XCTest nur für ein Testziel verfügbar ist (in Xcode 6). Wenn Sie XCTest für ein anderes Ziel verwenden (aus welchem ​​Grund auch immer), wird das Symbol XCTest.h not found Error.

17
Mustafa

@squarefrog hat das richtige Antwort aber du musst das jedes Mal manuell machen, wenn du deine Pods aktualisierst :(

Wenn Sie dies zu Ihrer Poddatei hinzufügen, wird automatisch der zusätzliche Pfad für Sie hinzugefügt. Z.B. Wenn Sie $(PLATFORM_DIR)/Developer/Library/Frameworks zu FRAMEWORK_SEARCH_PATHS für Specta hinzufügen möchten:

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

Dieser Fehler tritt auf, wenn Sie eine Datei hinzugefügt haben, in der XCTest außerhalb eines Testziels verwendet wird. Um dies in AppCode zu beheben, können Sie mit der rechten Maustaste auf eine verdächtige Datei klicken und "Ziele verwalten" auswählen. Stellen Sie dann sicher, dass nur das Testziel aktiviert ist.

9
Tash Pemhiwa

Ich hatte das gleiche Problem, nachdem ich das XCTest-Framework aus den Erstellungsphasen importiert und das Problem behoben hatte.

Bauphasen-> XCTest.Framework> bereinigen und ausführen. Ich hoffe, es wird jemandem helfen.

als Referenz ... Importiere XCTest in ein bestehendes Projekt

Der beste Weg, ein XCTest zu haben, besteht darin, es über den Nagigator-Test hinzuzufügen (5. Symbol im linken Bereich).

In diesem Fall zielt die neue Testdatei xx.m nicht (im rechten Bereich) auf eine App (im linken Bereich> Ziel, Wrapper-Erweiterung: App), sondern auf ein Bundle (Wrapper-Erweiterung: xctest).

  • das XCTest.framework bleibt in rot,
  • aufgrund einiger Änderungen kann der Fehler 'XCTest/XCTest.h' file not found, weil Ihre Datei auf eine App abzielen musste.
1
tontonCD

Zum Zeitpunkt des Schreibens hat die neueste Version von Cocoapods (0.33.1) keine Lösung für das Problem.

Aber die Schneide-Version macht es.

Befolgen Sie diese Anleitung , um die neueste Version von Cocoapods von der Quelle aus einzurichten. Ich rufe meine pod-dev (im Handbuch behandelt), um es von der gem-installierten Version der Pods zu unterscheiden.

Der Vorteil dieses Ansatzes ist, dass Sie kein zusätzliches Skripting in Ihrem Podfile benötigen. Sie müssen sich nur daran erinnern, ein pod-dev install anstelle des üblichen pod install.

1
fatuhoku

Bei einem Projekt ohne Cocoapods (also ohne direkte Beantwortung der Frage des OP, aber vielleicht hilfreich für mich oder andere in der Zukunft) hatten wir das gleiche Problem. Es wurde behoben, indem unsere vorherigen OCTest-Artikel durch XCTest ersetzt wurden. Zum Beispiel hat eine Datei MyApp.xcodeproj/project.pbxproj diesen Unterschied (verkürzt); - path = MyAppUnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + path = MyAppUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };

0
AnneTheAgile

Dies ist die einfachste Lösung, die ich gefunden habe. Es sind keine Projektänderungen erforderlich. Und diese Änderung bleibt bis zu Ihrem nächsten Xcode-Upgrade bestehen:

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