Como dizer ao XCode para não executar seu alvo principal ao executar seus testes

Quando você executa o destino de teste em seu aplicativo iOS no XCode, seu aplicativo também é executado por padrão, porque o destino de teste depende do destino principal.

O problema com isso é que há momentos em que você pode não querer executar seu aplicativo ao executar testes, mas ainda deseja manter a dependência. Um desses cenários pode ser quando você interrompe solicitações de rede globalmente em seus testes de unidade e seu aplicativo principal falha.

Encontrei este cenário uma vez

Aqui está um truque simples para dizer ao XCode para não executar seu destino principal ao executar seus testes. Tudo que você precisa fazer é adicionar uma instrução if simples em seu main.m:


#import "AppDelegate.h"

int main(int argc, char * argv[])
{
@autoreleasepool
{
if (NSClassFromString(@"XCTestCase") != nil)
{
// Tell XCode to run this only when in test-mode
return UIApplicationMain(argc, argv, nil, @"MyAppTests");
}

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}