You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试目标中从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后重新运行单元测试
  • 确认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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:15:53