从Windows的角度看Mac OS X上的软件开发( 八 )


最后要提的是,正因为OS X的文化与Windows有许多不同处,笔者建议跨足OS X的开发者应该要尽可能贴近甚至配合OS X的习惯 。举例来说,大多数OS X应用程序都不需要安装程序,只需要直接将软件拷贝到想要存放的目录(通常是/Applications)即可 。而解安装也就直接删除该.app bundle就解决了 。在Windows上就没那么容易了(特别是有相当多组件依存关系的软件) 。这些都是开发上需要注意的地方,但是开发者多付出一份心力,使用者就会多一份便利,终究会得到用户肯定的 。
项目; Windows; Mac OS X
系统内部编码 Unicode (UTF-16) Unicode (文件系统使用 UTF-8, 系统API一般使用 CFString/NSString, 内部使用UTF-16)
语系处理 区分Codepage 不区分Codepage
应用程序的设定管理方式 Windows registry Property list files
IPC的几种方式 COM/Windows RPC Objective-C Distributed Object/Apple Event/BSD Socket
脚本语言的支持 VBScript/JScript/CScript/DOS Batch script AppleScript/Perl/Ruby/Python/shell script
表三:一些重要的系统特性(摘录)
项目 Windows (.NET) Mac OS X (Cocoa)
字符串处理 System.String NSString
数据结构与容器 System.Collections NSArray/NSDictionary/etc.
HTTP网络存取 System.Net System.Net,NSURLConnection
XML解译 System.XML NSXMLDocument etc.
表四:几个代表性的.NET namespace/class在Cocoa中的对应class
跨平台的建议最后简短分享一些跨平台软件开发所可能遇到的问题 。
要同时在Windows和Mac上开发,有两种可能的思维方式 。一种是追求真正的"write once, run everywhere" 。此时开发的选择,可能是采用Java平台,Adobe的AIR,抑或使用C搭配像QT这样的跨平台链接库 。这三种主流方案各有千秋,但在视觉和用户体验上往往皆无法与原生(native)的Mac应用程序相比 。
因此,另一个方向则是体认到,要保有Windows及Mac各自平台的特长,就必须割舍GUI跨平台的可能性 。也就是说,GUI是最无法移植到其他平台的部分 。我们能做的是将共通的逻辑部分独立出来,然后开发两套前端接口(frontend) 。若以在Windows及Mac上皆能使用为前提,共通逻辑开发语言的选择就很少了,不是C就是C。所幸Windows和Mac上具有平台特色的语言,要和C结合,也不是那么困难的事(在.Net上是透过C/CLI,在Mac上是透过Objective-C这两种扩展的语言) 。

推荐阅读