还是偶尔会有客户提出MAC电脑的需求,比如最近防火墙上的VPN客户。 那么,如果你原来有一个客户端程序不支持MAC,如何让他支持起来呢?
周末研究了一下,基本搞定,记录下过程。
刚开始构思的时候,想到如下需要按顺序解决的问题: 1. 原来的源代码,MAC要有运行环境(至少大部分代码可运行) 2. MAC用的是cocoa界面方案,原来的WEB或者MFC什么的,界面部分肯定是需要改造了 3. 一个符合MAC安装规范的,有B格的安装方案
先来看“1、原来的源代码,MAC要有运行环境(至少大部分代码可运行)”这部分。 理论上只要是支持MAC运行环境的开发语言,MAC上都能跑起来。比如c,c++,java,python,这部分问题不大。不过麻烦的是,之前的VPN客户端是c、java、php、以及虚拟网卡驱动,混合编程的一个产物。那么就需要分头去找对应的MAC环境运行库。java、网卡驱动都能找到,c部分可以用xcode重新编译一下,这部分问题不大。
再看“2、MAC用的是cocoa界面方案,原来的WEB或者MFC什么的,界面部分肯定是需要改造了” 之前界面是web方案: Web作为界面,负责登陆、配置显示;驱动和隧道部分,使用c写的。Web采用java的applet插件作为桥梁,负责和驱动、隧道的通讯、拉起等动作。 存在的问题: Java插件要求客户主机预装java运行环境,但是Java近年漏洞多多,浏览器对java支持和限制都很多,有些环境下会默认禁止java插件。另外,web插件运行在web线程里面,限制也不少,需要处理的运行问题需要思考周全。 思路: 抛弃web客户端模式,采用app开发模式自写一套界面。至于语言,可以用cocoa,qt,也可以基于现有java代码改造一套swing的界面方案。
最后再来看“3、一个符合MAC安装规范的,有B格的安装方案” 考虑到是一个商业产品,做成绿色的软件,让用户从目录点开执行,B格太low。 那么就要找寻一下打包工具,类似NSIS这样的windows下的安装包打包工具。找呀找,终于找到一个,叫做Packages的工具,符合要求。
但是打包工具只能帮你做到拷贝文件、执行脚本这里。 如果想再苹果电脑的applications里面生成一个图标,成为一个真正的app,还需要再做点事情。 MAC的安装很简单,只需要把可执行文件拖到/Applications目录里面就可以了。但也不是任何可执行文件就可以,需要是符合MAC规范的app后缀文件。怎么得到这个东西呢?这时候,就需要祭出XCODE了。 说一下结果,详细尝试繁杂过程不表。 1、新建一个cocoa工程(当然swift)也可以 2、开发语言支持c,c++,oc。本着熟悉原则,用c 3、在main.m里面,写下:
#import <Cocoa/Cocoa.h>
int main(int argc, const char * argv[]) {
printf("totototo");
system("/Applications/NF/bin/so.sh");
exit(0);
//return NSApplicationMain(argc, argv);
}
意思是,启动后,执行客户端启动脚本,然后界面退出。需要注意的是,cocoa工程会默认启动一个window,需要把它设置为长宽都是0,避免一闪而过让客户不爽。 4、压缩打包。export一个app出来,搞定
综上,过程告一段落。可以在加点图标美化,商业味道就出来了。