【问题标题】:Xcodebuild failing to pick up environment values from project file?Xcodebuild 无法从项目文件中获取环境值?
【发布时间】:2011-12-29 20:39:17
【问题描述】:

我使用的是 Xcode 3.2.6,MacOSX。

我有一个全局可见的环境设置:

ICU_SRC=~/Documents/icu/source

真的是一个环境设置,它是在登录时设置的。当我打开终端时,它就在那里。

在我的项目中,Header Search Paths 下我添加了这个:

$(ICU_SRC)/i18n
$(ICU_SRC)/common

当我在 IDE 中编译时,它们会正确展开。当我查看构建结果时,我看到了:

-I/Users/eric.grunin/Documents/icu/source/i18n
-I/Users/eric.grunin/Documents/icu/source/common

但是,当我从命令行构建时,它会失败。我看到的是这样的:

-I/i18n
-I/common

这是我用来编译的命令:

/usr/bin/env -i xcodebuild -project my_project.xcodeproj -target “my_program”-配置发布-sdk macosx10.6 build

我做错了什么?

编辑添加:

苹果解释Setting environment variables for user processes

【问题讨论】:

    标签: xcode xcodebuild


    【解决方案1】:

    有时如果您在xcodebuild 命令之前指定环境变量之前,效果会更好,如

    # NOT this
    xcodebuild ... options ... SOMEVAR=somevalue
    
    # But this instead works better
    SOMEVAR=somevalue xcodebuild ... options ...
    

    这对PRODUCT_NAME 在使用 cocoapods 时特别有效。

    【讨论】:

      【解决方案2】:

      我知道这个问题已有 2 年的历史,但它仍然具有相关性。我刚刚花了一天时间追踪 xcodebuild 查看 CC 环境变量(如果已设置)并且可能会做错事的事实。我正在使用 xcodebuild 版本 6.1.1(构建版本 6A2008a)。

      如果设置了 CC 我得到的错误是:

      PBXTargetBuildContext.mm:1690

      详细说明:commandPath 应该是一个字符串,bit 是 nil

      提示:无

      我希望这对其他人有帮助。

      【讨论】:

      • 不知道这是否正确(我不再参与该项目),但感谢您的贡献。
      【解决方案3】:

      您需要使用您的方案将 xcode 构建“连接”到 Xcode。

      从 xcodebuild 方面: xcodebuild ... 选项 ... yourVAR=yourValue

      从 Xcode -> 产品 -> 方案 -> 编辑方案... -> 参数 -> 环境变量 (名称) someKey (值) $yourVAR

      关键是 xcodebuild 中 yourVAR 的名称将通过使用 '$' 从 Xcode 参数中引用。

      为了以后从代码中访问环境变量,你需要使用

      ProcessInfo.processInfo.environment["someKey"]

      【讨论】:

        【解决方案4】:

        根据我的实验,xcodebuild 并没有真正从 Shell 中获取环境变量。为了让 xcode 尊重环境变量,我们必须明确地传递它们:

          export ICU_SRC_ENV=~/Documents/icu/source 
          /usr/bin/env -i xcodebuild -project my_project.xcodeproj \
                                     -target "my_program" \
                                     -configuration Release \
                                     -sdk macosx10.6 \
                                     build \
                                     ICU_SRC=$ICU_SRC_ENV
        

        上面的命令将系统环境变量传递给 xcodebuild 环境变量。您可以通过 $(ICU_SRC) 表示法在您的 xcodeproj 中引用它。顺便说一句,我使用了不同的名称以便我们可以区分两个变量,但您也可以使用相同的变量名称。

        ~/.MacOSX/environment.plist 确实与我的示例中的导出行等效。它仅适用于 Shell。

        希望对您有所帮助。

        【讨论】:

        • 似乎 xcodebuild 确实 从其环境(例如,您运行它的 shell)中至少获取了 CC ......(在我的情况下不是我想要的;)唉,为什么这些东西不能清楚地记录下来。
        【解决方案5】:

        使用 Xcode 设置的“环境”设置并不是真的环境变量;它们只有 Xcode 知道。如果您希望它们成为真正的环境变量,从命令行可见,您必须使用以下 shell 命令:

        user@host ~ $ export ICU_SRC="~/Documents/icu/source"
        

        【讨论】:

        • 谢谢,但它确实是一个环境设置,我在~/.MacOSX/environment.plist中设置了它,它在终端中是可见的。但 xcodebuild 似乎认为它是另一回事。
        • 哦,对不起。我不知道这个。
        猜你喜欢
        • 2014-06-16
        • 1970-01-01
        • 1970-01-01
        • 2015-07-17
        • 2019-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-30
        相关资源
        最近更新 更多