Greenlight配置完全手册:.greenlight.yml中如何调整规则严重性、排除目录与单行忽略技巧
【免费下载链接】greenlightPre-submission compliance scanner for the Apple App Store and Google Play. Scans code, privacy manifests, Android manifests, and IPA/APK/AAB binaries against the review guidelines. Offline, no account.项目地址: https://gitcode.com/gh_mirrors/greenlight2/greenlight
Greenlight 是一款面向 Apple App Store 与 Google Play 的离线合规预检扫描器,提交前即可扫出代码、隐私清单、IPA/APK 中的拒审风险。它内置 24 条拒审风险规则,默认全量开启——当某条规则误报,或你想让 CI 门禁更贴合团队策略时,只需在项目根目录放一个.greenlight.yml,就能完成规则严重性调整、目录排除、单行忽略三大类配置。本文带你从零写对这份配置文件,并避开所有常见报错。
📄 配置文件在哪、何时生效
- 文件名:
.greenlight.yml或.greenlight.yaml(同时存在时,.yml优先) - 位置:被扫描项目的根目录,扫描时自动检测,无需任何参数
- 作用范围:仅代码扫描(codescan 规则引擎),包括
greenlight preflight中的 codescan 部分;privacy、ipa、metadata 等扫描器不受影响
配置结构只有两个顶层键:rules(按规则 ID 调整)和ignore(按路径排除)。完整示例:
rules: hardcoded-ipv4: severity: info # 降级:info | warn | critical platform-reference: enabled: false # 整条规则关闭 ignore: - vendor # 排除整个目录(任意层级) - "*.generated.ts" # 按文件名通配排除 - src/legacy # 排除指定路径前缀🎚️ 技巧一:调整规则严重性 severity
每条规则有一个默认严重性(CRITICAL / HIGH / WARN / INFO),用severity可覆盖。这直接影响 CI 门禁:--exit-code会在出现CRITICAL 或 HIGH时返回非零退出码,因此把非阻断的规则降级到info,可以让流水线只被真正致命的发现卡住。
rules: hardcoded-ipv4: severity: info # 默认 WARN,降为 INFO:不再拦截 CI,仅提示三个关键注意点:
- 合法取值:
info、warn、critical(大小写不敏感,warning、high也能识别)。写错会直接报错:invalid severity "bogus" (use info, warn, or critical)。 - 只有模式匹配类规则支持降级。像
missing-privacy-keys这类按"发现项"各自带严重性的规则(PlistKeyRule),配置severity会报doesn't support a severity override——这类规则请改用enabled: false。 - 想确认某条规则的默认级别,直接看
greenlight codescan的终端输出即可。
🔕 技巧二:关闭整条规则 enabled
确认某条规则对你们的架构不适用(例如项目本来就不含社交平台登录),整条关闭比逐行注释更干净:
rules: platform-reference: enabled: false- 不写
enabled= 保持默认(开启),写成enabled: true效果同默认 - 规则 ID 必须真实存在,写成
not-a-real-rule会报unknown rule id
常用规则 ID 速查(完整列表见 internal/codescan/rules.go):
| 规则 ID | 检查内容 |
|---|---|
hardcoded-secrets | 硬编码密钥、API Key(§1.6) |
uiwebview-removed | 使用已移除的 UIWebView(§2.5.1) |
external-payment-digital | 数字商品外部支付(§3.1.1) |
missing-att | 使用广告 SDK 却无 ATT 弹窗(§5.1.2) |
account-no-delete | 有注册无注销路径(§5.1.1) |
hardcoded-ipv4 | 硬编码 IPv4 地址(§2.5) |
placeholder-content | 占位内容残留(§2.1) |
crypto-wallet-org-account | 加密钱包需组织账号(§3.1.5(b)) |
🚫 技巧三:排除目录与文件 ignore
ignore接受一组通配规则,匹配逻辑比很多人想象的更宽容——同一个条目会依次尝试四种匹配(实现见 internal/codescan/config.go):
| 写法 | 匹配方式 | 示例效果 |
|---|---|---|
vendor | 目录名/路径段(任意层级) | vendor/、a/b/vendor/全部跳过 |
*.generated.ts | 文件名通配 | api.generated.ts跳过 |
src/legacy | 路径前缀 | src/legacy/下所有文件跳过 |
tools/*.ts | 精确路径通配 | 只匹配tools/直接子层 |
💡 好消息是:node_modules、.git、Pods、build、dist、DerivedData等常见噪音目录内置就跳过(见 internal/codescan/scanner.go),无需手动排除。ignore主要用来处理生成代码、遗留目录、第三方拷贝代码。
✍️ 进阶:单行忽略 greenlight:ignore
不想关掉整条规则、只想静默某一行?在命中行末尾或上一行的独立注释中写指令(实现见 internal/codescan/rules.go):
let host = "10.1.2.3" // greenlight:ignore hardcoded-ipv4// greenlight:ignore hardcoded-ipv4 let host = "10.1.2.3"使用细节:
- 裸指令
// greenlight:ignore会静默该行的所有规则;指定规则 ID(可空格分隔多个)是更好的习惯,其他检查保持生效 - 支持块注释
/* greenlight:ignore */和 XML 注释<!-- greenlight:ignore --> - 指令后追加说明文字可以,如
// greenlight:ignore hardcoded-ipv4 内网测试地址;但仅写说明、不带规则 ID不会生效 - 注释里"顺带提到"
greenlight:ignore字样不算指令——标记必须紧跟在注释符之后 - ⚠️ JSON / plist 文件无法写注释,例如
package.json上的发现只能用.greenlight.yml的ignore或enabled: false处理
🛡️ 常见报错与快速修复
配置文件采用严格模式解析,拼写错误会立即报错而不是静默忽略(见 internal/codescan/config.go 与 internal/codescan/config.go):
| 报错信息 | 原因 | 修复 |
|---|---|---|
unknown rule id "xxx" | 规则 ID 写错 | 运行greenlight codescan从输出中核对 ID |
invalid severity "xxx" | 严重性取值非法 | 只用info/warn/critical |
doesn't support a severity override | 该规则不支持降级 | 改用enabled: false |
field xxx not found | 键名拼写错误 | rules:不是rule:;enabled:不是enable: |
另外,用--config可显式指定配置路径,便于多环境共用扫描时指向不同配置(定义见 internal/cli/codescan.go):
greenlight codescan . --config path/to/.greenlight.yml⚡ 一页速查表
| 需求 | 配置 |
|---|---|
| 降级某规则 | rules: { 规则ID: { severity: info } } |
| 关闭某规则 | rules: { 规则ID: { enabled: false } } |
| 排除任意层级的目录 | ignore: [vendor] |
| 排除一类生成文件 | ignore: ["*.generated.ts"] |
| 排除某路径下全部 | ignore: [src/legacy] |
| 静默单行某规则 | 行尾// greenlight:ignore 规则ID |
| 静默单行全部规则 | 行尾// greenlight:ignore(裸指令) |
记住一个原则:能用单行指令就不关规则,能用降级就不排除目录。把静默范围收得越小,Greenlight 为你守住 App Store 与 Google Play 合规底线的能力就越完整。
【免费下载链接】greenlightPre-submission compliance scanner for the Apple App Store and Google Play. Scans code, privacy manifests, Android manifests, and IPA/APK/AAB binaries against the review guidelines. Offline, no account.项目地址: https://gitcode.com/gh_mirrors/greenlight2/greenlight
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考