web-dev-qa-db-de.com

'Modul wurde nicht zum Testen kompiliert', wenn @testable verwendet wird

Ich versuche, die neue @testable-Deklaration von Swift 2 zu verwenden, um meine Klassen für das Testziel verfügbar zu machen. Ich erhalte jedoch diesen Compiler-Fehler:

enter image description here

Intervals ist das Modul, das die Klassen enthält, die ich zur Verfügung stellen möchte. Wie kann ich diesen Fehler beseitigen?

118
hgwhittle

In Ihrem Hauptziel müssen Sie die Build-Option Enable Testability auf Yes setzen.

Gemäß dem folgenden Kommentar von @earnshavian sollte dies nur für Debugbuilds gemäß den Apple-Versionshinweisen verwendet werden: "Die Buildeinstellung" Testbarkeit aktivieren "sollte nur in Ihrer Debugkonfiguration verwendet werden, da Optimierungen, die davon abhängen, dass keine internen Symbole exportiert werden, verboten sind Die App oder das Framework " https://developer.Apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//Apple_ref/doc/uid/TP40001051-CH1-SW326

196
sgaw

Die Lösung ist ziemlich einfach, Leute. Stellen Sie sicher, dass Sie Ihre Kontrollkästchen in Ihrem App-Schema richtig festgelegt haben. Sie SOLLTE DEAKTIVIEREN Ihre Testziele für Archive Build.

 enter image description here

In meinem Fall habe ich eine benutzerdefinierte Build-Konfiguration zum Testen verwendet (genannt Test) und auch cocoapods als Abhängigkeitsmanager

Ich musste die folgenden Zeilen am Ende meiner Podfile hinzufügen, um die Testbarkeit zu ermöglichen

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if config.name == 'Test'
                config.build_settings['ENABLE_TESTABILITY'] = 'YES'
            end
        end
    end
end

Standardmäßig setzt cocoapodsENABLE_TESTABILITY nur für YES-Builds auf Debug

8
Tim

Dies liegt wahrscheinlich daran, dass Ihr Hauptziel Enable Testability auf NO gesetzt ist. Sie sollten es im Debug-Schema auf YES setzen (das zum Ausführen Ihrer Tests verwendet wird).

Wenn Sie Carthage verwenden, kann dieses Problem durch das Importieren von Frameworks mit @testable verursacht werden, da sie mit einem Freigabeschema erstellt werden.

In den meisten Fällen ist es schlecht, Frameworks mit diesem Präfix zu importieren, damit Sie es vermeiden können. Wenn dies nicht der Fall ist, sollten Sie im Freigabeschema der Frameworks Enable Testability eingeben. https://developer.Apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//Apple_ref/doc/uid/TP40001051-CH1-SW326

4
Samuel B.

Für diejenigen von Ihnen, die dies nur beim Ausführen von Xcode Profiler feststellen: Wechseln Sie die Profilkonfigurationskonfiguration in der Schemaverwaltung auf die, für die Testbarkeit aktiviert ist.

 enter image description here

4
Wladek Surala

Die obige Lösung ist in Ordnung, wenn Sie Pods/Carthage verwenden. Wenn Sie jedoch Frameworks von iOS selbst verwenden, z. Kontakte ', Sie müssen diesen Frameworks einen Pfad in' Bibliothekssuchpfade 'des Ziels Ihres Hauptprojekts hinzufügen .  enter image description here

0
nikBhosale

Wenn Sie versuchen, das Framework zu testen:

Gehen Sie zu Testziel -> Erstellungsphase -> Neue Kopierdateien erstellen -> Wählen Sie Frameworks -> Fügen Sie alle rekursiv verwendeten Frameworks hinzu