2010-01-30 69 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

相關問題