El module "MyApp" no se encuentra en UnitTest-Swift

Estoy tratando de probar alguna class Swift (class @objc) en mi código Objc henetworkingado. Estoy importando "UnitTests-Swift.h" en mis classs de testing.

Entonces recibo este error:

El module "MyApp" no se encuentra en el autogenerado "UnitTests-Swift.h"

Esto es lo que está dentro de la parte superior de "UnitTests-Swift.h"

typedef int swift_int3 __attribute__((__ext_vector_type__(3))); typedef int swift_int4 __attribute__((__ext_vector_type__(4))); #if defined(__has_feature) && __has_feature(modules) @import XCTest; @import ObjectiveC; @import MyApp; @import CoreData; #endif 

Limpié el proyecto, comprobé todas las banderas relevantes ( "No hay tal module" al usar @testable en las testings de la Unidad Xcode , No puedo usar las classs Swift dentro de Objective-C ), eliminé los datos derivados, etc. No tengo idea de lo que está sucediendo. , pero estoy bastante seguro de que @import MyApp no ​​debería estar allí ..

Puede alguien ayudarme con esto?

Debido a que la class Swift que se va a probar es parte de MyApp, debería importar "MyApp-Swift.h" en las classs de testing en lugar de "UnitTests-Swift.h".

Acabo de recibir este problema en mi proyecto y después de todo el día dedicado a la investigación finalmente lo resolví. Básicamente esto sucede porque tienes una dependencia cíclica entre ObjC y Swift. Entonces en mi caso fue:

  • Protocolo Swift con atributo @obj en un objective principal;
  • Clase Swift en Target de UnitTest que henetworkingó este Protocolo;
  • Importe UnitTestTarget-Swift.h en cualquier class de Objective-C de su objective UnitTest

Una combinación bastante sencilla conduce a este error. Para solucionarlo, quiere:

  • simplemente asegúrese de que su objective Swift Class en UnitTest sea private , por lo que no llegará a UnitTestTarget-Swift.h

o

  • no marque su Protocolo Swift original como @objc , lo que le permitirá acceder a su SwiftClass desde todas las classs de testing de ObjectiveC, pero esas classs no tendrán idea sobre el Protocolo Swift.

Puede agregar una testing de unidad Swift (solo cree un file de unidad nuevo y cambie la extensión por .swift ).

Desde ese file de testing unitario puede usar sus classs Swift.

Y también puede importar ese file desde las testings de la unidad Objective-C (y viceversa) utilizando los encabezados de puente del module de testing.

Y este sería el ejemplo pnetworkingeterminado para su file de testing unidad Swift:

 import XCTest @testable import MyApp class MyAppSwiftTests: XCTestCase { override func setUp() { super.setUp() // Put setup code here. This method is called before the invocation of each test method in the class. } override func tearDown() { // Put teardown code here. This method is called after the invocation of each test method in the class. super.tearDown() } func testExample() { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. } func testPerformanceExample() { // This is an example of a performance test case. self.measure { // Put the code you want to measure the time of here. } } }