配置

Secrets.xcconfig 密钥、xcconfig 配置链与优雅降级。

这相当于 iOS 版的「环境变量」页面。iOS 应用没有 .env 文件或服务器环境——配置改为通过 Xcode 的 xcconfig 构建设置流入 Info.plist,应用再通过一个类型化访问器读回。本页 讲解这条链路,并列出每一个密钥。

xcconfig 配置链

配置经过五个阶段:

AppConfig.xcconfig(被追踪)

提交到 git,内含安全的占位值(如 your-supabase-publishable-key)。文件末尾是 #include? "Secrets.xcconfig",因此你的本地文件会覆盖这些占位值。

Secrets.xcconfig(被 git 忽略)

你的真实值,通过 cp Secrets.example.xcconfig Secrets.xcconfig 创建。绝不提交。这里定义的 任何键都会覆盖上面的占位值。

Info.plist$() 替换

构建设置通过 $(KEY) 替换被写入 Info.plist 条目,因此这些值会作为 Info 字典键随应用包 一起分发。

AppSecrets 访问器

Core/Config/AppSecrets.swift 读取 Info 字典,并暴露类型化的可选属性 (supabaseURL: URL?revenueCatIOSKey: String? 等)。

各控制器的 isConfigured 空转

每个控制器都会检查自己的密钥。密钥缺失时,控制器将 isConfigured 置为 false 并空转, 而不是崩溃。

占位值等同于未设置。 只要某个值为空、仍含有 $( 替换标记,或以 your- 开头, AppSecrets 就将其视为缺失。也就是说,你可以原封不动地保留 AppConfig.xcconfig 中的 任意占位值,对应功能只会保持未激活——应用照样能构建并启动。这正是 优雅降级约定。

密钥参考

所有密钥都是可选的。下表按服务分组;「缺失时」描述密钥未设置时的行为。

Supabase

Prop

Type

所有 Supabase 支撑的流程(认证、待办、上传)都需要它们。参见 Supabase 配置

RevenueCat

Prop

Type

参见 RevenueCat 配置订阅

PostHog(数据分析)

Prop

Type

分析还受同意闸门约束——仅在用户接受同意闸门后才会启动。参见 可观测性

Sentry(崩溃上报)

Prop

Type

更新闸门

Prop

Type

Secrets.xcconfig 中调高 MIN_APP_VERSION / LATEST_APP_VERSION 即可在本地验证该闸门。 参见启动闸门

链接与法律

Prop

Type

通用链接的配置见深度链接

Google 登录

Prop

Type

这两个键都包含在 Secrets.example.xcconfig 中。完整的 Google 流程见 身份认证。Apple 登录不需要密钥——它改用 Sign in with Apple 能力。

服务器端密钥绝不进入应用

Secrets.xcconfig 中的密钥都是随应用包分发的客户端值——只应放 publishable/公开 的值。特权密钥(APNs 签名密钥、RevenueCat webhook 鉴权令牌、Supabase service-role 密钥) 存放在 Supabase Edge Function 密钥中,绝不随应用打包。参见 Supabase 配置

xcconfig 陷阱:// 是注释

在 xcconfig 文件里,// 会开始一段注释——这与 URL 中的 // 冲突。模板用 $() 空替换技巧 绕开:把 // 拆开,使其不被解析为注释:

SUPABASE_URL = https:/$()/your-project-ref.supabase.co

$() 展开为空,因此该值读回时是 https://your-project-ref.supabase.co。凡是设置 URL 值的 键,都请沿用这个写法。

相关页面

On this page