☰
Greenlight配置完全手册:.greenlight.yml中如何调整规则严重性、排除目录与单行忽略技巧
2026/10/4 2:47:56 网站建设 项目流程

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,仅提示

三个关键注意点:

  1. 合法取值:info、warn、critical(大小写不敏感,warning、high也能识别)。写错会直接报错:invalid severity "bogus" (use info, warn, or critical)。
  2. 只有模式匹配类规则支持降级。像missing-privacy-keys这类按"发现项"各自带严重性的规则(PlistKeyRule),配置severity会报doesn't support a severity override——这类规则请改用enabled: false。
  3. 想确认某条规则的默认级别,直接看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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询