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

Xcode 14中资源未从资源目录加载问题求助

解决方案

字体加载问题修复(最小代码改动优先)

方案1:调整资源存放位置(无需修改代码)

将字体文件从Assets.xcassets资源目录中移出,直接拖入项目根目录或任意非资源目录的文件夹,然后在Build Phases → Copy Bundle Resources中确认这些字体已被添加。新版构建系统会将这类资源直接放置在主Bundle根目录,与旧版构建系统行为完全一致,原有的[UIFont fontWithName:@"MyFontName" size:14.0]代码可正常运行。

方案2:使用正确的字体名称(若保留在Assets.xcassets中)

通过xcrun --sdk iphoneos assetutil --info MyApp.app/Assets.car命令输出,找到对应字体的"FontName"字段(注意:该名称通常与字体文件名不同,例如文件名MyFont.ttf对应的实际字体名可能是MyFont-Regular),将代码中的MyFontName替换为这个正确名称。

若替换名称后仍无法加载,可手动注册字体:

// 从主Bundle获取Assets.car路径
NSURL *assetCarURL = [[NSBundle mainBundle] URLForResource:@"Assets" withExtension:@"car"];
// 注册Assets.car中的所有字体
BOOL success = CTFontManagerRegisterFontsForURL(assetCarURL, kCTFontManagerScopeProcess, NULL);
if (!success) {
    NSLog(@"字体注册失败");
}

注册后再调用原有的fontWithName方法即可。


其他类型资源的通用修复

对于图片、音频等资源,同样推荐采用移出Assets.xcassets的方式:将资源直接放在项目目录并加入Copy Bundle Resources,旧代码中[UIImage imageNamed:@"MyImage"]、[NSBundle pathForResource:@"MyAudio" ofType:@"mp3"]等加载逻辑可直接复用。

若坚持将资源保留在Assets.xcassets中:

  • 图片:确保使用[UIImage imageNamed:@"MyImage"]加载(该方法会自动从Assets.car中查找资源),避免通过文件路径直接读取。
  • 自定义资源:通过Asset Catalog API获取资源,示例代码:
UIImageAsset *asset = [[UIImageAsset alloc] initWithName:@"CustomResource"];
UIImage *resourceImage = [asset imageWithTraitCollection:[UITraitCollection traitCollectionWithDisplayScale:[UIScreen mainScreen].scale]];

批量兼容设置(可选)

若项目中有大量资源需要保持旧版构建系统的行为,可修改项目Build Settings:
搜索Asset Catalog Compiler Options,将Embed Asset Packs In Product Bundle设置为YES,部分资源会被提取到Bundle根目录而非仅打包进Assets.car(注:该设置无法完全复刻旧版行为,仍需部分验证)。

内容的提问来源于stack exchange,提问作者Yevgeniy Logachev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:52:49