将 --dart-define-from-file 与 Xcode 一起使用

Fir*_*rus 1 xcode build dart flutter

我在名为“keys.json”的文件中设置了一些环境变量,并使用--dart-define-from-file来加载它们。

flutter run --dart-define-from-file=keys.json
Run Code Online (Sandbox Code Playgroud)

通过命令行它可以正常工作,但是使用 Xcode 时又如何呢?

如何设置--dart-define-from-file变量以便我可以在 Xcode 中运行和构建项目?

JoR*_*oRa 5

.xcworkspace当您使用Debug或配置运行应用程序时,Xcode 将自动获取这些值Release。只需确保flutter build ios --<debug/release> --dart-define-from-file <your_file.json>在从 Xcode 运行应用程序之前运行即可。


对于那些对其工作原理感兴趣的人:

flutter build将重新生成 Xcode 内部使用的配置文件:Debug.xcconfigRelease.xcconfigGenerated.xcconfig. 默认情况下,Xcode 将使用调试配置,但您可以通过在 Xcode 中编辑方案来更改它。

如果你看一下内容Debug.xcconfig

#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
Run Code Online (Sandbox Code Playgroud)

你会注意到,它引用了Generated.xcconfig. 在这个配置文件中的某个地方,您会发现构建变量DART_DEFINES被设置为一些乱码。

[...]
DART_DEFINES=YT0x,Yj0y,YT0x,Yj0y
[...]
Run Code Online (Sandbox Code Playgroud)

这只不过是简单配置文件的 base64 编码版本

{
  "a": 1,
  "b": 2,
}
Run Code Online (Sandbox Code Playgroud)

这个 base64 编码的值被注入到您的应用程序中,并由 flutter 运行时解码,准备在您的应用程序中使用。


截至2023年11月27日,flutter社区正在持续讨论是否应该改变甚至完全删除上述行为。请参阅 GitHub 问题#138793,了解有关此主题的更多最新信息。