在Xcode中,$PATH设置在哪里?

37

看起来xcode的$PATH环境设置与我的用户shell环境不同。

xcode从哪里获取$PATH设置,最好的方法是什么来附加到搜索路径中?


如果XCode找不到Homebrew安装的watchman或node,可以使用以下技巧:sudo ln -s /opt/homebrew/bin/{watchman,node} /usr/local/bin - GutenYe
10个回答

23

如果你正在编写一个“运行Shell脚本”构建阶段,你可以这样做:

PATH=${PATH}:/opt/local/bin

或者脚本内容中的任何内容。


2
谢谢你,这是我目前正在做的事情,但我希望能找到一种“全局”的方法,适用于整个构建过程。 - lajos
1
这对于例如 Ruby 脚本来说效果不太好。特别是当您需要在路径中使用 rbenv 时。 - tcurdt
1
这对我有用:PATH=${PATH}:/usr/local/var/rbenv/shims - Gurpartap Singh

14
这些答案中存在一些混淆,因为其中一些试图解决由Xcode运行的内置可执行文件的$PATH问题。但问题是关于Xcode的,意味着它涉及构建过程本身。
例如,在通过Homebrew安装的可执行文件的构建阶段运行脚本步骤中,硬编码构建过程以包含特定于一个构建机器的路径是不明智的(新的macOS版本发布,新的开发人员加入团队等等)。
问题有多个层面:
bashrc/zshrc/profile中更改$PATH会在shell会话中生效,但不会在macOS应用程序中生效。
要解决这个问题,您可以使用以下方法为应用程序设置PATH:
sudo launchctl config user path "$PATH"

你需要重新启动你的机器以使更改生效。如果你改变了你的$PATH,你需要再次运行这个。
(这来自于GitHub上的评论。)

Xcode默认不使用系统的$PATH,而是用自己的经过处理的值来替代它

通过更改用户默认设置来解决这个问题。这可能有一些风险,因为Xcode这样处理是为了确保使用它自己的构建工具,如果你在其他地方有相同名称的可执行文件,它们可能会被运行。买家自负!
defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO

这似乎在每次 macOS 重启时都会重置,所以准备好每次重启都要执行这个命令。
(这部分来自这个答案。)

1
建议将引用添加到$PATH中,如下所示:sudo launchctl config user path "$PATH"。否则可能会破坏路径变量。 - undefined

8
最简单的解决方案是在Xcode中添加PATH变量。 PATH=${PATH}:/usr/local/bin enter image description here

4
如果有人想知道这个在哪里找到,可以点击“编辑方案”。:D - Pranav Kasetti
1
对我来说,这是在菜单中的“产品>方案>编辑方案”下。 - Vigi

7

仅适用于OSX 10.7及更早版本。

XCode与其他OS X进程一样,从~/.MacOSX/environment.plist获取其环境变量。

有关如何设置内容的详细信息,请查看developer.apple.com/qa/qa2001/qa1067.html


4
嗯......我没有那样的文件。是否有适用于所有用户的全局版本? - lajos
1
那个文件对于某些事情来说很好,但似乎不能用于PATH变量。 - Bored Astronaut

4
在Xcode 5中,您可以将路径作为变量添加到目标或项目设置中。
  1. 在页面顶部使用+符号添加自定义变量。
  2. 编辑变量名称为PATH并添加首选值(例如,在默认homebrew安装中使用/usr/local/bin)。

Target Build Settings


4
我刚尝试了这个方法,使用的是 Xcode 6。看起来 IDE 会默默地将 PATH 变量的值覆盖为 Xcode.app 文件夹中的值。所以这种方法现在已经不再可行了。有没有其他替代方案或者强制 Xcode 使用这里设置的 PATH 的方法? - naich
1
Xcode 6会在你的路径之前添加自己的工具路径。例如,如果你想要将PATH设置为/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin,Xcode实际上会将其设置为/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin。如果你想要覆盖Xcode的PATH,则这是不幸的,但如果你只想将/usr/local/bin或其他某个目录添加到PATH中,则这实际上是一个很好的解决方案。 - Kristopher Johnson

2
如果您特指被命名为 PATH 的可执行文件搜索路径环境变量,那么它的设置有几个地方:
  • 如果它是一个命令行工具,在你的 shell 设置中。根据你的 shell 不同,这可能是 ~/.cshrc~/.profile~/.bash_profile 等。
  • 在之前提到的 environment.plist 文件中。
  • 如果你正在使用调试器,则为 gdb 使用的任何内容。我相信如果存在,gdb 将从 ~/.gdbinit 读取命令。
  • XCode 允许你在可执行文件的信息页面中设置环境变量。

如果您需要向脚本传递搜索路径,并尝试在诸如 /usr/local/bin 之类的位置查找可执行文件,则此方法无效。这是 Xcode 对外部构建目标支持不足的一个缺陷(根据本文撰写时的 Xcode 4.2 版本)。 - Bored Astronaut

2
这是针对较新版本的macOS和Xcode的更新,因为一些事情已经改变了。这是在Xcode 11.0和macOS 10.14上。
最大的问题是现在不再读取~/.MacOSX/environment.plist。
1. 构建设置
这意味着如果在构建中需要设置PATH,例如用于外部构建并运行可执行文件,则没有简单的解决方案。/etc/paths似乎也没有被读取。
解决方案如GhostLyrics的答案所述,在构建设置中添加PATH变量。但是如评论中所述,Xcode不仅会使用该值,而且还会在其之前放置自己的值。此外,它进行直接文本替换,因此您还需要添加PATH使用的分隔符即:(冒号)。我添加的值是:opt/local/bin,我还发现您只能在目标级别而不是项目级别上执行此操作。
2. 运行Shell脚本
这是简单情况,如此答案所述。
PATH=${PATH}:/opt/local/bin

或者在脚本内容中放置此更改。

或者将此更改放入您的非登录Shell启动文件中,例如~/.bashrc ~/.zshrc

  1. 运行可执行文件

这是在Schema的Run部分完成的。 根据此处的答案,在环境变量中设置PATH。请注意,我尚未尝试过此操作,也不确定需要设置多少PATH。


1

1

Xcode 不会查看您的 shell 路径环境。

请查看 NSProcessInfo;并使用 NSLog 查看出现了什么。

如果您想要一个适用于所有图形程序的路径,您需要设置 ~/.MacOSX/environment.plist。如所述。

设置环境变量的推荐方式实际上是在 /etc/paths 和 etc/paths.d 中,尽管这些也不会被 Xcode 捕捉到。

我在这里问过这个问题。


-3
尝试从终端打开你的Xcode项目,这对我起作用:`open some.xcodeproj`
而不是先打开Xcode然后加载项目或双击打开。
我知道...有点傻。

它不起作用。我猜测打开触发器在后台打开了。 - gre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接