在macOS应用程序中,如果需要获取应用程序或其捆绑包中的任何资源的路径,当然可以使用NSBundle
的mainBundle
静态方法
NSBundle *bundle = [NSBundle mainBundle];
NSString *appPath = [bundle bundlePath];
NSString *resourceFolderPath = [bundle resourcePath];
... etc ...
但是,如果用户在应用程序运行时将应用程序包移动到磁盘上的不同位置,则此方法将不起作用。以上所有函数仍将返回用户移动包之前的包的旧路径。
无论用户是否已将其移动到磁盘上,如何获取包的当前路径或包中任何资源的路径?
到目前为止,我已经尝试使用NSRunningApplication
获取它的当前位置,如下所示:
NSRunningApplication *thisApp = [NSRunningApplication runningApplicationWithProcessIdentifier:getpid()];
NSLog(@"bundle URL: %@", [thisApp bundleURL]);
也返回包的旧路径的...but!
发布于 2018-08-15 07:38:50
虽然macOS不关心您是否在文档打开时移动文档,但它会关心您是否移动应用程序。这是一个在macOS开发中的long-recognized issue。
而不是试图对抗它,应用程序开发人员倾向于不关心,或询问用户是否想要在启动时将应用程序移动到应用程序目录(因为这是应用程序最常见的移动目的地)。LetsMove是一个演示如何做到这一点的项目。
https://stackoverflow.com/questions/51850899
复制相似问题