测试目标中从Asset Catalog加载NSImage失败求助
解决单元测试目标加载Asset Catalog图片失败的问题
我之前也碰到过几乎一模一样的困境,折腾了好一阵才找到解决办法,给你梳理几个关键的排查方向和修复步骤:
确保用测试目标的Bundle加载图片
单元测试环境下,默认的UIImage(named:)会去主App的Bundle里找资源,但你的图片是放在测试目标的Asset Catalog里的,所以必须指定测试Bundle:// Swift 示例 let testBundle = Bundle(for: type(of: self)) guard let testImage = UIImage(named: "你的图片集名称", in: testBundle, compatibleWith: nil) else { XCTFail("测试图片加载失败") return }如果是Objective-C:
// Objective-C 示例 NSBundle *testBundle = [NSBundle bundleForClass:[self class]]; UIImage *testImage = [UIImage imageNamed:@"你的图片集名称" inBundle:testBundle compatibleWithTraitCollection:nil]; NSAssert(testImage != nil, @"测试图片加载失败");检查Asset Catalog的编译配置
打开测试目标的Build Settings,搜索Asset Catalog Compiler Options:- 确保
Enable On Demand Resources设置为NO(单元测试环境下按需资源机制会干扰加载) - 确认
Asset Catalogs项里正确填写了你的xcassets文件路径(比如$(SRCROOT)/Tests/TestAssets.xcassets)
- 确保
验证图片集的细节配置
打开你的xcassets,选中目标图片集:- 在右侧
Attributes Inspector里,检查Render As是否为Default(如果设为Template Image,加载后会是空白,除非你设置了tint颜色) - 核对@1x、@2x的图片文件名是否和图片集名称匹配,且没有拼写错误(比如图片集叫
TestIcon,对应图片文件名应该是TestIcon.png、TestIcon@2x.png)
- 在右侧
清理缓存并重新构建
Xcode的缓存经常会导致资源加载异常,试试这些操作:- 清理Derived Data:打开
Xcode -> Preferences -> Locations,点击Derived Data后的箭头,删除当前项目的缓存文件夹 - 执行
Product -> Clean Build Folder(快捷键:Shift + Command + K) - 重启Xcode后重新运行单元测试
- 清理Derived Data:打开
确认Asset Catalog已正确打包进测试Bundle
运行一次测试后,找到测试目标的产物Bundle(右键测试目标 ->Show in Finder),打开Bundle查看是否包含Assets.car文件。如果没有,说明Asset Catalog没被正确编译进去,再检查:- 测试目标的
Build Phases -> Copy Bundle Resources里确实包含你的xcassets文件 - xcassets文件的
Target Membership已勾选测试目标
- 测试目标的
内容的提问来源于stack exchange,提问作者Nicolas Miari
相关产品推荐
相关产品推荐

