`[[NSBundle mainBundle] bundleIdentifier]`在运行XCTest时为零

问题描述:

即使在“... Tests”目标Info.plist中定义,标识符仍然为零。我需要它为第三方库有一个有效的值。`[[NSBundle mainBundle] bundleIdentifier]`在运行XCTest时为零

这是因为单元测试不会加载您的应用程序包或甚至单元测试包作为主包。

有关此的详细信息请参见

现在我们可以通过在你的单元测试项目上一个NSBundle类别解决这个破解。 Objective-C类别hack也适用于快速单元测试,因为Bundle桥接到NSBundle,只要确保您的单元测试项目具有桥接头。

然后,您可以把它搜索正确的主束,但如果你只是想快速和肮脏的方式有一个有效的捆绑标识符然后使用以下

@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 

现在所有剩下的就是在你的单元测试中包含头文件,以便加载类别。