关于 sumsub-theme-msdk
sumsub-theme-msdk 是面向原生 iOS 和 Android 项目的技能,用于将宿主应用的设计系统映射到 Sumsub Mobile SDK 主题。它按扫描、映射、生成和报告的顺序操作,并要求确认文件路径及代码修改。
主要功能
- 01识别 iOS 或 Android 项目
- 02扫描颜色、字体和构建设置
- 03将应用设计令牌映射到 SDK 主题
- 04生成 Swift 或 Kotlin 主题文件
- 05报告映射、派生及默认项
适用场景
- 01让 KYC 页面采用应用的视觉样式
- 02为 iOS 或 Android SDK 生成主题
- 03检查主题属性覆盖情况
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ sumsub/ agent-skills --skill sumsub-theme-msdk安装后在 Claude Code 中输入/sumsub-theme-msdk确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
android/examples/SumsubTheme.ktandroid/references/detection-guide.mdandroid/stages/1-scan.md2-map.md3-generate.md4-report.mdexamples/SumsubTheme.swiftios/examples/SumsubTheme.swiftios/references/detection-guide.mdswift6-theme-factory.mdios/stages/1-scan.md2-map.md3-generate.md4-report.mdreferences/color-language.mddetection-guide.mdswift6-theme-factory.mdstages/1-scan.md2-map.md3-generate.md4-report.md详细介绍
Sumsub — 移动 SDK 主题定制(iOS 和 Android)
扫描宿主应用的设计系统,推导出完整的调色板,并编写一套 SDK 在启动时加载的主题——iOS: 将 SumsubTheme: SNSTheme 子类赋值给
sdk.theme = SumsubTheme();Android: 使用 SNSTheme { … } DSL 构建 sumsubTheme(context) 工厂,并通过 SNSMobileSDK.Builder(...).withTheme(...) 附加主题——让 KYC 界面与应用风格一致,而不是显得格格不入。SDK 的每个主题属性都要映射到应用中的对应属性,或明确说明其推导方式;不能无意间保留 SDK 默认值。
这是主流程(始终执行)。检测平台,然后按顺序完成对应流程的四个阶段:扫描 → 映射 → 生成 → 报告。
询问与执行——让审批有意义
- 只读操作无需审批——扫描 / grep / 读取项目的颜色、字体和构建设置,不必询问。
- 将修改合并为一次审批,不要逐项询问(“我会在此处写入
SumsubTheme.swift,并插入这一行sdk.theme = …[diff]——是否应用?”)。 - 仅在以下情况明确询问: 目标文件路径、确实存在歧义的品牌 / 易读性 / 字体选择,以及编辑现有应用代码(唯一需要添加的主题挂接行由此技能自行添加,不会让用户代劳)。
检测平台(在打开任何阶段文件之前执行)
判断这是 iOS 还是 Android 项目——令牌来源、主题 API 和生成的语言各不相同。只读。
# iOS markers
find . -maxdepth 3 \( -name '*.xcodeproj' -o -name '*.xcworkspace' -o -name 'Podfile' -o -name 'Package.swift' \) 2>/dev/null
# Android markers
find . -maxdepth 3 \( -name 'build.gradle' -o -name 'build.gradle.kts' -o -name 'settings.gradle*' -o -name 'AndroidManifest.xml' \) 2>/dev/null
- 仅有 iOS → 使用 iOS 流程。仅有 Android → 使用 Android 流程。
- 两者都有 → 报告两者,并询问要为哪个平台设置主题。 每次运行只处理一个平台。 (React Native / Flutter 封装项目不在范围内——此技能用于设置原生 SDK 的主题。)
- 两者都没有 → 请用户指明应用的源代码根目录。
如何使用此技能
每个平台的流程都严格按顺序执行——依次完成四个阶段;每个阶段均独立完整,并以下一步指引结尾。
iOS 流程
ios/stages/1-scan.md— 扫描宿主应用的设计系统(只读)。ios/stages/2-map.md— 将令牌映射到 SDK 主题(解决待定事项后)。ios/stages/3-generate.md— 编写SumsubTheme.swift(确认路径后)。ios/stages/4-report.md— 提交覆盖情况报告。
Android 流程
android/stages/1-scan.md— 扫描宿主应用的设计系统(只读)。android/stages/2-map.md— 将令牌映射到 SDK 主题(解决待定事项后)。android/stages/3-generate.md— 编写SumsubTheme.kt(确认路径后)。android/stages/4-report.md— 提交覆盖情况报告。
备用方案(仅作为最后手段)。 此技能及其阶段文件是首要信息来源—— 默认不要查阅外部文档。只有遇到这些内容无法解决的实际阻碍时,才查阅 Sumsub 主题文档: iOS · Android。
完成各阶段后,返回此处查看防护规则和交接。
防护规则 — 此技能绝不能做的事
- 未经用户确认路径,绝不写入文件。
- 如果某个属性保留 SDK 默认值,必须在报告中注明。
- 绝不硬编码任意值——颜色必须来自应用调色板或文档说明的 Alpha 派生方式。
- 报告或询问时始终显示十六进制值(或资源名称);并在括号中附上通俗的文字说明,绝不能用说明代替十六进制值。
- 绝不默默猜测确实存在歧义的选项——提供通俗易懂的选项并给出建议;但如果有安全的默认选项,就不要过度询问。
- 绝不为宿主应用本身设置主题——仅设置 Sumsub SDK 屏幕的主题。
- 绝不更改 SDK 集成逻辑(安装/初始化/呈现/启动)。此技能只会在现有代码中进行一处修改:在启动位置附加主题;经批准后,此修改由技能自行完成。
- (iOS)绝不生成不安全的颜色/字体代码——对于支持双外观的应用,不使用固定的
UIColor字面量(使用命名资源或UIColor { traits in … });使用UIFont(name:size:)时必须提供?? .systemFont(…)回退;成功/警告/严重状态槽位中不得使用装饰色/应用颜色。 - (iOS)绝不覆盖用于验证流程图标的
images.*——这些图标专属于 Sumsub,无法从宿主应用推导。 - (Android)对于支持双外观的应用,绝不生成仅适用于单一外观的颜色——解析两种外观的颜色,并使用双参数
SNSThemeColor(light, dark);ResourcesCompat.getFont的结果必须提供?: Typeface.…回退。 - (Android)绝不覆盖 SDK 的
sns_*资源(宿主应用res/中的颜色/字符串/可绘制资源)——只能通过 Theme API 设置主题;覆盖资源会与主题冲突,并在 SDK 更新时失效。 - (Android)在构建器上附加主题——在
.build()之前调用.withTheme(...);绝不尝试在launch()后重新设置样式。
交接
文件生成并完成接入后,汇总以下内容:
- 已创建文件 —
SumsubTheme.swift/SumsubTheme.kt及其存放位置(iOS:确认它是 target 成员;Android:位于任意 source set 下即可编译)。 - 覆盖情况 — Stage 4 报告(已映射/已派生/保留默认值),以及任何对比度修正或用户做出的选择。
- 已完成接入 — 附加主题的确切启动位置(文件:行号)(iOS:
sdk.theme = SumsubTheme()或SumsubTheme.make();Android:构建器上的.withTheme(sumsubTheme(activity)))。如果未找到集成代码(SDK 尚未接入),请说明这一点,并指向sumsub-integrate-msdk——主题已准备就绪,待完成接入后即可附加。