【问题标题】:XCode doesn't recognize environment variablesXCode 无法识别环境变量
【发布时间】:2015-10-20 11:53:00
【问题描述】:

我使用以下脚本在 OSX Yosemite 10.10.5 上运行 XCode (7.0.1 7A1001):

export FOO=bar #this should not be necessary, but just in case
launchctl setenv FOO bar #should make it visible to all GUI applications (=XCode)
open -a xcode

然后我打开一个包含两个项目的工作区:App1App2。在这两个项目中,我将 $(HOME)/$(FOO) 放在 Header Search Paths 字段中。

  • App1 中,它按预期解析为 /Users/ohads/bar
  • App2 中,它被解析为 /Users/ohads/ - 注意 HOME 变量是如何被解析的,但 FOO 变量不是。

这里发生了什么?为什么会出现差异?我怎样才能让FOO 在 App2 中工作 - 是否有一些我缺少的特殊标志或声明?

顺便说一句,好像这还不够奇怪,即使我只使用 export,App1 也能正常工作(与应该用于 GUI 应用程序的 launchctl 相反,因为 export 应该只影响现金应用程序) .

【问题讨论】:

  • 嗨!您使用的是什么版本的 OSX?
  • @Arseniy 添加到问题
  • 您确定没有在 App2 设置中的某处定义 FOO 吗?
  • launchctl setenv 应该可以工作,但是我不明白为什么您不能使用相对于 Xcode 项目的路径,而只是确保 Xcode 项目位于正确的位置?以这种方式使用环境变量,实际上会使您的过程更加困难。
  • export 应该足够了,因为open -a xcodebash 会话中打开 GUI 应用程序。从 Finder 打开的 GUI 应用程序(不是从 bash 会话启动的)是需要 launchctl 的应用程序。 (除非open 不分叉/执行该进程,而是向操作系统发送消息以打开应用程序,在这种情况下,此注释无关紧要。)

标签: xcode bash environment-variables xcconfig


【解决方案1】:

看起来这与new XCode 7 behavior 有关。为了让 XCode 使用环境变量,必须发出以下命令:

$ defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO

一旦发出此命令,exportlaunchctl 都会工作(根据 chepner 的评论)。我只能猜测它在 App1 中工作,因为它是在较旧的 XCode 版本中创建的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多