Auch wenn es in der Ziel-Info.plist "... Tests" definiert ist, bleibt der Bezeichner Null. Ich brauche es, um einen gültigen Wert für eine Third Party Lib zu haben.`[[NSBundle mainBundle] bundleIdentifier]` ist Null beim Ausführen von XCTest
Antwort
Dies liegt daran, dass Komponententests Ihr Anwendungs-Bundle oder sogar das Komponententestpaket nicht als Hauptpaket laden.
Für weitere Informationen zu diesem Thema finden Sie
Jetzt können wir, um dieses Hack durch eine Kategorie NSBundle in Ihrem Unit-Test-Projekt inklusive. Der Objective-C-Kategorie-Hack funktioniert auch für schnelle Unit-Tests, da Bundle mit NSBundle überbrückt wird, stellen Sie einfach sicher, dass Sie einen Bridged-Header für Ihr Unit-Test-Projekt haben.
Sie können dann für das richtige Hauptbündel suchen haben, aber wenn Sie nur eine schnelle und schmutzige Art und Weise wollen eine gültige Paket-ID dann haben verwenden Sie die folgenden
@interface NSBundle (BundleIdentifier)
-(NSString *)bundleIdentifier;
@end
@implementation NSBundle (BundleIdentifier)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-(NSString *)bundleIdentifier
{
return @"com.yourcompany.yourapp.unitTests";
}
#pragma clang diagnostic pop
@end
alle Nun, die übrig bleibt, ist Fügen Sie die Headerdatei in Ihren Komponententest ein, damit die Kategorie geladen wird.