Mac OS X下从服务进程中启动另一个应用程序(Cocoa Application)
来源:互联网 发布:w3c php手册下载 编辑:程序博客网 时间:2024/05/17 23:45
最近因为工作的原因,开始转向Mac OS X下的应用程序开发,基于最新的Mac OS X 10.12以及Xcode8.1。有一个功能是需要在当前的服务进程(Command line tools工程)中调起一个界面程序(Cocoa Application)并显示在顶层界面,在实现这个功能的过程中,遇到了不少坑,感觉都挺有价值的,加上目前网上关于Mac OS X应用编程这块的资料挺少的,所以在此记录下来,供其他猿友参考。
首先,新建两个macOS下的工程,一个Cocoa Application工程,名为TestCocoa;一个Command Line Tool工程,名为TestCmd。(注:开发工具为Xcode8.1)
接着在TestCmd中添加启动TestCocoa的代码,此处只贴关键代码。我采用的是NSTask这个类对象来实现,实现的函数代码如下:
此处有一个小坑,就是指定TestCocoa的执行文件路径,我们都知道,Cocoa Application编译后生成了一个****.app的文件(实际上是一个包),在OS X系统中双击这个文件是可以直接运行程序的。当我在TestCmd中使用TestCocoa.app对应的路径去启动程序的时候,我会发现程序是启动不起来的。正确的执行文件路径应该是....../TestCocoa.app/Contents/MacOS/TestCocoa
指定好正确的执行文件路径,运行TestCmd,发现TestCocoa有被调起来,但是却没有直接显示在顶层界面,如下图所示:
- (void) launchAppliction: (NSString*) appPath{ //appPath指向可执行文件的绝对地址 NSTask *softTask = [[NSTask alloc]init]; [softTask setLaunchPath:appPath]; [softTask setArguments:[NSArray arrayWithObjects:@"hello world", "2016", nil]]; [softTask launch];}
期望的效果应该如下图:
于是乎...进入了漫长的求索之路,发现百度上关于Mac OS X编程这块的资料真是少,无奈翻墙使用google,搜索关键字也干脆改成了英文,最终在一则英文博客上找到了答案。就是在TestCocoa工程中如下图所示的位置添加一行代码:
界面运行在顶层的问题解决了,最后就是传参了。在前面的启动函数中,我通过NSTask对象设置了运行参数,那么在TestCocoa中,又怎么获取这些运行参数呢?
首先看TestCocoa中的main函数,定义如下:
int main(int argc, const char * argv[])
{
return NSApplicationMain(argc, argv);
}
可以看到main函数是有接收运行参数的,所以在main函数中是能正常获取到运行参数的,但是如何在程序的其他地方获取到运行参数呢?可以看到main函数的最后执行了ruturn NSApplictionMain(argc, argv); 代码, NSApplicationMain函数是系统函数,我暂时还没弄清楚它接收到运行参数后具体做了什么处理。难道要在main函数中自行获取运行参数并保存起来吗?如果真这样做那未免也太麻烦了。还好,objective-c为我们提供了NSProcessInfo这个类对象,通过这个类对象,我们得到进程的相关信息,当然包括了运行参数:
NSArray *arguments = [[NSProcessInfo processInfo] arguments];
1 0
- Mac OS X下从服务进程中启动另一个应用程序(Cocoa Application)
- 创建一个Mac OS X 下的Cocoa Application对话框程序
- 创建一个MAC OS X下的Cocoa Application对话框程序
- 创建一个Mac OS X 下的Cocoa Application对话框 详解
- 创建一个Mac OS X 下的Cocoa Application对话框程序
- 设置应用程序的图标(Setting the Application Icon)— Mac OS X
- Mac OS启动服务
- [Mac OS X Cocoa编程]如何获取其他应用程序的窗体标题以及相关信息?
- MAC OS X Cocoa NSToolbar 的使用
- 应用程序从Windows到Mac OS x的迁移
- [Mac OS X] 从应用程序访问、控制硬件
- 应用程序从Windows到Mac OS x的迁移
- 应用程序从Windows到Mac OS x的迁移
- 应用程序从Windows到Mac OS x的迁移
- 配置Mac OS X的启动项 ~进程
- 从u盘启动,安装你的mac os x
- Mac OS X应用程序下的主要文件夹
- Mac OS X应用程序下的主要文件夹
- pod install速度慢的终极解决方案
- 算法——快速排序
- 04_1Python绘图_matplotlib
- asp.net(C#)通过WMI无法获取磁盘卷序列号(硬件信息)的问题解决办
- JS(三)generator
- Mac OS X下从服务进程中启动另一个应用程序(Cocoa Application)
- MySQL大表优化方案
- iOS的Cocoa 及NS框架
- 数据库协作运维大势所趋
- php数据库操作-创建库和表以及插入数据
- 重定向 和 转发 的问题
- ORA-39127: unexpected error from call to "WMSYS"."LT_EXPORT_PKG"."SCHEMA_INFO_EXP"
- 第7章 sed、gawk介绍与正则表达式-----------(sed编辑器简单使用)
- Hadoop到底是什么?