我遇到了在10.5上重新启动我的应用程序的问题。在我的Info.plist中,我设置了LSMinimumSystemVersionByArchitecture,以便应用程序将在64位上运行x86_64,在i386,ppc和ppc64上运行32位。
我在应用中有一个首选项,允许用户在Dock图标和NSStatusItem,它会提示用户在使用以下代码更改设置后重新启动应用程序:
id fullPath = [[NSBundle mainBundle] executablePath];
NSArray *arg = [NSArray arrayWithObjects:nil];
[NSTask launchedTaskWithLaunchPath:fullPath arguments:arg];
[NSApp terminate:self];
当它在10.5上执行时,它会以64位重新启动应用程序,这对我来说不是一个理想的结果。从我收集的文档读取它因为当通过命令行启动应用程序时不读取LS *键。
有解决方法吗?我尝试做类似下面的事情,它在10.6上运行,但是在10.5上,我发誓“发射路径无法访问”。 ([NSApp isOnSnowLeopardOrBetter]是一个检查AppKit版本号的类别。)
id path = [[NSBundle mainBundle] executablePath];
NSString *fullPath = nil;
if (![NSApp isOnSnowLeopardOrBetter])
fullPath = [NSString stringWithFormat:@"/usr/bin/arch -i386 -ppc %@", path];
else
fullPath = path;
NSArray *arg = [NSArray arrayWithObjects:nil];
[NSTask launchedTaskWithLaunchPath:fullPath arguments:arg];
[NSApp terminate:self];
答案 0 :(得分:2)
您应该使用NSWorkspace
的方法,它会考虑Info.plist
个密钥。例如,使用-(BOOL)launchApplication:(NSString*)
。
答案 1 :(得分:0)
这是因为你在fullpath中使用了空格,在数组[NSArray arrayWithObjects:@"/usr/bin/arch",@"-i386",@"-ppc",path,nil]
中使用了参数。
答案 2 :(得分:0)
尝试使用此代码重新启动您的应用:
//terminate your app in some of your method:
[[NSApplication sharedApplication]terminate:nil];
- (void)applicationWillTerminate:(NSNotification *)notification {
if (i need to restart my app) {
NSTask *task = [NSTask new];
[task setLaunchPath:@"/usr/bin/open"];
[task setArguments:[NSArray arrayWithObjects:@"/Applications/MyApp.app", nil]];
[task launch];
}
}