2010-01-30 37 views
2

我有一个应用程序,我想捆绑(与一些额外的文件)在一个包装应用程序中。创建简单的可可应用程序包装

字面上我想这样做的唯一事情是有包装应用推出一个资源文件(即,好像我打字:?

/path/to/Resources/Bundled.app/Contents/MacOS/executable 

到终端

什么意义我想这应该是简单的,但我caouldn't找到一个简单的方法来做到this--我的Cocoa编程是有限的,至少可以说,提前

谢谢!

+0

你可以到'MacOS'路径文件夹'[[[一个NSBundle mainBundle] executablePath] stringByDeletingLastPathComponent]'。 – 2010-02-01 02:51:11

回答

1

你的外部程序可以使用一个NSBundle定位外程序包内的内部程序。

要运行程序内:如果它是一个应用程序,使用Launch ServicesNSWorkspace;如果它是命令行工具,请使用NSTask

3

的一种方式,如果包装“应用程序”只是一个shell脚本什么的,是Platypus

如果它是一个实际的应用程序(.APP束),为什么一个应用程序做什么,但推出应用B?为什么要有应用程序A?

+0

对于双reasons-第一因为应用程序B具有几个资源,其需要在同一文件夹中的,作为应用本身(I具有高于这个行为没有控制,这是第三方的东西) - 这样我可以捆绑它们放在一起作为一个单一封装 其次,因为在将来的某个时候我可能会想包装做点什么一个小b它更聪明,就像在多个应用程序中选择一样。 – 2010-01-31 15:54:37

+0

然后你可能想自己在Xcode中做这件事。 – 2010-01-31 16:21:37

1

只是为了子孙后代着想(如果它可以帮助其他人,这里是完整的代码我使用(该AppDelegate.m文件中):

NSString *appName = @""; 
NSString *bundledApp = [[NSBundle bundleWithPath:[[NSBundle 
                  mainBundle] pathForResource:appName ofType:@"app"]] 
          bundlePath]; 
NSWorkspace *launchApp = [[NSWorkspace alloc] init]; 
NSLog(@"Launching %s", bundledApp); 
[launchApp launchApplication:bundledApp]; 
[launchApp release]; 

// Make Launcher terminate (if it serves no other purpose) 
[NSApp terminate:nil]; 
+0

谢谢,但不应该使用[NSWorkspace sharedWorkspace]而不是分配新实例? – Raffael 2012-11-08 17:39:59

相关问题