Xcode 颜色集生成器
Xcode 里的命名颜色是一个 <名称>.colorset 文件夹,里面的 Contents.json 为每种外观列一项:任意、深色,以及可选的高对比度版本。在下面用十六进制、rgb() 或 hsl() 输入颜色,加上需要的版本,就能下载现成的 Assets.xcassets 文件夹,同时得到使用每个颜色的 Swift 代码,以及你标出的配色的对比度检查。
1. 你的颜色
可输入十六进制、rgb()、hsl() 或任意 CSS 颜色,也可以用取色器。加上 Alpha 值可得到半透明颜色。
代码里使用的资源名,例如 BrandBlue 或 Card Background。
代码里使用的资源名,例如 BrandBlue 或 Card Background。
2. 色彩空间和格式
色彩空间
你输入的数值按 sRGB 理解。选 Display P3 时会换算成看起来相同的 P3 数值,换算结果显示在下方。
分量格式
和 Xcode 的 Input Method 菜单一样。三种 Xcode 都能读,浮点数保留三位小数。
3. 下载和代码
压缩包里是一个 Assets.xcassets 文件夹,每个颜色一个 .colorset。把 .colorset 文件夹拖进 Xcode 导航栏里你自己的资源目录,或者把整个文件夹加到 target。
Assets.xcassets/BrandBlue.colorset
Swift · 按名称
// SwiftUI Color("BrandBlue") // UIKit UIColor(named: "BrandBlue") // AppKit NSColor(named: "BrandBlue")生成的符号(Xcode 15 及以后,iOS 17、macOS 14)
// SwiftUI Color(.brandBlue) // UIKit UIColor(resource: .brandBlue)
Contents.json
{ "colors" : [ { "color" : { "color-space" : "srgb", "components" : { "alpha" : "1.000", "blue" : "1.000", "green" : "0.424", "red" : "0.039" } }, "idiom" : "universal" }, { "appearances" : [ { "appearance" : "luminosity", "value" : "dark" } ], "color" : { "color-space" : "srgb", "components" : { "alpha" : "1.000", "blue" : "1.000", "green" : "0.608", "red" : "0.298" } }, "idiom" : "universal" } ], "info" : { "author" : "xcode", "version" : 1 } }Assets.xcassets/CardBackground.colorset
Swift · 按名称
// SwiftUI Color("CardBackground") // UIKit UIColor(named: "CardBackground") // AppKit NSColor(named: "CardBackground")生成的符号(Xcode 15 及以后,iOS 17、macOS 14)
// SwiftUI Color(.cardBackground) // UIKit UIColor(resource: .cardBackground)
Contents.json
{ "colors" : [ { "color" : { "color-space" : "srgb", "components" : { "alpha" : "1.000", "blue" : "1.000", "green" : "1.000", "red" : "1.000" } }, "idiom" : "universal" }, { "appearances" : [ { "appearance" : "luminosity", "value" : "dark" } ], "color" : { "color-space" : "srgb", "components" : { "alpha" : "1.000", "blue" : "0.118", "green" : "0.110", "red" : "0.110" } }, "idiom" : "universal" } ], "info" : { "author" : "xcode", "version" : 1 } }
Xcode 会把资源名转成 Swift 名称:去掉结尾的 "Color",把单词连成小驼峰。target 的 Generate Asset Symbols 构建设置(ASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOLS)打开时这些写法可用。
4. 对比度检查
标出你一起使用的文字颜色和背景颜色。每一对都按 WCAG 2.x 公式检查浅色和深色;其中任一颜色有高对比度版本时,也检查高对比度。某个颜色没有对应外观的版本时,系统会用它的普通版本,这里的检查也一样。
对比度 AA 正文 AA 大字 AA 界面 AAA 正文 AAA 大字 浅色 4.56:1 通过 通过 通过 未通过 通过 深色 6.03:1 通过 通过 通过 未通过 通过
半透明背景在浅色外观里按叠在白色上计算,在深色外观里按叠在黑色上计算;实际背景可能不同。
Xcode 读取的内容
已于 2026-10-30 与 Xcode 27.1 和苹果文档核对。
- • 每个颜色是一个名为 <名称>.colorset 的文件夹,里面有 Contents.json。资源目录文件夹本身也有一个只含 info 的 Contents.json。
- • 每个版本是 "colors" 里的一项,idiom 为 universal。深色加上 luminosity = dark 外观;高对比度加上 contrast = high;高对比度深色两者都有。
- • "color-space" 为 srgb 或 display-p3。红、绿、蓝都是字符串:"0.231"、"59" 或 "0x3B"。Alpha 始终写成 "1.000" 这样的形式。
- • Xcode 按字母顺序排列键名,冒号前有一个空格,这里生成的文件也一样。
使用方法
- •你添加的每个颜色生成一个 .colorset 文件夹。Contents.json 里有一项任意外观;打开深色、高对比度时,再按 Xcode 的顺序加上深色、高对比度和高对比度深色各一项。
- •JSON 格式与 Xcode 写出的文件逐字节一致:键名按字母排序,冒号前有空格,分量写成字符串,Alpha 保留三位小数。
- •选择 Display P3 时,你的 sRGB 数值经过 CIE XYZ 换算,颜色看起来不变,P3 数值显示在 sRGB 数值旁边。
- •Swift 名称按 Xcode 生成资源符号的同一套规则得出,并与 actool 写出的名称逐一比对过,包括结尾的 "Color"、数字、大写字母和 Swift 关键字。
- •每种色彩空间和格式的组合都用苹果的 actool 按 iOS 17 和 macOS 14 编译过,没有警告或错误;assetutil 在编译出的 Assets.car 里能看到每个颜色和外观。
- •不会上传任何内容:读取颜色、生成 JSON 和打包 ZIP 都在你的浏览器里完成。
它做不到的事
- •不读取也不修改现有的 Xcode 项目或资源目录,下载的 .colorset 文件夹需要你自己加进去。
- •不接受直接输入 Display P3 数值。数值按 sRGB 理解;只存在于 P3 的颜色需要在 Xcode 的颜色面板里设置。
- •只生成通用(universal)颜色:没有单独的 iPhone、iPad、Mac、手表或电视版本,没有按色域区分的项,也不引用系统颜色。
- •对比度检查用 WCAG 2.x 公式和 sRGB 数值计算,不考虑鲜艳度效果(vibrancy)、材质,也不考虑实际布局里半透明颜色后面的内容。
- •JSON 格式和 Swift 名称已于 2026-10-30 与 Xcode 27.1 核对,之后的 Xcode 可能会有变化。
常见问题
- .colorset 的 Contents.json 里有什么?
- 一个 "colors" 数组,每个版本一项,外加 "info"(author 为 xcode,version 为 1)。每项有 idiom universal 和 color,color 里有 "color-space" 和 "components"(red、green、blue、alpha 都是字符串);各个版本还有 "appearances" 列表,例如 luminosity = dark 或 contrast = high。
- 在 Xcode 里怎么给颜色加深色模式版本?
- 选中颜色集,打开属性检查器,把 Appearances 设为 Any, Dark。Xcode 会加一项带 luminosity = dark 外观的颜色。在本页打开"深色外观"就会写入这一项,界面为深色时 iOS 或 macOS 会使用它。
- 该用 sRGB 还是 Display P3?
- sRGB 是稳妥的默认选择,和网页、设计工具里的十六进制值一致。Display P3 能在较新的 iPhone、iPad 和 Mac 上显示更饱和的颜色。把 sRGB 颜色换算到 P3 不会改变它的样子,只有在 Xcode 里选了超出 sRGB 的数值才会更鲜艳。
- 高对比度(增强对比度)颜色有什么用?
- 用户在辅助功能里打开"增强对比度"后,如果颜色有高对比度版本,系统就用这个版本。可以用它把勉强达标的文字调深,或者加强边框。没有高对比度版本时,系统使用普通颜色。
- 在 Swift 里怎么使用这些颜色?
- 按名称:SwiftUI 用 Color("BrandBlue"),UIKit 用 UIColor(named: "BrandBlue"),AppKit 用 NSColor(named: "BrandBlue")。Xcode 15 及以后生成的符号可以写成 Color(.brandBlue) 或 UIColor(resource: .brandBlue),由编译器检查。苹果文档列出的 ColorResource 类型适用于 iOS 17 和 macOS 14 及以后。
- 为什么生成的 Swift 名称和资源名不一样?
- Xcode 会把资源名转成小驼峰,并去掉结尾的 "Color":AccentColor 变成 accent,card-background 变成 cardBackground。全大写的名称保持大写,数字开头会加下划线;两个资源得到同一个 Swift 名称时,只保留一个符号。