iOS Asset Catalog 资源管理
Asset Catalog 是 Xcode 用来组织应用视觉资源的系统,文件后缀通常是 .xcassets。它看起来像一个特殊文件夹,但真正的价值不是“放图片”,而是让 Xcode 和 App Store 能理解资源的用途、分辨率、主题变体和设备适配关系。
实际项目里可以把它理解为 UI 资源的“智能仓库”:图片、图标、颜色、深色模式变体都放在这里,由系统按设备和环境自动选择。
1. Asset Catalog 是什么
Assets 的全称是 Asset Catalog。它主要解决两个问题:
- 资源组织:把应用图标、图片、颜色等 UI 资源按名称统一管理,代码里通过名称引用。
- 资源优化:发布到 App Store 后,苹果可以根据设备类型和屏幕密度做 App Thinning,只给用户下载当前设备需要的资源。
例如同一张图片可以同时提供 1x、2x、3x 三种版本。大屏手机只需要 3x 资源,就不必下载低分辨率图片,安装包体积会更小。
2. 适合放进 Assets 的资源
视觉相关的静态 UI 资源大部分都应该放进 Asset Catalog。
2.1 静态图片
常见的 PNG、JPG、PDF、SVG 等 UI 切图都适合放入 .xcassets。代码引用方式也最简单:
1 | Image("LoginBackground") |
UIKit 中对应:
1 | UIImage(named: "LoginBackground") |
2.2 应用图标
AppIcon 应该放在 Asset Catalog 中。Xcode 会按平台要求生成和校验不同尺寸,避免手工维护大量图标文件。
2.3 颜色定义
全局主题色建议放入 Color Set,例如 AccentColor、BrandPrimary。这样可以直接配置普通模式和深色模式下的不同颜色,代码层只引用同一个名称。
2.4 特定资产
部分 AR 资源、Sprite Atlas 或 Data Set 也可以放入 Assets,但是否使用要看项目习惯。一般业务项目主要放图片、图标和颜色。
3. 不适合放进 Assets 的资源
Asset Catalog 不是所有资源的默认归宿。下面这些通常作为普通文件放在项目目录中,然后通过 Bundle 或沙盒路径读取。
3.1 音视频文件
.mp3、.wav、.mp4 等音视频文件通常不放进 Assets。它们更适合按普通资源文件管理。
3.2 字体文件
.ttf、.otf 这类字体文件一般放在项目目录,并在 Info.plist 中声明。
3.3 大型静态数据
初始化用的大型 .json、.csv、.sqlite 数据库文件,不建议塞进 Assets。虽然 Asset Catalog 支持 Data Set,但实际读取时直接通过 Bundle.main.url 更直观。
3.4 布局和本地化文件
.storyboard、.xib、.plist、.strings 都不属于 Assets 管理范围。
4. 服务器动态资源怎么处理
如果资源会频繁更新,比如游戏素材、运营活动图、远程皮肤包,更合理的方式是放在服务器上,例如 S3、OSS 或 CDN。
典型流程:
- 应用启动后请求资源版本号。
- 客户端对比本地版本和服务端版本。
- 有差异时下载资源包到 iOS 沙盒。
- 运行时从本地文件路径读取资源。
读取动态下载图片时,不能再用 Image("name"),而是使用文件路径:
1 | if let image = UIImage(contentsOfFile: sandboxPath) { |
5. 选择原则
一句话判断:
- 跟 UI 强相关、随 App 打包发布、需要分辨率或深色模式适配:放 Assets。
- 运行时下载、体积很大、需要频繁更新、不是视觉资源:放 Bundle 普通文件或沙盒文件系统。
Assets 适合管理“应用自带的视觉资产”,不适合承担动态资源系统的职责。