在Xcode 4.6中,我創建了一個基於「命令行工具」項目模板的新應用程序。 如何以編程方式從該「命令行工具」應用程序啓動另一個應用程序(.app應用程序包)?MacOsX:如何從「命令行工具」類型的應用程序啓動應用程序(.app)
回答
有很多方法可以實現這一點,使用啓動服務和或NSWorkspace
。
標識捆綁應用程序的更靈活方法之一是通過其捆綁標識符(CFBundleIdentifier
),這是一個像com.apple.TextEdit
這樣的字符串。這使您可以識別應用程序,而不必硬編碼找到應用程序的假定路徑,或者通過對應用程序包的名稱進行硬編碼(兩者都可以輕鬆更改)。您可以使用NSWorkspace
的launchAppWithBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifier:
來啓動應用程序。如果您還不知道它,可以通過檢查其AppName.app/Contents/Info.plist
文件來獲取應用程序包的包標識符。然後使用下面的代碼:
if (![[NSWorkspace sharedWorkspace]
launchAppWithBundleIdentifier:@"com.apple.TextEdit"
options:NSWorkspaceLaunchDefault
additionalEventParamDescriptor:NULL
launchIdentifier:NULL]) {
NSLog(@"launching app failed!);
}
重要:NSWorkspace
是AppKit.framework
框架,它最初沒有包含在「命令行工具」項目模板的一部分。要將其添加到您的項目中,請選擇目標列表中的目標,如下圖所示,然後單擊+按鈕添加其他框架。
添加兩個AppKit.framework
和Cocoa.framework
。
這將導致所有3列在鏈接二進制庫存步驟。在這一點上,你可以刪除這兩個從連接階段Foundation.framework
和AppKit.framework
,並且只留下Cocoa.framework
,象下面這樣:
要使用這種語法([[NSWorkspace sharedWorkspace]),創建新的「命令行工具」項目時應該爲Type選項(C/C++/Core Data/Core Foundation/Core Services/Foundation)選擇什麼? – ytw 2013-03-18 20:56:18
@ytw:您可以使用'Foundation'模板,但您需要添加我提到的其他框架。你使用過什麼樣的模板(我剛剛假設'基金會',對此感到抱歉)。如果您對Objective-C感到不舒服,請告訴我,我可以添加代碼以使用Launch Services(這是基於C的,並且是CoreServices框架的一部分)。 – NSGod 2013-03-18 21:59:28
謝謝,NSGod。您提供的代碼大部分時間都正常工作。有一種情況似乎不起作用,那就是命令行應用程序是以root身份啓動的。我看到「啓動應用程序失敗!」在日誌文件中。任何想法可能會造成這種情況?謝謝。 – ytw 2013-03-19 23:19:55
- 1. 如何從node.js應用程序運行命令行工具
- 2. 帶命令行應用程序的MacOSX C++工作目錄
- 3. 如何運行彈簧啓動應用程序作爲Web應用程序以及命令行應用程序?
- 4. 使用命令啓動應用程序
- 5. 如何使用Java的Crossover啓動命令行應用程序?
- 6. 從Swift應用程序啓動App Store
- 7. 從命令行運行應用程序並啓動瀏覽器
- 8. Mac OS X:如何靜默啓動一個「命令行工具」類型的應用程序
- 9. 如何通過命令行觸發應用程序啓動?
- 10. 從命令行工具到可可應用程序
- 11. 從命令行重新啓動com +應用程序
- 12. 從命令行啓動erlang應用程序
- 13. 應用程序啓動時應用程序類不運行?
- 14. 如何從其他應用程序啓動ClickOnce應用程序?
- 15. 如何從Java Web應用程序啓動Android應用程序?
- 16. 如何從C#應用程序啓動應用程序?
- 17. 如何通過命令行將應用程序作爲守護程序啓動?
- 18. 從應用程序啓動「啓動器應用程序抽屜」?
- 19. 如何以編程方式從命令行啓動命令行版本的應用程序?
- 20. 使用命令行參數啓動應用程序
- 21. 使用命令行在OS X上啓動應用程序
- 22. 黑莓:命令行構建和應用程序自動啓動
- 23. Mac OS應用程序,帶命令行工具的沙箱?
- 24. 春季啓動應用程序時,掛在命令行運行
- 25. Eclipse RCP:無需啓動應用程序的命令行參數
- 26. 如何在Mac應用程序中使用AppleScript運行命令行工具
- 27. 如何重新啓動C++命令提示符應用程序?
- 28. 如何從命令行重新啓動Rails應用程序時定義環境?
- 29. 如何從Cocoa-Applescript應用程序啓動命令行二進制文件?
- 30. android:如何從命令行控制啓動/結束應用程序
可以使用'系統(爲const char *命令)'(包括在stdlib.h)並運行「open /path/to/application.app」 – 2013-03-18 18:42:36
不使用系統,NSGod的答案看起來不錯 – 2013-03-18 20:27:02