Xcode NSFileManager';在桌面上运行.app时,s currentDirectoryPath返回根目录
我正在开发一个基本的web服务,并且正在登录屏幕上工作。当用户按下“登录”按钮时,我希望它激活一个运行二进制文件的Xcode NSFileManager';在桌面上运行.app时,s currentDirectoryPath返回根目录,xcode,macos,cocoa,executable,Xcode,Macos,Cocoa,Executable,我正在开发一个基本的web服务,并且正在登录屏幕上工作。当用户按下“登录”按钮时,我希望它激活一个运行二进制文件的NSTask,该二进制文件与应用程序捆绑在一起(使用给定的凭证执行登录)。现在,我获取工作目录,并将二进制文件的相对位置附加到工作目录以运行它。当我将二进制文件放在计算机的静态位置时,二进制文件运行良好,但我更愿意将二进制文件捆绑到应用程序的资源中(除非这是一个坏主意) 我的代码要点是可用的 在XCode项目目录中放置二进制文件的最佳位置是哪里,这样我就可以将其捆绑到文件夹“X.ap
NSTask
,该二进制文件与应用程序捆绑在一起(使用给定的凭证执行登录)。现在,我获取工作目录,并将二进制文件的相对位置附加到工作目录以运行它。当我将二进制文件放在计算机的静态位置时,二进制文件运行良好,但我更愿意将二进制文件捆绑到应用程序的资源中(除非这是一个坏主意)
我的代码要点是可用的
在XCode项目目录中放置二进制文件的最佳位置是哪里,这样我就可以将其捆绑到文件夹“X.app/Contents”?
目前,我只是获取当前工作目录,然后将二进制文件的相对位置附加到此字符串。以下代码包含在-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil
方法的重写中:
NSFileManager *filemgr = [[NSFileManager alloc] init];
self.pathString = [[NSString alloc] initWithString:filemgr.currentDirectoryPath];
我使用以下代码启动任务(包装在子类NSViewController
中的方法中):
当应用程序在Debug文件夹中运行时,此选项有效。
但是,当我尝试将其移动到其他位置(即,将X.app复制到桌面)时,filemgr
报告currentDirectoryPath
是根目录(“/”)
这就引出了两个问题:
提前谢谢你 当前目录路径取决于启动环境,与应用程序的位置无关 要获取应用程序包中的数据,请查看
[NSBundle mainBundle]
。与上述代码等效的代码为:
NSString *launchPath=[NSBundle.mainBundle
pathForResource:@"loginFromClient"
ofType:nil
];
正如Gerd所指出的,对于工作目录没有“应该”。你在这方面的期望是毫无根据的。工作目录实际上仅与命令行程序相关,供用户使用,以允许用户在将
cd
-ed添加到自己选择的目录后提供相对路径。另外,请查看NSString方法+(instancetype)stringWithContentsOfFile:(NSString*)路径编码:(NSStringEnc错误:(NSError**)error
或-(instancetype)initWithContentsOfFile:(NSString*)路径编码:(NSStringEncoding)enc error:(NSError**)error
为您节省了大量的代码。非常感谢你们,我会检查一下:)
NSString *launchPath=[NSBundle.mainBundle
pathForResource:@"loginFromClient"
ofType:nil
];