【问题标题】:Xcode - Setting/Adding environment variables from a bash script during the build phaseXcode - 在构建阶段从 bash 脚本设置/添加环境变量
【发布时间】:2021-05-27 01:28:21
【问题描述】:

我的代码中当前使用了 2 个 API 密钥,并且在代码中也进行了硬编码。这些键需要从代码中完全删除并作为环境变量添加,而不是在构建阶段从 Xcode 外部添加。到目前为止,我已经尝试过这个脚本

export API_KEY=keyvalue

作为在构建阶段编译源之前发生的运行脚本,将该脚本作为项目方案中的 Pre Action,并使用此从命令行构建应用程序,但给定键的环境变量始终空。

xcodebuild -project MyProject.xcodeproj \
-scheme "My Scheme" \
-sdk iphoneos \
-destination 'platform=iOS,name=<devicename>' \
-derivedDataPath './output' \
API_KEY='KEY' \
SECOND_API_KEY='KEY' \

当像这样手动构建项目时,我可以看到与所有其他设置一样正确导出的密钥,但似乎无法使用 NSProcessInfo.processInfo.environment objectForKey:@"API_KEY" 或使用 NSUserDefaults 访问它们。我还尝试在 Xcode 中编辑该方案,以便将环境变量设置为 API_KEY = $(API_KEY) 以及上述但不起作用,以及在构建设置中为这些键设置默认值也不起作用.这实际上可以做到吗?谢谢。

【问题讨论】:

  • 您希望在应用运行时设置这些环境变量吗?或者您是否试图在构建时捕获它们的值以防止将它们签入源代码控制?我对您使用 NSProcessInfo 访问构建时环境变量的愿望感到困惑。
  • 只需要在构建应用程序时设置变量,以便无论何时运行它们都可以从NSProcessInfo.processInfo.environment 访问。通常,您会在 Xcode 中使用 Edit Scheme > Run >Environment Variables 设置环境变量,但 API 密钥仍会在代码中,因此需要在构建应用程序时使用应用程序外部的脚本手动设置它们。类似的东西,除了这是用于测试:stackoverflow.com/questions/23284829/…

标签: ios objective-c xcode bash


【解决方案1】:

如果我对您的理解正确,那么您误解了环境变量,如果我不是我的道歉。

当您的应用程序运行时,您无法访问在构建过程中设置的环境变量 - 除非构建过程将值写入代码或某些配置文件。

环境变量在启动时传递给进程,您的代码可以访问这些变量。虽然环境变量的名称需要嵌入到您的代码中,但这些变量的不是。

听起来您希望分发一个编译后的应用程序,而不需要运行它所需的 API 密钥,然后在运行时提供这些密钥。您可以通过使用一个小的 shell 脚本来设置环境变量,然后启动您的应用程序来做到这一点。或者您可以使用类似于用于序列号的方案,因此您的用户必须在您的应用首次启动时输入 API 密钥(只需告诉他们它们是序列号 ;-)),然后将它们存储在合适的文件中(例如在您的应用程序的首选项或应用程序支持文件夹中)以您选择的任何方式进行混淆。高温

【讨论】:

    猜你喜欢
    • 2019-06-10
    • 2012-04-20
    • 2019-09-14
    • 2016-10-07
    • 1970-01-01
    • 2011-03-05
    • 2014-05-27
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多