如何以编程方式查找OS X应用程序包的驻留目录

Dee*_*yan 2 macos cocoa

我有一个OS X应用程序作为.app包,它可以驻留在文件系统的任何位置.有没有办法以编程方式从中查找包的当前路径.

注意

getcwd()不起作用,因为打开的所有包的当前目录是通过单击打开或使用open命令是"/".如果我从myapp.app/Contents/MacOS调用可执行文件,则会正确显示该目录.这是一个可可应用程序.

有线索吗?

Wil*_*and 7

您应该能够通过[[NSBundle mainBundle] bundleURL];或找到.app的位置[[NSBundle mainBundle] bundlePath];.

但是,您可能希望通过NSBundle在大多数情况下查找它们来访问.app内的资源(这涉及本地化等问题).

注意:如果您计划修改应用程序包; 别.您不应该,也不能假定您对应用程序包具有写入权限; 如果你这样做,有些事情可能是非常错误的.

编辑:作为一个兴趣点,如果您在OS X上编写C程序并需要找到可执行文件的位置; 您可以像这样使用非便携式主声明:

int main (int argc, const char *argv[], const char *env[], const char *path[]) {
  // path[0] now contains the path to the executable
  // NOT PORTABLE! OS X ONLY!
  return 0;
}
Run Code Online (Sandbox Code Playgroud)